From 0455c5f1e727c2d9f95d8f111c32011643926bc9 Mon Sep 17 00:00:00 2001 From: TristonKF Date: Thu, 3 Oct 2024 16:02:06 +0800 Subject: [PATCH 1/6] Add API Document BLE Add API Document BLE --- bak/API_Documents/BLE/Class BLEAddr.rst | 127 -- bak/API_Documents/BLE/Class BLEAdvert.rst | 317 ---- bak/API_Documents/BLE/Class BLEAdvertData.rst | 896 ---------- bak/API_Documents/BLE/Class BLEBeacon.rst | 627 ------- .../BLE/Class BLECharacteristic.rst | 1296 --------------- bak/API_Documents/BLE/Class BLEConnect.rst | 436 ----- bak/API_Documents/BLE/Class BLEDevice.rst | 620 ------- bak/API_Documents/BLE/Class BLEHIDDevice.rst | 556 ------- bak/API_Documents/BLE/Class BLEHIDGamepad.rst | 367 ---- bak/API_Documents/BLE/Class BLEHIDMouse.rst | 246 --- .../BLE/Class BLERemoteCharacteristic.rst | 693 -------- .../BLE/Class BLERemoteDescriptor.rst | 432 ----- .../BLE/Class BLERemoteService.rst | 85 - bak/API_Documents/BLE/Class BLEScan.rst | 304 ---- bak/API_Documents/BLE/Class BLESecurity.rst | 361 ---- bak/API_Documents/BLE/Class BLEService.rst | 170 -- bak/API_Documents/BLE/Class BLEUUID.rst | 188 --- .../BLE/Class BLEWifiConfigService.rst | 179 -- .../API_Documents/BLE/Class BLEAddr.rst | 150 ++ .../API_Documents/BLE/Class BLEAdvert.rst | 346 ++++ .../API_Documents/BLE/Class BLEAdvertData.rst | 1003 +++++++++++ .../API_Documents/BLE/Class BLEBeacon.rst | 728 ++++++++ .../BLE/Class BLECharacteristic.rst | 1472 +++++++++++++++++ .../API_Documents/BLE/Class BLEClient.rst | 217 ++- .../API_Documents/BLE/Class BLEConnect.rst | 501 ++++++ .../API_Documents/BLE/Class BLEDevice.rst | 729 ++++++++ .../API_Documents/BLE/Class BLEHIDDevice.rst | 652 ++++++++ .../API_Documents/BLE/Class BLEHIDGamepad.rst | 477 ++++++ .../BLE/Class BLEHIDKeyboard.rst | 270 +-- .../API_Documents/BLE/Class BLEHIDMouse.rst | 320 ++++ .../BLE/Class BLERemoteCharacteristic.rst | 856 ++++++++++ .../BLE/Class BLERemoteDescriptor.rst | 512 ++++++ .../BLE/Class BLERemoteService.rst | 106 ++ .../API_Documents/BLE/Class BLEScan.rst | 378 +++++ .../API_Documents/BLE/Class BLESecurity.rst | 422 +++++ .../API_Documents/BLE/Class BLEService.rst | 203 +++ .../API_Documents/BLE/Class BLEUUID.rst | 230 +++ .../BLE/Class BLEWifiConfigService.rst | 218 +++ .../amebapro2}/API_Documents/BLE/index.rst | 1 + source/amebapro2/API_Documents/index.rst | 1 + 40 files changed, 9612 insertions(+), 8080 deletions(-) delete mode 100644 bak/API_Documents/BLE/Class BLEAddr.rst delete mode 100644 bak/API_Documents/BLE/Class BLEAdvert.rst delete mode 100644 bak/API_Documents/BLE/Class BLEAdvertData.rst delete mode 100644 bak/API_Documents/BLE/Class BLEBeacon.rst delete mode 100644 bak/API_Documents/BLE/Class BLECharacteristic.rst delete mode 100644 bak/API_Documents/BLE/Class BLEConnect.rst delete mode 100644 bak/API_Documents/BLE/Class BLEDevice.rst delete mode 100644 bak/API_Documents/BLE/Class BLEHIDDevice.rst delete mode 100644 bak/API_Documents/BLE/Class BLEHIDGamepad.rst delete mode 100644 bak/API_Documents/BLE/Class BLEHIDMouse.rst delete mode 100644 bak/API_Documents/BLE/Class BLERemoteCharacteristic.rst delete mode 100644 bak/API_Documents/BLE/Class BLERemoteDescriptor.rst delete mode 100644 bak/API_Documents/BLE/Class BLERemoteService.rst delete mode 100644 bak/API_Documents/BLE/Class BLEScan.rst delete mode 100644 bak/API_Documents/BLE/Class BLESecurity.rst delete mode 100644 bak/API_Documents/BLE/Class BLEService.rst delete mode 100644 bak/API_Documents/BLE/Class BLEUUID.rst delete mode 100644 bak/API_Documents/BLE/Class BLEWifiConfigService.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEAddr.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEAdvert.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEAdvertData.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEBeacon.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLECharacteristic.rst rename {bak => source/amebapro2}/API_Documents/BLE/Class BLEClient.rst (52%) create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEConnect.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEDevice.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEHIDDevice.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst rename {bak => source/amebapro2}/API_Documents/BLE/Class BLEHIDKeyboard.rst (53%) create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEHIDMouse.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLERemoteDescriptor.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLERemoteService.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEScan.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLESecurity.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEService.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEUUID.rst create mode 100644 source/amebapro2/API_Documents/BLE/Class BLEWifiConfigService.rst rename {bak => source/amebapro2}/API_Documents/BLE/index.rst (99%) diff --git a/bak/API_Documents/BLE/Class BLEAddr.rst b/bak/API_Documents/BLE/Class BLEAddr.rst deleted file mode 100644 index a7df56f..0000000 --- a/bak/API_Documents/BLE/Class BLEAddr.rst +++ /dev/null @@ -1,127 +0,0 @@ -**BLEAddr Class** - -**Description** - -A class used for managing Bluetooth addresses. - -**Syntax** - -class BLEAddr - -**Members** - -**Public Constructors** - -+------------------------------+---------------------------------------+ -| BLEAddr::BLEAddr | Constructs a BLEAddr object | -+==============================+=======================================+ -+------------------------------+---------------------------------------+ - -**Public Methods** - -+-------------------------------+--------------------------------------+ -| BLEAddr::str | Get the Bluetooth address | -| | represented as a formatted string | -+===============================+======================================+ -| BLEAddr::data | Get the Bluetooth address | -| | represented as an integer array | -+-------------------------------+--------------------------------------+ - - -**BLEAddr::BLEAddr** - -**Description** - -Constructs a BLEAddr object. - -**Syntax** - -BLEAddr(void); - -BLEAddr(uint8_t (&addr)[6]); - -BLEAddr(const char \* str); - -**Parameters** - -addr: An array of 6 bytes containing the desired Bluetooth address. - -str: desired Bluetooth address represented in character string. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -When expressing the Bluetooth address as a string, it should be written -as 6 bytes in hexadecimal format. The bytes can be separated using a -colon “:”, for example – 00:11:22:33:EE:FF. - -“BLEAddr.h” must be included to use the class function. - -**BLEAddr::str** - -**Description** - -Get the Bluetooth address represented as a formatted string. - -**Syntax** - -const char\* str(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to the character string containing the -hexadecimal representation of the Bluetooth address. - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -When expressing the Bluetooth address as a string, it should be written -as 6 bytes in hexadecimal format. The bytes can be separated using a -colon “:”, for example – 00:11:22:33:EE:FF. - -“BLEAddr.h” must be included to use the class function. - - -**BLEAddr::data** - -**Description** - -Get the Bluetooth address represented as an integer array. - -**Syntax** - -uint8_t\* data(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to a 6-byte array containing the -Bluetooth address. - -**Example Code** - -NA - -**Notes and Warnings** - -The MSB of Bluetooth address is stored at index 5 of the byte array. - -“BLEAddr.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEAdvert.rst b/bak/API_Documents/BLE/Class BLEAdvert.rst deleted file mode 100644 index 2bb1c14..0000000 --- a/bak/API_Documents/BLE/Class BLEAdvert.rst +++ /dev/null @@ -1,317 +0,0 @@ -**BLEAdvert Class** - -**Description** - -A class used for managing BLE advertising settings. - -**Syntax** - -class BLEAdvert - -**Members** - -**Public Constructors** - -No public constructor is available as this class is intended to be a -singleton class. You can get a pointer to this class using -BLEDevice::configAdvert(). - -**Public Methods** - -+----------------------------------+-----------------------------------+ -| BLEAdvert::updateAdvertParams | Update the current BLE | -| | advertisement settings. | -+==================================+===================================+ -| BLEAdvert::startAdv | Start BLE advertising. | -+----------------------------------+-----------------------------------+ -| BLEAdvert::stopAdv | Stop BLE advertising. | -+----------------------------------+-----------------------------------+ -| BLEAdvert::setAdvType | Set the BLE advertising type. | -+----------------------------------+-----------------------------------+ -| BLEAdvert::setMinInterval | Set the BLE advertising minimum | -| | interval. | -+----------------------------------+-----------------------------------+ -| BLEAdvert::setMaxInterval | Set the BLE advertising maximum | -| | interval. | -+----------------------------------+-----------------------------------+ -| BLEAdvert::setAdvData | Set BLE advertising data. | -+----------------------------------+-----------------------------------+ -| BLEAdvert::setScanRspData | Set BLE scan response data. | -+----------------------------------+-----------------------------------+ - - -**BLEAdvert::updateAdvertParams** - -**Description** - -Update the current BLE advertisement settings. - -**Syntax** - -void updateAdvertParams(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEWifiConfig -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEWifiConfig/BLEWifiConfig.ino) - -**Notes and Warnings** - -Please use the other class member functions to set the BLE advertising -parameters before using this function to update the advert data. - -“BLEAdvert.h” must be included to use the class function. - - -**BLEAdvert::startAdv** - -**Description** - -Start BLE advertising. - -**Syntax** - -void startAdv(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEWifiConfig -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEWifiConfig/BLEWifiConfig.ino) - -**Notes and Warnings** - -This function gives you more control and flexibility over BLE -advertising parameters. This function should not be used to start the -BLE advertising process without first registering the necessary callback -and handler functions. Call BLEDevice::beginPeripheral() to register the -necessary functions and start advertising for the first time. - -“BLEAdvert.h” must be included to use the class function. - - -**BLEAdvert::stopAdv** - -**Description** - -Stop BLE advertising. - -**Syntax** - -void stopAdv(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEWifiConfig -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEWifiConfig/BLEWifiConfig.ino) - -**Notes and Warnings** - -This function gives you more control and flexibility over BLE -advertising parameters. This function should not be used to directly -stop the BLE advertising process. Call BLEDevice::end() to stop -advertising and free up used resources. - -“BLEAdvert.h” must be included to use the class function. - - -**BLEAdvert::setAdvType** - -**Description** - -Set the BLE advertising type. - -**Syntax** - -void setAdvType(uint8_t advType); - -**Parameters** - -advType: the desired advertisement type. Valid values: - -- 0 = GAP_ADTYPE_ADV_IND : connectable undirected advertisement - -- 1 = GAP_ADTYPE_ADV_HDC_DIRECT_IND : connectable high duty cycle - directed advertisement - -- 2 = GAP_ADTYPE_ADV_SCAN_IND : scannable undirected advertisement - -- 3 = GAP_ADTYPE_ADV_NONCONN_IND : Non-connectable undirected - advertisement - -- 4 = GAP_ADTYPE_ADV_LDC_DIRECT_IND : connectable low duty cycle - directed advertisement - -**Returns** - -NA - -**Example Code** - -Example: BLEBeacon -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBeacon/BLEBeacon.ino) - -**Notes and Warnings** - -If connection requests should be allowed, call this function with -GAP_ADTYPE_ADV_IND. If all connection requests should be rejected, call -this function with GAP_ADTYPE_ADV_NONCONN_IND. - -“BLEAdvert.h” must be included to use the class function. - - -**BLEAdvert::setMinInterval** - -**Description** - -Set the minimum BLE advertising interval. - -**Syntax** - -void setMinInterval(uint16_t minInt_ms); - -**Parameters** - -minInt_ms: the desired advertisement minimum interval, expressed in -milliseconds. The valid values for the interval are from 20ms to -10240ms. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -BLE advertisements will repeat with an interval between the set minimum -and maximum intervals. Set a shorter interval for the BLE device to be -discovered rapidly and set a longer interval to conserve power. - -“BLEAdvert.h” must be included to use the class function. - -**BLEAdvert::setMaxInterval** - -**Description** - -Set the maximum BLE advertising interval. - -**Syntax** - -void setMaxInterval(uint16_t minInt_ms); - -**Parameters** - -minInt_ms: the desired advertisement maximum interval, expressed in -milliseconds. The valid values for the interval are from 20ms to -10240ms. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -BLE advertisements will repeat with an interval between the set minimum -and maximum intervals. Set a shorter interval for the BLE device to be -discovered rapidly and set a longer interval to conserve power. - -“BLEAdvert.h” must be included to use the class function. - -**BLEAdvert::setAdvData** - -**Description** - -Set BLE advertising data. - -**Syntax** - -void setAdvData(BLEAdvertData adData); - -void setAdvData(uint8_t\* pData, uint8_t size); - -**Parameters** - -adData: advertising data formatted in a BLEAdvertData class object - -pData: pointer to a byte array containing the required advertising data. - -size: number of bytes the advertising data contains, maximum of 31 -bytes. - -**Returns** - -NA - -**Example Code** - -Example: BLEWifiConfig -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEWifiConfig/BLEWifiConfig.ino) - -**Notes and Warnings** - -“BLEAdvert.h” must be included to use the class function. - - -**BLEAdvert::setScanRspData** - -**Description** - -Set BLE scan response data. - -**Syntax** - -void setScanRspData(BLEAdvertData adData); - -void setScanRspData(uint8_t\* pData, uint8_t size); - -**Parameters** - -adData: scan response data formatted in a BLEAdvertData class object - -pData: pointer to a byte array containing the required scan response -data. - -size: number of bytes the scan response data contains, maximum of 31 -bytes. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvert.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEAdvertData.rst b/bak/API_Documents/BLE/Class BLEAdvertData.rst deleted file mode 100644 index 6661690..0000000 --- a/bak/API_Documents/BLE/Class BLEAdvertData.rst +++ /dev/null @@ -1,896 +0,0 @@ -**BLEAdvertData Class** - -**Description** - -A class used for managing BLE advertising data. - -**Syntax** - -class BLEAdvertData - -**Members** - -**Public Constructors** - -+---------------------------------+------------------------------------+ -| BLEAdvertData::BLEAdvertData | Constructs a BLEAdvertData object | -+=================================+====================================+ -+---------------------------------+------------------------------------+ - -**Public Methods** - -+---------------------------------+------------------------------------+ -| BLEAdvertData::clear | Clear all advertising data. | -+=================================+====================================+ -| BLEAdvertData::addData | Add binary data to advertising | -| | data packet. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::addFlags | Add flags to advertising data | -| | packet. | -+---------------------------------+------------------------------------+ -| BL | Add partial list of service UUIDs | -| EAdvertData::addPartialServices | to advertising data packet. | -+---------------------------------+------------------------------------+ -| BLEAdvertData:: | Add complete service UUIDs to | -| addCompleteServices | advertising data packet. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::addAppearance | Add device appearance to | -| | advertising data packet. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::addShortName | Add shortened device name to | -| | advertising data packet. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::addCompleteName | Add complete device name to | -| | advertising data packet. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::parseScanInfo | Parse advertising data packets | -| | received from a scan. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::hasFlags | Check if received data includes | -| | advertising flags. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::hasUUID | Check if received data includes | -| | service UUIDs. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::hasName | Check if received data includes | -| | device name. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::hasManufacturer | Check if received data includes | -| | manufacturer data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getAdvType | Get advertising type of received | -| | data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getAddrType | Get Bluetooth address type of | -| | received data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getAddr | Get Bluetooth address of received | -| | data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getRSSI | Get received signal strength | -| | indicator (RSSI) of received data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getFlags | Get advertising flags of received | -| | data | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getServiceCount | Get the total number of advertised | -| | services in the received data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getServiceList | Get a list of advertised service | -| | UUIDs in received data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getName | Get advertised device name in | -| | received data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getTxPower | Get the advertised transmission | -| | power from received data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getAppearance | Get advertised device appearance | -| | in received data. | -+---------------------------------+------------------------------------+ -| BLEAdvertData::getManufacturer | Get advertised manufacturer in | -| | received data. | -+---------------------------------+------------------------------------+ -| BLEAdvert | Get length of manufacturer data in | -| Data::getManufacturerDataLength | received data. | -+---------------------------------+------------------------------------+ -| BLE | Get advertised manufacturer data | -| AdvertData::getManufacturerData | in received data. | -+---------------------------------+------------------------------------+ - - -**BLEAdvertData::BLEAdvertData** - -**Description** - -Constructs a BLEAdvertData object. - -**Syntax** - -BLEAdvertData(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -This class is used for managing BLE advertising data for two primary -uses. First is to assemble advertising data for broadcasting as -advertising packets. Second is to process and split up the advertising -data received from a scan into separate types. - -“BLEAdvertData.h” must be included to use the class function. - - -**BLEAdvertData::clear** - -**Description** - -Clear all advertising data. - -**Syntax** - -void clear(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::addData** - -**Description** - -Add binary data to advertising data packet. - -**Syntax** - -void addData(const uint8_t\* data, uint8_t size); - -**Parameters** - -data: pointer to array containing desired advertising data - -size: number of bytes in the array - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -This function is provided for flexibility in adding BLE advertising -data. Other functions should be used for adding advertising data, if -possible, as this function does not perform any checks on the validity -of the data. - -“BLEAdvertData.h” must be included to use the class function. - - -**BLEAdvertData::addFlags** - -**Description** - -Add flags to advertising data packet. - -**Syntax** - -uint8_t addFlags(uint8_t flags); - -**Parameters** - -flags: desired flags to add to advertising data. Default value: -(GAP_ADTYPE_FLAGS_LIMITED \| GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED) - -Valid values: - -- GAP_ADTYPE_FLAGS_LIMITED: LE Limited Discoverable Mode. - -- GAP_ADTYPE_FLAGS_GENERAL: LE General Discoverable Mode. - -- GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED: BR/EDR Not Supported. - -- GAP_ADTYPE_FLAGS_SIMULTANEOUS_LE_BREDR_CONTROLLER: Simultaneous LE - and BR/EDR Controller Supported. - -- GAP_ADTYPE_FLAGS_SIMULTANEOUS_LE_BREDR_HOST: Simultaneous LE and - BR/EDR Host Supported. - -**Returns** - -This function returns the current total size of advertising data. - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::addPartialServices** - -**Description** - -Add partial list of service UUIDs to advertising data packet. - -**Syntax** - -uint8_t addPartialServices(BLEUUID uuid); - -**Parameters** - -uuid: the desired UUID contained in BLEUUID class object. - -**Returns** - -This function returns the current total size of the advertising data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - - -**BLEAdvertData:: addCompleteServices** - -**Description** - -Add complete list of service UUIDs to advertising data packet. - -**Syntax** - -uint8_t addCompleteServices(BLEUUID uuid); - -uint8_t addCompleteServices(uint8_t uuidBitLength); - -**Parameters** - -uuid: the desired UUID contained in BLEUUID class object. - -uuidBitLength: UUID bit length for which a blank entry is to be added. -Valid values: 16, 32, 128. - -**Returns** - -This function returns the current total size of the advertising data. - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -uuidBitLength is used when a blank entry in the advertisement data is -required to be present. It is to indicate that no services with UUIDs of -a certain length are available. - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::addAppearance** - -**Description** - -Add device appearance to advertising data. - -**Syntax** - -uint8_t addAppearance(uint16_t appearance); - -**Parameters** - -appearance: the desired device appearance. - -**Returns** - -This function returns the current total size of the advertising data. - -**Example Code** - -Example: BLEHIDGamepad -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDGamepad/BLEHIDGamepad.ino) - -**Notes and Warnings** - -Refer to “gap_le_types.h” or Bluetooth specifications for a full list of -device appearance values. - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::addShortName** - -**Description** - -Add shortened device name to advertising data packet. - -**Syntax** - -uint8_t addShortName(const char\* str); - -**Parameters** - -str: character string containing desired short device name. - -**Returns** - -This function returns the current total size of the advertising data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::addCompleteName** - -**Description** - -Add complete device name to advertising data packet. - -**Syntax** - -uint8_t addCompleteName(const char\* str); - -**Parameters** - -str: character string containing desired device name. - -**Returns** - -This function returns the current total size of the advertising data. - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::parseScanInfo** - -**Description** - -Parse advertising data packets received from a scan. - -**Syntax** - -void parseScanInfo(T_LE_CB_DATA \*p_data); - -**Parameters** - -p_data: pointer to advertising data received from a Bluetooth scan. - -**Returns** - -NA - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -The information of the received data from advertising data can be -accessed using the member functions starting with “has” and “get”. - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::hasFlags** - -**Description** - -Check if received data includes advertising flags. - -**Syntax** - -bool hasFlags(void); - -**Parameters** - -NA - -**Returns** - -This function returns true if flags are present in received advertising -data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::hasUUID** - -**Description** - -Check if received data includes service UUIDs. - -**Syntax** - -bool hasUUID(void); - -**Parameters** - -NA - -**Returns** - -This function returns true if service UUIDs are present in received -advertising data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::hasName** - -**Description** - -Check if received data includes device name. - -**Syntax** - -bool hasName(void); - -**Parameters** - -NA - -**Returns** - -This function returns true if device name is present in received -advertising data. - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::hasManufacturer** - -**Description** - -Check if received data includes manufacturer data. - -**Syntax** - -bool hasManufacturer(void); - -**Parameters** - -NA - -**Returns** - -This function returns true if manufacturer data is present in the -received advertising data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::getAdvType** - -**Description** - -Get advertising type of received data. - -**Syntax** - -T_GAP_ADV_EVT_TYPE getAdvType(void); - -**Parameters** - -NA - -**Returns** - -This function returns the advertising type of received advertising data. - -**Example Code** - -NA - -**Notes and Warnings** - -Possible types: - -- GAP_ADV_EVT_TYPE_UNDIRECTED - -- GAP_ADV_EVT_TYPE_DIRECTED - -- GAP_ADV_EVT_TYPE_SCANNABLE - -- GAP_ADV_EVT_TYPE_NON_CONNECTABEL - -- GAP_ADV_EVT_TYPE_SCAN_RSP - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::getAddrType** - -**Description** - -Get Bluetooth address type of received data. - -**Syntax** - -T_GAP_REMOTE_ADDR_TYPE getAddrType(void); - -**Parameters** - -NA - -**Returns** - -This function returns the Bluetooth address type of received data. - -**Example Code** - -NA - -**Notes and Warnings** - -Possible types: - -- GAP_REMOTE_ADDR_LE_PUBLIC - -- GAP_REMOTE_ADDR_LE_RANDOM - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::getRSSI** - -**Description** - -Get received signal strength indicator (RSSI) of received data. - -**Syntax** - -Int8_t getRSSI(void); - -**Parameters** - -NA - -**Returns** - -This function returns the received signal strength. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::getFlags** - -**Description** - -Get advertising flags of received data. - -**Syntax** - -uint8_t getFlags(void); - -**Parameters** - -NA - -**Returns** - -This function returns a single byte containing the advertising flags -found in received advertising data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::getServiceCount** - -**Description** - -Get the total number of advertised services in the received data. - -**Syntax** - -uint8_t getServiceCount(void); - -**Parameters** - -NA - -**Returns** - -This function returns the number of advertised service UUIDs in received -data. - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::getServiceList** - -**Description** - -Get a list of advertised service UUIDs in received data. - -**Syntax** - -BLEUUID\* getServiceList(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to a BLEUUID array containing all -advertised service UUIDs. - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::getName** - -**Description** - -Get advertised device name in received data. - -**Syntax** - -String getName(void); - -**Parameters** - -NA - -**Returns** - -This function returns advertised device name contained in a String class -object - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::getTxPower** - -**Description** - -Get the advertised transmission power of the received data. - -**Syntax** - -int8_t getTxPower(void); - -**Parameters** - -NA - -**Returns** - -This function returns advertised transmission power of the received -data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::getAppearance** - -**Description** - -Get advertised device appearance in received data. - -**Syntax** - -uint16_t getAppearance(void); - -**Parameters** - -NA - -**Returns** - -This function returns advertised device appearance of the received data. - -**Example Code** - -NA - -**Notes and Warnings** - -Refer to “gap_le_types.h” or Bluetooth specifications for full list of -device appearance values. - -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::getManufacturer** - -**Description** - -Get advertised manufacturer in received data. - -**Syntax** - -uint16_t getManufacturer(void); - -**Parameters** - -NA - -**Returns** - -This function returns advertised manufacturer of the received data. - -**Example Code** - -NA - -**Notes and Warnings** - -Refer to Bluetooth specifications for full list of manufacturer codes. -“BLEAdvertData.h” must be included to use the class function. - -**BLEAdvertData::getManufacturerDataLength** - -**Description** - -Get length of manufacturer data in received data. - -**Syntax** - -uint8_t getManufacturerDataLength(void); - -**Parameters** - -NA - -**Returns** - -This function returns the number of bytes of manufacturer data present -in received advertising data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. - -[STRIKEOUT: -] - -**BLEAdvertData::getManufacturerData** - -**Description** - -Get manufacturer data in received data. - -**Syntax** - -uint8_t\* getManufacturerData(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to an array containing manufacturer -data. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEAdvertData.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEBeacon.rst b/bak/API_Documents/BLE/Class BLEBeacon.rst deleted file mode 100644 index 0a27527..0000000 --- a/bak/API_Documents/BLE/Class BLEBeacon.rst +++ /dev/null @@ -1,627 +0,0 @@ -**iBeacon Class** - -**Description** - -A class used for managing iBeacon BLE advertising data. - -**Syntax** - -class iBeacon - -**Members** - -**Public Constructors** - -+--------------------------+-------------------------------------------+ -| iBeacon::iBeacon | Constructs an iBeacon object | -+==========================+===========================================+ -| | | -+--------------------------+-------------------------------------------+ - -**Public Methods** - -+--------------------------+-------------------------------------------+ -| iB | Get current manufacturer ID value | -| eacon::getManufacturerId | | -+==========================+===========================================+ -| iBeacon::getUUID | Get current UUID value | -+--------------------------+-------------------------------------------+ -| iBeacon::getMajor | Get current Major value for customizing | -| | beacons | -+--------------------------+-------------------------------------------+ -| iBeacon::getMinor | Get current Minor value for customizing | -| | beacons | -+--------------------------+-------------------------------------------+ -| iBeacon::getRSSI | Get current received signal strength | -| | indicator (RSSI) value | -+--------------------------+-------------------------------------------+ -| iB | Set manufacturer ID value | -| eacon::setManufacturerId | | -+--------------------------+-------------------------------------------+ -| iBeacon::setUUID | Set UUID value | -+--------------------------+-------------------------------------------+ -| iBeacon::setMajor | Set Major value for customizing beacons | -+--------------------------+-------------------------------------------+ -| iBeacon::setMinor | Set Minor value for customizing beacons | -+--------------------------+-------------------------------------------+ -| iBeacon::setRSSI | Set received signal strength indicator | -| | (RSSI) value | -+--------------------------+-------------------------------------------+ -| iBeacon::getAdvData | Get current advertising data | -+--------------------------+-------------------------------------------+ -| iBeacon::getScanRsp | Get current scan response data | -+--------------------------+-------------------------------------------+ - -**altBeacon Class** - -**Description** - -A class used for managing altBeacon BLE advertising data. - -**Syntax** - -class altBeacon - -**Members** - -**Public Constructors** - -+-------------------------------+--------------------------------------+ -| altBeacon::altBeacon | Constructs an altBeacon object | -+===============================+======================================+ -+-------------------------------+--------------------------------------+ - -**Public Methods** - -+------------------------------+---------------------------------------+ -| altBeacon::getManufacturerId | Get current manufacturer ID value | -+==============================+=======================================+ -| altBeacon::getUUID | Get current UUID value | -+------------------------------+---------------------------------------+ -| altBeacon::getMajor | Get current Major value for | -| | customizing beacons | -+------------------------------+---------------------------------------+ -| altBeacon::getMinor | Get current Minor value for | -| | customizing beacons | -+------------------------------+---------------------------------------+ -| altBeacon::getRSSI | Get current received signal strength | -| | indicator (RSSI) value | -+------------------------------+---------------------------------------+ -| altBeacon::getRSVD | Get current Reserved value | -+------------------------------+---------------------------------------+ -| altBeacon::setManufacturerId | Set manufacturer ID value | -+------------------------------+---------------------------------------+ -| altBeacon::setUUID | Set UUID value | -+------------------------------+---------------------------------------+ -| altBeacon::setMajor | Set Major value for customizing | -| | beacons | -+------------------------------+---------------------------------------+ -| altBeacon::setMinor | Set Minor value for customizing | -| | beacons | -+------------------------------+---------------------------------------+ -| altBeacon::setRSSI | Set received signal strength | -| | indicator (RSSI) value | -+------------------------------+---------------------------------------+ -| altBeacon::setRSVD | Set Reserved value | -+------------------------------+---------------------------------------+ -| altBeacon::getAdvData | Get current advertising data | -+------------------------------+---------------------------------------+ -| altBeacon::getScanRsp | Get current scan response data | -+------------------------------+---------------------------------------+ - - -**iBeacon::iBeacon** - -**Description** - -Constructs an iBeacon object. - -**Syntax** - -void iBeacon(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEBeacon.h” must be included to use the class function.\ ** - -**altBeacon::altBeacon** - -**Description** - -Constructs an altBeacon object - -**Syntax** - -void altBeacon(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEBeacon.h” must be included to use the class function.\ ** - -**iBeacon::getManufacturerId** - -**altBeacon::getManufacturerId** - -**Description** - -Get current Manufacturer ID value. - -**Syntax** - -uint16_t getManufacturerId(void); - -**Parameters** - -NA - -**Returns** - -The function returns a 16-bit unsigned integer containing the current -Company ID. - -**Example Code** - -NA - -**Notes and Warnings** - -Refer to -https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ -for the full list of assigned Bluetooth company identifiers. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::getUUID** - -**altBeacon::getUUID** - -**Description** - -Get the current UUID value. - -**Syntax** - -void getUUID(uint8_t\* UUID); - -**Parameters** - -UUID: Provide a pointer to a 16 elements uint8_t array containing -current UUID. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -UUID is a 128-bit number used to uniquely identify a beacon. It is -commonly expressed as a 32-character hexadecimal string. UUIDs can be -generated at https://www.uuidgenerator.net/. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::getMajor** - -**altBeacon::getMajor** - -**Description** - -Get current Major value for customizing beacons. - -**Syntax** - -uint16_t getMajor(void); - -**Parameters** - -NA - -**Returns** - -This function returns a 16-bit unsigned integer containing the current -major value. - -**Example Code** - -NA - -**Notes and Warnings** - -Major and Minor are values used for customizing beacons. These can be -set to any value. Refer to https://developer.apple.com/ibeacon/ or -https://altbeacon.org/ for more information. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::getMinor** - -**altBeacon::getMinor** - -**Description** - -Get current Minor value for customizing beacons. - -**Syntax** - -uint16_t getMinor(void); - -**Parameters** - -NA - -**Returns** - -This function returns a 16-bit unsigned integer containing the current -minor value. - -**Example Code** - -NA - -**Notes and Warnings** - -Major and Minor are values used for customizing beacons. These can be -set to any value. Refer to https://developer.apple.com/ibeacon/ or -https://altbeacon.org/ for more information. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::getRSSI** - -**altBeacon::getRSSI** - -**Description** - -Get the current received signal strength indicator (RSSI) value. - -**Syntax** - -int8_t getRSSI(void); - -**Parameters** - -NA - -**Returns** - -This function returns an 8-bit signed integer containing the currently -set RSSI value. - -**Example Code** - -NA - -**Notes and Warnings** - -The beacon RSSI value is the received signal strength at 1 meter. This -can be used to estimate the distance to the beacon. Refer to -https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more -information. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::setManufacturerId** - -**altBeacon::setManufacturerId** - -**Description** - -Set Manufacturer ID value. - -**Syntax** - -void setManufacturerId(uint16_t id); - -**Parameters** - -id: desired Manufacturer ID - -**Returns** - -NA - -**Example Code** - -Example: BLEBeacon -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBeacon/BLEBeacon.ino) - -**Notes and Warnings** - -Refer to -https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ -for the full list of assigned Bluetooth company identifiers. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::setUUID** - -**altBeacon::setUUID** - -**Description** - -Set UUID value. - -**Syntax** - -void setUUID(uint8_t\* UUID); - -void setUUID(const char\* UUID); - -**Parameters** - -uint8_t\* UUID: Provide pointer to a 16 element uint8_t array containing -the desired UUID - -const char\* UUID: desired UUID expressed as a character string - -**Returns** - -NA - -**Example Code** - -Example: BLEBeacon -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBeacon/BLEBeacon.ino) - -**Notes and Warnings** - -UUID is a 128-bit number used to uniquely identify a beacon. It is -commonly expressed as a 32-character hexadecimal string. UUIDs can be -generated at https://www.uuidgenerator.net/. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::setMajor** - -**altBeacon::setMajor** - -**Description** - -Set Major value for customizing beacons. - -**Syntax** - -void setMajor(uint16_t major); - -**Parameters** - -major: desired Major value - -**Returns** - -NA - -**Example Code** - -Example: BLEBeacon -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBeacon/BLEBeacon.ino) - -**Notes and Warnings** - -Major and Minor are values used for customizing beacons. These can be -set to any value. Refer to https://developer.apple.com/ibeacon/ or -https://altbeacon.org/ for more information. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::setMinor** - -**altBeacon::setMinor** - -**Description** - -Set Minor value for customizing beacons. - -**Syntax** - -void setMinor(uint16_t minor); - -**Parameters** - -minor: desired Minor value - -**Returns** - -NA - -**Example Code** - -Example: BLEBeacon -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBeacon/BLEBeacon.ino) - -**Notes and Warnings** - -Major and Minor are values used for customizing beacons. These can be -set to any value. Refer to https://developer.apple.com/ibeacon/ or -https://altbeacon.org/ for more information. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::setRSSI** - -**altBeacon::setRSSI** - -**Description** - -Set RSSI value. - -**Syntax** - -void setRSSI(int8_t RSSI); - -**Parameters** - -RSSI: desired RSSI value - -**Returns** - -NA - -**Example Code** - -Example: BLEBeacon -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBeacon/BLEBeacon.ino) - -**Notes and Warnings** - -The beacon RSSI value is the received signal strength at 1 meter. This -can be used to estimate the distance to the beacon. Refer to -https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more -information. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::getAdvData** - -**altBeacon::getAdvData** - -**Description** - -Get current beacon advertising data. - -**Syntax** - -uint8_t\* getAdvData(void); - -**Parameters** - -NA - -**Returns** - -This function returns a uint8_t pointer to the structure containing -beacon advertising data. - -**Example Code** - -NA - -**Notes and Warnings** - -Avoid changing the beacon data through the returned pointer, use the -member functions instead. - -“BLEBeacon.h” must be included to use the class function. - -**iBeacon::getScanRsp** - -**altBeacon::getScanRsp** - -**Description** - -Get current beacon advertising scan response data. - -**Syntax** - -uint8_t\* getScanRsp(void); - -**Parameters** - -NA - -**Returns** - -This function returns a uint8_t pointer to the structure containing -beacon advertising scan response data. - -**Example Code** - -NA - -**Notes and Warnings** - -Avoid changing the beacon data through the returned pointer, use the -member functions instead. - -“BLEBeacon.h” must be included to use the class function. - -**altBeacon::getRSVD** - -**Description** - -Get current Reserved value. - -**Syntax** - -uint8_t getRSVD(void); - -**Parameters** - -NA - -**Returns** - -This function returns an 8-bit unsigned integer containing the current -Reserved value. - -**Example Code** - -NA - -**Notes and Warnings** - -Reserved for use by the manufacturer to implement special features. The -interpretation of this value is to be defined by the manufacturer and is -to be evaluated based on the MFG ID value. Refer to -https://altbeacon.org/ for more information. - -“BLEBeacon.h” must be included to use the class function. - -**altBeacon::setRSVD** - -**Description** - -Set Reserved value. - -**Syntax** - -void setRSVD(uint8_t rsvd); - -**Parameters** - -rsvd: desired Reserved value - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Reserved for use by the manufacturer to implement special features. The -interpretation of this value is to be defined by the manufacturer and is -to be evaluated based on the MFG ID value. Refer to -https://altbeacon.org/ for more information. - -“BLEBeacon.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLECharacteristic.rst b/bak/API_Documents/BLE/Class BLECharacteristic.rst deleted file mode 100644 index 0d236a8..0000000 --- a/bak/API_Documents/BLE/Class BLECharacteristic.rst +++ /dev/null @@ -1,1296 +0,0 @@ -**BLECharacteristic Class** - -**Description** - -A class used for creating and managing BLE GATT characteristics. - -**Syntax** - -class BLECharacteristic - -**Members** - -**Public Constructors** - -+-------------------------------------+--------------------------------+ -| B | Constructs a BLECharacteristic | -| LECharacteristic::BLECharacteristic | object | -+=====================================+================================+ -+-------------------------------------+--------------------------------+ - -**Public Methods** - -+------------------------------------+---------------------------------+ -| BLECharacteristic::setUUID | Set the UUID of the | -| | characteristic. | -+====================================+=================================+ -| BLECharacteristic::getUUID | Get the UUID of the | -| | characteristic. | -+------------------------------------+---------------------------------+ -| BLECharacteristic::setBufferLen | Set the size of the internal | -| | data buffer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::getBufferLen | Get the current size of the | -| | internal data buffer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::setReadProperty | Set the Read property value | -+------------------------------------+---------------------------------+ -| B | Set the Write property value | -| LECharacteristic::setWriteProperty | | -+------------------------------------+---------------------------------+ -| BLE | Set the write without response | -| Characteristic::setWriteNRProperty | property value | -+------------------------------------+---------------------------------+ -| BL | Set the Notify property value | -| ECharacteristic::setNotifyProperty | | -+------------------------------------+---------------------------------+ -| BLEC | Set the Indicate property value | -| haracteristic::setIndicateProperty | | -+------------------------------------+---------------------------------+ -| BLECharacteristic::setProperties | Set the characteristic | -| | properties | -+------------------------------------+---------------------------------+ -| BLECharacteristic::getProperties | Get the characteristic | -| | properties | -+------------------------------------+---------------------------------+ -| BLE | Set the characteristic read | -| Characteristic::setReadPermissions | permissions | -+------------------------------------+---------------------------------+ -| BLEC | Set the characteristic write | -| haracteristic::setWritePermissions | permissions | -+------------------------------------+---------------------------------+ -| BLECharacteristic::setPermissions | Set the characteristic | -| | permissions | -+------------------------------------+---------------------------------+ -| BLECharacteristic::getPermissions | Get the characteristic | -| | permissions | -+------------------------------------+---------------------------------+ -| BLECharacteristic::readString | Read the characteristic data | -| | buffer as a String object | -+------------------------------------+---------------------------------+ -| BLECharacteristic::readData8 | Read the characteristic data | -| | buffer as an unsigned 8-bit | -| | integer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::readData16 | Read the characteristic data | -| | buffer as an unsigned 16-bit | -| | integer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::readData32 | Read the characteristic data | -| | buffer as an unsigned 32-bit | -| | integer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::writeString | Write data to the | -| | characteristic data buffer as a | -| | String object or character | -| | array | -+------------------------------------+---------------------------------+ -| BLECharacteristic::writeData8 | Write data to the | -| | characteristic data buffer as | -| | an unsigned 8-bit integer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::writeData16 | Write data to the | -| | characteristic data buffer as | -| | an unsigned 16-bit integer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::writeData32 | Write data to the | -| | characteristic data buffer as | -| | an unsigned 16-bit integer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::setData | Write data to the | -| | characteristic data buffer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::getData | Read data from the | -| | characteristic data buffer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::getDataBuff | Get a pointer to the | -| | characteristic data buffer | -+------------------------------------+---------------------------------+ -| BLECharacteristic::getDataLen | Get the length of data (in | -| | bytes) in the characteristic | -| | data buffer. | -+------------------------------------+---------------------------------+ -| BLECharacteristic::notify | Send a notification to a | -| | connected device | -+------------------------------------+---------------------------------+ -| BLECharacteristic::indicate | Send an indication to a | -| | connected device | -+------------------------------------+---------------------------------+ -| BL | Add a user description | -| ECharacteristic::setUserDescriptor | descriptor to characteristic | -+------------------------------------+---------------------------------+ -| BLEC | Add a data format descriptor to | -| haracteristic::setFormatDescriptor | characteristic | -+------------------------------------+---------------------------------+ -| BLEChar | Add a report reference | -| acteristic::setReportRefDescriptor | descriptor to a characteristic | -+------------------------------------+---------------------------------+ -| BLECharacteristic::getReportRefID | Get the previously set report | -| | reference descriptor ID | -+------------------------------------+---------------------------------+ -| B | Get the previously set report | -| LECharacteristic::getReportRefType | reference descriptor type | -+------------------------------------+---------------------------------+ -| BLECharacteristic::setReadCallback | Set a user function as a read | -| | callback | -+------------------------------------+---------------------------------+ -| B | Set a user function as a write | -| LECharacteristic::setWriteCallback | callback | -+------------------------------------+---------------------------------+ -| BLECharacteristic::setCCCDCallback | Set a user function as a CCCD | -| | write callback | -+------------------------------------+---------------------------------+ - - -**BLECharacteristic::BLECharacteristic** - -**Description** - -Constructs a BLECharacteristic object. - -**Syntax** - -BLECharacteristic::BLECharacteristic(BLEUUID uuid); - -BLECharacteristic::BLECharacteristic(const char\* uuid); - -**Parameters** - -uuid: characteristic UUID, expressed as a BLEUUID class object or a -character array - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function.\ ** - -**BLECharacteristic::setUUID** - -**Description** - -Set the UUID of the characteristic. - -**Syntax** - -void setUUID(BLEUUID uuid); - -**Parameters** - -uuid: new UUID for the characteristic, expressed as a BLEUUID class -object. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::getUUID** - -**Description** - -Get the UUID of the characteristic. - -**Syntax** - -BLEUUID getUUID(void); - -**Parameters** - -NA - -**Returns** - -The function returns the UUID of the characteristic in a BLEUUID class -object. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setBufferLen** - -**Description** - -Set the size of the internal data buffer of the characteristic. - -**Syntax** - -void setBufferLen(uint16_t max_len); - -**Parameters** - -max_len: the number of bytes that the internal buffer will be resized to - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -Characteristic data buffer has a default size of 20 bytes and can be -increased up to 230 bytes. - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::getBufferLen** - -**Description** - -Get the current size of the internal data buffer of the characteristic. - -**Syntax** - -uint16_t getBufferLen(void); - -**Parameters** - -NA - -**Returns** - -The function returns the currently set internal buffer size. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setReadProperty** - -**Description** - -Set the Read property value of the characteristic. - -**Syntax** - -void setReadProperty(bool value); - -**Parameters** - -value: To allow connected devices to read characteristic’s data. Valid -values: true or false. - -**Returns** - -NA - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setWriteProperty** - -**Description** - -Set the Write property value of the characteristic. - -**Syntax** - -void setWriteProperty(bool value); - -**Parameters** - -value: To allow connected devices to write characteristic data. Valid -values: true or false. - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setWriteNRProperty** - -**Description** - -Set the write without response property value of the characteristic. - -**Syntax** - -void setWriteNRProperty(bool value); - -**Parameters** - -value: To allow connected devices to write characteristic data with no -response. Valid values: true or false. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function.\ ** - -**BLECharacteristic::setNotifyProperty** - -**Description** - -Set the Notify property of the characteristic. - -**Syntax** - -void setNotifyProperty(bool value); - -**Parameters** - -value: To allow connected devices to receive characteristic data -notification messages. Valid values: true or false. - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -Enabling this property will add a CCCD descriptor to the characteristic. - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setIndicateProperty** - -**Description** - -Set the Indicate property value of characteristic. - -**Syntax** - -void setIndicateProperty(bool value); - -**Parameters** - -value: To allow connected devices to receive characteristic data -indication messages. Valid values: true or false. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Enabling this property will add a CCCD descriptor to the characteristic. - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setProperties** - -**Description** - -Set the characteristic properties. - -**Syntax** - -void setProperties(uint8_t value); - -**Parameters** - -value: desired characteristic properties. Default value: 0x00 (no -properties) - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::getProperties** - -**Description** - -Get characteristic properties that is currently set. - -**Syntax** - -uint8_t getProperties(void); - -**Parameters** - -NA - -**Returns** - -This function returns the currently set characteristic properties -expressed as an unsigned 8-bit integer. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setReadPermissions** - -**Description** - -Set the characteristic read permissions. - -**Syntax** - -void setReadPermissions(uint32_t value); - -**Parameters** - -value: desired characteristic read permissions. Valid values: - -- GATT_PERM_READ - -- GATT_PERM_READ_AUTHEN_REQ - -- GATT_PREM_READ_AUTHOR_REQ - -- GATT_PERM_READ_ENCRYPTED_REQ - -- GATT_PERM_READ_AUTHEN_SC_REQ - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -If no permissions are set, the default permission is GATT_PERM_NONE - -“BLECharacteristic.h” must be included to use the class function.\ ** - -**BLECharacteristic::setWritePermissions** - -**Description** - -Set the characteristic write permissions. - -**Syntax** - -void setWritePermissions(uint32_t value); - -**Parameters** - -value: desired characteristic write permissions. Valid values: - -- GATT_PERM_WRITE - -- GATT_PERM_WRITE_AUTHEN_REQ - -- GATT_PREM_WRITE_AUTHOR_REQ - -- GATT_PERM_WRITE_ENCRYPTED_REQ - -- GATT_PERM_WRITE_AUTHEN_SC_REQ - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -If no permissions are set, the default permission is GATT_PERM_NONE - -“BLECharacteristic.h” must be included to use the class function.\ ** - -**BLECharacteristic::setPermissions** - -**Description** - -Set the characteristic permissions. - -**Syntax** - -void setPermissions(uint32_t value); - -**Parameters** - -value: desired characteristic permissions. Valid values: - -- GATT_PERM_READ - -- GATT_PERM_READ_AUTHEN_REQ - -- GATT_PREM_READ_AUTHOR_REQ - -- GATT_PERM_READ_ENCRYPTED_REQ - -- GATT_PERM_READ_AUTHEN_SC_REQ - -- GATT_PERM_WRITE - -- GATT_PERM_WRITE_AUTHEN_REQ - -- GATT_PREM_WRITE_AUTHOR_REQ - -- GATT_PERM_WRITE_ENCRYPTED_REQ - -- GATT_PERM_WRITE_AUTHEN_SC_REQ - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -If no permissions are set, the default permission is GATT_PERM_NONE - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::getPermissions** - -**Description** - -Get the characteristic permissions. - -**Syntax** - -uint32_t getPermissions(void); - -**Parameters** - -NA - -**Returns** - -This function returns the characteristic permissions that are previously -set using the setReadPermissions, setWritePermissions and setPermissions -functions. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - - -**BLECharacteristic::readString** - -**Description** - -Read the characteristic data buffer as a String object. - -**Syntax** - -String readString(void); - -**Parameters** - -NA - -**Returns** - -The function returns the data in the characteristic internal buffer as a -String class object. - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -Non-ASCII data may result in unexpected characters in the string. - -“BLECharacteristic.h” must be included to use the class function. - - -**BLECharacteristic::readData8** - -**Description** - -Read the data in the characteristic internal buffer, expressed as an -unsigned 8-bit integer. - -**Syntax** - -uint8_t readData8(void); - -**Parameters** - -NA - -**Returns** - -This function returns the data in the characteristic internal buffer -expressed as a uint8_t value. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::readData16** - -**Description** - -Read the data in the characteristic internal buffer, expressed as an -unsigned 16-bit integer. - -**Syntax** - -uint16_t readData16(void); - -**Parameters** - -NA - -**Returns** - -This function returns the data in the characteristic internal buffer -expressed as a uint16_t value. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::readData32** - -**Description** - -Read the data in the characteristic internal buffer, expressed as an -unsigned 32-bit integer. - -**Syntax** - -uint32_t readData32(void); - -**Parameters** - -NA - -**Returns** - -This function returns the data in the characteristic internal buffer -expressed as a uint32_t value. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::writeString** - -**Description** - -Write data to the characteristic data buffer as a String object or -character array. - -**Syntax** - -bool writeString(String str); - -bool writeString(const char\* str); - -**Parameters** - -str: the data to write to the characteristic buffer, expressed as a -String class object or a char array. - -**Returns** - -This function returns TRUE if write data is successful. - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::writeData8** - -**Description** - -Write data to the characteristic data buffer as an unsigned 8-bit -integer. - -**Syntax** - -bool writeData8(uint8_t num); - -**Parameters** - -num: the data to write to the characteristic buffer expressed as an -unsigned 8-bit integer. - -**Returns** - -This function returns TRUE if write data is successful. - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::writeData16** - -**Description** - -Write data to the characteristic data buffer as an unsigned 16-bit -integer. - -**Syntax** - -bool writeData16(uint16_t num); - -**Parameters** - -num: the data to write to the characteristic buffer expressed as an -unsigned 16-bit integer. - -**Returns** - -This function returns TRUE if write data is successful. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::writeData32** - -**Description** - -Write data to the characteristic data buffer as an unsigned 32-bit -integer. - -**Syntax** - -bool writeData32(uint32_t num); - -bool writeData32(int num); - -**Parameters** - -num: the data to write to the characteristic buffer expressed as a -signed or unsigned 32-bit integer. - -**Returns** - -This function returns TRUE if write data is successful. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setData** - -**Description** - -Write data to the characteristic data buffer. - -**Syntax** - -bool setData(uint8_t\* data, uint16_t datalen); - -**Parameters** - -data: pointer to byte array containing desired data - -datalen: number of bytes of data to write - -**Returns** - -This function returns TRUE if write data is successful. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::getData** - -**Description** - -Read data from the characteristic data buffer. - -**Syntax** - -uint16_t getData(uint8_t\* data, uint16_t datalen); - -**Parameters** - -data: pointer to byte array containing saved data from data buffer - -datalen: number of bytes of data to be read - -**Returns** - -This function returns the number of bytes read. - -**Example Code** - -NA - -**Notes and Warnings** - -If the data buffer contains less data than requested, it will only read -the available number of bytes of data. - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::getDataBuff** - -**Description** - -Get a pointer to the characteristic data buffer. - -**Syntax** - -uint8_t\* getDataBuff(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to the uint8_t array used as the -characteristic internal buffer. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::getDataLen** - -**Description** - -Get the length of data (in bytes) in the characteristic data buffer. - -**Syntax** - -uint16_t getDataLen(void); - -**Parameters** - -NA - -**Returns** - -This function returns the length of the last written data (in bytes) in -the internal data buffer. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::notify** - -**Description** - -Send a notification to a connected device. - -**Syntax** - -void notify(uint8_t conn_id); - -**Parameters** - -conn_id: the connection ID for the device to send a notification to. - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::indicate** - -Send an indication to a connected device. - -**Syntax** - -void indicate(uint8_t conn_id); - -**Parameters** - -conn_id: the connection ID for the device to send an indication to. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setUserDescriptor** - -**Description** - -Add a user description descriptor attribute (UUID 0x2901) to the -characteristic. - -**Syntax** - -void setUserDescriptor(const char\* description); - -**Parameters** - -description: the desired user description string expressed in a char -array. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setFormatDescriptor** - -**Description** - -Add a data format descriptor attribute (UUID 0x2904) to the -characteristic. - -**Syntax** - -void setFormatDescriptor(uint8_t format, uint8_t exponent, uint16_t -unit, uint16_t description); - -**Parameters** - -format: refer to -https://www.bluetooth.com/specifications/assigned-numbers/format-types/ -for the valid values and associated format types. - -exponent: base-10 exponent to be applied to characteristic data value - -unit: refer to -https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf -for the valid values and associated units. - -description: refer to -https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors/ -for the valid values and associated descriptors. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setReportRefDescriptor** - -**Description** - -Add a HID report reference descriptor attribute (UUID 0x2908) to the -characteristic. - -**Syntax** - -void setReportRefDescriptor(uint8_t id, uint8_t type); - -**Parameters** - -id: HID report reference ID - -type: HID report type. 0x01 for input report, 0x02 for output report, -0x03 for feature report. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -HID report reference ID should begin at 1. Some HID host systems may -consider an ID of 0 as invalid. - -“BLECharacteristic.h” must be included to use the class function. - - -**BLECharacteristic::getReportRefID** - -**Description** - -Get the previously set HID report reference descriptor ID. - -**Syntax** - -uint8_t getReportRefID(void); - -**Parameters** - -NA - -**Returns** - -This function returns the report reference ID previously set using the -setReportRefDescriptor function. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - - -**BLECharacteristic::getReportRefType** - -**Description** - -Get the previously set HID report reference descriptor type. - -**Syntax** - -uint8_t getReportRefType(void); - -**Parameters** - -NA - -**Returns** - -This function returns the report reference type previously set using the -setReportRefDescriptor function. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - - -**BLECharacteristic::setReadCallback** - -**Description** - -Set a user function to be called when the characteristic data is read by -a connected device. - -**Syntax** - -void setReadCallback(void (\*fCallback) (BLECharacteristic\* chr, -uint8_t conn_id)); - -**Parameters** - -fCallback: A user callback function that returns void and takes two -arguments. - -chr: pointer to BLECharacteristic object containing data read - -conn_id: connection ID of connected device that read characteristic data - -**Returns** - -NA - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setWriteCallback** - -**Description** - -Set a user function to be called when the characteristic data is written -by a connected device. - -**Syntax** - -void setWriteCallback(void (\*fCallback) (BLECharacteristic\* chr, -uint8_t conn_id)); - -**Parameters** - -fCallback: A user callback function that returns void and takes two -arguments. - -chr: pointer to BLECharacteristic object containing written data. - -conn_id: connection ID of connected device that wrote characteristic -data. - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. - -**BLECharacteristic::setCCCDCallback** - -**Description** - -Set a user function to be called when a connected device modifies the -characteristic CCCD to enable or disable notifications or indications. - -**Syntax** - -void setCCCDCallback(void (\*fCallback) (BLECharacteristic\* chr, -uint8_t conn_id, uint16_t ccc_bits)); - -**Parameters** - -fCallback: A user callback function that returns void and takes two -arguments. - -chr: pointer to BLECharacteristic object containing written data. - -conn_id: connection ID of connected device that wrote characteristic -data. - -ccc_bits: the new CCCD data bits after modification by the connected -device - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -“BLECharacteristic.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEConnect.rst b/bak/API_Documents/BLE/Class BLEConnect.rst deleted file mode 100644 index 9d72a4a..0000000 --- a/bak/API_Documents/BLE/Class BLEConnect.rst +++ /dev/null @@ -1,436 +0,0 @@ -**BLEConnect Class** - -**Description** - -A class used for managing BLE connection settings. - -**Syntax** - -class BLEConnect - -**Members** - -**Public Constructors** - -No public constructor is available as this class is intended to be a -singleton class. You can get a pointer to this class using -BLEDevice::configConnection - -**Public Methods** - -+--------------------------------+-------------------------------------+ -| BLEConnect::connect | Scan and search for all accessible | -| | BLE devices, then select and | -| | connect to one of them | -+================================+=====================================+ -| BLEConnect::disconnect | Disconnect from targeted BLE device | -+--------------------------------+-------------------------------------+ -| BLEConnect::setScanInterval | Set the scan interval when | -| | searching for the targeted device | -+--------------------------------+-------------------------------------+ -| BLEConnect::setScanWindow | Set the BLE scan window when | -| | searching for the targeted device | -| | to connect to | -+--------------------------------+-------------------------------------+ -| BLEConnect::setConnInterval | Set the BLE connection interval | -| | duration | -+--------------------------------+-------------------------------------+ -| BLEConnect::setConnLatency | Set the BLE connection slave | -| | latency value | -+--------------------------------+-------------------------------------+ -| BLEConnect::setConnTimeout | Set the BLE connection timeout | -| | value | -+--------------------------------+-------------------------------------+ -| BLEConnect::updateConnParams | Update a connected device with new | -| | connection parameters | -+--------------------------------+-------------------------------------+ -| BLEConnect::getConnInfo | Get connection information | -+--------------------------------+-------------------------------------+ -| BLEConnect::getConnAddr | Get the Bluetooth address for a | -| | certain connection | -+--------------------------------+-------------------------------------+ -| BLEConnect::getConnId | Get the connection ID for a certain | -| | device | -+--------------------------------+-------------------------------------+ - - -**BLEConnect::connect** - -**Description** - -This class function is used to scan and search for all accessible BLE -devices, then select and connect to one of them. - -**Syntax** - -bool connect(char\* btAddr, T_GAP_REMOTE_ADDR_TYPE destAddrType, -uint16_t scanTimeout); - -bool connect(uint8_t (&btAddr)[6], T_GAP_REMOTE_ADDR_TYPE destAddrType, -uint16_t scanTimeout); - -bool connect(BLEAdvertData targetDevice, uint16_t scanTimeout); - -bool connect(BLEAddr destAddr, T_GAP_REMOTE_ADDR_TYPE destAddrType, -uint16_t scanTimeout); - -**Parameters** - -char\* btAddr: pointer to the targeted BLE device’s Bluetooth address -expressed as a character string. - -uint8_t (&btAddr): targeted BLE device’s Bluetooth address contained in -a 6-byte array. - -destAddr: targeted BLE device’s Bluetooth address contained in BLEAddr -class object. - -targetDevice: advertising data packet scanned from targeted BLE device. - -destAddrType: Bluetooth address type of targeted BLE device, Valid -values: - -- GAP_REMOTE_ADDR_LE_PUBLIC - -- GAP_REMOTE_ADDR_LE_RANDOM - -scan timeout: duration in milliseconds for which to look for the -targeted BLE device before giving up. - -**Returns** - -This function returns true if the connection is successful, otherwise -false. - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::disconnect** - -**Description** - -Disconnect from targeted BLE device. - -**Syntax** - -bool disconnect(uint8_t connId); - -**Parameters** - -connId: connection ID for target device. Default connection ID set to 0. - -**Returns** - -This function returns true if the operation is successful, otherwise -false. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::setScanInterval** - -**Description** - -Set the scan interval when searching for the targeted device. - -**Syntax** - -void setScanInterval(uint16_t scanInt_ms); - -**Parameters** - -scanInt_ms: scan interval in milliseconds. Valid value: 3 to 10240. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Scan interval defines how often the scanning process is started. The -value set for scanInt_ms must be equal or larger than the value set for -scanWindow_ms. scanInt_ms value is defined in units of 625 microseconds. - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::setScanWindow** - -**Description** - -Set the BLE scan window when searching for the targeted device to -connect to. - -**Syntax** - -void setScanWindow(uint16_t scanWindow_ms); - -**Parameters** - -scanWindow_ms: scan window in milliseconds. Valid value: 3 to 10240. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -BLE scan window defines how long each interval should be scanned for. -The value set for scanWindow_ms set must be equal or smaller than the -value set for scanInt_ms. scanWindow_ms value is defined in units of 625 -microseconds. - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::setConnInterval** - -**Description** - -Set the BLE connection interval duration. - -**Syntax** - -void setConnInterval(uint16_t min_ms, uint16_t max_ms); - -**Parameters** - -min_ms: minimum acceptable connection interval in milliseconds. Valid -value: 8 to 4000. - -max_ms: maximum acceptable connection interval in milliseconds. Valid -value: 8 to 4000. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -The BLE connection interval defines the period between successive -connection events between a connected central and peripheral device. -Even if there is no data to exchange, a connection event is required to -maintain the connection. max_ms should be larger than or equal to -min_ms. - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::setConnLatency** - -**Description** - -Set the BLE connection slave latency value. - -**Syntax** - -void setConnLatency(uint16_t latency); - -**Parameters** - -latency: Connection slave latency value. Valid value: 0 to 499. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -The BLE connection slave latency defines the number of successive -connection events a connected peripheral device can ignore without being -considered as disconnected by the central device. - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::setConnTimeout** - -**Description** - -Set the BLE connection timeout value. - -**Syntax** - -void setConnTimeout(uint16_t timeout_ms); - -**Parameters** - -timeout_ms: connection timeout in milliseconds. - -Valid value: 100 to 32000. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -The BLE connection timeout defines the duration a peripheral or central -device must wait after a failed connection event to consider the -connection broken. - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::updateConnParams** - -**Description** - -Update a connected device with new connection parameters. - -**Syntax** - -void updateConnParams(uint8_t conn_id); - -**Parameters** - -conn_id: connection ID of targeted device to update connection -parameters. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Update the connected device with new connection parameters such as -connection interval, slave latency and timeout values. The connected -device may reject the new values if it is unable to conform to them. - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::getConnInfo** - -**Description** - -Get connection information. - -**Syntax** - -bool getConnInfo(uint8_t connId, T_GAP_CONN_INFO \*pConnInfo); - -**Parameters** - -connId: connection ID to device get connection information from - -pConnInfo: pointer to T_GAP_CONN_INFO structure to store obtained -connection information - -**Returns** - -This function returns true if the connection information is successfully -obtained. Otherwise, false. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::getConnAddr** - -**Description** - -Get the Bluetooth address for a certain connection. - -**Syntax** - -bool getConnAddr(uint8_t connId, uint8_t\* addr, uint8_t\* addrType); - -**Parameters** - -connId: connection ID of device to get Bluetooth address of - -addr: pointer to 6 byte array to store retrieved Bluetooth address - -addrType: pointer to uint8_t variable to store retrieved Bluetooth -address type - -**Returns** - -This function returns true if the connection address information is -successfully obtained. Otherwise, false. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEConnect.h” must be included to use the class function. - -**BLEConnect::getConnId** - -**Description** - -Get the connection ID for a certain device. - -**Syntax** - -int8_t getConnId(char\* btAddr, uint8_t addrType); - -int8_t getConnId(uint8_t\* btAddr, uint8_t addrType); - -int8_t getConnId(BLEAdvertData targetDevice); - -**Parameters** - -char\* btAddr: targeted device Bluetooth address expressed as a -character string. - -uint8_t\* btAddr: pointer to a 6-byte array containing targeted device -Bluetooth address. - -targetDevice: advertising data packet scanned from targeted device. - -addrType: Bluetooth address type of targeted device. Valid values: - -- GAP_REMOTE_ADDR_LE_PUBLIC - -- GAP_REMOTE_ADDR_LE_RANDOM - -**Returns** - -This function returns the requested connection ID. Else, returns -1 if -failed to obtain connection ID. - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -“BLEConnect.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEDevice.rst b/bak/API_Documents/BLE/Class BLEDevice.rst deleted file mode 100644 index 6994230..0000000 --- a/bak/API_Documents/BLE/Class BLEDevice.rst +++ /dev/null @@ -1,620 +0,0 @@ -**BLEDevice Class** - -**Description** - -A class used for general control and management of BLE functions. - -**Syntax** - -class BLEDevice - -**Members** - -**Public Constructors** - -The public constructor should not be used as this class is intended to -be a singleton class. Access member functions using the object instance -named BLE. - -**Public Methods** - -+------------------------------+---------------------------------------+ -| BLEDevice:: init | Initialize resources that are | -| | required for BLE to function | -+==============================+=======================================+ -| BLEDevice::deinit | Deinitialize all the operations for | -| | BLE. | -+------------------------------+---------------------------------------+ -| BLEDevice::connected | Check if a BLE device is connected | -+------------------------------+---------------------------------------+ -| BLEDevice::setDeviceName | Set BLE Generic Access Profile (GAP) | -| | device name | -+------------------------------+---------------------------------------+ -| BL | Set BLE Generic Access Profile (GAP) | -| EDevice::setDeviceAppearance | device appearance | -+------------------------------+---------------------------------------+ -| BLEDevice::configAdvert | Configure BLE advertising parameters | -+------------------------------+---------------------------------------+ -| BLEDevice::configScan | Configure BLE scan parameters | -+------------------------------+---------------------------------------+ -| BLEDevice::configConnection | Configure BLE connection parameters | -+------------------------------+---------------------------------------+ -| BLEDevice::configSecurity | Configure BLE bonding security | -| | parameters | -+------------------------------+---------------------------------------+ -| BLEDevice::setScanCallback | Set callback function for BLE scan | -| | results | -+------------------------------+---------------------------------------+ -| BLEDevice::beginCentral | Start BLE stack to operate as a | -| | central device. | -+------------------------------+---------------------------------------+ -| BLEDevice::beginPeripheral | Start BLE stack to operate as a | -| | peripheral device. | -+------------------------------+---------------------------------------+ -| BLEDevice::end | Stop the operation of BLE stack as a | -| | peripheral or central device. | -+------------------------------+---------------------------------------+ -| BLEDevice::configServer | Configure BLE stack for services | -+------------------------------+---------------------------------------+ -| BLEDevice::addService | Add a service to the BLE stack | -+------------------------------+---------------------------------------+ -| BLEDevice::configClient | Configure BLE stack for clients | -+------------------------------+---------------------------------------+ -| BLEDevice::addClient | Add a new client to the BLE stack | -+------------------------------+---------------------------------------+ -| BLEDevice::getLocalAddr | Get local device Bluetooth address | -+------------------------------+---------------------------------------+ - - -**BLEDevice:: init** - -**Description** - -Initialize resources that are required for BLE to function. - -**Syntax** - -void init(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -Call this member function first before using any other member functions -in the BLEDevice class. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::deinit** - -**Description** - -Deinitialize all the operations for BLE. - -**Syntax** - -void deinit(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Call this member function last after all other BLE operations have been -terminated. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::connected** - -**Description** - -Check if a BLE device is connected. - -**Syntax** - -bool connected(uint8_t connId); - -**Parameters** - -connId: connection ID to check connection status. - -**Returns** - -This function returns TRUE if BLE device is connected, otherwise false. - -**Example Code** - -NA - -**Notes and Warnings** - -Peripheral mode should use connId = 0 - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::setDeviceName** - -**Description** - -Set the BLE Generic Access Profile (GAP) device name which will be -visible after a connection is estabalished. The default device name is -set as “AMEBA_BLE_DEV”. - -**Syntax** - -void setDeviceName(String devName); - -**Parameters** - -devName: desired device name expressed as a character string. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -The GAP device name has a maximum length of 39 characters. Other devices -can see this name after a BLE connection is established. This name is -separate and different from the device name sent in a BLE advertisement, -the names should be the same but are not required. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::setDeviceAppearance** - -**Description** - -Set the BLE Generic Access Profile (GAP) device appearance. - -**Syntax** - -void setDeviceAppearance(uint16_t devAppearance); - -**Parameters** - -devAppearance: desired device appearance expressed as a 16-bit unsigned -integer. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Refer to Bluetooth SIG assigned device appearances at -https://www.bluetooth.com/specifications/gatt/characteristics/. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::configAdvert** - -**Description** - -Configure BLE advertising parameters. - -**Syntax** - -BLEAdvert\* configAdvert(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to a BLEAdvert class instance for -configuring BLE advertising parameters. - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -Use this member function instead of creating a BLEAdvert class instance -manually. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::configScan** - -**Description** - -Configure BLE scanning parameters. - -**Syntax** - -BLEScan\* configScan(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to a BLEScan class instance for -configuring BLE scanning parameters. - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -Use this member function instead of creating a BLEScan class instance -manually. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::configConnection** - -**Description** - -Configure BLE connection parameters. - -**Syntax** - -BLEConnect\* configConnection(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to a BLEConnect class instance for -configuring BLE connection parameters. - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -Use this member function instead of creating a BLEConnect class instance -manually. - -“BLEDevice.h” must be included to use the class function. - - -**BLEDevice::configSecurity** - -**Description** - -Configure BLE bonding security parameters. - -**Syntax** - -BLESecurity\* configSecurity(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to a BLESecurity class instance for -configuring BLE bonding security parameters. - -**Example Code** - -Example: BLEHIDMouse -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -**Notes and Warnings** - -Use this member function instead of creating a BLESecurity class -instance manually. - -“BLEDevice.h” must be included to use the class function. - - -**BLEDevice::setScanCallback** - -**Description** - -Set a callback function for processing BLE scan results. - -**Syntax** - -void setScanCallback(void (\*scanCB)(T_LE_CB_DATA\*)); - -**Parameters** - -scanCB: a function that returns nothing and takes in a scan data pointer -of type T_LE_CB_DATA\* - -**Returns** - -NA - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -Use this member function to set a callback function that will be called -for each BLE device scan result found. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::beginCentral** - -**Description** - -Start the BLE stack to operate as a central device. - -**Syntax** - -void beginCentral(uint8_t connCount); - -**Parameters** - -connCount: maximum number of allowed connected devices. If no argument -is provided, default is maximum allowed connected devices for specific -board. - -**Returns** - -NA - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -Use this member function to start the device to operate as a central BLE -device, after other BLE parameters are set correctly. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::beginPeripheral** - -**Description** - -Start the BLE stack to operate as a peripheral device. - -**Syntax** - -void beginPeripheral(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -Use this member function to start the device to operate as a peripheral -BLE device, after other BLE parameters are set correctly. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice:: end** - -**Description** - -Stop the operation of BLE stack as a peripheral or central device. - -**Syntax** - -void end(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Use this member function to stop the device operating in either BLE -peripheral mode or BLE central mode. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::configServer** - -**Description** - -Configure the BLE stack for services. - -**Syntax** - -void configServer(uint8_t maxServiceCount); - -**Parameters** - -maxServiceCount: Maximum number of services that will run on the device - -**Returns** - -NA - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -Use this member function before adding any service to the BLE stack. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::addService** - -**Description** - -Add a new service to the BLE stack. - -**Syntax** - -void addService(BLEService& newService); - -**Parameters** - -newService: the service to be added, defined using a BLEService class -object. - -**Returns** - -NA - -**Example Code** - -Example: BLEBatteryService -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryService/BLEBatteryService.ino) - -**Notes and Warnings** - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::configClient** - -**Description** - -Configure the BLE stack for clients. - -**Syntax** - -void configClient(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -Use this member function before adding any client to the BLE stack. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::addClient** - -**Description** - -Add a new client to the BLE stack. - -**Syntax** - -BLEClient\* addClient(uint8_t connId); - -**Parameters** - -connId: the connection ID of the connected device to create a client -for. - -**Returns** - -This function returns a pointer to a BLEClient class object, -corresponding to the device with the specified connection ID, which can -be used to access the services and characteristics on the connected -device. - -**Example Code** - -Example: BLEBatteryClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -**Notes and Warnings** - -Only one client should be added per connected device. - -The BLEClient object and any service, characteristic, descriptor -associated with the connected device will be deleted when the device is -disconnected. - -“BLEDevice.h” must be included to use the class function. - -**BLEDevice::getLocalAddr** - -**Description** - -Get local device Bluetooth address. - -**Syntax** - -void getLocalAddr(uint8_t (&addr)[GAP_BD_ADDR_LEN]); - -**Parameters** - -addr: 6 byte array to store local device Bluetooth address. - -GAP_BD_ADDR_LEN: Default Bluetooth device address length of 6 bytes. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Local device address is only available after starting in central or -peripheral mode. This function will return all zeros for the address if -central or peripheral mode is not in operation. - -“BLEDevice.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEHIDDevice.rst b/bak/API_Documents/BLE/Class BLEHIDDevice.rst deleted file mode 100644 index 344ad50..0000000 --- a/bak/API_Documents/BLE/Class BLEHIDDevice.rst +++ /dev/null @@ -1,556 +0,0 @@ -**BLEHIDDevice Class** - -**Description** - -A class used for creating and managing HID over GATT Profile (HOGP) -services. - -**Syntax** - -class BLEHIDDevice - -**Members** - -**Public Constructors** - -The public constructor should not be used as this class is intended to -be a singleton class. Access member functions using the object instance -named BLEHIDDev. - -**Public Methods** - -+------------------------------------+---------------------------------+ -| BLEHIDDevice::init | Initialize the HID Device | -| | Profile by creating the | -| | required services and | -| | characteristics | -+====================================+=================================+ -| BLEHIDDevice::setNumOutputReport | Set the number of HID output | -| | reports to be generated. | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::setNumInputReport | Set the number of HID input | -| | reports to be generated. | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::setReportMap | Set the HID report map | -| | characteristics with a HID | -| | report descriptor | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::inputReport | Send a HID input report to | -| | connected device | -+------------------------------------+---------------------------------+ -| BLE | Set a user callback function | -| HIDDevice::setOutputReportCallback | for receiving HID output | -| | reports | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::bootKeyboardReport | Send a HID boot keyboard input | -| | report to connected device | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::setHidInfo | Set HID info of the HID service | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::setBattLevel | Set battery level info of the | -| | Battery service | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::setPNPInfo | Set PNP information of the | -| | Device Information service | -+------------------------------------+---------------------------------+ -| B | Set manufacturer information of | -| LEHIDDevice::setManufacturerString | the Device Information service | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::setModelString | Set model information of the | -| | Device Information service | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::hidService | Get reference to HID service | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::devInfoService | Get reference to Device | -| | Information service | -+------------------------------------+---------------------------------+ -| BLEHIDDevice::battService | Get reference to Battery | -| | service | -+------------------------------------+---------------------------------+ - - -**BLEHIDDevice::init** - -**Description** - -Initialize the HID Device profile by creating the required services and -characteristics. - -**Syntax** - -void init(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEHIDGamepad -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDGamepad/BLEHIDGamepad.ino) - -**Notes and Warnings** - -The HID Device object should be initialized before any HID reports can -be sent. - -“BLEHIDDevice.h” must be included to use the class function.\ ** - -**BLEHIDDevice::setNumOutputReport** - -**Description** - -Set the number of HID output reports to be generated. - -**Syntax** - -void setNumOutputReport (uint8_t numOutputReports); - -**Parameters** - -numOutputReports: number of output reports. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -The number of output reports should be set before BLEHIDDevice init() -function is called.The default number of HID output report to be -generated is 1 if it is not set. - -“BLEHIDDevice.h” must be included to use the class function.\ ** - -**BLEHIDDevice::setNumInputReport** - -**Description** - -Set the number of HID input reports to be generated. - -**Syntax** - -void setNumInputReport (uint8_t numInputReports); - -**Parameters** - -numInputReports: number of input reports. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -The number of input reports should be set before BLEHIDDevice init() -function is called.The default number of HID input report to be -generated is 3 if it is not set. - -“BLEHIDDevice.h” must be included to use the class function. - -**BLEHIDDevice::setReportMap** - -**Description** - -Set the HID report map characteristics with a HID report descriptor. - -**Syntax** - -void setReportMap (uint8_t\* report_map, uint16_t len); - -**Parameters** - -report_map: pointer to HID report descriptor - -len: HID report descriptor length in bytes - -**Returns** - -NA - -**Example Code** - -Example: BLEHIDGamepad -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDGamepad/BLEHIDGamepad.ino) - -**Notes and Warnings** - -The HID report map characteristic can only be configured after -BLEHIDDevice init() function is called. - -HID report descriptor is a hard coded array of bytes that describe the -device’s data packets. For example, how many packets the device -supports, how large are the packets and the purpose of each byte and bit -in the packets. - -For more information on HID report descriptor, refer to -https://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/ . - -“BLEHIDDevice.h” must be included to use the class function. - -**BLEHIDDevice::inputReport** - -**Description** - -Send a HID input report to connected device. - -**Syntax** - -void inputReport (uint8_t reportID, uint8_t\* data, uint16_t len, -uint8_t conn_id); - -**Parameters** - -reportID: HID report ID of input report - -data: pointer to the HID input report data to be sent - -len: length of HID input report data in bytes - -conn_id: connection ID of device that the HID report will be sent to - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -HID input reports can only be sent after BLEHIDDevice init() function -has been called. - -“BLEHIDDevice.h” must be included to use the class function. - -**BLEHIDDevice::setOutputReportCallback** - -**Description** - -Set a user callback function for receiving HID output report data. - -**Syntax** - -void setOutputReportCallback (uint8_t reportID, void (\*fCallback) -(BLECharacteristic\* chr, uint8_t conn_id)); - -**Parameters** - -reportID: HID report ID of output report - -chr: BLECharacteristic class object containing received HID output -report data - -conn_id: connection ID of the device that send out HID report data - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Setting a user callback function for output reports can only occur after -BLEHIDDevice init() function has been called. - -“BLEHIDDevice.h” must be included to use the class function. - -**BLEHIDDevice::bootKeyboardReport** - -**Description** - -Send a HID boot keyboard input report to connected device. - -**Syntax** - -void bootKeyboardReport (uint8_t\* data, uint16_t len, uint8_t conn_id); - -**Parameters** - -data: pointer to the HID input report data to be sent - -len: length of HID input report data in bytes - -conn_id: connection ID of device that the HID input report will be sent -to. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -By default, the HID service Protocol Mode characteristic has boot mode -disabled. To send boot keyboard input reports, the Protocol Mode -characteristic needs to have boot mode enabled. - -“BLEHIDDevice.h” must be included to use the class function.\ ** - -**BLEHIDDevice::setHidInfo** - -**Description** - -Set HID information such as HID class specification version, country -code and flags for HID service. - -**Syntax** - -void setHidInfo (uint16_t bcd, uint8_t country, uint8_t flags); - -**Parameters** - -bcd: 16-bit unsigned integer representing version number of base USB HID -Specification implemented by HID Device - -country: 8-bit integer identifying country HID Device hardware is -localized for. Most hardware is not localized (value 0x00). - -flags: Bit flags indicating remote-wake capability and advertising when -bonded but not connected. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -For detailed information on the characteristic, refer to Bluetooth SIG -HID Service specifications. - -“BLEHIDDevice.h” must be included to use the class function. - -**BLEHIDDevice::setBattLevel** - -**Description** - -Set battery level data of the Battery service. - -**Syntax** - -void setBattLevel (uint8_t level); - -**Parameters** - -level: battery level expressed as % of full charge - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Battery level is set to 100% by default. For detailed information refer -to Bluetooth SIG Battery service specifications. - -“BLEHIDDevice.h” must be included to use the class function. - -**BLEHIDDevice::setPNPInfo** - -**Description** - -Set PNP data of the Device Information service. - -**Syntax** - -void setPNPInfo (uint8_t sig, uint16_t vid, uint16_t pid, uint16_t -version); - -**Parameters** - -sig: The Vendor ID Source field designates which organization assigned -the value used in the Vendor ID field value. - -vid: The Vendor ID field is intended to uniquely identify the vendor of -the device. - -pid: The Product ID field is intended to distinguish between different -products made by the vendor. - -version: The Product Version field is a numeric expression identifying -the device release number in Binary-Coded Decimal. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -By default, sig and vid are configured to indicate Realtek as the -vendor. For detailed information refer to Bluetooth SIG Device -Information service specifications. - -“BLEHIDDevice.h” must be included to use the class function. - -**BLEHIDDevice::setManufacturerString** - -**Description** - -Set manufacturer information of the Device Information service. - -**Syntax** - -void setManufacturerString (const char\* manufacturer); - -**Parameters** - -manufacturer: pointer to character string containing manufacturer name. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Manufacturer is set to “Realtek” by default. For detailed information -refer to Bluetooth SIG Device Information service specifications. - -“BLEHIDDevice.h” must be included to use the class function. - -**BLEHIDDevice::setModelString** - -**Description** - -Set model information of the Device Information service. - -**Syntax** - -void setModelString (const char\* model); - -**Parameters** - -model: pointer to character string containing device model info. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Model is set to “Ameba_BLE_HID” by default. For detailed information -refer to Bluetooth SIG Device Information service specifications. - -“BLEHIDDevice.h” must be included to use the class function.\ ** - -**BLEHIDDevice::hidService** - -**Description** - -Get reference to HID service. - -**Syntax** - -BLEService& hidService (void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to the BLEService class object for the -HID service. - -**Example Code** - -Example: BLEHIDMouse -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -**Notes and Warnings** - -“BLEHIDDevice.h” must be included to use the class function.\ ** - -**BLEHIDDevice::devInfoService** - -**Description** - -Get reference to Device Information service - -**Syntax** - -BLEService& devInfoService (void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to the BLEService class object for the -Device Information service. - -**Example Code** - -Example: BLEHIDMouse -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -**Notes and Warnings** - -“BLEHIDDevice.h” must be included to use the class function.\ ** - -**BLEHIDDevice::battService** - -**Description** - -Get reference to Battery service. - -**Syntax** - -BLEService& battService (void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to the BLEService class object for the -Battery service. - -**Example Code** - -Example: BLEHIDMouse -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -**Notes and Warnings** - -“BLEHIDDevice.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEHIDGamepad.rst b/bak/API_Documents/BLE/Class BLEHIDGamepad.rst deleted file mode 100644 index 3ad7d84..0000000 --- a/bak/API_Documents/BLE/Class BLEHIDGamepad.rst +++ /dev/null @@ -1,367 +0,0 @@ -**BLEHIDGamepad Class** - -**Description** - -A class used for creating and managing a BLE HID Gamepad. - -| **Syntax** -| class BLEHIDGamepad - -**Members** - -+----------------------------+-----------------------------------------+ -| **Public Constructors** |   | -+============================+=========================================+ -| `BLEHIDGamepad::BLEHIDG | Constructs a BLEHIDGamepad object | -| amepad `__ | | -+----------------------------+-----------------------------------------+ -| **Public Methods** |   | -+----------------------------+-----------------------------------------+ -| `BLEHIDGamepad::set | Set HID report ID for the HID Gamepad | -| ReportID `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDGamepad::gamepad | Send a HID Gamepad report | -| Report `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDGamepad::but | Send a HID Gamepad report indicating | -| tonPress `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDGamepad::buttonR | Send a HID Gamepad report indicating | -| elease `__ | | -+----------------------------+-----------------------------------------+ -| `BL | Send a HID Gamepad report indicating no | -| EHIDGamepad::buttonRelease | buttons pressed | -| All `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDGa | Send a HID Gamepad report indicating | -| mepad::setHat `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDGame | Send a HID Gamepad report indicating | -| pad::setAxes `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDGamepad::setLe | Send a HID Gamepad report indicating | -| ftStick `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDGamepad::setRigh | Send a HID Gamepad report indicating | -| tStick `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDGamepad::set | Send a HID Gamepad report indicating | -| Triggers `__ | | -+----------------------------+-----------------------------------------+ - - -**BLEHIDGamepad::BLEHIDGamepad** - -| **Description** -| Constructs a BLEHIDGamepad object. - -| **Syntax** -| BLEHIDGamepad(void); - -| **Parameters** -| NA - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDGamepad - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDGamepad/BLEHIDGamepad.ino) - -| **Notes and Warnings** -| By default, the BLEHIDGamepad class assumes the HID report descriptor - implements a gamepad device with 16 buttons, 6 16-bit axes and an - 8-direction hat switch. This class will not work if a different - gamepad report descriptor is implemented. “BLEHIDGamepad.h” must be - included to use the class function. - - -**BLEHIDGamepad::setReportID** - -| **Description** -| Set HID report ID for the HID Gamepad. - -| **Syntax** -| void setReportID (uint8_t reportID); - -| **Parameters** -| reportID: The report ID for the gamepad device, corresponding to the - HID report descriptor. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDGamepad - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDGamepad/BLEHIDGamepad.ino) - -| **Notes and Warnings** -| HID report ID should start at 1. Some systems may consider a report ID - of 0 as invalid. “BLEHIDGamepad.h” must be included to use the class - function. - - -**BLEHIDGamepad::gamepadReport** - -| **Description** -| Send a HID Gamepad report. - -| **Syntax** -| void gamepadReport (hid_gamepad_report_t\* report); -| void gamepadReport (uint16_t buttons, uint8_t hat, int16_t x, int16_t - y, int16_t z, int16_t Rz, int16_t Rx, int16_t Ry); - -| **Parameters** -| report: pointer to gamepad report structure containing data on all - inputs -| buttons: bitmap indicating state of each button. 1 = pressed, 0 = - released. -| hat: position of hat switch. Valid values: -| – GAMEPAD_HAT_CENTERED = 0 -| – GAMEPAD_HAT_UP = 1 -| – GAMEPAD_HAT_UP_RIGHT = 2 -| – GAMEPAD_HAT_RIGHT = 3 -| – GAMEPAD_HAT_DOWN_RIGHT = 4 -| – GAMEPAD_HAT_DOWN = 5 -| – GAMEPAD_HAT_DOWN_LEFT = 6 -| – GAMEPAD_HAT_LEFT = 7 -| – GAMEPAD_HAT_UP_LEFT = 8 -| x: position of x axis. Integer value from -32767 to 32767. -| y: position of y axis. Integer value from -32767 to 32767. -| z: position of z axis. Integer value from -32767 to 32767. -| Rz: position of Rz axis. Integer value from -32767 to 32767. -| Rx: position of Rx axis. Integer value from -32767 to 32767. -| Ry: position of Ry axis. Integer value from -32767 to 32767. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDGamepad - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDGamepad/BLEHIDGamepad.ino) - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function. - - -**BLEHIDGamepad::buttonPress** - -| **Description** -| Send a HID Gamepad report indicating buttons pressed. - -| **Syntax** -| void buttonPress (uint16_t buttons); - -| **Parameters** -| buttons: bitmap indicating buttons pressed. 1 = pressed. - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function.\ ** - -**BLEHIDGamepad::buttonRelease** - -| **Description** -| Send a HID Gamepad report indicating buttons released. - -| **Syntax** -| void buttonRelease (uint16_t buttons); - -| **Parameters** -| buttons: bitmap indicating buttons released. 1 = released. - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function. - - -**BLEHIDGamepad::buttonReleaseAll** - -| **Description** -| Send a HID Gamepad report indicating no buttons pressed. - -| **Syntax** -| void buttonReleaseAll (void); - -| **Parameters** -| NA - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDGamepad - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDGamepad/BLEHIDGamepad.ino) - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function. - - -**BLEHIDGamepad::setHat** - -| **Description** -| Send a HID Gamepad report indicating hat switch position. - -| **Syntax** -| void setHat (uint8_t hat); - -| **Parameters** -| hat: position of hat switch. Valid values: -| – GAMEPAD_HAT_CENTERED = 0 -| – GAMEPAD_HAT_UP = 1 -| – GAMEPAD_HAT_UP_RIGHT = 2 -| – GAMEPAD_HAT_RIGHT = 3 -| – GAMEPAD_HAT_DOWN_RIGHT = 4 -| – GAMEPAD_HAT_DOWN = 5 -| – GAMEPAD_HAT_DOWN_LEFT = 6 -| – GAMEPAD_HAT_LEFT = 7 -| – GAMEPAD_HAT_UP_LEFT = 8 - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function. - - -**BLEHIDGamepad::setAxes** - -| **Description** -| Send a HID Gamepad report indicating position of all axes. - -| **Syntax** -| void setAxes (int16_t x, int16_t y, int16_t z, int16_t Rz, int16_t Rx, - int16_t Ry); - -| **Parameters** -| x: position of x axis. Integer value from -32767 to 32767. -| y: position of y axis. Integer value from -32767 to 32767. -| z: position of z axis. Integer value from -32767 to 32767. -| Rz: position of Rz axis. Integer value from -32767 to 32767. -| Rx: position of Rx axis. Integer value from -32767 to 32767. -| Ry: position of Ry axis. Integer value from -32767 to 32767. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDGamepad - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDGamepad/BLEHIDGamepad.ino) - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function. - - -**BLEHIDGamepad::setLeftStick** - -| **Description** -| Send a HID Gamepad report indicating position of axes corresponding to - left analog stick. - -| **Syntax** -| void setLeftStick (int16_t x, int16_t y); - -| **Parameters** -| x: position of x axis. Integer value from -32767 to 32767. -| y: position of y axis. Integer value from -32767 to 32767. - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function. - - -**BLEHIDGamepad::setRightStick** - -| **Description** -| Send a HID Gamepad report indicating position of axes corresponding to - right analog stick. - -| **Syntax** -| void setLeftStick (int16_t z, int16_t Rz); - -| **Parameters** -| z: position of z axis. Integer value from -32767 to 32767. -| Rz: position of Rz axis. Integer value from -32767 to 32767. - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function. - - -**BLEHIDGamepad::setTriggers** - -| **Description** -| Send a HID Gamepad report indicating position of axes corresponding to - triggers. - -| **Syntax** -| void setTriggers (int16_t Rx, int16_t Ry); - -| **Parameters** -| Rx: position of Rx axis. Integer value from -32767 to 32767. -| Ry: position of Ry axis. Integer value from -32767 to 32767. - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDGamepad.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEHIDMouse.rst b/bak/API_Documents/BLE/Class BLEHIDMouse.rst deleted file mode 100644 index 5d7cd8f..0000000 --- a/bak/API_Documents/BLE/Class BLEHIDMouse.rst +++ /dev/null @@ -1,246 +0,0 @@ -**BLEHIDMouse Class** - -**Description** - -A class used for creating and managing a BLE HID Mouse. - -| **Syntax** -| class BLEHIDMouse - -**Members** - -+----------------------------+-----------------------------------------+ -| **Public Constructors** |   | -+============================+=========================================+ -| `BLEHIDMouse: | Constructs a BLEHIDMouse object | -| :BLEHIDMouse `__ | | -+----------------------------+-----------------------------------------+ -| **Public Methods** |   | -+----------------------------+-----------------------------------------+ -| `BLEHIDMouse: | Set HID report ID for the HID Mouse | -| :setReportID `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDMouse: | Send a HID Mouse report | -| :mouseReport `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDMous | Send a HID Mouse report indicating | -| e::mousePress `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDMouse::m | Send a HID Mouse report indicating | -| ouseRelease `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDMouse::mouseRe | Send a HID Mouse report indicating no | -| leaseAll `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDMo | Send a HID Mouse report indicating | -| use::mouseMove `__ | | -+----------------------------+-----------------------------------------+ -| `BLEHIDMouse: | Send a HID Mouse report indicating | -| :mouseScroll `__ | | -+----------------------------+-----------------------------------------+ - - -**BLEHIDMouse::BLEHIDMouse** - -| **Description** -| Constructs a BLEHIDMouse object. - -| **Syntax** -| BLEHIDMouse(void); - -| **Parameters** -| NA - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDMouse ( - https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -| **Notes and Warnings** -| “BLEHIDMouse.h” must be included to use the class function. - - -**BLEHIDMouse::setReportID** - -| **Description** -| Set HID report ID for the HID Mouse. - -| **Syntax** -| void setReportID (uint8_t reportID); - -| **Parameters** -| reportID: The report ID for the HID mouse device, corresponding to the - HID report descriptor. - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDMouse.h” must be included to use the class function. - - -**BLEHIDMouse::mouseReport** - -| **Description** -| Send a HID Mouse report. - -| **Syntax** -| void mouseReport (hid_mouse_report_t\* report); -| void mouseReport (uint8_t buttons, int8_t x, int8_t y, int8_t scroll); - -| **Parameters** -| report: pointer to mouse report structure containing data on mouse - inputs -| buttons: bitmap indicating state of each button. 1 = pressed, 0 = - released. -| x: mouse x-axis movement. Integer value from -127 to 127. -| y: mouse y-axis movement. Integer value from -127 to 127. -| scroll: mouse scroll wheel movement. Integer value from -127 to 127. - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDMouse.h” must be included to use the class function. - - -**BLEHIDMouse::mousePress** - -| **Description** -| Send a HID Mouse report indicating buttons pressed. - -| **Syntax** -| void mousePress (uint8_t buttons); - -| **Parameters** -| buttons: bitmap indicating buttons pressed. 1 = pressed. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDMouse ( - https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -| **Notes and Warnings** -| “BLEHIDMouse.h” must be included to use the class function. - - -**BLEHIDMouse::mouseRelease** - -| **Description** -| Send a HID Mouse report indicating buttons released. - -| **Syntax** -| void mouseRelease (uint8_t buttons); - -| **Parameters** -| buttons: bitmap indicating buttons released. 1 = released. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDMouse ( - https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -| **Notes and Warnings** -| “BLEHIDMouse.h” must be included to use the class function. - - -**BLEHIDMouse::mouseReleaseAll** - -| **Description** -| Send a HID Mouse report indicating no buttons pressed. - -| **Syntax** -| void mouseReleaseAll(void); - -| **Parameters** -| NA - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLEHIDMouse.h” must be included to use the class function. - - -**BLEHIDMouse::mouseMove** - -| **Description** -| Send a HID Mouse report indicating mouse movement. - -| **Syntax** -| void mouseMove (int8_t x, int8_t y); - -| **Parameters** -| x: mouse x-axis movement. Integer value from -127 to 127. -| y: mouse y-axis movement. Integer value from -127 to 127. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDMouse ( - https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -| **Notes and Warnings** -| “BLEHIDMouse.h” must be included to use the class function. - - -**BLEHIDMouse::mouseScroll** - -| **Description** -| Send a HID Mouse report indicating mouse scroll wheel movement. - -| **Syntax** -| void mouseScroll (int8_t scroll); - -| **Parameters** -| scroll: mouse scroll wheel movement. Integer value from -127 to 127. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEHIDMouse ( - https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -| **Notes and Warnings** -| “BLEHIDMouse.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLERemoteCharacteristic.rst b/bak/API_Documents/BLE/Class BLERemoteCharacteristic.rst deleted file mode 100644 index 877966f..0000000 --- a/bak/API_Documents/BLE/Class BLERemoteCharacteristic.rst +++ /dev/null @@ -1,693 +0,0 @@ -**BLERemoteCharacteristic Class** - -| **Description** -| A class used for managing BLE GATT characteristics on connected remote - devices. - -| **Syntax** -| class BLERemoteCharacteristic - -**Members** - -+-----------------------------------------------------------------------+ -| **Public Constructors** | -+=======================================================================+ -| No public constructor is available for this class. You can get a | -| pointer to an instance of this class using | -| BLERemoteService::getCharacteristic(). | -+-----------------------------------------------------------------------+ - -+------------------------------------+---------------------------------+ -| **Public Methods** |   | -+====================================+=================================+ -| `BLERemoteCharacteris | Get a descriptor with the | -| tic::getDescriptor `__ | | -+------------------------------------+---------------------------------+ -| `BLERemot | Get the characteristic UUID | -| eCharacteristic::getUUID `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCharacter | Set the size of the internal | -| istic::setBufferLen `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCharacter | Get the current size of the | -| istic::getBufferLen `__ | | -+------------------------------------+---------------------------------+ -| `BLERemot | Determine if characteristic has | -| eCharacteristic::canRead `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteC | Determine if characteristic has | -| haracteristic::canWrite `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCha | Determine if characteristic has | -| racteristic::canNotify `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCharact | Determine if characteristic has | -| eristic::canIndicate `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCharacteris | Get the characteristic | -| tic::getProperties `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteChara | Read the characteristic data | -| cteristic::readString `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCha | Read the characteristic data | -| racteristic::readData8 `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteChara | Read the characteristic data | -| cteristic::readData16 `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteChara | Read the characteristic data | -| cteristic::readData32 `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCharact | Write data to the | -| eristic::writeString `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteChara | Write data to the | -| cteristic::writeData8 `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCharact | Write data to the | -| eristic::writeData16 `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCharact | Write data to the | -| eristic::writeData32 `__ | | -+------------------------------------+---------------------------------+ -| `BLERemot | Write data to the remote device | -| eCharacteristic::setData `__ | | -+------------------------------------+---------------------------------+ -| `BLERemot | Get the characteristic data | -| eCharacteristic::getData `__ | | -+------------------------------------+---------------------------------+ -| ` | Enable notification or | -| BLERemoteCharacteristic::enableNot | indication for the | -| ifyIndicate `__ | | -+------------------------------------+---------------------------------+ -| `BL | Disable notification and | -| ERemoteCharacteristic::disableNoti | indication for the | -| fyIndicate `__ | | -+------------------------------------+---------------------------------+ -| `BLERemoteCharacteristic::set | Set a user function as a | -| NotifyCallback `__ | | -+------------------------------------+---------------------------------+ - - -**BLERemoteCharacteristic::getDescriptor** - -| **Description** -| Get a descriptor with the specified UUID on the remote device. - -| **Syntax** -| BLERemoteDescriptor\* getDescriptor(const char\* uuid); -| BLERemoteDescriptor\* getDescriptor(BLEUUID uuid); - -| **Parameters** -| uuid: the desired descriptor UUID, expressed as a character array or a - BLEUUID object - -| **Returns** -| This function returns the found descriptor as a BLERemoteDescriptor - object pointer, otherwise nullptr is returned if a descriptor with the - UUID is not found. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::getUUID** - -| **Description** -| Get the characteristic UUID. - -| **Syntax** -| BLEUUID getUUID(void); - -| **Parameters** -| NA - -| **Returns** -| The function returns the characteristic UUID as a BLEUUID class - object. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::setBufferLen** - -| **Description** -| Set the size of the internal data buffer of the characteristic. - -| **Syntax** -| void setBufferLen(uint16_t max_len); - -| **Parameters** -| max_len: the size in bytes to resize the internal buffer to - -| **Returns** -| NA - -| **Example Code** -| Example: BLEUartClient - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartClient/BLEUartClient.ino) - -| **Notes and Warnings** -| Characteristic data buffer has a default size of 20 bytes and can be - increased up to 230 bytes. “BLERemoteCharacteristic.h” must be - included to use the class function. - - -**BLERemoteCharacteristic::getBufferLen** - -| **Description** -| Get the current size of the characteristic internal buffer. - -| **Syntax** -| uint16_t getBufferLen(void); - -| **Parameters** -| NA - -| **Returns** -| This function returns the current internal buffer size that is set. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::canRead** - -| **Description** -| Determine if characteristic has read property enabled. - -| **Syntax** -| bool canRead(void); - -| **Parameters** -| NA - -| **Returns** -| This function returns TRUE if the read property for the characteristic - is enabled. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::canWrite** - -| **Description** -| Determine if characteristic has write property enabled. - -| **Syntax** -| bool canWrite(void); - -| **Parameters** -| NA - -| **Returns** -| This function returns TRUE if the write property or the write no - response property for the characteristic is enabled. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::canNotify** - -| **Description** -| Determine if characteristic has notify property enabled. - -| **Syntax** -| bool canNotify(void); - -| **Parameters** -| NA - -| **Returns** -| The function returns TRUE if the notify property for the - characteristic is enabled. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::canIndicate** - -| **Description** -| Determine if characteristic has indicate property enabled. - -| **Syntax** -| bool canIndicate(void); - -| **Parameters** -| NA - -| **Returns** -| The function returns TRUE if the indicate property for the - characteristic is enabled. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::getProperties** - -| **Description** -| Get the characteristic properties. - -| **Syntax** -| uint16_t getProperties(void); - -| **Parameters** -| NA - -| **Returns** -| The function returns the characteristic properties. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::readString** - -| **Description** -| Request for characteristic data from the remote device and read the - data in the buffer, expressed as a String class object. - -| **Syntax** -| String readString(void); - -| **Parameters** -| NA - -| **Returns** -| The function returns the data in the characteristic data buffer - expressed as a String class object. - -| **Example Code** -| Example: BLEUartClient - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartClient/BLEUartClient.ino) - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::readData8** - -| **Description** -| Request for characteristic data from the remote device and read the - data in the buffer, expressed as an unsigned 8-bit integer. - -| **Syntax** -| uint8_t readData8(void); - -| **Parameters** -| NA - -| **Returns** -| This function returns the data in the characteristic data buffer - expressed as a uint8_t value. - -| **Example Code** -| Example: BLEBatteryClient - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEBatteryClient/BLEBatteryClient.ino) - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::readData16** - -| **Description** -| Request for characteristic data from the remote device and read the - data in the buffer, expressed as an unsigned 16-bit integer. - -| **Syntax** -| uint16_t readData16(void); - -| **Parameters** -| NA - -| **Returns** -| This function returns the data in the characteristic data buffer - expressed as a uint16_t value. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::readData32** - -| **Description** -| Request for characteristic data from the remote device and read the - data in the buffer, expressed as an unsigned 32-bit integer. - -| **Syntax** -| uint32_t readData32(void); - -| **Parameters** -| NA - -| **Returns** -| This function returns the data in the characteristic data buffer - expressed as a uint32_t value. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::writeString** - -| **Description** -| Write data to the remote device characteristic as a String object or - character array. - -| **Syntax** -| bool writeString(String str); -| bool writeString(const char\* str); - -| **Parameters** -| str: the data to write to the remote characteristic, expressed as a - String class object or a char array. - -| **Returns** -| This function returns TRUE if writing data to the remote device - characteristic is successful. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::writeData8** - -| **Description** -| Write data to the remote device characteristic as an unsigned 8-bit - integer. - -| **Syntax** -| bool writeData8(uint8_t num); - -| **Parameters** -| num: the data to write to the characteristic buffer expressed as an - unsigned 8-bit integer. - -| **Returns** -| This function returns TRUE if writing data to the remote device - characteristic is successful. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::writeData16** - -| **Description** -| Write data to the remote device characteristic as an unsigned 16-bit - integer. - -| **Syntax** -| bool writeData16(uint16_t num); - -| **Parameters** -| num: the data to write to the characteristic buffer expressed as an - unsigned 16-bit integer. - -| **Returns** -| This function returns TRUE if writing data to the remote device - characteristic is successful. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::writeData32** - -| **Description** -| Write data to the remote device characteristic as a 32-bit integer. - -| **Syntax** -| bool writeData32(uint32_t num); -| bool writeData32(int num); - -| **Parameters** -| num: the data to write to the characteristic buffer expressed as a - 32-bit integer. - -| **Returns** -| This function returns TRUE if writing data to the remote device - characteristic is successful. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::setData** - -| **Description** -| Write data to the remote device characteristic. - -| **Syntax** -| bool setData(uint8_t\* data, uint16_t datalen); - -| **Parameters** -| data: pointer to byte array containing desired data -| datalen: number of bytes of data to write - -| **Returns** -| This function returns TRUE if writing data to the remote device - characteristic is successful. - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::getData** - -| **Description** -| Get the characteristic data from the remote device and read the data - in the buffer. - -| **Syntax** -| uint16_t getData (uint8_t\* data, uint16_t datalen); - -| **Parameters** -| data: pointer to byte array to save data read from buffer -| datalen: number of bytes of data to read - -| **Returns** -| This function returns the number of bytes read. - -| **Example Code** -| NA - -| **Notes and Warnings** -| If the data buffer contains less data than requested, it will only - read the available number of bytes of data. - “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::enableNotifyIndicate** - -| **Description** -| Enable the remote device to send notifications or indications for the - characteristic. - -| **Syntax** -| void enableNotifyIndicate(bool notify); - -| **Parameters** -| notify: TRUE to enable notifications, FALSE to enable indications. - Default value: “1” – True. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEUartClient - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartClient/BLEUartClient.ino) - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::disableNotifyIndicate** - -| **Description** -| Disable receiving notifications and indications for the characteristic - from the remote device. - -| **Syntax** -| void disableNotifyIndicate(void); - -**Parameters** - -NA - -| **Returns** -| NA - -| **Example Code** -| NA - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. - - -**BLERemoteCharacteristic::setNotifyCallback** - -| **Description** -| Set a user function to be called when the characteristic receives a - notification from the remote device. - -| **Syntax** -| void setNotifyCallback(void (\*fCallback) (BLERemoteCharacteristic\* - chr, uint8_t\* data, uint16_t length)); - -| **Parameters** -| fCallback: A user callback function that returns void and takes three - arguments. -| chr: pointer to BLERemoteCharacteristic object associated with - notification. -| data: pointer to byte array containing notification data. -| length: number of bytes of notification data in array. - -| **Returns** -| NA - -| **Example Code** -| Example: BLEUartClient - (https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartClient/BLEUartClient.ino) - -| **Notes and Warnings** -| “BLERemoteCharacteristic.h” must be included to use the class - function. diff --git a/bak/API_Documents/BLE/Class BLERemoteDescriptor.rst b/bak/API_Documents/BLE/Class BLERemoteDescriptor.rst deleted file mode 100644 index b6e77bc..0000000 --- a/bak/API_Documents/BLE/Class BLERemoteDescriptor.rst +++ /dev/null @@ -1,432 +0,0 @@ -**BLERemoteDescriptor Class** - -**Description** - -A class used for managing BLE GATT descriptors on connected remote -devices. - -**Syntax** - -class BLERemoteDescriptor - -**Members** - -**Public Constructors** - -No public constructor is available for this class. You can get a pointer -to an instance of this class using -BLERemoteCharacteristic::getDescriptor(). - -**Public Methods** - -+-------------------------+--------------------------------------------+ -| BLERe | Get the descriptor UUID | -| moteDescriptor::getUUID | | -+=========================+============================================+ -| BLERemoteD | Set the size of the internal data buffer | -| escriptor::setBufferLen | | -+-------------------------+--------------------------------------------+ -| BLERemoteD | Get the current size of the internal data | -| escriptor::getBufferLen | buffer | -+-------------------------+--------------------------------------------+ -| BLERemot | Read the descriptor data buffer as a | -| eDescriptor::readString | String object | -+-------------------------+--------------------------------------------+ -| BLERemo | Read the descriptor data buffer as an | -| teDescriptor::readData8 | unsigned 8-bit integer | -+-------------------------+--------------------------------------------+ -| BLERemot | Read the descriptor data buffer as an | -| eDescriptor::readData16 | unsigned 16-bit integer | -+-------------------------+--------------------------------------------+ -| BLERemot | Read the descriptor data buffer as an | -| eDescriptor::readData32 | unsigned 32-bit integer | -+-------------------------+--------------------------------------------+ -| BLERemote | Write data to the descriptor as a String | -| Descriptor::writeString | object or character array | -+-------------------------+--------------------------------------------+ -| BLERemot | Write data to the descriptor as an | -| eDescriptor::writeData8 | unsigned 8-bit integer | -+-------------------------+--------------------------------------------+ -| BLERemote | Write data to the descriptor as an | -| Descriptor::writeData16 | unsigned 16-bit integer | -+-------------------------+--------------------------------------------+ -| BLERemote | Write data to the descriptor as an | -| Descriptor::writeData32 | unsigned 32-bit integer | -+-------------------------+--------------------------------------------+ -| BLERe | Write data to the descriptor. | -| moteDescriptor::setData | | -+-------------------------+--------------------------------------------+ -| BLERe | Get data from the descriptor | -| moteDescriptor::getData | | -+-------------------------+--------------------------------------------+ - - -**BLERemoteDescriptor::getUUID** - -**Description** - -Get the descriptor UUID. - -**Syntax** - -BLEUUID getUUID(void); - -**Parameters** - -NA - -**Returns** - -This function returns the descriptor UUID as a BLEUUID class object. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::setBufferLen** - -**Description** - -Set the size of the internal data buffer of the descriptor. - -**Syntax** - -void setBufferLen(uint16_t max_len); - -**Parameters** - -max_len: the size in bytes to resize the internal buffer to - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Descriptor data buffer has a default size of 20 bytes and can be -increased up to 230 bytes. “BLERemoteDescriptor.h” must be included to -use the class function. - -**BLERemoteDescriptor::getBufferLen** - -**Description** - -Get the current size of the descriptor internal buffer. - -**Syntax** - -uint16_t getBufferLen(void); - -**Parameters** - -NA - -**Returns** - -This function returns the current internal buffer size that is set. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::readString** - -**Description** - -Request for descriptor data from the remote device and read the data in -the buffer, expressed as a String class object. - -**Syntax** - -String readString(void); - -**Parameters** - -NA - -**Returns** - -The function returns the data in the descriptor buffer expressed as a -String class object. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::readData8** - -**Description** - -Request for descriptor data from the remote device and read the data in -the buffer, expressed as an unsigned 8-bit integer. - -**Syntax** - -uint8_t readData8(void); - -**Parameters** - -NA - -**Returns** - -The function returns the data in the descriptor buffer expressed as a -uint8_t value. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::readData16** - -**Description** - -Request for descriptor data from the remote device and read the data in -the buffer, expressed as an unsigned 16-bit integer. - -**Syntax** - -uint16_t readData16(void); - -**Parameters** - -NA - -**Returns** - -The function returns the data in the descriptor buffer expressed as a -uint16_t value. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::readData32** - -**Description** - -Request for descriptor data from the remote device and read the data in -the buffer, expressed as an unsigned 32-bit integer. - -**Syntax** - -uint32_t readData32(void); - -**Parameters** - -NA - -**Returns** - -The function returns the data in the descriptor buffer expressed as a -uint32_t value. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::writeString** - -**Description** - -Write data to the remote device descriptor as a String object or -character array. - -**Syntax** - -bool writeString(String str); - -bool writeString(const char\* str); - -**Parameters** - -str: the data to write to the remote descriptor, expressed as a String -class object or a char array. - -**Returns** - -This function returns TRUE if writing data to remote device descriptor -is successful. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::writeData8** - -**Description** - -Write data to the remote device descriptor as an unsigned 8-bit integer. - -**Syntax** - -bool writeData8(uint8_t num); - -**Parameters** - -num: the data to write to the descriptor buffer expressed as an unsigned -8-bit integer. - -**Returns** - -This function returns TRUE if writing data to remote device descriptor -is successful. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::writeData16** - -**Description** - -Write data to the remote device descriptor as an unsigned 16-bit -integer. - -**Syntax** - -bool writeData16(uint16_t num); - -**Parameters** - -num: the data to write to the descriptor buffer expressed as an unsigned -16-bit integer. - -**Returns** - -This function returns TRUE if writing data to remote device descriptor -is successful. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::writeData32** - -**Description** - -Write data to the remote device descriptor as a 32-bit integer. - -**Syntax** - -bool writeData32(uint32_t num); - -bool writeData32(int num); - -**Parameters** - -num: the data to write to the descriptor buffer expressed as a 32-bit -integer. - -**Returns** - -This function returns TRUE if writing data to remote device descriptor -is successful. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::setData** - -**Description** - -Write data to the descriptor. - -**Syntax** - -bool setData(uint8_t\* data, uint16_t datalen); - -**Parameters** - -data: pointer to byte array containing desired data to write - -datalen: number of bytes of data to write - -**Returns** - -This function returns TRUE if writing data to remote device descriptor -is successful. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteDescriptor.h” must be included to use the class function. - -**BLERemoteDescriptor::getData** - -**Description** - -Get the descriptor data from the remote device and read the data in the -buffer. - -**Syntax** - -uint16_t getData(uint8_t\* data, uint16_t datalen); - -**Parameters** - -data: pointer to byte array to save data read from buffer - -datalen: number of bytes of data to read - -**Returns** - -The function returns the number of bytes read. - -**Example Code** - -NA - -**Notes and Warnings** - -If the data buffer contains less data than requested, it will only read -the available number of bytes of data. “BLERemoteDescriptor.h” must be -included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLERemoteService.rst b/bak/API_Documents/BLE/Class BLERemoteService.rst deleted file mode 100644 index 74bb524..0000000 --- a/bak/API_Documents/BLE/Class BLERemoteService.rst +++ /dev/null @@ -1,85 +0,0 @@ -**BLERemoteService Class** - -**Description** - -A class used for managing BLE GATT services on connected remote devices. - -**Syntax** - -class BLERemoteService - -**Members** - -**Public Constructors** - -No public constructor is available for this class. You can get a pointer -to an instance of this class using BLEClient::getService(). - -**Public Methods** - -+------------------------------------+---------------------------------+ -| BLERemoteService::getUUID | Get the service UUID | -+====================================+=================================+ -| B | Get a specific characteristic | -| LERemoteService::getCharacteristic | on the remote device | -+------------------------------------+---------------------------------+ - - -**BLERemoteService::getUUID** - -**Description** - -Get the service UUID. - -**Syntax** - -BLEUUID getUUID(void); - -**Parameters** - -NA - -**Returns** - -This function returns the service UUID as a BLEUUID class object. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLERemoteService.h” must be included to use the class function. - -**BLERemoteService::getCharacteristic** - -**Description** - -Get a characteristic with the specified UUID on the remote device. - -**Syntax** - -BLERemoteCharacteristic\* getCharacteristic (const char\* uuid); - -BLERemoteCharacteristic\* getCharacteristic (BLEUUID uuid); - -**Parameters** - -uuid: the desired characteristic UUID, expressed as a character array or -a BLEUUID class object. - -**Returns** - -The function returns the found characteristic as a -BLERemoteCharacteristic object pointer, otherwise nullptr is returned if -a characteristic with the UUID is not found. - -**Example Code** - -Example: BLEUartClient - -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartClient/BLEUartClient.ino) - -**Notes and Warnings** - -“BLERemoteService.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEScan.rst b/bak/API_Documents/BLE/Class BLEScan.rst deleted file mode 100644 index 15582bf..0000000 --- a/bak/API_Documents/BLE/Class BLEScan.rst +++ /dev/null @@ -1,304 +0,0 @@ -**BLEScan Class** - -**Description** - -A class used for managing BLE scanning settings. - -**Syntax** - -class BLEScan - -**Members** - -**Public Constructors** - -No public constructor is available as this class is intended to be a -singleton class. You can get a pointer to this class using -BLEDevice::configScan - -**Public Methods** - -+------------------------------+---------------------------------------+ -| BLEScan::updateScanParams | Update the lower Bluetooth stack with | -| | the current scan settings | -+==============================+=======================================+ -| BLEScan::startScan | Start a BLE scan | -+------------------------------+---------------------------------------+ -| BLEScan::stopScan | Stop a BLE scan | -+------------------------------+---------------------------------------+ -| BLEScan::setScanMode | Set the BLE scanning mode | -+------------------------------+---------------------------------------+ -| BLEScan::setScanInterval | Set the BLE scanning interval | -+------------------------------+---------------------------------------+ -| BLEScan::setScanWindow | Set the BLE scanning window | -+------------------------------+---------------------------------------+ -| BLE | Set the BLE scan duplicate filter | -| Scan::setScanDuplicateFilter | | -+------------------------------+---------------------------------------+ -| BLEScan::scanInProgress | Check if a scan is currently in | -| | progress | -+------------------------------+---------------------------------------+ -| BLEScan::printScanInfo | Print out scanned information | -+------------------------------+---------------------------------------+ - - -**BLEScan::updateScanParams** - -**Description** - -Update the lower Bluetooth stack with the current scan settings. - -**Syntax** - -void updateScanParams(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -Stop any scans in progress first before using this function. “BLEScan.h” -must be included to use the class function. - -**BLEScan::startScan** - -**Description** - -Start BLE scanning. - -**Syntax** - -void startScan(void); - -void startScan(uint32_t scanDuration_ms); - -**Parameters** - -scanDuration: BLE scan will stop after scanDuration milliseconds. - -**Returns** - -NA - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -Set the scan parameters first before starting a scan. BLE scans will -occur continuously for the duration set with BLEDevice::setScanWindow() -and will repeat with a time interval set with -BLEDevice::setScanInterval(). Call this member function without an -argument to start scanning until BLEDevice::stopScan() is called. -“BLEScan.h” must be included to use the class function. - -**BLEScan::stopScan** - -**Description** - -Stop BLE scanning. - -**Syntax** - -void stopScan(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEScan.h” must be included to use the class function. - -**BLEScan::setScanMode** - -**Description** - -Set the BLE scanning mode. - -**Syntax** - -void setScanMode(uint8_t scanMode); - -**Parameters** - -scanMode: GAP_SCAN_MODE_PASSIVE for passive scanning, -GAP_SCAN_MODE_ACTIVE for active scanning. Default value: -GAP_SCAN_MODE_ACTIVE. - -**Returns** - -NA - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -Active scanning will request for scan response packets after discovering -an advertising device. Passive scanning will only capture advertising -data packets. “BLEScan.h” must be included to use the class function. - -**BLEScan::setScanInterval** - -**Description** - -Set the BLE scanning interval. - -**Syntax** - -void setScanInterval(uint16_t scanInt_ms); - -**Parameters** - -scanInt_ms: scan interval in milliseconds. Value range of 3 to 10240. -Default value of 40ms. - -**Returns** - -NA - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -A BLE scan will repeat with a time interval set with this member -function. “BLEScan.h” must be included to use the class function. - -**BLEScan::setScanWindow** - -**Description** - -Set the BLE scanning window. - -**Syntax** - -void setScanWindow(uint16_t scanWindow_ms); - -**Parameters** - -scanWindow_ms: scan window in milliseconds. Value range of 3 to 10240. -Default value of 30ms. - -**Returns** - -NA - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -A BLE scan will scan continuously for a window duration set with this -member function. The scan window should be less than or equal to the -scan interval. “BLEScan.h” must be included to use the class function. - -**BLEScan::setScanDuplicateFilter** - -**Description** - -Set the scan duplicate filter. - -**Syntax** - -void setScanDuplicateFilter(bool dupeFilter); - -**Parameters** - -dupeFilter: TRUE to enable duplicate filtering. Enabled by default. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Enabling duplicate filters will ignore scan results for devices already -discovered previously. “BLEScan.h” must be included to use the class -function. - -**BLEScan::scanInProgress** - -**Description** - -Check if scanning is currently in progress. - -**Syntax** - -bool scanInProgress(void); - -**Parameters** - -NA - -**Returns** - -This function returns TRUE if BLE scanning is in progress. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEScan.h” must be included to use the class function. - -**BLEScan::printScanInfo** - -**Description** - -Parse and print out scanned information. - -**Syntax** - -void printScanInfo(T_LE_CB_DATA\* p_data); - -**Parameters** - -p_data: pointer to scan data of type T_LE_CB_DATA\* - -**Returns** - -NA - -**Example Code** - -Example: BLEScan -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEScan/BLEScan.ino) - -**Notes and Warnings** - -Use this member function to parse the various fields of received -advertisement data packets and print the results out to the serial -monitor. “BLEScan.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLESecurity.rst b/bak/API_Documents/BLE/Class BLESecurity.rst deleted file mode 100644 index 8c3a0e3..0000000 --- a/bak/API_Documents/BLE/Class BLESecurity.rst +++ /dev/null @@ -1,361 +0,0 @@ -**BLESecurity Class** - -**Description** - -A class used for creating and managing BLE bonding security parameters. - -**Syntax** - -class BLESecurity - -**Members** - -**Public Constructors** - -No public constructor is available as this class is intended to be a -singleton class. You can get a pointer to this class using -BLEDevice::configSecurity - -**Public Methods** - -+--------------------------------+-------------------------------------+ -| BLESecurity::setPairable | Enable pairing and bonding after | -| | BLE connection | -+================================+=====================================+ -| BLESecurity::setAuthFlags | Set BLE bonding security | -| | requirements | -+--------------------------------+-------------------------------------+ -| BLESecurity::setIOCapability | Set input and output capabilities | -| | of the device | -+--------------------------------+-------------------------------------+ -| BLESecurity::setSecReqEnable | Enable sending SMP security request | -| | when BLE connected | -+--------------------------------+-------------------------------------+ -| BLESecurity::setSecReqFlags | Set security request requirements | -+--------------------------------+-------------------------------------+ -| BLESecurity::setStaticPin | Configure device to use static pin | -| | input for BLE bonding | -+--------------------------------+-------------------------------------+ -| BLESecur | Set a user callback function for | -| ity::setPasskeyDisplayCallback | passkey display during BLE bonding | -+--------------------------------+-------------------------------------+ -| BLESec | Set a user callback function for | -| urity::setPasskeyInputCallback | passkey input during BLE bonding | -+--------------------------------+-------------------------------------+ -| BLESecurity | Set a user callback function for | -| ::setNumericComparisonCallback | numeric comparison during BLE | -| | bonding | -+--------------------------------+-------------------------------------+ - -**BLESecurity::setPairable** - -**Description** - -Enable pairing and bonding after BLE connection. - -**Syntax** - -void setPairable(bool pairMode); - -**Parameters** - -pairMode: True to enable pairing and bonding, False to disable. - -**Returns** - -NA - -**Example Code** - -Example: BLEHIDMouse - -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -**Notes and Warnings** - -“BLESecurity.h” must be included to use the class function. - -**BLESecurity::setAuthFlags** - -**Description** - -Set BLE bonding security requirements. - -**Syntax** - -void setAuthFlags(uint16_t authFlags); - -**Parameters** - -authFlags: desired BLE bonding security requirements. - -Valid values: - -- GAP_AUTHEN_BIT_NONE - -- GAP_AUTHEN_BIT_BONDING_FLAG - -- GAP_AUTHEN_BIT_MITM_FLAG - -- GAP_AUTHEN_BIT_SC_FLAG - -- GAP_AUTHEN_BIT_SC_ONLY_FLAG - -- GAP_AUTHEN_BIT_FORCE_BONDING_FLAG - -Default value: GAP_AUTHEN_BIT_NONE - -**Returns** - -NA - -**Example Code** - -Example: BLEHIDMouse - -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDMouse/BLEHIDMouse.ino) - -**Notes and Warnings** - -“BLESecurity.h” must be included to use the class function. - -**BLESecurity::setIOCapability** - -**Description** - -Set BLE device input and output capabilities. - -**Syntax** - -void setIOCap(uint8_t ioCap); - -**Parameters** - -ioCap: desired device input output capabilities. - -Valid values: - -- GAP_IO_CAP_NO_INPUT_NO_OUTPUT - -- GAP_IO_CAP_DISPLAY_ONLY - -- GAP_IO_CAP_DISPLAY_YES_NO - -- GAP_IO_CAP_KEYBOARD_ONLY - -- GAP_IO_CAP_KEYBOARD_DISPLAY - -Default values: - -- GAP_IO_CAP_NO_INPUT_NO_OUTPUT - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -The IO capabilities of the peripheral and central device will determine -which bonding authentication method is used. - -“BLESecurity.h” must be included to use the class function. - -**BLESecurity::setSecReqEnable** - -**Description** - -Enable sending SMP security request when BLE connected. - -**Syntax** - -void setSecReqEnable(bool secReq); - -**Parameters** - -secReq: TRUE to enable, FALSE to disable. - -Default value: FALSE - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLESecurity.h” must be included to use the class function. - -**BLESecurity::setSecReqFlags** - -**Description** - -Set security request requirements. - -**Syntax** - -void setSecReqFlags(uint16_t secReqFlags); - -**Parameters** - -secReqFlags: desired security requirements. - -Valid values: - -- GAP_AUTHEN_BIT_NONE - -- GAP_AUTHEN_BIT_BONDING_FLAG - -- GAP_AUTHEN_BIT_MITM_FLAG - -- GAP_AUTHEN_BIT_SC_FLAG - -- GAP_AUTHEN_BIT_SC_ONLY_FLAG - -- GAP_AUTHEN_BIT_FORCE_BONDING_FLAG - -Default value: - -- GAP_AUTHEN_BIT_NONE - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLESecurity.h” must be included to use the class function. - -**BLESecurity::setStaticPin** - -**Description** - -Configure device to use static pin input for BLE bonding. - -**Syntax** - -void setStaticPin(uint32_t pin); - -**Parameters** - -pin: BLE bonding static pin. Valid values are 6-digit integers ranging -from 000000 to 999999. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -Using a static pin will enable BLE bonding and pairing, set the IO -capability to GAP_IO_CAP_DISPLAY_ONLY and set the bonding security -requirements flags to (GAP_AUTHEN_BIT_BONDING_FLAG \| -GAP_AUTHEN_BIT_MITM_FLAG \| GAP_AUTHEN_BIT_SC_FLAG). “BLESecurity.h” -must be included to use the class function. - -**BLESecurity::setPasskeyDisplayCallback** - -**Description** - -Set a user callback function for passkey display during BLE bonding. - -**Syntax** - -void setPasskeyDisplayCallback(void (\*fCallback) (uint8_t conn_id, -uint32_t passkey)); - -**Parameters** - -fCallback: A user callback function that returns void and takes two -arguments - -conn_id: connection ID of connecting device - -passkey: bonding passkey to display to user to confirm connection - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLESecurity.h” must be included to use the class function. - -**BLESecurity::setPasskeyInputCallback** - -**Description** - -Set a user callback function for passkey input during BLE bonding. - -**Syntax** - -void setPasskeyInputCallback(uint32_t (\*fCallback) (uint8_t conn_id)); - -**Parameters** - -fCallback: A user callback function that takes no arguments and returns -the bonding passkey entered by the user - -conn_id: connection ID of connecting device - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLESecurity.h” must be included to use the class function. - -**BLESecurity::setNumericComparisonCallback** - -**Description** - -Set a user callback function for numeric comparison during BLE bonding. - -**Syntax** - -void setNumericComparisonCallback(bool (\*fCallback) (uint8_t conn_id, -uint32_t passkey)); - -**Parameters** - -fCallback: A user callback function that takes two arguments and returns -a Boolean to indicate user approval for the numeric comparison - -conn_id: connection ID of connecting device - -passkey: bonding passkey to display to user to confirm connection - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLESecurity.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEService.rst b/bak/API_Documents/BLE/Class BLEService.rst deleted file mode 100644 index 85a7633..0000000 --- a/bak/API_Documents/BLE/Class BLEService.rst +++ /dev/null @@ -1,170 +0,0 @@ -**BLEService Class** - -**Description** - -A class used for creating and managing BLE GATT services. - -**Syntax** - -class BLEService - -**Members** - -**Public Constructors** - -+------------------------------+---------------------------------------+ -| BLEService::BLEService | Constructs a BLEService object | -+==============================+=======================================+ -+------------------------------+---------------------------------------+ - -**Public Methods** - -+------------------------------------+---------------------------------+ -| BLEService::setUUID | Set service UUID | -+====================================+=================================+ -| BLEService::getUUID | Get service UUID | -+------------------------------------+---------------------------------+ -| BLEService::addCharacteristic | Add a characteristic to service | -+------------------------------------+---------------------------------+ -| BLEService::getCharacteristic | Get a previously added | -| | characteristic | -+------------------------------------+---------------------------------+ - - -**BLEService::BLEService** - -**Description** - -Constructs a BLEService object. - -**Syntax** - -BLEService(BLEUUID uuid); - -BLEService(const char\* uuid); - -**Parameters** - -uuid: service UUID, expressed as a BLEUUID class object or a character -array - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService - -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -“BLEService.h” must be included to use the class function. - -**BLEService::setUUID** - -**Description** - -Set the service UUID. - -**Syntax** - -void setUUID(BLEUUID uuid); - -**Parameters** - -uuid: service UUID, expressed as a BLEUUID class object. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEService.h” must be included to use the class function. - -**BLEService::getUUID** - -**Description** - -Get the service UUID. - -**Syntax** - -BLEUUID getUUID(void); - -**Parameters** - -NA - -**Returns** - -This function returns the service UUID in a BLEUUID class object. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEService.h” must be included to use the class function. - -**BLE::addCharacteristic** - -**Description** - -Add a characteristic to the service. - -**Syntax** - -void addCharacteristic(BLECharacteristic& newChar); - -**Parameters** - -newChar: the BLECharacteristic to add to the service. - -**Returns** - -NA - -**Example Code** - -Example: BLEUartService - -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartService/BLEUartService.ino) - -**Notes and Warnings** - -“BLEService.h” must be included to use the class function. - -**BLE::getCharacteristic** - -**Description** - -Get a previously added characteristic. - -**Syntax** - -BLECharacteristic\* getCharacteristic(uint8_t charIndex); - -**Parameters** - -charIndex: position index of characteristic. - -**Returns** - -This function returns a pointer to the BLECharacteristic at the -requested position index else return NULL. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEService.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEUUID.rst b/bak/API_Documents/BLE/Class BLEUUID.rst deleted file mode 100644 index 7857f35..0000000 --- a/bak/API_Documents/BLE/Class BLEUUID.rst +++ /dev/null @@ -1,188 +0,0 @@ -**BLEUUID Class** - -**Description** - -A class used for creating and managing UUIDs. - -**Syntax** - -class BLEUUID - -**Members** - -**Public Constructors** - -+---------------------------------+------------------------------------+ -| BLEUUID::BLEUUID | Create a BLEUUID object | -+=================================+====================================+ -+---------------------------------+------------------------------------+ - -**Public Methods** - -+------------------------------+---------------------------------------+ -| BLEUUID::str | Get the character string | -| | representation of UUID | -+==============================+=======================================+ -| BLEUUID::data | Get the binary representation of | -| | UUID, with the UUID MSB in array | -| | index [0] | -+------------------------------+---------------------------------------+ -| BLEUUID::dataNative | Get the binary representation of | -| | UUID, with the UUID LSB in array | -| | index [0] | -+------------------------------+---------------------------------------+ -| BLEUUID::length | Get the length of UUID | -+------------------------------+---------------------------------------+ - - -**BLEUUID::BLEUUID** - -**Description** - -Create a BLEUUID object from a UUID character string - -**Syntax** - -BLEUUID(void); - -BLEUUID(const char\* str); - -BLEUUID(uint8_t\* data, uint8_t length); - -**Parameters** - -str: UUID as character string used to create object - -data: pointer to byte array containing the desired UUID - -length: number of bytes in array containing the desired UUID. Valid -values of 2, 4 or 16. - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEUUID.h” must be included to use the class function.\ ** - -**BLEUUID::str** - -**Description** - -Get the character string representation of UUID. - -**Syntax** - -const char\* str(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to the UUID represented as a character -string. - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEUUID.h” must be included to use the class function. - -**BLEUUID::data** - -**Description** - -Get the binary representation of UUID, with the UUID MSB in array index -[0]. - -**Syntax** - -const uint8_t\* data(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to an unsigned 8-bit integer array -containing the UUID expressed in binary form. - -**Example Code** - -NA - -**Notes and Warnings** - -Returned pointer is of const uint8_t\* type and will not allow changing -of the data. “BLEUUID.h” must be included to use the class function. - -**BLEUUID::dataNative** - -**Description** - -Get the binary representation of UUID, with the UUID LSB in array index -[0]. - -**Syntax** - -const uint8_t\* dataNative(void); - -**Parameters** - -NA - -**Returns** - -This function returns a pointer to an unsigned 8-bit integer array -containing the UUID expressed in binary form. - -**Example Code** - -NA - -**Notes and Warnings** - -Returned pointer is of const uint8_t\* type and will not allow changing -of the data. “BLEUUID.h” must be included to use the class function. - -**BLEUUID::length** - -**Description** - -Get the length of UUID. - -**Syntax** - -uint8_t length(void); - -**Parameters** - -NA - -**Returns** - -This function returns the length of the UUID, in units of bytes. - -**Example Code** - -NA - -**Notes and Warnings** - -A 4-character UUID will be 16 bits / 2 bytes long. - -A 8-character UUID will be 32 bits / 4 bytes long. - -A 32-character UUID will be 128 bits / 16 bytes long. - -“BLEUUID.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEWifiConfigService.rst b/bak/API_Documents/BLE/Class BLEWifiConfigService.rst deleted file mode 100644 index 7a78e72..0000000 --- a/bak/API_Documents/BLE/Class BLEWifiConfigService.rst +++ /dev/null @@ -1,179 +0,0 @@ -**BLEWifiConfigService Class** - -**Description** - -A class used for managing a BLE WiFi configuration service running on -the device - -**Syntax** - -class BLEWifiConfigService - -**Members** - -**Public Constructors** - -+----------------------------------------+-----------------------------+ -| BLEW | Create an instance of the | -| ifiConfigService::BLEWifiConfigService | BLEWifiConfigService object | -+========================================+=============================+ -+----------------------------------------+-----------------------------+ - -**Public Methods** - -+----------------------------------+-----------------------------------+ -| BLEWifiConfigService::begin | Start background thread to | -| | process WiFi configuration | -| | commands | -+==================================+===================================+ -| BLEWifiConfigService::end | Stop background thread processing | -| | WiFi configuration commands | -+----------------------------------+-----------------------------------+ -| BLEWifiConfigService::addService | Add the service to the BLE stack | -+----------------------------------+-----------------------------------+ -| BLEWifiConfigService::advData | Get advertising data correctly | -| | formatted for WiFi configuration | -| | service | -+----------------------------------+-----------------------------------+ - - -**BLEWifiConfigService::BLEWifiConfigService** - -**Description** - -Create an instance of the BLEWifiConfigService object. - -**Syntax** - -void BLEWifiConfigService (void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEWifiConfig -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEWifiConfig/BLEWifiConfig.ino) - -**Notes and Warnings** - -Only one instance of this class / service should be created. -“BLEWifiConfigService.h” must be included to use the class function.\ ** - -**BLEWifiConfigService::begin** - -**Description** - -Start background thread to process WiFi configuration commands. - -**Syntax** - -void begin(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEWifiConfig -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEWifiConfig/BLEWifiConfig.ino) - -**Notes and Warnings** - -“BLEWifiConfigService.h” must be included to use the class function.\ ** - -**BLEWifiConfigService::end** - -**Description** - -Stop background thread processing WiFi configuration commands. - -**Syntax** - -void end(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -NA - -**Notes and Warnings** - -“BLEWifiConfigService.h” must be included to use the class function.\ ** - -**BLEWifiConfigService::addService** - -**Description** - -Add the WiFi configuration service to the BLE stack. - -**Syntax** - -void addService(void); - -**Parameters** - -NA - -**Returns** - -NA - -**Example Code** - -Example: BLEWifiConfig -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEWifiConfig/BLEWifiConfig.ino) - -**Notes and Warnings** - -“BLEWifiConfigService.h” must be included to use the class function. - -**BLEWifiConfigService::advData** - -**Description** - -Get advertising data correctly formatted for WiFi configuration service. - -**Syntax** - -BLEAdvertData advData(void); - -**Parameters** - -NA - -**Returns** - -This function returns a BLEAdvertData object that contains the required -advertising data fields for the WiFi configuration service to work. - -**Example Code** - -Example: BLEWifiConfig -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEWifiConfig/BLEWifiConfig.ino) - -**Notes and Warnings** - -The advertisement data needs to be correctly formatted for the -corresponding smartphone app to recognise the device. WiFi configuration -service advertisement data requires the local BT address, and should be -called only after peripheral mode is started and may also require -stopping and restarting the advertising process. -“BLEWifiConfigService.h” must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEAddr.rst b/source/amebapro2/API_Documents/BLE/Class BLEAddr.rst new file mode 100644 index 0000000..0aa319b --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEAddr.rst @@ -0,0 +1,150 @@ +Class BLEAddr +============= + +.. contents:: + :local: + :depth: 2 + +**BLEAddr Class** +----------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing Bluetooth addresses. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEAddr + +**Members** +~~~~~~~~~~~ + ++------------------------------+--------------------------------------+ +| **Public Constructors** | | ++==============================+======================================+ +| BLEAddr::BLEAddr | Constructs a BLEAddr object | ++------------------------------+--------------------------------------+ +| **Public Methods** | | ++------------------------------+--------------------------------------+ +| BLEAddr::str | Get the Bluetooth address | +| | represented as a formatted string | ++------------------------------+--------------------------------------+ +| BLEAddr::data | Get the Bluetooth address | +| | represented as an integer array | ++------------------------------+--------------------------------------+ + +**BLEAddr::BLEAddr** +-------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Constructs a BLEAddr object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEAddr(void); + + BLEAddr(uint8_t (&addr)[6]); + + BLEAddr(const char * str); + +**Parameters** +~~~~~~~~~~~~~~ + +addr: An array of 6 bytes containing the desired Bluetooth address. + +str: desired Bluetooth address represented in character string. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: When expressing the Bluetooth address as a string, it should be written as 6 bytes in hexadecimal format. The bytes can be separated using a colon “:”, + for example – 00:11:22:33:EE:FF. + + “BLEAddr.h” must be included to use the class function. + +**BLEAddr::str** +---------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the Bluetooth address represented as a formatted string. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + const char* str(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to the character string containing the +hexadecimal representation of the Bluetooth address. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: When expressing the Bluetooth address as a string, it should be written + as 6 bytes in hexadecimal format. The bytes can be separated using a + colon “:”, for example – 00:11:22:33:EE:FF. + + “BLEAddr.h” must be included to use the class function. + +**BLEAddr::data** +----------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the Bluetooth address represented as an integer array. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t* data(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to a 6-byte array containing the Bluetooth address. + +**Example Code** + +NA + +.. note :: The MSB of Bluetooth address is stored at index 5 of the + byte array. + + “BLEAddr.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLEAdvert.rst b/source/amebapro2/API_Documents/BLE/Class BLEAdvert.rst new file mode 100644 index 0000000..334964c --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEAdvert.rst @@ -0,0 +1,346 @@ +Class BLEAdvert +=============== + +.. contents:: + :local: + :depth: 2 + +**BLEAdvert Class** +------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing BLE advertising settings. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEAdvert + +**Members** +~~~~~~~~~~~ + ++---------------------------------+----------------------------------------------------------------------+ +| **Public Constructors** | No public constructor is available as this class is intended to be a | +| | singleton class. You can get a pointer to this class using | +| | BLEDevice::configAdvert(). | ++=================================+======================================================================+ +| **Public Methods** | | ++---------------------------------+----------------------------------------------------------------------+ +| BLEAdvert::updateAdvertParams | Update the current BLE advertisement settings. | ++---------------------------------+----------------------------------------------------------------------+ +| BLEAdvert::startAdv | Start BLE advertising. | ++---------------------------------+----------------------------------------------------------------------+ +| BLEAdvert::stopAdv | Stop BLE advertising. | ++---------------------------------+----------------------------------------------------------------------+ +| BLEAdvert::setAdvType | Set the BLE advertising type. | ++---------------------------------+----------------------------------------------------------------------+ +| BLEAdvert::setMinInterval | Set the BLE advertising minimum interval. | ++---------------------------------+----------------------------------------------------------------------+ +| BLEAdvert::setMaxInterval | Set the BLE advertising maximum interval. | ++---------------------------------+----------------------------------------------------------------------+ +| BLEAdvert::setAdvData | Set BLE advertising data. | ++---------------------------------+----------------------------------------------------------------------+ +| BLEAdvert::setScanRspData | Set BLE scan response data. | ++---------------------------------+----------------------------------------------------------------------+ + +**BLEAdvert::updateAdvertParams** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Update the current BLE advertisement settings. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void updateAdvertParams(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEWifiConfig `_ + +.. note :: Please use the other class member functions to set the BLE advertising + parameters before using this function to update the advert data. + + “BLEAdvert.h” must be included to use the class function. + +**BLEAdvert::startAdv** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Start BLE advertising. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void startAdv(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEWifiConfig `_ + +.. note :: This function gives you more control and flexibility over BLE + advertising parameters. This function should not be used to start the + BLE advertising process without first registering the necessary callback + and handler functions. Call BLEDevice::beginPeripheral() to register the + necessary functions and start advertising for the first time. + + “BLEAdvert.h” must be included to use the class function. + +**BLEAdvert::stopAdv** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Stop BLE advertising. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void stopAdv(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEWifiConfig `_ + +.. note :: This function gives you more control and flexibility over BLE + advertising parameters. This function should not be used to directly + stop the BLE advertising process. Call BLEDevice::end() to stop + advertising and free up used resources. + + “BLEAdvert.h” must be included to use the class function. + +**BLEAdvert::setAdvType** +------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE advertising type. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setAdvType(uint8_t advType); + +**Parameters** +~~~~~~~~~~~~~~ + +advType: the desired advertisement type. Valid values: + +- 0 = GAP_ADTYPE_ADV_IND : connectable undirected advertisement +- 1 = GAP_ADTYPE_ADV_HDC_DIRECT_IND : connectable high duty cycle directed advertisement +- 2 = GAP_ADTYPE_ADV_SCAN_IND : scannable undirected advertisement +- 3 = GAP_ADTYPE_ADV_NONCONN_IND : Non-connectable undirected advertisement +- 4 = GAP_ADTYPE_ADV_LDC_DIRECT_IND : connectable low duty cycle directed advertisement + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBeacon `_ + +.. note :: If connection requests should be allowed, call this function with + GAP_ADTYPE_ADV_IND. If all connection requests should be rejected, call + this function with GAP_ADTYPE_ADV_NONCONN_IND. + + “BLEAdvert.h” must be included to use the class function. + +**BLEAdvert::setMinInterval** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the minimum BLE advertising interval. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setMinInterval(uint16_t minInt_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +minInt_ms: the desired advertisement minimum interval, expressed in +milliseconds. The valid values for the interval are from 20ms to +10240ms. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: BLE advertisements will repeat with an interval between the set minimum + and maximum intervals. Set a shorter interval for the BLE device to be + discovered rapidly and set a longer interval to conserve power. + + “BLEAdvert.h” must be included to use the class function. + +**BLEAdvert::setMaxInterval** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the maximum BLE advertising interval. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setMaxInterval(uint16_t minInt_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +minInt_ms: the desired advertisement maximum interval, expressed in +milliseconds. The valid values for the interval are from 20ms to +10240ms. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: BLE advertisements will repeat with an interval between the set minimum + and maximum intervals. Set a shorter interval for the BLE device to be + discovered rapidly and set a longer interval to conserve power. + + “BLEAdvert.h” must be included to use the class function. + +**BLEAdvert::setAdvData** +------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set BLE advertising data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setAdvData(BLEAdvertData adData); + void setAdvData(uint8_t* pData, uint8_t size); + +**Parameters** +~~~~~~~~~~~~~~ + +adData: advertising data formatted in a BLEAdvertData class object +pData: pointer to a byte array containing the required advertising data. +size: number of bytes the advertising data contains, maximum of 31 +bytes. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEWifiConfig `_ + +.. note :: “BLEAdvert.h” must be included to use the class function. + +**BLEAdvert::setScanRspData** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set BLE scan response data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setScanRspData(BLEAdvertData adData); + void setScanRspData(uint8_t* pData, uint8_t size); + +**Parameters** +~~~~~~~~~~~~~~ + +adData: scan response data formatted in a BLEAdvertData class object +pData: pointer to a byte array containing the required scan response data. +size: number of bytes the scan response data contains, maximum of 31 bytes. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvert.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLEAdvertData.rst b/source/amebapro2/API_Documents/BLE/Class BLEAdvertData.rst new file mode 100644 index 0000000..01f2a22 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEAdvertData.rst @@ -0,0 +1,1003 @@ +Class BLEAdvertData +=================== + +.. contents:: + :local: + :depth: 2 + +**BLEAdvertData Class** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing BLE advertising data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEAdvertData + +**Members** +~~~~~~~~~~~ + ++----------------------------------+------------------------------------+ +| **Public Constructors** | | ++==================================+====================================+ +| BLEAdvertData::BLEAdvertData | Constructs a BLEAdvertData object | ++----------------------------------+------------------------------------+ +| **Public Methods** | | ++----------------------------------+------------------------------------+ +| BLEAdvertData::clear | Clear all advertising data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::addData | Add binary data to advertising | +| | data packet. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::addFlags | Add flags to advertising data | +| | packet. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::addPartialServices| Add partial list of service UUIDs | +| | to advertising data packet. | ++----------------------------------+------------------------------------+ +| BLEAdvertData:: | Add complete service UUIDs to | +| addCompleteServices | advertising data packet. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::addAppearance | Add device appearance to | +| | advertising data packet. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::addShortName | Add shortened device name to | +| | advertising data packet. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::addCompleteName | Add complete device name to | +| | advertising data packet. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::parseScanInfo | Parse advertising data packets | +| | received from a scan. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::hasFlags | Check if received data includes | +| | advertising flags. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::hasUUID | Check if received data includes | +| | service UUIDs. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::hasName | Check if received data includes | +| | device name. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::hasManufacturer | Check if received data includes | +| | manufacturer data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getAdvType | Get advertising type of received | +| | data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getAddrType | Get Bluetooth address type of | +| | received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getAddr | Get Bluetooth address of received | +| | data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getRSSI | Get received signal strength | +| | indicator (RSSI) of received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getFlags | Get advertising flags of received | +| | data | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getServiceCount | Get the total number of advertised | +| | services in the received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getServiceList | Get a list of advertised service | +| | UUIDs in received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getName | Get advertised device name in | +| | received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getTxPower | Get the advertised transmission | +| | power from received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getAppearance | Get advertised device appearance | +| | in received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData::getManufacturer | Get advertised manufacturer in | +| | received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData:: | Get length of manufacturer data in | +| getManufacturerDataLength | received data. | ++----------------------------------+------------------------------------+ +| BLEAdvertData:: | Get advertised manufacturer data | +| getManufacturerData | in received data. | ++----------------------------------+------------------------------------+ + +**BLEAdvertData::BLEAdvertData** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Constructs a BLEAdvertData object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEAdvertData(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: This class is used for managing BLE advertising data for two primary + uses. First is to assemble advertising data for broadcasting as + advertising packets. Second is to process and split up the advertising + data received from a scan into separate types. + + “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::clear** +------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Clear all advertising data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void clear(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::addData** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add binary data to advertising data packet. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void addData(const uint8_t* data, uint8_t size); + +**Parameters** +~~~~~~~~~~~~~~ + +data: pointer to array containing desired advertising data +size: number of bytes in the array + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: This function is provided for flexibility in adding BLE advertising + data. Other functions should be used for adding advertising data, if + possible, as this function does not perform any checks on the validity + of the data. + + “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::addFlags** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add flags to advertising data packet. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t addFlags(uint8_t flags); + +**Parameters** +~~~~~~~~~~~~~~ + +flags: desired flags to add to advertising data. Default value: (GAP_ADTYPE_FLAGS_LIMITED \| GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED) + +Valid values: +- GAP_ADTYPE_FLAGS_LIMITED: LE Limited Discoverable Mode. + +- GAP_ADTYPE_FLAGS_GENERAL: LE General Discoverable Mode. + +- GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED: BR/EDR Not Supported. + +- GAP_ADTYPE_FLAGS_SIMULTANEOUS_LE_BREDR_CONTROLLER: Simultaneous LE + and BR/EDR Controller Supported. + +- GAP_ADTYPE_FLAGS_SIMULTANEOUS_LE_BREDR_HOST: Simultaneous LE and + BR/EDR Host Supported. + +**Returns** +~~~~~~~~~~~ + +This function returns the current total size of advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::addPartialServices** +------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add partial list of service UUIDs to advertising data packet. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t addPartialServices(BLEUUID uuid); + +**Parameters** +~~~~~~~~~~~~~~ + +uuid: the desired UUID contained in BLEUUID class object. + +**Returns** +~~~~~~~~~~~ + +This function returns the current total size of the advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData:: addCompleteServices** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add complete list of service UUIDs to advertising data packet. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t addCompleteServices(BLEUUID uuid); + uint8_t addCompleteServices(uint8_t uuidBitLength); + +**Parameters** +~~~~~~~~~~~~~~ + +uuid: the desired UUID contained in BLEUUID class object. +uuidBitLength: UUID bit length for which a blank entry is to be added. Valid values: 16, 32, 128. + +**Returns** + +This function returns the current total size of the advertising data. + +**Example Code** + +Example: `BLEBatteryService `_ + +.. note :: uuidBitLength is used when a blank entry in the advertisement data is + required to be present. It is to indicate that no services with UUIDs of + a certain length are available. + + “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::addAppearance** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add device appearance to advertising data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t addAppearance(uint16_t appearance); + +**Parameters** +~~~~~~~~~~~~~~ + +appearance: the desired device appearance. + +**Returns** +~~~~~~~~~~~ + +This function returns the current total size of the advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDGamepad `_ + +.. note :: Refer to “gap_le_types.h” or Bluetooth specifications for a full list of + device appearance values. + + “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::addShortName** +------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add shortened device name to advertising data packet. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t addShortName(const char* str); + +**Parameters** +~~~~~~~~~~~~~~ + +str: character string containing desired short device name. + +**Returns** +~~~~~~~~~~~ + +This function returns the current total size of the advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::addCompleteName** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add complete device name to advertising data packet. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t addCompleteName(const char* str); + +**Parameters** +~~~~~~~~~~~~~~ + +str: character string containing desired device name. + +**Returns** +~~~~~~~~~~~ + +This function returns the current total size of the advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::parseScanInfo** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Parse advertising data packets received from a scan. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void parseScanInfo(T_LE_CB_DATA *p_data); + +**Parameters** +~~~~~~~~~~~~~~ + +p_data: pointer to advertising data received from a Bluetooth scan. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: The information of the received data from advertising data can be + accessed using the member functions starting with “has” and “get”. + + “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::hasFlags** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Check if received data includes advertising flags. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool hasFlags(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns true if flags are present in received advertising +data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::hasUUID** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Check if received data includes service UUIDs. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool hasUUID(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns true if service UUIDs are present in received +advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::hasName** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Check if received data includes device name. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool hasName(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns true if device name is present in received advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::hasManufacturer** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Check if received data includes manufacturer data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool hasManufacturer(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns true if manufacturer data is present in the received advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getAdvType** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get advertising type of received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + T_GAP_ADV_EVT_TYPE getAdvType(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the advertising type of received advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Possible types: + + - GAP_ADV_EVT_TYPE_UNDIRECTED + - GAP_ADV_EVT_TYPE_DIRECTED + - GAP_ADV_EVT_TYPE_SCANNABLE + - GAP_ADV_EVT_TYPE_NON_CONNECTABLE + - GAP_ADV_EVT_TYPE_SCAN_RSP + + "BLEAdvertData.h" must be included to use the class function. + +**BLEAdvertData::getAddrType** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Get Bluetooth address type of received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: C++ + + T_GAP_REMOTE_ADDR_TYPE getAddrType(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the Bluetooth address type of received data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Possible types: + + - GAP_REMOTE_ADDR_LE_PUBLIC + - GAP_REMOTE_ADDR_LE_RANDOM + + “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getRSSI** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get received signal strength indicator (RSSI) of received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + Int8_t getRSSI(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the received signal strength. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getFlags** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get advertising flags of received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t getFlags(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a single byte containing the advertising flags +found in received advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getServiceCount** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the total number of advertised services in the received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t getServiceCount(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the number of advertised service UUIDs in received +data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getServiceList** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get a list of advertised service UUIDs in received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEUUID* getServiceList(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to a BLEUUID array containing all +advertised service UUIDs. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getName** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get advertised device name in received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + String getName(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns advertised device name contained in a String class +object + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getTxPower** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the advertised transmission power of the received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + int8_t getTxPower(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns advertised transmission power of the received +data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getAppearance** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get advertised device appearance in received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getAppearance(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns advertised device appearance of the received data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Refer to “gap_le_types.h” or Bluetooth specifications for full list of device + appearance values. + + “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getManufacturer** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get advertised manufacturer in received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getManufacturer(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns advertised manufacturer of the received data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Refer to Bluetooth specifications for full list of + manufacturer codes. + + “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getManufacturerDataLength** +-------------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get length of manufacturer data in received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t getManufacturerDataLength(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the number of bytes of manufacturer data present +in received advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. + +**BLEAdvertData::getManufacturerData** +-------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get manufacturer data in received data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t* getManufacturerData(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to an array containing manufacturer +data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEAdvertData.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLEBeacon.rst b/source/amebapro2/API_Documents/BLE/Class BLEBeacon.rst new file mode 100644 index 0000000..08c657e --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEBeacon.rst @@ -0,0 +1,728 @@ +Class BLEBeacon +=============== + +.. contents:: + :local: + :depth: 2 + +**iBeacon Class** +----------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing iBeacon BLE advertising data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class iBeacon + +**Members** +~~~~~~~~~~~ + ++------------------------------+-------------------------------------------+ +| **Public Constructors** | | ++==============================+===========================================+ +| iBeacon::iBeacon | Constructs an iBeacon object | ++------------------------------+-------------------------------------------+ +| **Public Methods** | | ++------------------------------+-------------------------------------------+ +| iBeacon::getManufacturerId | Get current manufacturer ID value | ++------------------------------+-------------------------------------------+ +| iBeacon::getUUID | Get current UUID value | ++------------------------------+-------------------------------------------+ +| iBeacon::getMajor | Get current Major value for customizing | +| | beacons | ++------------------------------+-------------------------------------------+ +| iBeacon::getMinor | Get current Minor value for customizing | +| | beacons | ++------------------------------+-------------------------------------------+ +| iBeacon::getRSSI | Get current received signal strength | +| | indicator (RSSI) value | ++------------------------------+-------------------------------------------+ +| iBeacon::setManufacturerId | Set manufacturer ID value | ++------------------------------+-------------------------------------------+ +| iBeacon::setUUID | Set UUID value | ++------------------------------+-------------------------------------------+ +| iBeacon::setMajor | Set Major value for customizing beacons | ++------------------------------+-------------------------------------------+ +| iBeacon::setMinor | Set Minor value for customizing beacons | ++------------------------------+-------------------------------------------+ +| iBeacon::setRSSI | Set received signal strength indicator | +| | (RSSI) value | ++------------------------------+-------------------------------------------+ +| iBeacon::getAdvData | Get current advertising data | ++------------------------------+-------------------------------------------+ +| iBeacon::getScanRsp | Get current scan response data | ++------------------------------+-------------------------------------------+ + +**altBeacon Class** +------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing altBeacon BLE advertising data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class altBeacon + +**Members** +~~~~~~~~~~~ + ++------------------------------+---------------------------------------+ +| **Public Constructors** | | ++==============================+=======================================+ +| altBeacon::altBeacon | Constructs an altBeacon object | ++------------------------------+---------------------------------------+ +| **Public Methods** | | ++------------------------------+---------------------------------------+ +| altBeacon::getManufacturerId | Get current manufacturer ID value | ++------------------------------+---------------------------------------+ +| altBeacon::getUUID | Get current UUID value | ++------------------------------+---------------------------------------+ +| altBeacon::getMajor | Get current Major value for | +| | customizing beacons | ++------------------------------+---------------------------------------+ +| altBeacon::getMinor | Get current Minor value for | +| | customizing beacons | ++------------------------------+---------------------------------------+ +| altBeacon::getRSSI | Get current received signal strength | +| | indicator (RSSI) value | ++------------------------------+---------------------------------------+ +| altBeacon::getRSVD | Get current Reserved value | ++------------------------------+---------------------------------------+ +| altBeacon::setManufacturerId | Set manufacturer ID value | ++------------------------------+---------------------------------------+ +| altBeacon::setUUID | Set UUID value | ++------------------------------+---------------------------------------+ +| altBeacon::setMajor | Set Major value for customizing | +| | beacons | ++------------------------------+---------------------------------------+ +| altBeacon::setMinor | Set Minor value for customizing | +| | beacons | ++------------------------------+---------------------------------------+ +| altBeacon::setRSSI | Set received signal strength | +| | indicator (RSSI) value | ++------------------------------+---------------------------------------+ +| altBeacon::setRSVD | Set Reserved value | ++------------------------------+---------------------------------------+ +| altBeacon::getAdvData | Get current advertising data | ++------------------------------+---------------------------------------+ +| altBeacon::getScanRsp | Get current scan response data | ++------------------------------+---------------------------------------+ + +**iBeacon::iBeacon** +-------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Constructs an iBeacon object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void iBeacon(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEBeacon.h” must be included to use the class function. + +**altBeacon::altBeacon** +------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Constructs an altBeacon object + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void altBeacon(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEBeacon.h” must be included to use the class function. + +**iBeacon::getManufacturerId** +------------------------------ + +**altBeacon::getManufacturerId** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get current Manufacturer ID value. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getManufacturerId(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns a 16-bit unsigned integer containing the current +Company ID. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Refer to https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ + for the full list of assigned Bluetooth company identifiers. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::getUUID** +-------------------- + +**altBeacon::getUUID** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the current UUID value. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void getUUID(uint8_t* UUID); + +**Parameters** +~~~~~~~~~~~~~~ +UUID: Provide a pointer to a 16 elements uint8_t array containing current UUID. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: UUID is a 128-bit number used to uniquely identify a beacon. It is + commonly expressed as a 32-character hexadecimal string. UUIDs can be + generated at https://www.uuidgenerator.net/. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::getMajor** +--------------------- + +**altBeacon::getMajor** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get current Major value for customizing beacons. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getMajor(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a 16-bit unsigned integer containing the current major value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Major and Minor are values used for customizing beacons. These can be + set to any value. Refer to https://developer.apple.com/ibeacon/ or + https://altbeacon.org/ for more information. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::getMinor** +--------------------- + +**altBeacon::getMinor** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get current Minor value for customizing beacons. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getMinor(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a 16-bit unsigned integer containing the current minor value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Major and Minor are values used for customizing beacons. These can be + set to any value. Refer to https://developer.apple.com/ibeacon/ or + https://altbeacon.org/ for more information. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::getRSSI** +-------------------- + +**altBeacon::getRSSI** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the current received signal strength indicator (RSSI) value. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + int8_t getRSSI(void); + +**Parameters** +~~~~~~~~~~~~~~ +NA + +**Returns** +~~~~~~~~~~~ + +This function returns an 8-bit signed integer containing the currently set RSSI value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: The beacon RSSI value is the received signal strength at 1 meter. This + can be used to estimate the distance to the beacon. Refer to + https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more + information. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::setManufacturerId** +------------------------------ + +**altBeacon::setManufacturerId** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set Manufacturer ID value. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setManufacturerId(uint16_t id); + +**Parameters** +~~~~~~~~~~~~~~ + +id: desired Manufacturer ID + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBeacon `_ + +.. note :: Refer to https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ + for the full list of assigned Bluetooth company identifiers. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::setUUID** +-------------------- + +**altBeacon::setUUID** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set UUID value. + +**Syntax** +~~~~~~~~~~ + .. code-block:: c++ + + void setUUID(uint8_t* UUID); + + void setUUID(const char* UUID); + +**Parameters** +~~~~~~~~~~~~~~ + +uint8_t* UUID: Provide pointer to a 16 element uint8_t array containing +the desired UUID + +const char* UUID: desired UUID expressed as a character string + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBeacon `_ + +.. note :: UUID is a 128-bit number used to uniquely identify a beacon. It is + commonly expressed as a 32-character hexadecimal string. UUIDs can be + generated at https://www.uuidgenerator.net/. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::setMajor** +--------------------- + +**altBeacon::setMajor** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set Major value for customizing beacons. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setMajor(uint16_t major); + +**Parameters** +~~~~~~~~~~~~~~ + +major: desired Major value + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBeacon `_ + +.. note :: Major and Minor are values used for customizing beacons. These can be + set to any value. Refer to https://developer.apple.com/ibeacon/ or + https://altbeacon.org/ for more information. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::setMinor** +--------------------- + +**altBeacon::setMinor** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set Minor value for customizing beacons. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setMinor(uint16_t minor); + +**Parameters** +~~~~~~~~~~~~~~ + +minor: desired Minor value + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBeacon `_ + +.. note :: Major and Minor are values used for customizing beacons. These can be + set to any value. Refer to https://developer.apple.com/ibeacon/ or + https://altbeacon.org/ for more information. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::setRSSI** +-------------------- + +**altBeacon::setRSSI** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set RSSI value. + +**Syntax** +~~~~~~~~~~ + +.. code-block::c++ + + void setRSSI(int8_t RSSI); + +**Parameters** +~~~~~~~~~~~~~~ + +RSSI: desired RSSI value + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBeacon `_ + +.. note :: The beacon RSSI value is the received signal strength at 1 meter. This + can be used to estimate the distance to the beacon. Refer to + https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more information. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::getAdvData** +----------------------- + +**altBeacon::getAdvData** +------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get current beacon advertising data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t* getAdvData(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a uint8_t pointer to the structure containing +beacon advertising data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Avoid changing the beacon data through the returned pointer, use the + member functions instead. + + “BLEBeacon.h” must be included to use the class function. + +**iBeacon::getScanRsp** +----------------------- + +**altBeacon::getScanRsp** +------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get current beacon advertising scan response data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t* getScanRsp(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a uint8_t pointer to the structure containing +beacon advertising scan response data. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Avoid changing the beacon data through the returned pointer, use the + member functions instead. + + “BLEBeacon.h” must be included to use the class function. + +**altBeacon::getRSVD** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get current Reserved value. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t getRSVD(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns an 8-bit unsigned integer containing the current +Reserved value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Reserved for use by the manufacturer to implement special features. The + interpretation of this value is to be defined by the manufacturer and is + to be evaluated based on the MFG ID value. Refer to + https://altbeacon.org/ for more information. + + “BLEBeacon.h” must be included to use the class function. + +**altBeacon::setRSVD** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set Reserved value. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setRSVD(uint8_t rsvd); + +**Parameters** +~~~~~~~~~~~~~~ + +rsvd: desired Reserved value + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ +NA + +.. note :: Reserved for use by the manufacturer to implement special features. The + interpretation of this value is to be defined by the manufacturer and is + to be evaluated based on the MFG ID value. Refer to + https://altbeacon.org/ for more information. + + “BLEBeacon.h” must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLECharacteristic.rst b/source/amebapro2/API_Documents/BLE/Class BLECharacteristic.rst new file mode 100644 index 0000000..051e04c --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLECharacteristic.rst @@ -0,0 +1,1472 @@ +Class BLECharacteristic +======================= + +.. contents:: + :local: + :depth: 2 + +**BLECharacteristic Class** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for creating and managing BLE GATT characteristics. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLECharacteristic + +**Members** +~~~~~~~~~~~ ++-------------------------------------------+----------------------------------+ +| **Public Constructors** | | ++===========================================+==================================+ +| BLECharacteristic::BLECharacteristic | Constructs a BLECharacteristic | +| | object | ++-------------------------------------------+----------------------------------+ +| **Public Methods** | | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setUUID | Set the UUID of the | +| | characteristic. | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getUUID | Get the UUID of the | +| | characteristic. | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setBufferLen | Set the size of the internal | +| | data buffer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getBufferLen | Get the current size of the | +| | internal data buffer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setReadProperty | Set the Read property value | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setWriteProperty | Set the Write property value | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setWriteNRProperty | Set the write without response | +| | property value | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setNotifyProperty | Set the Notify property value | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setIndicateProperty | Set the Indicate property value | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setProperties | Set the characteristic properties| ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getProperties | Get the characteristic properties| ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setReadPermissions | Set the characteristic read | +| | permissions | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setWritePermissions | Set the characteristic write | +| | permissions | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setPermissions | Set the characteristic | +| | permissions | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getPermissions | Get the characteristic | +| | permissions | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::readString | Read the characteristic data | +| | buffer as a String object | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::readData8 | Read the characteristic data | +| | buffer as an unsigned 8-bit | +| | integer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::readData16 | Read the characteristic data | +| | buffer as an unsigned 16-bit | +| | integer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::readData32 | Read the characteristic data | +| | buffer as an unsigned 32-bit | +| | integer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::writeString | Write data to the characteristic | +| | data buffer as a String object or| +| | character array | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::writeData8 | Write data to the | +| | characteristic data buffer as | +| | an unsigned 8-bit integer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::writeData16 | Write data to the | +| | characteristic data buffer as | +| | an unsigned 16-bit integer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::writeData32 | Write data to the | +| | characteristic data buffer as | +| | an unsigned 16-bit integer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setData | Write data to the | +| | characteristic data buffer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getData | Read data from the | +| | characteristic data buffer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getDataBuff | Get a pointer to the | +| | characteristic data buffer | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getDataLen | Get the length of data (in | +| | bytes) in the characteristic | +| | data buffer. | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::notify | Send a notification to a | +| | connected device | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::indicate | Send an indication to a | +| | connected device | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setUserDescriptor | Add a user description | +| | descriptor to characteristic | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setFormatDescriptor | Add a data format descriptor to | +| | characteristic | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setReportRefDescriptor | Add a report reference | +| | descriptor to a characteristic | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getReportRefID | Get the previously set report | +| | reference descriptor ID | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::getReportRefType | Get the previously set report | +| | reference descriptor type | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setReadCallback | Set a user function as a read | +| | callback | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setWriteCallback | Set a user function as a write | +| | callback | ++-------------------------------------------+----------------------------------+ +| BLECharacteristic::setCCCDCallback | Set a user function as a CCCD | +| | write callback | ++-------------------------------------------+----------------------------------+ + +**BLECharacteristic::BLECharacteristic** +---------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Constructs a BLECharacteristic object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLECharacteristic::BLECharacteristic(BLEUUID uuid); + + BLECharacteristic::BLECharacteristic(const char* uuid); + +**Parameters** +~~~~~~~~~~~~~~ + +uuid: characteristic UUID, expressed as a BLEUUID class object or a character array + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setUUID** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set the UUID of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setUUID(BLEUUID uuid); + +**Parameters** +~~~~~~~~~~~~~~ + +uuid: new UUID for the characteristic, expressed as a BLEUUID class object. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::getUUID** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Get the UUID of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEUUID getUUID(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the UUID of the characteristic in a BLEUUID class object. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setBufferLen** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Description** +~~~~~~~~~~~~~~~ + +Set the size of the internal data buffer of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setBufferLen(uint16_t max_len); + +**Parameters** +~~~~~~~~~~~~~~ + +max_len: the number of bytes that the internal buffer will be resized to + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: Characteristic data buffer has a default size of 20 bytes and can be + increased up to 230 bytes. + + “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::getBufferLen** +----------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the current size of the internal data buffer of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getBufferLen(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the currently set internal buffer size. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setReadProperty** +-------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the Read property value of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setReadProperty(bool value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: To allow connected devices to read characteristic's data. Valid +values: true or false. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setWriteProperty** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the Write property value of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setWriteProperty(bool value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: To allow connected devices to write characteristic data. Valid values: true or false. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setWriteNRProperty** +----------------------------------------- +**Description** +~~~~~~~~~~~~~~~ + +Set the write without response property value of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setWriteNRProperty(bool value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: To allow connected devices to write characteristic data with no response. Valid values: true or false. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function.\ ** + +**BLECharacteristic::setNotifyProperty** +---------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the Notify property of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setNotifyProperty(bool value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: To allow connected devices to receive characteristic data +notification messages. Valid values: true or false. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: Enabling this property will add a CCCD descriptor to the + characteristic. + + “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setIndicateProperty** +------------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set the Indicate property value of characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setIndicateProperty(bool value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: To allow connected devices to receive characteristic data +indication messages. Valid values: true or false. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Enabling this property will add a CCCD descriptor to the + characteristic. + + “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setProperties** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set the characteristic properties. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setProperties(uint8_t value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: desired characteristic properties. Default value: 0x00 (no properties) + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::getProperties** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Get characteristic properties that is currently set. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t getProperties(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the currently set characteristic properties expressed as an unsigned 8-bit integer. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setReadPermissions** +----------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the characteristic read permissions. + +**Syntax** +~~~~~~~~~~ + +void setReadPermissions(uint32_t value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: desired characteristic read permissions. Valid values: + +- GATT_PERM_READ + +- GATT_PERM_READ_AUTHEN_REQ + +- GATT_PREM_READ_AUTHOR_REQ + +- GATT_PERM_READ_ENCRYPTED_REQ + +- GATT_PERM_READ_AUTHEN_SC_REQ + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: If no permissions are set, the default permission is + GATT_PERM_NONE + + “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setWritePermissions** +------------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set the characteristic write permissions. + +**Syntax** +~~~~~~~~~~ + +void setWritePermissions(uint32_t value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: desired characteristic write permissions. Valid values: + +- GATT_PERM_WRITE + +- GATT_PERM_WRITE_AUTHEN_REQ + +- GATT_PREM_WRITE_AUTHOR_REQ + +- GATT_PERM_WRITE_ENCRYPTED_REQ + +- GATT_PERM_WRITE_AUTHEN_SC_REQ + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: If no permissions are set, the default permission is + GATT_PERM_NONE + + “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setPermissions** +------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the characteristic permissions. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setPermissions(uint32_t value); + +**Parameters** +~~~~~~~~~~~~~~ + +value: desired characteristic permissions. Valid values: + +- GATT_PERM_READ + +- GATT_PERM_READ_AUTHEN_REQ + +- GATT_PREM_READ_AUTHOR_REQ + +- GATT_PERM_READ_ENCRYPTED_REQ + +- GATT_PERM_READ_AUTHEN_SC_REQ + +- GATT_PERM_WRITE + +- GATT_PERM_WRITE_AUTHEN_REQ + +- GATT_PREM_WRITE_AUTHOR_REQ + +- GATT_PERM_WRITE_ENCRYPTED_REQ + +- GATT_PERM_WRITE_AUTHEN_SC_REQ + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: If no permissions are set, the default permission is + GATT_PERM_NONE + + “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::getPermissions** +------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the characteristic permissions. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint32_t getPermissions(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the characteristic permissions that are previously +set using the setReadPermissions, setWritePermissions and setPermissions +functions. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + + +**BLECharacteristic::readString** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Read the characteristic data buffer as a String object. + +**Syntax** +~~~~~~~~~~ + +String readString(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the data in the characteristic internal buffer as a String class object. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: Non-ASCII data may result in unexpected + characters in the string. + + “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::readData8** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Read the data in the characteristic internal buffer, expressed as an unsigned 8-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t readData8(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the data in the characteristic internal buffer expressed as a uint8_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::readData16** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Read the data in the characteristic internal buffer, expressed as an unsigned 16-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t readData16(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the data in the characteristic internal buffer +expressed as a uint16_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::readData32** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Read the data in the characteristic internal buffer, expressed as an unsigned 32-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint32_t readData32(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the data in the characteristic internal buffer expressed as a uint32_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::writeString** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the characteristic data buffer as a String object or character array. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeString(String str); + + bool writeString(const char* str); + +**Parameters** +~~~~~~~~~~~~~~ + +str: the data to write to the characteristic buffer, expressed as a String class object or a char array. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if write data is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::writeData8** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the characteristic data buffer as an unsigned 8-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeData8(uint8_t num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the characteristic buffer expressed as an unsigned 8-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if write data is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::writeData16** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the characteristic data buffer as an unsigned 16-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeData16(uint16_t num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the characteristic buffer expressed as an unsigned 16-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if write data is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::writeData32** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the characteristic data buffer as an unsigned 32-bit +integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: C++ + + bool writeData32(uint32_t num); + + bool writeData32(int num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the characteristic buffer expressed as a signed or unsigned 32-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if write data is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setData** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the characteristic data buffer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool setData(uint8_t* data, uint16_t datalen); + +**Parameters** +~~~~~~~~~~~~~~ + +data: pointer to byte array containing desired data + +datalen: number of bytes of data to write + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if write data is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::getData** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Read data from the characteristic data buffer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getData(uint8_t* data, uint16_t datalen); + +**Parameters** +~~~~~~~~~~~~~~ + +data: pointer to byte array containing saved data from data buffer + +datalen: number of bytes of data to be read + +**Returns** +~~~~~~~~~~~ + +This function returns the number of bytes read. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: If the data buffer contains less data than requested, it will only read + the available number of bytes of data. + + “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::getDataBuff** + +**Description** +~~~~~~~~~~~~~~~ + +Get a pointer to the characteristic data buffer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t* getDataBuff(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to the uint8_t array used as the characteristic internal buffer. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::getDataLen** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the length of data (in bytes) in the characteristic data buffer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getDataLen(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the length of the last written data (in bytes) in the internal data buffer. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::notify** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a notification to a connected device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void notify(uint8_t conn_id); + +**Parameters** +~~~~~~~~~~~~~~ + +conn_id: the connection ID for the device to send a notification to. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** + +Example: `BLEUartService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::indicate** +------------------------------- + +Send an indication to a connected device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void indicate(uint8_t conn_id); + +**Parameters** +~~~~~~~~~~~~~~ + +conn_id: the connection ID for the device to send an indication to. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setUserDescriptor** +---------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add a user description descriptor attribute (UUID 0x2901) to the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setUserDescriptor(const char* description); + +**Parameters** +~~~~~~~~~~~~~~ + +description: the desired user description string expressed in a char array. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setFormatDescriptor** +------------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Add a data format descriptor attribute (UUID 0x2904) to the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setFormatDescriptor(uint8_t format, uint8_t exponent, uint16_t unit, uint16_t description); + +**Parameters** +~~~~~~~~~~~~~~ + +format: refer to +https://www.bluetooth.com/specifications/assigned-numbers/format-types/ +for the valid values and associated format types. + +exponent: base-10 exponent to be applied to characteristic data value + +unit: refer to +https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf +for the valid values and associated units. + +description: refer to +https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors/ +for the valid values and associated descriptors. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setReportRefDescriptor** +--------------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add a HID report reference descriptor attribute (UUID 0x2908) to the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setReportRefDescriptor(uint8_t id, uint8_t type); + +**Parameters** +~~~~~~~~~~~~~~ + +id: HID report reference ID + +type: HID report type. 0x01 for input report, 0x02 for output report, 0x03 for feature report. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: HID report reference ID should begin at 1. Some HID host systems may + consider an ID of 0 as invalid. + + “BLECharacteristic.h” must be included to use the class function. + + +**BLECharacteristic::getReportRefID** +------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the previously set HID report reference descriptor ID. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t getReportRefID(void); + +**Parameters** + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the report reference ID previously set using the setReportRefDescriptor function. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + + +**BLECharacteristic::getReportRefType** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the previously set HID report reference descriptor type. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t getReportRefType(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the report reference type previously set using the +setReportRefDescriptor function. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLECharacteristic.h” must be included to use the class function. + + +**BLECharacteristic::setReadCallback** +-------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set a user function to be called when the characteristic data is read by +a connected device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setReadCallback(void (*fCallback) (BLECharacteristic* chr, uint8_t conn_id)); + +**Parameters** +~~~~~~~~~~~~~~ + +fCallback: A user callback function that returns void and takes two +arguments. + +chr: pointer to BLECharacteristic object containing data read + +conn_id: connection ID of connected device that read characteristic data + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setWriteCallback** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set a user function to be called when the characteristic data is written by a connected device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setWriteCallback(void (*fCallback) (BLECharacteristic* chr, uint8_t conn_id)); + +**Parameters** +~~~~~~~~~~~~~~ + +fCallback: A user callback function that returns void and takes two +arguments. + +chr: pointer to BLECharacteristic object containing written data. + +conn_id: connection ID of connected device that wrote characteristic +data. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. + +**BLECharacteristic::setCCCDCallback** +-------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set a user function to be called when a connected device modifies the +characteristic CCCD to enable or disable notifications or indications. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setCCCDCallback(void (*fCallback) (BLECharacteristic* chr, uint8_t conn_id, uint16_t ccc_bits)); + +**Parameters** +~~~~~~~~~~~~~~ + +fCallback: A user callback function that returns void and takes two +arguments. + +chr: pointer to BLECharacteristic object containing written data. + +conn_id: connection ID of connected device that wrote characteristic +data. + +ccc_bits: the new CCCD data bits after modification by the connected +device + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** + +Example: `BLEUartService `_ + +.. note :: “BLECharacteristic.h” must be included to use the class function. \ No newline at end of file diff --git a/bak/API_Documents/BLE/Class BLEClient.rst b/source/amebapro2/API_Documents/BLE/Class BLEClient.rst similarity index 52% rename from bak/API_Documents/BLE/Class BLEClient.rst rename to source/amebapro2/API_Documents/BLE/Class BLEClient.rst index d93577c..f6fac4d 100644 --- a/bak/API_Documents/BLE/Class BLEClient.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEClient.rst @@ -1,258 +1,315 @@ +Class BLEClient +=============== + +.. contents:: + :local: + :depth: 2 + **BLEClient Class** +------------------- **Description** +~~~~~~~~~~~~~~~ A class used for discovering and accessing BLE GATT services on a connected remote device. **Syntax** +~~~~~~~~~~ -class BLEClient - -**Members** +.. code-block:: c++ -**Public Constructors** - -No public constructor is available for this class. You can get a pointer -to an instance of this class using BLEDevice::addClient(). - -**Public Methods** - -+------------------------------------+---------------------------------+ -| BLEClient::connected | Check if the remote device | -| | associated with the client is | -| | connected. | -+====================================+=================================+ -| BLEClient::discoverServices | Start service discovery process | -| | for connected device | -+------------------------------------+---------------------------------+ -| BLEClient::discoveryDone | Determine if service discovery | -| | process has been completed | -+------------------------------------+---------------------------------+ -| BLEClient::printServices | Format and print discovered | -| | services to serial port | -+------------------------------------+---------------------------------+ -| BLEClient::getService | Get a service with the | -| | specified UUID on the remote | -| | device | -+------------------------------------+---------------------------------+ -| BLEClient::getConnId | Get connection ID corresponding | -| | to remote device | -+------------------------------------+---------------------------------+ -| BLEClient::getClientId | Get corresponding client ID | -+------------------------------------+---------------------------------+ -| BLEClient::setDisconnectCallback | Set a user function to be | -| | called when the remote device | -| | is disconnected | -+------------------------------------+---------------------------------+ + class BLEClient +**Members** +~~~~~~~~~~~ ++------------------------------------+------------------------------------+ +| **Public Constructors** | | ++====================================+====================================+ +| No public constructor is available for this class. You can get a pointer| +| to an instance of this class using BLEDevice::addClient(). | ++------------------------------------+------------------------------------+ +| **Public Methods** | | ++------------------------------------+------------------------------------+ +| BLEClient::connected | Check if the remote device | +| | associated with the client is | +| | connected. | ++------------------------------------+------------------------------------+ +| BLEClient::discoverServices | Start service discovery process | +| | for connected device | ++------------------------------------+------------------------------------+ +| BLEClient::discoveryDone | Determine if service discovery | +| | process has been completed | ++------------------------------------+------------------------------------+ +| BLEClient::printServices | Format and print discovered | +| | services to serial port | ++------------------------------------+------------------------------------+ +| BLEClient::getService | Get a service with the | +| | specified UUID on the remote | +| | device | ++------------------------------------+------------------------------------+ +| BLEClient::getConnId | Get connection ID corresponding | +| | to remote device | ++------------------------------------+------------------------------------+ +| BLEClient::getClientId | Get corresponding client ID | ++------------------------------------+------------------------------------+ +| BLEClient::setDisconnectCallback | Set a user function to be | +| | called when the remote device | +| | is disconnected | ++------------------------------------+------------------------------------+ **BLEClient::connected** +------------------------ **Description** +~~~~~~~~~~~~~~~ Check if the remote device associated with the client is connected. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -bool connected(void); + bool connected(void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ This function returns TRUE if the remote device is connected. **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -“BLEClient.h” must be included to use the class function. +.. note :: “BLEClient.h” must be included to use the class function. **BLEClient::discoverServices** +------------------------------- **Description** +~~~~~~~~~~~~~~~ Start the service discovery process for the connected remote device. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void discoverServices(void); + void discoverServices(void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEUartClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartClient/BLEUartClient.ino) +Example: `BLEUartClient `_ -**Notes and Warnings** -“BLEClient.h” must be included to use the class function. +.. note :: “BLEClient.h” must be included to use the class function. **BLEClient::discoveryDone** **Description** +~~~~~~~~~~~~~~~ Determine if the service discovery process has been completed. **Syntax** +~~~~~~~~~~ -bool discoveryDone(void); +.. code-block:: c++ + + bool discoveryDone(void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ This function returns TRUE if the service discovery process has been completed successfully, FALSE if the service discovery process failed, is still in progress, or has yet to start. **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEUartClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartClient/BLEUartClient.ino) +Example: `BLEUartClient `_ **Notes and Warnings** -“BLEClient.h” must be included to use the class function. +.. note :: “BLEClient.h” must be included to use the class function. **BLEClient::printServices** **Description** +~~~~~~~~~~~~~~~ Print out a formatted list of discovered services to the serial port. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void printServices(void); + void printServices(void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ NA **Notes and Warnings** -“BLEClient.h” must be included to use the class function. +.. note :: “BLEClient.h” must be included to use the class function. **BLEClient::getService** **Description** +~~~~~~~~~~~~~~~ Get a service with the specified UUID on the remote device. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -BLERemoteService\* getService(const char\* uuid); + BLERemoteService* getService(const char* uuid); -BLERemoteService\* getService(BLEUUID uuid); + BLERemoteService* getService(BLEUUID uuid); **Parameters** +~~~~~~~~~~~~~~ -uuid: the desired service UUID, expressed as a character array or a -BLEUUID object. +uuid: the desired service UUID, expressed as a character array or a BLEUUID object. **Returns** +~~~~~~~~~~~ This function returns the discovered service as a BLERemoteService object pointer, otherwise nullptr is returned if a service with the UUID is not found. **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEUartClient -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEUartClient/BLEUartClient.ino) +Example: `BLEUartClient `_ -**Notes and Warnings** - -“BLEClient.h” must be included to use the class function. +.. note :: “BLEClient.h” must be included to use the class function. **BLEClient::getConnId** +------------------------ **Description** +~~~~~~~~~~~~~~~ Get the connection ID associated with the remote device. **Syntax** +~~~~~~~~~~ -uint8_t getConnId(void); +.. code-block:: c++ + + uint8_t getConnId(void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ This function returns the connection ID for the connected remote device. **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -“BLEClient.h” must be included to use the class function. +.. note :: “BLEClient.h” must be included to use the class function. **BLEClient::getClientId** +-------------------------- **Description** +~~~~~~~~~~~~~~~ Get the client ID for the BLEClient object. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -T_CLIENT_ID getClientId(void); + T_CLIENT_ID getClientId(void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ -This function returns the BLEClient object’s client ID. +This function returns the BLEClient object's client ID. **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -The client ID is used when calling internal GATT client API. - -“BLEClient.h” must be included to use the class function. +.. note :: The client ID is used when calling internal GATT client API. + + “BLEClient.h” must be included to use the class function. **BLEClient::setDisconnectCallback** +------------------------------------ **Description** +~~~~~~~~~~~~~~~ Set a user function as a callback function when the remote device is disconnected. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void setDisconnectCallback(void (\*fCallback) (BLEClient\* client)); + void setDisconnectCallback(void (*fCallback) (BLEClient* client)); **Parameters** +~~~~~~~~~~~~~~ fCallback: A user callback function that returns void and takes one argument. @@ -261,17 +318,17 @@ client: A pointer to the BLEClient object corresponding to the disconnected remote device **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -The user callback function will be called after the remote device has -disconnected, before the characteristics, services and client associated -with the remote device are deleted. - -“BLEClient.h” must be included to use the class function. +.. note :: The user callback function will be called after the remote device has + disconnected, before the characteristics, services and client associated + with the remote device are deleted. + + “BLEClient.h” must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEConnect.rst b/source/amebapro2/API_Documents/BLE/Class BLEConnect.rst new file mode 100644 index 0000000..870e887 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEConnect.rst @@ -0,0 +1,501 @@ +Class BLEConnect +================ + +.. contents:: + :local: + :depth: 2 + +**BLEConnect Class** +-------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing BLE connection settings. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEConnect + +**Members** +~~~~~~~~~~~ + ++------------------------------------+------------------------------------+ +| **Public Constructors** | | ++====================================+====================================+ +| No public constructor is available as this class is intended to be a | +| singleton class. You can get a pointer to this class using | +| BLEDevice::configConnection | ++------------------------------------+------------------------------------+ +| **Public Methods** | | ++------------------------------------+------------------------------------+ +| BLEConnect::connect | Scan and search for all accessible | +| | BLE devices, then select and | +| | connect to one of them | ++------------------------------------+------------------------------------+ +| BLEConnect::disconnect | Disconnect from targeted BLE device| ++------------------------------------+------------------------------------+ +| BLEConnect::setScanInterval | Set the scan interval when | +| | searching for the targeted device | ++------------------------------------+------------------------------------+ +| BLEConnect::setScanWindow | Set the BLE scan window when | +| | searching for the targeted device | +| | to connect to | ++------------------------------------+------------------------------------+ +| BLEConnect::setConnInterval | Set the BLE connection interval | +| | duration | ++------------------------------------+------------------------------------+ +| BLEConnect::setConnLatency | Set the BLE connection slave | +| | latency value | ++------------------------------------+------------------------------------+ +| BLEConnect::setConnTimeout | Set the BLE connection timeout | +| | value | ++------------------------------------+------------------------------------+ +| BLEConnect::updateConnParams | Update a connected device with new | +| | connection parameters | ++------------------------------------+------------------------------------+ +| BLEConnect::getConnInfo | Get connection information | ++------------------------------------+------------------------------------+ +| BLEConnect::getConnAddr | Get the Bluetooth address for a | +| | certain connection | ++------------------------------------+------------------------------------+ +| BLEConnect::getConnId | Get the connection ID for a certain| +| | device | ++------------------------------------+------------------------------------+ + +**BLEConnect::connect** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +This class function is used to scan and search for all accessible BLE +devices, then select and connect to one of them. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool connect(char* btAddr, T_GAP_REMOTE_ADDR_TYPE destAddrType, uint16_t scanTimeout); + + bool connect(uint8_t (&btAddr)[6], T_GAP_REMOTE_ADDR_TYPE destAddrType, uint16_t scanTimeout); + + bool connect(BLEAdvertData targetDevice, uint16_t scanTimeout); + + bool connect(BLEAddr destAddr, T_GAP_REMOTE_ADDR_TYPE destAddrType, uint16_t scanTimeout); + +**Parameters** +~~~~~~~~~~~~~~ + +char* btAddr: pointer to the targeted BLE device's Bluetooth address +expressed as a character string. + +uint8_t (&btAddr): targeted BLE device's Bluetooth address contained in +a 6-byte array. + +destAddr: targeted BLE device's Bluetooth address contained in BLEAddr +class object. + +targetDevice: advertising data packet scanned from targeted BLE device. + +destAddrType: Bluetooth address type of targeted BLE device, Valid +values: + +- GAP_REMOTE_ADDR_LE_PUBLIC + +- GAP_REMOTE_ADDR_LE_RANDOM + +scan timeout: duration in milliseconds for which to look for the +targeted BLE device before giving up. + +**Returns** +~~~~~~~~~~~ + +This function returns true if the connection is successful, otherwise +false. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: “BLEConnect.h” must be included to use the class function. + +**BLEConnect::disconnect** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Disconnect from targeted BLE device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool disconnect(uint8_t connId); + +**Parameters** +~~~~~~~~~~~~~~ + +connId: connection ID for target device. Default connection ID set to 0. + +**Returns** +~~~~~~~~~~~ + +This function returns true if the operation is successful, otherwise +false. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEConnect.h” must be included to use the class function. + +**BLEConnect::setScanInterval** + +**Description** +~~~~~~~~~~~~~~~ + +Set the scan interval when searching for the targeted device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setScanInterval(uint16_t scanInt_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +scanInt_ms: scan interval in milliseconds. Valid value: 3 to 10240. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Scan interval defines how often the scanning process is started. The + value set for scanInt_ms must be equal or larger than the value set for + scanWindow_ms. scanInt_ms value is defined in units of 625 microseconds. + + “BLEConnect.h” must be included to use the class function. + +**BLEConnect::setScanWindow** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE scan window when searching for the targeted device to +connect to. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setScanWindow(uint16_t scanWindow_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +scanWindow_ms: scan window in milliseconds. Valid value: 3 to 10240. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: BLE scan window defines how long each interval should be scanned for. + The value set for scanWindow_ms set must be equal or smaller than the + value set for scanInt_ms. scanWindow_ms value is defined in units of 625 microseconds. + + “BLEConnect.h” must be included to use the class function. + +**BLEConnect::setConnInterval** +------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE connection interval duration. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setConnInterval(uint16_t min_ms, uint16_t max_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +min_ms: minimum acceptable connection interval in milliseconds. Valid +value: 8 to 4000. + +max_ms: maximum acceptable connection interval in milliseconds. Valid +value: 8 to 4000. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: The BLE connection interval defines the period between successive + connection events between a connected central and peripheral device. + Even if there is no data to exchange, a connection event is required to + maintain the connection. max_ms should be larger than or equal to min_ms. + + “BLEConnect.h” must be included to use the class function. + +**BLEConnect::setConnLatency** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE connection slave latency value. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setConnLatency(uint16_t latency); + +**Parameters** +~~~~~~~~~~~~~~ + +latency: Connection slave latency value. Valid value: 0 to 499. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: The BLE connection slave latency defines the number of successive + connection events a connected peripheral device can ignore without being + considered as disconnected by the central device. + + “BLEConnect.h” must be included to use the class function. + +**BLEConnect::setConnTimeout** + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE connection timeout value. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setConnTimeout(uint16_t timeout_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +timeout_ms: connection timeout in milliseconds. + +Valid value: 100 to 32000. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: The BLE connection timeout defines the duration a peripheral or central + device must wait after a failed connection event to consider the connection broken. + + “BLEConnect.h” must be included to use the class function. + +**BLEConnect::updateConnParams** + +**Description** +~~~~~~~~~~~~~~~ + +Update a connected device with new connection parameters. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void updateConnParams(uint8_t conn_id); + +**Parameters** +~~~~~~~~~~~~~~ + +conn_id: connection ID of targeted device to update connection parameters. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Update the connected device with new connection parameters such as + connection interval, slave latency and timeout values. The connected + device may reject the new values if it is unable to conform to them. + + “BLEConnect.h” must be included to use the class function. + +**BLEConnect::getConnInfo** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get connection information. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool getConnInfo(uint8_t connId, T_GAP_CONN_INFO *pConnInfo); + +**Parameters** +~~~~~~~~~~~~~~ + +connId: connection ID to device get connection information from + +pConnInfo: pointer to T_GAP_CONN_INFO structure to store obtained +connection information + +**Returns** +~~~~~~~~~~~ + +This function returns true if the connection information is successfully obtained. Otherwise, false. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEConnect.h” must be included to use the class function. + +**BLEConnect::getConnAddr** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the Bluetooth address for a certain connection. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool getConnAddr(uint8_t connId, uint8_t* addr, uint8_t* addrType); + +**Parameters** +~~~~~~~~~~~~~~ + +connId: connection ID of device to get Bluetooth address of + +addr: pointer to 6 byte array to store retrieved Bluetooth address + +addrType: pointer to uint8_t variable to store retrieved Bluetooth +address type + +**Returns** +~~~~~~~~~~~ + +This function returns true if the connection address information is +successfully obtained. Otherwise, false. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEConnect.h” must be included to use the class function. + +**BLEConnect::getConnId** +------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the connection ID for a certain device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + int8_t getConnId(char* btAddr, uint8_t addrType); + + int8_t getConnId(uint8_t* btAddr, uint8_t addrType); + + int8_t getConnId(BLEAdvertData targetDevice); + +**Parameters** +~~~~~~~~~~~~~~ + +char* btAddr: targeted device Bluetooth address expressed as a +character string. + +uint8_t* btAddr: pointer to a 6-byte array containing targeted device +Bluetooth address. + +targetDevice: advertising data packet scanned from targeted device. + +addrType: Bluetooth address type of targeted device. Valid values: + +- GAP_REMOTE_ADDR_LE_PUBLIC + +- GAP_REMOTE_ADDR_LE_RANDOM + +**Returns** +~~~~~~~~~~~ + +This function returns the requested connection ID. Else, returns -1 if +failed to obtain connection ID. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: “BLEConnect.h” must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEDevice.rst b/source/amebapro2/API_Documents/BLE/Class BLEDevice.rst new file mode 100644 index 0000000..a8e1621 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEDevice.rst @@ -0,0 +1,729 @@ +Class BLEDevice +=============== + +.. contents:: + :local: + :depth: 2 + +**BLEDevice Class** +------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for general control and management of BLE functions. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEDevice + +**Members** +~~~~~~~~~~~ + ++------------------------------------+------------------------------------+ +| **Public Constructors** | | ++====================================+====================================+ +| The public constructor should not be used as this class is intended to | +| be a singleton class. Access member functions using the object instance | +| named BLE. | ++------------------------------------+------------------------------------+ +| **Public Methods** | | ++------------------------------------+------------------------------------+ +| BLEDevice:: init | Initialize resources that are | +| | required for BLE to function | ++------------------------------------+------------------------------------+ +| BLEDevice::deinit | Deinitialize all the operations for| +| | BLE. | ++------------------------------------+------------------------------------+ +| BLEDevice::connected | Check if a BLE device is connected | ++------------------------------------+------------------------------------+ +| BLEDevice::setDeviceName | Set BLE Generic Access Profile | +| | (GAP) device name | ++------------------------------------+------------------------------------+ +| BLEDevice::setDeviceAppearance | Set BLE Generic Access Profile | +| | (GAP) device appearance | ++------------------------------------+------------------------------------+ +| BLEDevice::configAdvert | Configure BLE advertising | +| | parameters | ++------------------------------------+------------------------------------+ +| BLEDevice::configScan | Configure BLE scan parameters | ++------------------------------------+------------------------------------+ +| BLEDevice::configConnection | Configure BLE connection parameters| ++------------------------------------+------------------------------------+ +| BLEDevice::configSecurity | Configure BLE bonding security | +| | parameters | ++------------------------------------+------------------------------------+ +| BLEDevice::setScanCallback | Set callback function for BLE scan | +| | results | ++------------------------------------+------------------------------------+ +| BLEDevice::beginCentral | Start BLE stack to operate as a | +| | central device. | ++------------------------------------+------------------------------------+ +| BLEDevice::beginPeripheral | Start BLE stack to operate as a | +| | peripheral device. | ++------------------------------------+------------------------------------+ +| BLEDevice::end | Stop the operation of BLE stack as | +| | a peripheral or central device. | ++------------------------------------+------------------------------------+ +| BLEDevice::configServer | Configure BLE stack for services | ++------------------------------------+------------------------------------+ +| BLEDevice::addService | Add a service to the BLE stack | ++------------------------------------+------------------------------------+ +| BLEDevice::configClient | Configure BLE stack for clients | ++------------------------------------+------------------------------------+ +| BLEDevice::addClient | Add a new client to the BLE stack | ++------------------------------------+------------------------------------+ +| BLEDevice::getLocalAddr | Get local device Bluetooth address | ++------------------------------------+------------------------------------+ + +**BLEDevice:: init** +-------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Initialize resources that are required for BLE to function. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void init(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: Call this member function first before using any other member functions + in the BLEDevice class. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::deinit** +--------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Deinitialize all the operations for BLE. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void deinit(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Call this member function last after all other BLE operations have been + terminated. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::connected** +------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Check if a BLE device is connected. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool connected(uint8_t connId); + +**Parameters** +~~~~~~~~~~~~~~ + +connId: connection ID to check connection status. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if BLE device is connected, otherwise false. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Peripheral mode should use connId = 0 + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::setDeviceName** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE Generic Access Profile (GAP) device name which will be +visible after a connection is estabalished. The default device name is +set as “AMEBA_BLE_DEV”. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setDeviceName(String devName); + +**Parameters** +~~~~~~~~~~~~~~ + +devName: desired device name expressed as a character string. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: The GAP device name has a maximum length of 39 characters. Other devices + can see this name after a BLE connection is established. This name is + separate and different from the device name sent in a BLE advertisement, + the names should be the same but are not required. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::setDeviceAppearance** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE Generic Access Profile (GAP) device appearance. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setDeviceAppearance(uint16_t devAppearance); + +**Parameters** +~~~~~~~~~~~~~~ + +devAppearance: desired device appearance expressed as a 16-bit unsigned +integer. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Refer to Bluetooth SIG assigned device appearances at + https://www.bluetooth.com/specifications/gatt/characteristics/. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::configAdvert** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Configure BLE advertising parameters. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEAdvert* configAdvert(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to a BLEAdvert class instance for +configuring BLE advertising parameters. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: Use this member function instead of creating a BLEAdvert class instance + manually. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::configScan** +------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Configure BLE scanning parameters. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEScan* configScan(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to a BLEScan class instance for +configuring BLE scanning parameters. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +**Notes and Warnings** + +Use this member function instead of creating a BLEScan class instance +manually. + +“BLEDevice.h” must be included to use the class function. + +**BLEDevice::configConnection** + +**Description** +~~~~~~~~~~~~~~~ + +Configure BLE connection parameters. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEConnect* configConnection(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to a BLEConnect class instance for +configuring BLE connection parameters. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: Use this member function instead of creating a BLEConnect class instance + manually. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::configSecurity** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Configure BLE bonding security parameters. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLESecurity* configSecurity(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to a BLESecurity class instance for +configuring BLE bonding security parameters. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: Use this member function instead of creating a BLESecurity class + instance manually. + + “BLEDevice.h” must be included to use the class function. + + +**BLEDevice::setScanCallback** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set a callback function for processing BLE scan results. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setScanCallback(void (*scanCB)(T_LE_CB_DATA*)); + +**Parameters** +~~~~~~~~~~~~~~ + +scanCB: a function that returns nothing and takes in a scan data pointer +of type T_LE_CB_DATA\* + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: Use this member function to set a callback function that will be called + for each BLE device scan result found. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::beginCentral** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Start the BLE stack to operate as a central device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void beginCentral(uint8_t connCount); + +**Parameters** +~~~~~~~~~~~~~~ + +connCount: maximum number of allowed connected devices. If no argument +is provided, default is maximum allowed connected devices for specific board. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: Use this member function to start the device to operate as a central BLE + device, after other BLE parameters are set correctly. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::beginPeripheral** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Start the BLE stack to operate as a peripheral device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void beginPeripheral(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: Use this member function to start the device to operate as a peripheral + BLE device, after other BLE parameters are set correctly. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice:: end** +------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Stop the operation of BLE stack as a peripheral or central device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void end(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Use this member function to stop the device operating in either BLE + peripheral mode or BLE central mode. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::configServer** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Configure the BLE stack for services. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void configServer(uint8_t maxServiceCount); + +**Parameters** +~~~~~~~~~~~~~~ + +maxServiceCount: Maximum number of services that will run on the device + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: Use this member function before adding any service to the BLE stack. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::addService** +------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Add a new service to the BLE stack. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void addService(BLEService& newService); + +**Parameters** +~~~~~~~~~~~~~~ + +newService: the service to be added, defined using a BLEService class +object. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryService `_ + +.. note :: “BLEDevice.h” must be included to use the class function. + +**BLEDevice::configClient** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Configure the BLE stack for clients. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void configClient(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + + +.. note :: Use this member function before adding any client to the BLE stack. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::addClient** +------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Add a new client to the BLE stack. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEClient* addClient(uint8_t connId); + +**Parameters** +~~~~~~~~~~~~~~ + +connId: the connection ID of the connected device to create a client +for. + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to a BLEClient class object, +corresponding to the device with the specified connection ID, which can +be used to access the services and characteristics on the connected +device. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: Only one client should be added per connected device. + + The BLEClient object and any service, characteristic, descriptor + associated with the connected device will be deleted when the device is + disconnected. + + “BLEDevice.h” must be included to use the class function. + +**BLEDevice::getLocalAddr** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get local device Bluetooth address. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void getLocalAddr(uint8_t (&addr)[GAP_BD_ADDR_LEN]); + +**Parameters** +~~~~~~~~~~~~~~ + +addr: 6 byte array to store local device Bluetooth address. + +GAP_BD_ADDR_LEN: Default Bluetooth device address length of 6 bytes. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Local device address is only available after starting in central or + peripheral mode. This function will return all zeros for the address if + central or peripheral mode is not in operation. + + “BLEDevice.h” must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEHIDDevice.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDDevice.rst new file mode 100644 index 0000000..8c8eef2 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDDevice.rst @@ -0,0 +1,652 @@ +Class BLEHIDDevice +================== + +.. contents:: + :local: + :depth: 2 + +**BLEHIDDevice Class** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for creating and managing HID over GATT Profile (HOGP) +services. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEHIDDevice + +**Members** +~~~~~~~~~~~ + ++------------------------------------+------------------------------------+ +| **Public Constructors** | | ++====================================+====================================+ +| The public constructor should not be used as this class is intended to | +| be a singleton class. Access member functions using the object instance | +| named BLEHIDDev. | ++------------------------------------+------------------------------------+ +| **Public Methods** | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::init | Initialize the HID Device | +| | Profile by creating the | +| | required services and | +| | characteristics | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::setNumOutputReport | Set the number of HID output | +| | reports to be generated. | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::setNumInputReport | Set the number of HID input | +| | reports to be generated. | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::setReportMap | Set the HID report map | +| | characteristics with a HID | +| | report descriptor | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::inputReport | Send a HID input report to | +| | connected device | ++------------------------------------+------------------------------------+ +| BLEHIDDevice:: | Set a user callback function | +| setOutputReportCallback | for receiving HID output | +| | reports | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::bootKeyboardReport | Send a HID boot keyboard input | +| | report to connected device | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::setHidInfo | Set HID info of the HID service | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::setBattLevel | Set battery level info of the | +| | Battery service | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::setPNPInfo | Set PNP information of the | +| | Device Information service | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::setManufacturerString| Set manufacturer information of | +| | the Device Information service | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::setModelString | Set model information of the | +| | Device Information service | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::hidService | Get reference to HID service | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::devInfoService | Get reference to Device | +| | Information service | ++------------------------------------+------------------------------------+ +| BLEHIDDevice::battService | Get reference to Battery | +| | service | ++------------------------------------+------------------------------------+ + +**BLEHIDDevice::init** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Initialize the HID Device profile by creating the required services and +characteristics. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + + void init(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDGamepad `_ + +.. note :: The HID Device object should be initialized before any HID reports can + be sent. + + “BLEHIDDevice.h” must be included to use the class function.\ ** + +**BLEHIDDevice::setNumOutputReport** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set the number of HID output reports to be generated. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setNumOutputReport (uint8_t numOutputReports); + +**Parameters** +~~~~~~~~~~~~~~ + +numOutputReports: number of output reports. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: The number of output reports should be set before BLEHIDDevice init() + function is called.The default number of HID output report to be + generated is 1 if it is not set. + + “BLEHIDDevice.h” must be included to use the class function.\ ** + +**BLEHIDDevice::setNumInputReport** +----------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the number of HID input reports to be generated. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + + void setNumInputReport (uint8_t numInputReports); + +**Parameters** +~~~~~~~~~~~~~~ + +numInputReports: number of input reports. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: The number of input reports should be set before BLEHIDDevice init() + function is called.The default number of HID input report to be + generated is 3 if it is not set. + + “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::setReportMap** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set the HID report map characteristics with a HID report descriptor. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setReportMap (uint8_t* report_map, uint16_t len); + +**Parameters** +~~~~~~~~~~~~~~ + +report_map: pointer to HID report descriptor + +len: HID report descriptor length in bytes + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDGamepad `_ + +.. note :: The HID report map characteristic can only be configured after + BLEHIDDevice init() function is called. + + HID report descriptor is a hard coded array of bytes that describe the + device’s data packets. For example, how many packets the device + supports, how large are the packets and the purpose of each byte and bit + in the packets. + + For more information on HID report descriptor, refer to + https://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/ . + + “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::inputReport** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID input report to connected device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void inputReport (uint8_t reportID, uint8_t* data, uint16_t len, uint8_t conn_id); + +**Parameters** +~~~~~~~~~~~~~~ + +reportID: HID report ID of input report + +data: pointer to the HID input report data to be sent + +len: length of HID input report data in bytes + +conn_id: connection ID of device that the HID report will be sent to + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: HID input reports can only be sent after BLEHIDDevice init() function + has been called. + + “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::setOutputReportCallback** +----------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set a user callback function for receiving HID output report data. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setOutputReportCallback (uint8_t reportID, void (*fCallback) (BLECharacteristic* chr, uint8_t conn_id)); + +**Parameters** +~~~~~~~~~~~~~~ + +reportID: HID report ID of output report + +chr: BLECharacteristic class object containing received HID output +report data + +conn_id: connection ID of the device that send out HID report data + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Setting a user callback function for output reports can only occur after + BLEHIDDevice init() function has been called. + + “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::bootKeyboardReport** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID boot keyboard input report to connected device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void bootKeyboardReport (uint8_t* data, uint16_t len, uint8_t conn_id); + +**Parameters** +~~~~~~~~~~~~~~ + +data: pointer to the HID input report data to be sent + +len: length of HID input report data in bytes + +conn_id: connection ID of device that the HID input report will be sent +to. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: By default, the HID service Protocol Mode characteristic has boot mode + disabled. To send boot keyboard input reports, the Protocol Mode + characteristic needs to have boot mode enabled. + + “BLEHIDDevice.h” must be included to use the class function.\ ** + +**BLEHIDDevice::setHidInfo** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set HID information such as HID class specification version, country +code and flags for HID service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + + void setHidInfo (uint16_t bcd, uint8_t country, uint8_t flags); + +**Parameters** +~~~~~~~~~~~~~~ + +bcd: 16-bit unsigned integer representing version number of base USB HID +Specification implemented by HID Device + +country: 8-bit integer identifying country HID Device hardware is +localized for. Most hardware is not localized (value 0x00). + +flags: Bit flags indicating remote-wake capability and advertising when +bonded but not connected. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: For detailed information on the characteristic, refer to Bluetooth SIG + HID Service specifications. + + “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::setBattLevel** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set battery level data of the Battery service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setBattLevel (uint8_t level); + +**Parameters** +~~~~~~~~~~~~~~ + +level: battery level expressed as % of full charge + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Battery level is set to 100% by default. For detailed information refer + to Bluetooth SIG Battery service specifications. + + “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::setPNPInfo** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set PNP data of the Device Information service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setPNPInfo (uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version); + +**Parameters** +~~~~~~~~~~~~~~ + +sig: The Vendor ID Source field designates which organization assigned +the value used in the Vendor ID field value. + +vid: The Vendor ID field is intended to uniquely identify the vendor of +the device. + +pid: The Product ID field is intended to distinguish between different +products made by the vendor. + +version: The Product Version field is a numeric expression identifying +the device release number in Binary-Coded Decimal. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: By default, sig and vid are configured to indicate Realtek as the + vendor. For detailed information refer to Bluetooth SIG Device + Information service specifications. + + “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::setManufacturerString** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set manufacturer information of the Device Information service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setManufacturerString (const char* manufacturer); + +**Parameters** +~~~~~~~~~~~~~~ + +manufacturer: pointer to character string containing manufacturer name. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Manufacturer is set to “Realtek” by default. For detailed information + refer to Bluetooth SIG Device Information service specifications. + + “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::setModelString** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set model information of the Device Information service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setModelString (const char* model); + +**Parameters** +~~~~~~~~~~~~~~ + +model: pointer to character string containing device model info. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Model is set to “Ameba_BLE_HID” by default. For detailed information + refer to Bluetooth SIG Device Information service specifications. + + “BLEHIDDevice.h” must be included to use the class function.\ ** + +**BLEHIDDevice::hidService** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get reference to HID service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEService& hidService (void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to the BLEService class object for the +HID service. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLEHIDDevice.h” must be included to use the class function. + +**BLEHIDDevice::devInfoService** + +**Description** +~~~~~~~~~~~~~~~ + +Get reference to Device Information service + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEService& devInfoService (void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to the BLEService class object for the +Device Information service. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLEHIDDevice.h” must be included to use the class function.\ ** + +**BLEHIDDevice::battService** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get reference to Battery service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEService& battService (void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to the BLEService class object for the +Battery service. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLEHIDDevice.h” must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst new file mode 100644 index 0000000..b847e59 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst @@ -0,0 +1,477 @@ +Class BLEHIDGamepad +=================== + +.. contents:: + :local: + :depth: 2 + +**BLEHIDGamepad Class** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for creating and managing a BLE HID Gamepad. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEHIDGamepad + +**Members** +~~~~~~~~~~~ + ++----------------------------+-----------------------------------------+ +| **Public Constructors** | | ++============================+=========================================+ +| BLEHIDGamepad::BLEHIDG | Constructs a BLEHIDGamepad object | +| amepad | | ++----------------------------+-----------------------------------------+ +| **Public Methods** | | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad::setReportID | Set HID report ID for the HID Gamepad | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad::gamepad | Send a HID Gamepad report | +| Report | | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad::buttonPress | Send a HID Gamepad report indicating | +| | buttons pressed. | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad:: | Send a HID Gamepad report indicating | +| buttonRelease | buttons released. | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad:: | Send a HID Gamepad report indicating no | +| buttonReleaseAll | buttons pressed. | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad::setHat | Send a HID Gamepad report indicating | +| | hat switch position. | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad::setAxes | Send a HID Gamepad report indicating | +| | position of all axes | ++----------------------------+-----------------------------------------+ +|BLEHIDGamepad::setLeftStick | Send a HID Gamepad report indicating | +| | position of axes corresponding to left | +| | analog stick. | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad:: | Send a HID Gamepad report indicating | +| setRightStick | position of axes corresponding to right | +| | analog stick. | ++----------------------------+-----------------------------------------+ +| BLEHIDGamepad::setTriggers | Send a HID Gamepad report indicating | +| | position of axes corresponding to | +| | triggers. | ++----------------------------+-----------------------------------------+ + +**BLEHIDGamepad::BLEHIDGamepad** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Constructs a BLEHIDGamepad object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEHIDGamepad(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDGamepad `_ + +.. note :: By default, the BLEHIDGamepad class assumes the HID report descriptor + implements a gamepad device with 16 buttons, 6 16-bit axes and an + 8-direction hat switch. This class will not work if a different + gamepad report descriptor is implemented. + “BLEHIDGamepad.h” must be included to use the class function. + + +**BLEHIDGamepad::setReportID** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set HID report ID for the HID Gamepad. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setReportID (uint8_t reportID); + +**Parameters** +~~~~~~~~~~~~~~ + +reportID: The report ID for the gamepad device, corresponding to the + HID report descriptor. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDGamepad `_ + +.. note :: HID report ID should start at 1. Some systems may consider a report ID + of 0 as invalid. “BLEHIDGamepad.h” must be included to use the class + function. + +**BLEHIDGamepad::gamepadReport** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void gamepadReport (hid_gamepad_report_t* report); + void gamepadReport (uint16_t buttons, uint8_t hat, int16_t x, int16_t y, int16_t z, int16_t Rz, int16_t Rx, int16_t Ry); + +**Parameters** +~~~~~~~~~~~~~~ + +report: pointer to gamepad report structure containing data on all inputs +buttons: bitmap indicating state of each button. 1 = pressed, 0 = released. +hat: position of hat switch. Valid values: + +- GAMEPAD_HAT_CENTERED = 0 +- GAMEPAD_HAT_UP = 1 +- GAMEPAD_HAT_UP_RIGHT = 2 +- GAMEPAD_HAT_RIGHT = 3 +- GAMEPAD_HAT_DOWN_RIGHT = 4 +- GAMEPAD_HAT_DOWN = 5 +- GAMEPAD_HAT_DOWN_LEFT = 6 +- GAMEPAD_HAT_LEFT = 7 +- GAMEPAD_HAT_UP_LEFT = 8 + +x: position of x axis. Integer value from -32767 to 32767. + +y: position of y axis. Integer value from -32767 to 32767. + +z: position of z axis. Integer value from -32767 to 32767. + +Rz: position of Rz axis. Integer value from -32767 to 32767. + +Rx: position of Rx axis. Integer value from -32767 to 32767. + +Ry: position of Ry axis. Integer value from -32767 to 32767. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDGamepad `_ + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. + +**BLEHIDGamepad::buttonPress** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report indicating buttons pressed. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void buttonPress (uint16_t buttons); + +**Parameters** +~~~~~~~~~~~~~~ + +buttons: bitmap indicating buttons pressed. 1 = pressed. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. + +**BLEHIDGamepad::buttonRelease** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report indicating buttons released. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void buttonRelease (uint16_t buttons); + +**Parameters** +~~~~~~~~~~~~~~ + +buttons: bitmap indicating buttons released. 1 = released. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. + + +**BLEHIDGamepad::buttonReleaseAll** +----------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report indicating no buttons pressed. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void buttonReleaseAll (void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDGamepad `_ + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. + +**BLEHIDGamepad::setHat** +------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report indicating hat switch position. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setHat (uint8_t hat); + +**Parameters** +~~~~~~~~~~~~~~ + +hat: position of hat switch. Valid values: + +- GAMEPAD_HAT_CENTERED = 0 +- GAMEPAD_HAT_UP = 1 +- GAMEPAD_HAT_UP_RIGHT = 2 +- GAMEPAD_HAT_RIGHT = 3 +- GAMEPAD_HAT_DOWN_RIGHT = 4 +- GAMEPAD_HAT_DOWN = 5 +- GAMEPAD_HAT_DOWN_LEFT = 6 +- GAMEPAD_HAT_LEFT = 7 +- GAMEPAD_HAT_UP_LEFT = 8 + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. + +**BLEHIDGamepad::setAxes** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report indicating position of all axes. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setAxes (int16_t x, int16_t y, int16_t z, int16_t Rz, int16_t Rx, int16_t Ry); + +**Parameters** +~~~~~~~~~~~~~~ + +x: position of x axis. Integer value from -32767 to 32767. + +y: position of y axis. Integer value from -32767 to 32767. + +z: position of z axis. Integer value from -32767 to 32767. + +Rz: position of Rz axis. Integer value from -32767 to 32767. + +Rx: position of Rx axis. Integer value from -32767 to 32767. + +Ry: position of Ry axis. Integer value from -32767 to 32767. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDGamepad `_ + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. + +**BLEHIDGamepad::setLeftStick** +------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report indicating position of axes corresponding to left analog stick. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setLeftStick (int16_t x, int16_t y); + +**Parameters** +~~~~~~~~~~~~~~ + +x: position of x axis. Integer value from -32767 to 32767. + +y: position of y axis. Integer value from -32767 to 32767. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. + +**BLEHIDGamepad::setRightStick** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report indicating position of axes corresponding to right analog stick. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setLeftStick (int16_t z, int16_t Rz); + +**Parameters** +~~~~~~~~~~~~~~ + +z: position of z axis. Integer value from -32767 to 32767. + +Rz: position of Rz axis. Integer value from -32767 to 32767. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. + +**BLEHIDGamepad::setTriggers** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Gamepad report indicating position of axes corresponding to triggers. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setTriggers (int16_t Rx, int16_t Ry); + +**Parameters** +~~~~~~~~~~~~~~ + +Rx: position of Rx axis. Integer value from -32767 to 32767. + +Ry: position of Ry axis. Integer value from -32767 to 32767. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDGamepad.h” must be included to use the class function. diff --git a/bak/API_Documents/BLE/Class BLEHIDKeyboard.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDKeyboard.rst similarity index 53% rename from bak/API_Documents/BLE/Class BLEHIDKeyboard.rst rename to source/amebapro2/API_Documents/BLE/Class BLEHIDKeyboard.rst index 50d1e6f..070e42d 100644 --- a/bak/API_Documents/BLE/Class BLEHIDKeyboard.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDKeyboard.rst @@ -1,97 +1,118 @@ +Class BLEHIDKeyboard +==================== + +.. contents:: + :local: + :depth: 2 + **BLEHIDKeyboard Class** +------------------------ **Description** +~~~~~~~~~~~~~~~ A class used for creating and managing a BLE HID Keyboard. **Syntax** +~~~~~~~~~~ -class BLEHIDKeyboard +.. code-block:: c++ + + class BLEHIDKeyboard **Members** +~~~~~~~~~~~ **Public Constructors** -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::BLEHIDKeyboard | Constructs a BLEHIDKeyboard | -| | object | -+====================================+=================================+ -+------------------------------------+---------------------------------+ - -**Public Methods** - -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::setReportID | Set HID report ID for the HID | -| | Keyboard and HID consumer | -| | control | -+====================================+=================================+ -| BLEHIDKeyboard::consumerReport | Send a HID Consumer report | -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::keyboardReport | Send a HID Keyboard report | -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::consumerPress | Send a HID Consumer report | -| | indicating button pressed | -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::consumerRelease | Send a HID Consumer report | -| | indicating button released | -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::keypress | Send a HID Keyboard report | -| | indicating keys pressed | -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::keyRelease | Send a HID Keyboard report | -| | indicating keys released | -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::keyReleaseAll | Send a HID Keyboard report | -| | indicating no keys pressed | -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::keyCharPress | Send a HID Keyboard report | -| | indicating keys pressed to | -| | output an ASCII character | -+------------------------------------+---------------------------------+ -| BLEHIDKeyboard::keySequence | Send a HID Keyboard report | -| | indicating keys pressed to | -| | output an ASCII string | -+------------------------------------+---------------------------------+ - ++------------------------------------+------------------------------------+ +| **Public Constructors** | | ++====================================+====================================+ +| BLEHIDKeyboard::BLEHIDKeyboard | Constructs a BLEHIDKeyboard | +| | object | ++------------------------------------+------------------------------------+ +| **Public Methods** | | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::setReportID | Set HID report ID for the HID | +| | Keyboard and HID consumer | +| | control | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::consumerReport | Send a HID Consumer report | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::keyboardReport | Send a HID Keyboard report | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::consumerPress | Send a HID Consumer report | +| | indicating button pressed | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::consumerRelease | Send a HID Consumer report | +| | indicating button released | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::keypress | Send a HID Keyboard report | +| | indicating keys pressed | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::keyRelease | Send a HID Keyboard report | +| | indicating keys released | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::keyReleaseAll | Send a HID Keyboard report | +| | indicating no keys pressed | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::keyCharPress | Send a HID Keyboard report | +| | indicating keys pressed to | +| | output an ASCII character | ++------------------------------------+------------------------------------+ +| BLEHIDKeyboard::keySequence | Send a HID Keyboard report | +| | indicating keys pressed to | +| | output an ASCII string | ++------------------------------------+------------------------------------+ **BLEHIDKeyboard::BLEHIDKeyboard** +---------------------------------- **Description** +~~~~~~~~~~~~~~~ Constructs a BLEHIDKeyboard object. **Syntax** +~~~~~~~~~~ -BLEHIDKeyboard(void); +.. code-block:: c++ + + BLEHIDKeyboard(void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEHIDKeyboard -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDKeyboard/BLEHIDKeyboard.ino) - -**Notes and Warnings** +Example: `BLEHIDKeyboard `_ -“BLEHIDKeyboard.h” must be included to use the class function.\ ** +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::setReportID** **Description** +~~~~~~~~~~~~~~~ Set HID report ID for the HID Keyboard and HID consumer control. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void setReportID (uint8_t reportIDKeyboard, uint8_t reportIDConsumer); + void setReportID (uint8_t reportIDKeyboard, uint8_t reportIDConsumer); **Parameters** +~~~~~~~~~~~~~~ reportIDKeyboard: The report ID for the HID keyboard device, corresponding to the HID report descriptor. @@ -100,248 +121,298 @@ reportIDConsumer: The report ID for the HID consumer control device, corresponding to the HID report descriptor. **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::consumerReport** +---------------------------------- **Description** +~~~~~~~~~~~~~~~ Send a HID Consumer report. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void consumerReport (uint16_t usage_code); + void consumerReport (uint16_t usage_code); **Parameters** +~~~~~~~~~~~~~~ usage_code: HID consumer control usage code for the button pressed. **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::keyboardReport** +---------------------------------- **Description** +~~~~~~~~~~~~~~~ Send a HID Keyboard report. **Syntax** +~~~~~~~~~~ -void keyboardReport (void); +.. code-block:: c++ -void keyboardReport (uint8_t modifiers, uint8_t keycode[6]); + void keyboardReport (void); + + void keyboardReport (uint8_t modifiers, uint8_t keycode[6]); **Parameters** +~~~~~~~~~~~~~~ modifiers: bitmap indicating key modifiers pressed (CTRL, ALT, SHIFT). keycode: byte array indicating keys pressed. **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::consumerPress** +--------------------------------- **Description** +~~~~~~~~~~~~~~~ Send a HID Consumer report indicating button pressed. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void consumerPress (uint16_t usage_code); + void consumerPress (uint16_t usage_code); **Parameters** +~~~~~~~~~~~~~~ usage_code: HID consumer control usage code for the button pressed. **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEHIDKeyboard -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDKeyboard/BLEHIDKeyboard.ino) +Example: `BLEHIDKeyboard `_ -**Notes and Warnings** - -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::consumerRelease** +----------------------------------- **Description** +~~~~~~~~~~~~~~~ Send a HID Consumer report indicating button released. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void consumerRelease (void); + void consumerRelease (void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEHIDKeyboard -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDKeyboard/BLEHIDKeyboard.ino) +Example: `BLEHIDKeyboard `_ -**Notes and Warnings** - -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::keypress** +---------------------------- **Description** +~~~~~~~~~~~~~~~ Send a HID Keyboard report indicating keys pressed. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void keyPress (uint16_t key); + void keyPress (uint16_t key); **Parameters** +~~~~~~~~~~~~~~ key: HID keycode for key pressed, value ranges from 0x00 to 0xE7. **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEHIDKeyboard -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDKeyboard/BLEHIDKeyboard.ino) +Example: `BLEHIDKeyboard `_ -**Notes and Warnings** - -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::keyRelease** +------------------------------ **Description** +~~~~~~~~~~~~~~~ Send a HID Keyboard report indicating keys released. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void keyRelease (uint16_t key); + void keyRelease (uint16_t key); **Parameters** +~~~~~~~~~~~~~~ key: HID keycode for key pressed, value ranges from 0x00 to 0xE7. **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::keyReleaseAll** +--------------------------------- **Description** +~~~~~~~~~~~~~~~ Send a HID Keyboard report indicating no keys pressed. **Syntax** +~~~~~~~~~~ -void keyReleaseAll (void); +.. code-block:: c++ + + void keyReleaseAll (void); **Parameters** +~~~~~~~~~~~~~~ NA **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEHIDKeyboard -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDKeyboard/BLEHIDKeyboard.ino) - -**Notes and Warnings** +Example: `BLEHIDKeyboard `_ -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::keyCharPress** +-------------------------------- **Description** +~~~~~~~~~~~~~~~ Send a HID Keyboard report indicating keys pressed to output a specific ASCII character. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void keyCharPress (char ch); + void keyCharPress (char ch); **Parameters** +~~~~~~~~~~~~~~ ch: ASCII character to output. **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ NA -**Notes and Warnings** - -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. **BLEHIDKeyboard::keySequence** +------------------------------- **Description** +~~~~~~~~~~~~~~~ Send a HID Keyboard report indicating keys pressed to output an ASCII string. **Syntax** +~~~~~~~~~~ + +.. code-block:: c++ -void keySequence (const char\* str, uint16_t delayTime); + void keySequence (const char* str, uint16_t delayTime); -void keySequence (String str, uint16_t delayTime); + void keySequence (String str, uint16_t delayTime); **Parameters** +~~~~~~~~~~~~~~ str: character string to output, expressed as a pointer to a character array or a String class object @@ -350,14 +421,13 @@ delayTime: time delay between key press and release, in milliseconds. Default value of 5. **Returns** +~~~~~~~~~~~ NA **Example Code** +~~~~~~~~~~~~~~~~ -Example: BLEHIDKeyboard -(https://github.com/ambiot/ambd_arduino/blob/dev/Arduino_package/hardware/libraries/BLE/examples/BLEHIDKeyboard/BLEHIDKeyboard.ino) - -**Notes and Warnings** +Example: `BLEHIDKeyboard `_ -“BLEHIDKeyboard.h” must be included to use the class function. +.. note :: “BLEHIDKeyboard.h” must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEHIDMouse.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDMouse.rst new file mode 100644 index 0000000..892d5f0 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDMouse.rst @@ -0,0 +1,320 @@ +Class BLEHIDMouse +================= + +.. contents:: + :local: + :depth: 2 + +**BLEHIDMouse Class** +--------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for creating and managing a BLE HID Mouse. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEHIDMouse + + +**Members** +~~~~~~~~~~~ + ++----------------------------+-----------------------------------------+ +| **Public Constructors** | | ++============================+=========================================+ +| BLEHIDMouse::BLEHIDMouse | Constructs a BLEHIDMouse object | ++----------------------------+-----------------------------------------+ +| **Public Methods** | | ++----------------------------+-----------------------------------------+ +| BLEHIDMouse::setReportID | Set HID report ID for the HID Mouse | ++----------------------------+-----------------------------------------+ +| BLEHIDMouse::mouseReport | Send a HID Mouse report | ++----------------------------+-----------------------------------------+ +| BLEHIDMouse::mousePress | Send a HID Mouse report indicating | +| | buttons pressed | ++----------------------------+-----------------------------------------+ +| BLEHIDMouse::mouseRelease | Send a HID Mouse report indicating | +| | buttons release | ++----------------------------+-----------------------------------------+ +| BLEHIDMouse:: | Send a HID Mouse report indicating no | +| mouseReleaseAll | button Pressed | ++----------------------------+-----------------------------------------+ +| BLEHIDMouse::mouseMove | Send a HID Mouse report indicating | +| | mouse movement | ++----------------------------+-----------------------------------------+ +| BLEHIDMouse::mouseScroll | Send a HID Mouse report indicating | +| | mouse scroll wheel movement | ++----------------------------+-----------------------------------------+ + +**BLEHIDMouse::BLEHIDMouse** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Constructs a BLEHIDMouse object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEHIDMouse(void); + +**Parameters** +~~~~~~~~~~~~~~ +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLEHIDMouse.h” must be included to use the class function. + + +**BLEHIDMouse::setReportID** + +**Description** +~~~~~~~~~~~~~~~ + +Set HID report ID for the HID Mouse. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setReportID (uint8_t reportID); + +**Parameters** +~~~~~~~~~~~~~~ + +reportID: The report ID for the HID mouse device, corresponding to the HID report descriptor. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDMouse.h” must be included to use the class function. + + +**BLEHIDMouse::mouseReport** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Mouse report. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void mouseReport (hid_mouse_report_t* report); + void mouseReport (uint8_t buttons, int8_t x, int8_t y, int8_t scroll); + +**Parameters** +~~~~~~~~~~~~~~ + +report: pointer to mouse report structure containing data on mouse inputs + +buttons: bitmap indicating state of each button. 1 = pressed, 0 = released. + +x: mouse x-axis movement. Integer value from -127 to 127. + +y: mouse y-axis movement. Integer value from -127 to 127. + +scroll: mouse scroll wheel movement. Integer value from -127 to 127. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDMouse.h” must be included to use the class function. + +**BLEHIDMouse::mousePress** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Mouse report indicating buttons pressed. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void mousePress (uint8_t buttons); + +**Parameters** +~~~~~~~~~~~~~~ + +buttons: bitmap indicating buttons pressed. 1 = pressed. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLEHIDMouse.h” must be included to use the class function. + +**BLEHIDMouse::mouseRelease** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Mouse report indicating buttons released. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void mouseRelease (uint8_t buttons); + +**Parameters** +~~~~~~~~~~~~~~ + +buttons: bitmap indicating buttons released. 1 = released. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLEHIDMouse.h” must be included to use the class function. + + +**BLEHIDMouse::mouseReleaseAll** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Mouse report indicating no buttons pressed. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void mouseReleaseAll(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEHIDMouse.h” must be included to use the class function. + +**BLEHIDMouse::mouseMove** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Mouse report indicating mouse movement. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void mouseMove (int8_t x, int8_t y); + +**Parameters** +~~~~~~~~~~~~~~ + +x: mouse x-axis movement. Integer value from -127 to 127. + +y: mouse y-axis movement. Integer value from -127 to 127. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLEHIDMouse.h” must be included to use the class function. + +**BLEHIDMouse::mouseScroll** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Send a HID Mouse report indicating mouse scroll wheel movement. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void mouseScroll (int8_t scroll); + +**Parameters** +~~~~~~~~~~~~~~ + +scroll: mouse scroll wheel movement. Integer value from -127 to 127. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLEHIDMouse.h” must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst b/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst new file mode 100644 index 0000000..5d25492 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst @@ -0,0 +1,856 @@ +Class BLERemoteCharacteristic +============================= + +.. contents:: + :local: + :depth: 2 + +**BLERemoteCharacteristic Class** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing BLE GATT characteristics on connected remote devices. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLERemoteCharacteristic + +**Members** +~~~~~~~~~~~ + ++------------------------------------+---------------------------------+ +| **Public Constructors** | | ++====================================+=================================+ +| No public constructor is available for this class. You can get a | +| pointer to an instance of this class using | +| BLERemoteService::getCharacteristic(). | ++------------------------------------+---------------------------------+ +| **Public Methods** | | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Get a descriptor with the | +| getDescriptor | specified UUID on the | +| | remotedevice | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::getUUID | Get the characteristic UUID | +| | | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Set the size of the internal | +| setBufferLen | data buffer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Get the current size of the | +| getBufferLen | internal data buffer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::canRead | Determine if characteristic has | +| | read property enabled | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::canWrite | Determine if characteristic has | +| | write property enabled | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::canNotify | Determine if characteristic has | +| | notify property enabled | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Determine if characteristic has | +| canIndicate | indicate property enabled | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteris tic:: | Get the characteristic | +| getProperties | properties | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::readString| Read the characteristic data | +| | buffer as a String object | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::readData8 | Read the characteristic data | +| | buffer as an unsigned 8-bit | +| | integer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::readData16| Read the characteristic data | +| | buffer as an unsigned 16-bit | +| | integer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::readData32| Read the characteristic data | +| | buffer as an unsigned 32-bit | +| | integer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Write data to the | +| writeString | characteristic as a String | +| | object or character array | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::writeData8| Write data to the | +| | characteristic as an unsigned | +| | 8-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Write data to the | +| writeData16 | characteristic as an unsigned | +| | 16-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Write data to the | +| writeData32 | characteristic as an unsigned | +| | 32-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::setData | Write data to the remote device | +| | characteristic | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic::getData | Get the characteristic data | +| | from the remote device and read | +| | the data in the buffer | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Enable notification or | +| enableNotifyIndicate | indication for the | +| | characteristic | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Disable notification and | +| disableNotifyIndicate | indication for the | +| | characteristic | ++------------------------------------+---------------------------------+ +| BLERemoteCharacteristic:: | Set a user function as a | +| setNotifyCallback | notification callback | ++------------------------------------+---------------------------------+ + +**BLERemoteCharacteristic::getDescriptor** +------------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Get a descriptor with the specified UUID on the remote device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLERemoteDescriptor* getDescriptor(const char* uuid); + BLERemoteDescriptor* getDescriptor(BLEUUID uuid); + +**Parameters** +~~~~~~~~~~~~~~ + +uuid: the desired descriptor UUID, expressed as a character array or a BLEUUID object + +**Returns** +~~~~~~~~~~~ + +This function returns the found descriptor as a BLERemoteDescriptor +object pointer, otherwise nullptr is returned if a descriptor with the UUID is not found. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::getUUID** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Get the characteristic UUID. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEUUID getUUID(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the characteristic UUID as a BLEUUID class object. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::setBufferLen** +----------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the size of the internal data buffer of the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setBufferLen(uint16_t max_len); + +**Parameters** +~~~~~~~~~~~~~~ + +max_len: the size in bytes to resize the internal buffer to + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartClient `_ + +.. note :: Characteristic data buffer has a default size of 20 bytes and can be + increased up to 230 bytes. “BLERemoteCharacteristic.h” must be + included to use the class function. + +**BLERemoteCharacteristic::getBufferLen** +----------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the current size of the characteristic internal buffer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getBufferLen(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the current internal buffer size that is set. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + + +**BLERemoteCharacteristic::canRead** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Determine if characteristic has read property enabled. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool canRead(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if the read property for the characteristic is enabled. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + + +**BLERemoteCharacteristic::canWrite** +------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Determine if characteristic has write property enabled. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool canWrite(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if the write property or the write no response property for the characteristic is enabled. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::canNotify** +-------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Determine if characteristic has notify property enabled. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool canNotify(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns TRUE if the notify property for the characteristic is enabled. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::canIndicate** +---------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Determine if characteristic has indicate property enabled. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool canIndicate(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns TRUE if the indicate property for the characteristic is enabled. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::getProperties** +------------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Get the characteristic properties. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getProperties(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the characteristic properties. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::readString** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Request for characteristic data from the remote device and read the +data in the buffer, expressed as a String class object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + String readString(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the data in the characteristic data buffer +expressed as a String class object. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartClient `_ + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::readData8** +-------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Request for characteristic data from the remote device and read the +data in the buffer, expressed as an unsigned 8-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t readData8(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the data in the characteristic data buffer expressed as a uint8_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEBatteryClient `_ + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::readData16** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Request for characteristic data from the remote device and read the +data in the buffer, expressed as an unsigned 16-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t readData16(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the data in the characteristic data buffer +expressed as a uint16_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::readData32** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Request for characteristic data from the remote device and read the +data in the buffer, expressed as an unsigned 32-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint32_t readData32(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the data in the characteristic data buffer expressed as a uint32_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::writeString** +---------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device characteristic as a String object or character array. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeString(String str); + bool writeString(const char* str); + +**Parameters** +~~~~~~~~~~~~~~ + +str: the data to write to the remote characteristic, expressed as a String class object or a char array. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to the remote device characteristic is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::writeData8** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device characteristic as an unsigned 8-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeData8(uint8_t num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the characteristic buffer expressed as an unsigned 8-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to the remote device characteristic is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class function. + +**BLERemoteCharacteristic::writeData16** +---------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device characteristic as an unsigned 16-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeData16(uint16_t num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the characteristic buffer expressed as an unsigned 16-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to the remote device characteristic is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class function. + +**BLERemoteCharacteristic::writeData32** +---------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device characteristic as a 32-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeData32(uint32_t num); + bool writeData32(int num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the characteristic buffer expressed as a 32-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to the remote device characteristic is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class function. + +**BLERemoteCharacteristic::setData** + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool setData(uint8_t* data, uint16_t datalen); + +**Parameters** +~~~~~~~~~~~~~~ + +data: pointer to byte array containing desired data + +datalen: number of bytes of data to write + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to the remote device characteristic is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note ::“BLERemoteCharacteristic.h” must be included to use the class function. + +**BLERemoteCharacteristic::getData** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Get the characteristic data from the remote device and read the data in the buffer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getData (uint8_t* data, uint16_t datalen); + +**Parameters** +~~~~~~~~~~~~~~ + +data: pointer to byte array to save data read from buffer + +datalen: number of bytes of data to read + +**Returns** +~~~~~~~~~~~ + +This function returns the number of bytes read. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: If the data buffer contains less data than requested, it will only + read the available number of bytes of data. + + “BLERemoteCharacteristic.h” must be included to use the class + function. + + +**BLERemoteCharacteristic::enableNotifyIndicate** +------------------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Enable the remote device to send notifications or indications for the characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void enableNotifyIndicate(bool notify); + +**Parameters** +~~~~~~~~~~~~~~ + +notify: TRUE to enable notifications, FALSE to enable indications. Default value: “1” - True. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartClient `_ + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class function. + +**BLERemoteCharacteristic::disableNotifyIndicate** +-------------------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Disable receiving notifications and indications for the characteristic from the remote device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void disableNotifyIndicate(void); + +**Parameters** + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class + function. + +**BLERemoteCharacteristic::setNotifyCallback** +---------------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set a user function to be called when the characteristic receives a notification from the remote device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setNotifyCallback(void (*fCallback) (BLERemoteCharacteristic* chr, uint8_t* data, uint16_t length)); + +**Parameters** +~~~~~~~~~~~~~~ + +fCallback: A user callback function that returns void and takes three arguments. + +chr: pointer to BLERemoteCharacteristic object associated with notification. + +data: pointer to byte array containing notification data. + +length: number of bytes of notification data in array. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartClient `_ + +.. note :: “BLERemoteCharacteristic.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLERemoteDescriptor.rst b/source/amebapro2/API_Documents/BLE/Class BLERemoteDescriptor.rst new file mode 100644 index 0000000..3be442d --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLERemoteDescriptor.rst @@ -0,0 +1,512 @@ +Class BLERemoteDescriptor +========================= + +.. contents:: + :local: + :depth: 2 + +**BLERemoteDescriptor Class** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing BLE GATT descriptors on connected remote devices. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLERemoteDescriptor + +**Members** +~~~~~~~~~~~ + ++------------------------------------+---------------------------------+ +| **Public Constructors** | | ++====================================+=================================+ +| No public constructor is available for this class. You can get a | +| pointer to an instance of this class using | +| BLERemoteCharacteristic::getDescriptor(). | ++------------------------------------+---------------------------------+ +| **Public Methods** | | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::getUUID | Get the descriptor UUID | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::setBufferLen | Set the size of the internal | +| | data buffer | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::getBufferLen | Get the current size of the | +| | internal data buffer | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::readString | Read the descriptor data buffer | +| | as a String object | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::readData8 | Read the descriptor data buffer | +| | as an unsigned 8-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::readData16 | Read the descriptor data buffer | +| | as an unsigned 16-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::readData32 | Read the descriptor data buffer | +| | as an unsigned 32-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::writeString | Write data to the descriptor as | +| | a String object or character | +| | array | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::writeData8 | Write data to the descriptor | +| | as an unsigned 8-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::writeData16 | Write data to the descriptor | +| | as an unsigned 16-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::writeData32 | Write data to the descriptor | +| | as an unsigned 32-bit integer | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::setData | Write data to the descriptor. | ++------------------------------------+---------------------------------+ +| BLERemoteDescriptor::getData | Get data from the descriptor | ++------------------------------------+---------------------------------+ + +**BLERemoteDescriptor::getUUID** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the descriptor UUID. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEUUID getUUID(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the descriptor UUID as a BLEUUID class object. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::setBufferLen** +------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the size of the internal data buffer of the descriptor. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setBufferLen(uint16_t max_len); + +**Parameters** +~~~~~~~~~~~~~~ + +max_len: the size in bytes to resize the internal buffer to. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Descriptor data buffer has a default size of 20 bytes and can be + increased up to 230 bytes. + + “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::getBufferLen** +------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the current size of the descriptor internal buffer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getBufferLen(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the current internal buffer size that is set. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::readString** +----------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Request for descriptor data from the remote device and read the data in +the buffer, expressed as a String class object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + String readString(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the data in the descriptor buffer expressed as a String class object. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::readData8** +---------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Request for descriptor data from the remote device and read the data in +the buffer, expressed as an unsigned 8-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t readData8(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the data in the descriptor buffer expressed as a uint8_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::readData16** +----------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Request for descriptor data from the remote device and read the data in +the buffer, expressed as an unsigned 16-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t readData16(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the data in the descriptor buffer expressed as a uint16_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::readData32** +----------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Request for descriptor data from the remote device and read the data in +the buffer, expressed as an unsigned 32-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint32_t readData32(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +The function returns the data in the descriptor buffer expressed as a +uint32_t value. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::writeString** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device descriptor as a String object or character array. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeString(String str); + + bool writeString(const char* str); + +**Parameters** +~~~~~~~~~~~~~~ + +str: the data to write to the remote descriptor, expressed as a String +class object or a char array. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to remote device descriptor +is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::writeData8** +----------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device descriptor as an unsigned 8-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeData8(uint8_t num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the descriptor buffer expressed as an unsigned 8-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to remote device descriptor +is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::writeData16** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device descriptor as an unsigned 16-bit +integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeData16(uint16_t num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the descriptor buffer expressed as an unsigned +16-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to remote device descriptor +is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::writeData32** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the remote device descriptor as a 32-bit integer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool writeData32(uint32_t num); + + bool writeData32(int num); + +**Parameters** +~~~~~~~~~~~~~~ + +num: the data to write to the descriptor buffer expressed as a 32-bit integer. + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to remote device descriptor is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::setData** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Write data to the descriptor. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool setData(uint8_t* data, uint16_t datalen); + +**Parameters** +~~~~~~~~~~~~~~ + +data: pointer to byte array containing desired data to write + +datalen: number of bytes of data to write + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if writing data to remote device descriptor is successful. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteDescriptor.h” must be included to use the class function. + +**BLERemoteDescriptor::getData** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the descriptor data from the remote device and read the data in the buffer. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint16_t getData(uint8_t* data, uint16_t datalen); + +**Parameters** +~~~~~~~~~~~~~~ + +data: pointer to byte array to save data read from buffer + +datalen: number of bytes of data to read + +**Returns** +~~~~~~~~~~~ + +The function returns the number of bytes read. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: If the data buffer contains less data than requested, it will only read + the available number of bytes of data. + + “BLERemoteDescriptor.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLERemoteService.rst b/source/amebapro2/API_Documents/BLE/Class BLERemoteService.rst new file mode 100644 index 0000000..190a447 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLERemoteService.rst @@ -0,0 +1,106 @@ +Class BLERemoteService +====================== + +.. contents:: + :local: + :depth: 2 + +**BLERemoteService Class** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing BLE GATT services on connected remote devices. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLERemoteService + +**Members** +~~~~~~~~~~~ + ++------------------------------------+---------------------------------+ +| **Public Constructors** | | ++====================================+=================================+ +| No public constructor is available for this class. You can get a | +| pointer to an instance of this class using BLEClient::getService(). | ++------------------------------------+---------------------------------+ +| **Public Methods** | | ++------------------------------------+---------------------------------+ +| BLERemoteService::getUUID | Get the service UUID | ++------------------------------------+---------------------------------+ +| BLERemoteService::getCharacteristic| Get a specific characteristic | +| | on the remote device | ++------------------------------------+---------------------------------+ + +**BLERemoteService::getUUID** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the service UUID. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEUUID getUUID(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the service UUID as a BLEUUID class object. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLERemoteService.h” must be included to use the class function. + +**BLERemoteService::getCharacteristic** +--------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get a characteristic with the specified UUID on the remote device. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLERemoteCharacteristic* getCharacteristic (const char* uuid); + + BLERemoteCharacteristic* getCharacteristic (BLEUUID uuid); + +**Parameters** +~~~~~~~~~~~~~~ + +uuid: the desired characteristic UUID, expressed as a character array or a BLEUUID class object. + +**Returns** +~~~~~~~~~~~ + +The function returns the found characteristic as a +BLERemoteCharacteristic object pointer, otherwise nullptr is returned if +a characteristic with the UUID is not found. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartClient `_ + +.. note :: BLERemoteService.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLEScan.rst b/source/amebapro2/API_Documents/BLE/Class BLEScan.rst new file mode 100644 index 0000000..f226fb4 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEScan.rst @@ -0,0 +1,378 @@ +Class BLEScan +============= + +.. contents:: + :local: + :depth: 2 + +**BLEScan Class** +----------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing BLE scanning settings. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEScan + +**Members** +~~~~~~~~~~~ + ++------------------------------------+---------------------------------+ +| **Public Constructors** | | ++====================================+=================================+ +| No public constructor is available as this class is intended to be a | +| singleton class. You can get a pointer to this class using | +| BLEDevice::configScan | ++------------------------------------+---------------------------------+ +| **Public Methods** | | ++------------------------------------+---------------------------------+ +| BLEScan::updateScanParams | Update the lower Bluetooth | +| | stack with the current scan | +| | settings | ++------------------------------------+---------------------------------+ +| BLEScan::startScan | Start a BLE scan | ++------------------------------------+---------------------------------+ +| BLEScan::stopScan | Stop a BLE scan | ++------------------------------------+---------------------------------+ +| BLEScan::setScanMode | Set the BLE scanning mode | ++------------------------------------+---------------------------------+ +| BLEScan::setScanInterval | Set the BLE scanning interval | ++------------------------------------+---------------------------------+ +| BLEScan::setScanWindow | Set the BLE scanning window | ++------------------------------------+---------------------------------+ +| BLEScan::setScanDuplicateFilter | Set the BLE scan duplicate | +| | filter | ++------------------------------------+---------------------------------+ +| BLEScan::scanInProgress | Check if a scan is currently in | +| | progress | ++------------------------------------+---------------------------------+ +| BLEScan::printScanInfo | Print out scanned information | ++------------------------------------+---------------------------------+ + +**BLEScan::updateScanParams** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Update the lower Bluetooth stack with the current scan settings. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void updateScanParams(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: Stop any scans in progress first before using this + function. + + “BLEScan.h” must be included to use the class function. + +**BLEScan::startScan** +---------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Start BLE scanning. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void startScan(void); + + void startScan(uint32_t scanDuration_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +scanDuration: BLE scan will stop after scanDuration milliseconds. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: Set the scan parameters first before starting a scan. BLE scans will + occur continuously for the duration set with BLEDevice::setScanWindow() + and will repeat with a time interval set with + BLEDevice::setScanInterval(). Call this member function without an + argument to start scanning until BLEDevice::stopScan() is called. + + “BLEScan.h” must be included to use the class function. + +**BLEScan::stopScan** +--------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Stop BLE scanning. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void stopScan(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEScan.h” must be included to use the class function. + +**BLEScan::setScanMode** +------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE scanning mode. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setScanMode(uint8_t scanMode); + +**Parameters** +~~~~~~~~~~~~~~ + +scanMode: GAP_SCAN_MODE_PASSIVE for passive scanning, +GAP_SCAN_MODE_ACTIVE for active scanning. + +Default value: GAP_SCAN_MODE_ACTIVE. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: Active scanning will request for scan response packets after discovering + an advertising device. Passive scanning will only capture advertising data packets. + + “BLEScan.h” must be included to use the class function. + +**BLEScan::setScanInterval** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE scanning interval. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setScanInterval(uint16_t scanInt_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +scanInt_ms: scan interval in milliseconds. Value range of 3 to 10240. + +Default value of 40ms. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: A BLE scan will repeat with a time interval set with this member + function. + + “BLEScan.h” must be included to use the class function. + +**BLEScan::setScanWindow** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the BLE scanning window. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setScanWindow(uint16_t scanWindow_ms); + +**Parameters** +~~~~~~~~~~~~~~ + +scanWindow_ms: scan window in milliseconds. Value range of 3 to 10240. + +Default value of 30ms. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: A BLE scan will scan continuously for a window duration set with this + member function. The scan window should be less than or equal to the + scan interval. + + “BLEScan.h” must be included to use the class function. + +**BLEScan::setScanDuplicateFilter** +----------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the scan duplicate filter. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setScanDuplicateFilter(bool dupeFilter); + +**Parameters** +~~~~~~~~~~~~~~ + +dupeFilter: TRUE to enable duplicate filtering. Enabled by default. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Enabling duplicate filters will ignore scan results for devices already + discovered previously. + + “BLEScan.h” must be included to use the class function. + +**BLEScan::scanInProgress** +--------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Check if scanning is currently in progress. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + bool scanInProgress(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns TRUE if BLE scanning is in progress. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEScan.h” must be included to use the class function. + +**BLEScan::printScanInfo** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Parse and print out scanned information. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void printScanInfo(T_LE_CB_DATA* p_data); + +**Parameters** +~~~~~~~~~~~~~~ + +p_data: pointer to scan data of type T_LE_CB_DATA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEScan `_ + +.. note :: Use this member function to parse the various fields of received + advertisement data packets and print the results out to the serial monitor. + + “BLEScan.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLESecurity.rst b/source/amebapro2/API_Documents/BLE/Class BLESecurity.rst new file mode 100644 index 0000000..68b0f54 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLESecurity.rst @@ -0,0 +1,422 @@ +Class BLESecurity +================= + +.. contents:: + :local: + :depth: 2 + +**BLESecurity Class** +--------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for creating and managing BLE bonding security parameters. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLESecurity + +**Members** +~~~~~~~~~~~ + ++------------------------------------+---------------------------------+ +| **Public Constructors** | | ++====================================+=================================+ +| No public constructor is available as this class is intended to be a | +| singleton class. You can get a pointer to this class using | +| BLEDevice::configSecurity | ++------------------------------------+---------------------------------+ +| **Public Methods** | | ++------------------------------------+---------------------------------+ +| BLESecurity::setPairable | Enable pairing and bonding after| +| | BLE connection | ++------------------------------------+---------------------------------+ +| BLESecurity::setAuthFlags | Set BLE bonding security | +| | requirements | ++------------------------------------+---------------------------------+ +| BLESecurity::setIOCapability | Set input and output | +| | capabilities of the device | ++------------------------------------+---------------------------------+ +| BLESecurity::setSecReqEnable | Enable sending SMP security | +| | request when BLE connected | ++------------------------------------+---------------------------------+ +| BLESecurity::setSecReqFlags | Set security request | +| | requirements | ++------------------------------------+---------------------------------+ +| BLESecurity::setStaticPin | Configure device to use static | +| | pin input for BLE bonding | ++------------------------------------+---------------------------------+ +| BLESecurity:: | Set a user callback function for| +| setPasskeyDisplayCallback | passkey display during BLE | +| | bonding | ++------------------------------------+---------------------------------+ +| BLESecurity:: | Set a user callback function for| +| setPasskeyInputCallback | passkey input during BLE bonding| ++------------------------------------+---------------------------------+ +| BLESecurity:: | Set a user callback function for| +| setNumericComparisonCallback | numeric comparison during BLE | +| | bonding | ++------------------------------------+---------------------------------+ + +**BLESecurity::setPairable** +---------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Enable pairing and bonding after BLE connection. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setPairable(bool pairMode); + +**Parameters** +~~~~~~~~~~~~~~ + +pairMode: True to enable pairing and bonding, False to disable. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLESecurity.h” must be included to use the class function. + +**BLESecurity::setAuthFlags** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set BLE bonding security requirements. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setAuthFlags(uint16_t authFlags); + +**Parameters** +~~~~~~~~~~~~~~ + +authFlags: desired BLE bonding security requirements. + +Valid values: + +- GAP_AUTHEN_BIT_NONE + +- GAP_AUTHEN_BIT_BONDING_FLAG + +- GAP_AUTHEN_BIT_MITM_FLAG + +- GAP_AUTHEN_BIT_SC_FLAG + +- GAP_AUTHEN_BIT_SC_ONLY_FLAG + +- GAP_AUTHEN_BIT_FORCE_BONDING_FLAG + +Default value: GAP_AUTHEN_BIT_NONE + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEHIDMouse `_ + +.. note :: “BLESecurity.h” must be included to use the class function. + +**BLESecurity::setIOCapability** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set BLE device input and output capabilities. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setIOCap(uint8_t ioCap); + +**Parameters** +~~~~~~~~~~~~~~ + +ioCap: desired device input output capabilities. + +Valid values: + +- GAP_IO_CAP_NO_INPUT_NO_OUTPUT + +- GAP_IO_CAP_DISPLAY_ONLY + +- GAP_IO_CAP_DISPLAY_YES_NO + +- GAP_IO_CAP_KEYBOARD_ONLY + +- GAP_IO_CAP_KEYBOARD_DISPLAY + +Default values: + +- GAP_IO_CAP_NO_INPUT_NO_OUTPUT + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: The IO capabilities of the peripheral and central device will determine + which bonding authentication method is used. + + “BLESecurity.h” must be included to use the class function. + +**BLESecurity::setSecReqEnable** +-------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Enable sending SMP security request when BLE connected. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setSecReqEnable(bool secReq); + +**Parameters** +~~~~~~~~~~~~~~ + +secReq: TRUE to enable, FALSE to disable. + +Default value: FALSE + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLESecurity.h” must be included to use the class function. + +**BLESecurity::setSecReqFlags** +------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set security request requirements. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setSecReqFlags(uint16_t secReqFlags); + +**Parameters** +~~~~~~~~~~~~~~ + +secReqFlags: desired security requirements. + +Valid values: + +- GAP_AUTHEN_BIT_NONE + +- GAP_AUTHEN_BIT_BONDING_FLAG + +- GAP_AUTHEN_BIT_MITM_FLAG + +- GAP_AUTHEN_BIT_SC_FLAG + +- GAP_AUTHEN_BIT_SC_ONLY_FLAG + +- GAP_AUTHEN_BIT_FORCE_BONDING_FLAG + +Default value: + +- GAP_AUTHEN_BIT_NONE + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLESecurity.h” must be included to use the class function. + +**BLESecurity::setStaticPin** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Configure device to use static pin input for BLE bonding. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setStaticPin(uint32_t pin); + +**Parameters** +~~~~~~~~~~~~~~ + +pin: BLE bonding static pin. Valid values are 6-digit integers ranging from 000000 to 999999. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Using a static pin will enable BLE bonding and pairing, set the IO + capability to GAP_IO_CAP_DISPLAY_ONLY and set the bonding security + requirements flags to (GAP_AUTHEN_BIT_BONDING_FLAG \| + GAP_AUTHEN_BIT_MITM_FLAG \| GAP_AUTHEN_BIT_SC_FLAG). + + “BLESecurity.h” must be included to use the class function. + +**BLESecurity::setPasskeyDisplayCallback** +------------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Set a user callback function for passkey display during BLE bonding. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setPasskeyDisplayCallback(void (*fCallback) (uint8_t conn_id, uint32_t passkey)); + +**Parameters** +~~~~~~~~~~~~~~ + +fCallback: A user callback function that returns void and takes two arguments + +conn_id: connection ID of connecting device + +passkey: bonding passkey to display to user to confirm connection + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLESecurity.h” must be included to use the class function. + +**BLESecurity::setPasskeyInputCallback** +---------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set a user callback function for passkey input during BLE bonding. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setPasskeyInputCallback(uint32_t (*fCallback) (uint8_t conn_id)); + +**Parameters** +~~~~~~~~~~~~~~ + +fCallback: A user callback function that takes no arguments and returns +the bonding passkey entered by the user + +conn_id: connection ID of connecting device + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLESecurity.h” must be included to use the class function. + +**BLESecurity::setNumericComparisonCallback** + +**Description** +~~~~~~~~~~~~~~~ + +Set a user callback function for numeric comparison during BLE bonding. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setNumericComparisonCallback(bool (*fCallback) (uint8_t conn_id, uint32_t passkey)); + +**Parameters** +~~~~~~~~~~~~~~ + +fCallback: A user callback function that takes two arguments and returns +a Boolean to indicate user approval for the numeric comparison + +conn_id: connection ID of connecting device + +passkey: bonding passkey to display to user to confirm connection + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLESecurity.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLEService.rst b/source/amebapro2/API_Documents/BLE/Class BLEService.rst new file mode 100644 index 0000000..e7fa658 --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEService.rst @@ -0,0 +1,203 @@ +Class BLEService +================ + +.. contents:: + :local: + :depth: 2 + +**BLEService Class** +-------------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for creating and managing BLE GATT services. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEService + +**Members** +~~~~~~~~~~~ + ++------------------------------------+---------------------------------+ +| **Public Constructors** | | ++====================================+=================================+ +| BLEService::BLEService | Constructs a BLEService object | ++------------------------------------+---------------------------------+ +| **Public Methods** | | ++------------------------------------+---------------------------------+ +| BLEService::setUUID | Set service UUID | ++------------------------------------+---------------------------------+ +| BLEService::getUUID | Get service UUID | ++------------------------------------+---------------------------------+ +| BLEService::addCharacteristic | Add a characteristic to service | ++------------------------------------+---------------------------------+ +| BLEService::getCharacteristic | Get a previously added | +| | characteristic | ++------------------------------------+---------------------------------+ + +**BLEService::BLEService** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Constructs a BLEService object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEService(BLEUUID uuid); + + BLEService(const char* uuid); + +**Parameters** +~~~~~~~~~~~~~~ + +uuid: service UUID, expressed as a BLEUUID class object or a character array + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: “BLEService.h” must be included to use the class function. + +**BLEService::setUUID** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Set the service UUID. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void setUUID(BLEUUID uuid); + +**Parameters** +~~~~~~~~~~~~~~ + +uuid: service UUID, expressed as a BLEUUID class object. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEService.h” must be included to use the class function. + +**BLEService::getUUID** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the service UUID. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEUUID getUUID(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the service UUID in a BLEUUID class object. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEService.h” must be included to use the class function. + +**BLE::addCharacteristic** + +**Description** +~~~~~~~~~~~~~~~ + +Add a characteristic to the service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void addCharacteristic(BLECharacteristic& newChar); + +**Parameters** +~~~~~~~~~~~~~~ + +newChar: the BLECharacteristic to add to the service. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEUartService `_ + +.. note :: “BLEService.h” must be included to use the class function. + +**BLE::getCharacteristic** +-------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get a previously added characteristic. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLECharacteristic* getCharacteristic(uint8_t charIndex); + +**Parameters** +~~~~~~~~~~~~~~ + +charIndex: position index of characteristic. + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to the BLECharacteristic at the +requested position index else return NULL. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEService.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLEUUID.rst b/source/amebapro2/API_Documents/BLE/Class BLEUUID.rst new file mode 100644 index 0000000..850b79d --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEUUID.rst @@ -0,0 +1,230 @@ +Class BLEUUID +============= + +.. contents:: + :local: + :depth: 2 + +**BLEUUID Class** +----------------- + +**Description** +~~~~~~~~~~~~~~~ + +A class used for creating and managing UUIDs. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEUUID + +**Members** +~~~~~~~~~~~ + ++------------------------------------+---------------------------------+ +| **Public Constructors** | | ++====================================+=================================+ +| BLEUUID::BLEUUID | Create a BLEUUID object | ++------------------------------------+---------------------------------+ +| **Public Methods** | | ++------------------------------------+---------------------------------+ +| BLEUUID::str | Get the character string | +| | representation of UUID | ++------------------------------------+---------------------------------+ +| BLEUUID::data | Get the binary representation of| +| | UUID, with the UUID MSB in array| +| | index [0] | ++------------------------------------+---------------------------------+ +| BLEUUID::dataNative | Get the binary representation of| +| | UUID, with the UUID LSB in array| +| | index [0] | ++------------------------------------+---------------------------------+ +| BLEUUID::length | Get the length of UUID | ++------------------------------------+---------------------------------+ + +**BLEUUID::BLEUUID** +-------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Create a BLEUUID object from a UUID character string + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEUUID(void); + + BLEUUID(const char* str); + + BLEUUID(uint8_t* data, uint8_t length); + +**Parameters** +~~~~~~~~~~~~~~ + +str: UUID as character string used to create object + +data: pointer to byte array containing the desired UUID + +length: number of bytes in array containing the desired UUID. Valid +values of 2, 4 or 16. + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEUUID.h” must be included to use the class function. + +**BLEUUID::str** +---------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the character string representation of UUID. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + const char* str(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to the UUID represented as a character string. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEUUID.h” must be included to use the class function. + +**BLEUUID::data** +----------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the binary representation of UUID, with the UUID MSB in array index[0]. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + const uint8_t* data(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to an unsigned 8-bit integer array +containing the UUID expressed in binary form. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Returned pointer is of const uint8_t* type and will not allow changing + of the data. + + “BLEUUID.h” must be included to use the class function. + +**BLEUUID::dataNative** +----------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the binary representation of UUID, with the UUID LSB in array index +[0]. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + const uint8_t* dataNative(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a pointer to an unsigned 8-bit integer array +containing the UUID expressed in binary form. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: Returned pointer is of const uint8_t* type and will not allow changing + of the data. + + “BLEUUID.h” must be included to use the class function. + +**BLEUUID::length** +------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get the length of UUID. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + uint8_t length(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the length of the UUID, in units of bytes. + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: A 4-character UUID will be 16 bits / + 2 bytes long. + + A 8-character UUID will be 32 bits / 4 bytes long. + + A 32-character UUID will be 128 bits / 16 bytes long. + + “BLEUUID.h” must be included to use the class function. \ No newline at end of file diff --git a/source/amebapro2/API_Documents/BLE/Class BLEWifiConfigService.rst b/source/amebapro2/API_Documents/BLE/Class BLEWifiConfigService.rst new file mode 100644 index 0000000..fdce3cf --- /dev/null +++ b/source/amebapro2/API_Documents/BLE/Class BLEWifiConfigService.rst @@ -0,0 +1,218 @@ +Class BLEWifiConfigService +========================== + +.. contents:: + :local: + :depth: 2 + +**BLEWifiConfigService Class** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +A class used for managing a BLE WiFi configuration service running on +the device + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + class BLEWifiConfigService + +**Members** +~~~~~~~~~~~ + ++------------------------------------+---------------------------------+ +| **Public Constructors** | | ++====================================+=================================+ +| BLEWifiConfigService:: | Create an instance of the | +| BLEWifiConfigService | BLEWifiConfigService object | ++------------------------------------+---------------------------------+ +| **Public Methods** | | ++------------------------------------+---------------------------------+ +| BLEWifiConfigService::begin | Start background thread to | +| | process WiFi configuration | +| | commands | ++------------------------------------+---------------------------------+ +| BLEWifiConfigService::end | Stop background thread | +| | processing WiFi configuration | +| | commands | ++------------------------------------+---------------------------------+ +| BLEWifiConfigService::addService | Add the service to the BLE stack| ++------------------------------------+---------------------------------+ +| BLEWifiConfigService::advData | Get advertising data correctly | +| | formatted for WiFi configuration| +| | service | ++------------------------------------+---------------------------------+ + +**BLEWifiConfigService::BLEWifiConfigService** +---------------------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Create an instance of the BLEWifiConfigService object. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void BLEWifiConfigService (void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEWifiConfig `_ + +.. note :: Only one instance of this class / service should be + created. + + “BLEWifiConfigService.h” must be included to use the class function. + +**BLEWifiConfigService::begin** +------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Start background thread to process WiFi configuration commands. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void begin(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEWifiConfig `_ + +.. note :: “BLEWifiConfigService.h” must be included to use the class function.\ ** + +**BLEWifiConfigService::end** +----------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Stop background thread processing WiFi configuration commands. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void end(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +NA + +.. note :: “BLEWifiConfigService.h” must be included to use the class function.\ ** + +**BLEWifiConfigService::addService** +------------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Add the WiFi configuration service to the BLE stack. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + void addService(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +NA + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEWifiConfig `_ + +.. note :: “BLEWifiConfigService.h” must be included to use the class function. + +**BLEWifiConfigService::advData** +--------------------------------- + +**Description** +~~~~~~~~~~~~~~~ + +Get advertising data correctly formatted for WiFi configuration service. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + BLEAdvertData advData(void); + +**Parameters** +~~~~~~~~~~~~~~ + +NA + +**Returns** +~~~~~~~~~~~ + +This function returns a BLEAdvertData object that contains the required +advertising data fields for the WiFi configuration service to work. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `BLEWifiConfig `_ + +.. note :: The advertisement data needs to be correctly formatted for the + corresponding smartphone app to recognise the device. WiFi configuration + service advertisement data requires the local BT address, and should be + called only after peripheral mode is started and may also require + stopping and restarting the advertising process. + + “BLEWifiConfigService.h” must be included to use the class function. \ No newline at end of file diff --git a/bak/API_Documents/BLE/index.rst b/source/amebapro2/API_Documents/BLE/index.rst similarity index 99% rename from bak/API_Documents/BLE/index.rst rename to source/amebapro2/API_Documents/BLE/index.rst index 38c6f31..408ce6a 100644 --- a/bak/API_Documents/BLE/index.rst +++ b/source/amebapro2/API_Documents/BLE/index.rst @@ -24,3 +24,4 @@ BLE Class BLEService Class BLEUUID Class BLEWifiConfigService + diff --git a/source/amebapro2/API_Documents/index.rst b/source/amebapro2/API_Documents/index.rst index 8c01434..a22e78c 100644 --- a/source/amebapro2/API_Documents/index.rst +++ b/source/amebapro2/API_Documents/index.rst @@ -5,6 +5,7 @@ API Documents :maxdepth: 1 Analog/index + BLE/index FileSystem/index FlashMemory/index GPIO/index From b0aa56cd7a19e62290b69bd71c342806e6557fb8 Mon Sep 17 00:00:00 2001 From: zhangzhenwu Date: Fri, 4 Oct 2024 14:42:48 +0800 Subject: [PATCH 2/6] Update links --- bak/API_Documents/index.rst | 24 -- .../Debugging - Using the Debug Interface.rst | 0 .../API_Documents/BLE/Class BLEAddr.rst | 27 +- .../API_Documents/BLE/Class BLEAdvert.rst | 115 ++++---- .../API_Documents/BLE/Class BLEAdvertData.rst | 243 ++++++++-------- .../API_Documents/BLE/Class BLEBeacon.rst | 211 ++++---------- .../BLE/Class BLECharacteristic.rst | 259 ++++++++---------- .../API_Documents/BLE/Class BLEClient.rst | 61 ++--- .../API_Documents/BLE/Class BLEConnect.rst | 149 ++++------ .../API_Documents/BLE/Class BLEDevice.rst | 161 +++-------- .../API_Documents/BLE/Class BLEHIDDevice.rst | 189 +++++-------- .../API_Documents/BLE/Class BLEHIDGamepad.rst | 232 ++++++++++------ .../BLE/Class BLEHIDKeyboard.rst | 66 +++-- .../API_Documents/BLE/Class BLEHIDMouse.rst | 93 ++++--- .../BLE/Class BLERemoteCharacteristic.rst | 192 ++++++------- .../BLE/Class BLERemoteDescriptor.rst | 83 +++--- .../BLE/Class BLERemoteService.rst | 15 +- .../API_Documents/BLE/Class BLEScan.rst | 73 ++--- .../API_Documents/BLE/Class BLESecurity.rst | 79 ++---- .../API_Documents/BLE/Class BLEService.rst | 24 +- .../API_Documents/BLE/Class BLEUUID.rst | 45 +-- .../BLE/Class BLEWifiConfigService.rst | 34 +-- 22 files changed, 969 insertions(+), 1406 deletions(-) delete mode 100644 bak/API_Documents/index.rst rename bak/Example_Guides/{Debugging - Using the Debug Interface => Debugging}/Debugging - Using the Debug Interface.rst (100%) diff --git a/bak/API_Documents/index.rst b/bak/API_Documents/index.rst deleted file mode 100644 index 76da444..0000000 --- a/bak/API_Documents/index.rst +++ /dev/null @@ -1,24 +0,0 @@ -API Documents -============= - -.. toctree:: - :maxdepth: 2 - - Analog/index - BLE/index - FileSystem/index - FlashMemory/index - GPIO/index - Gtimer/index - Multimedia/index - NeuralNetwork/index - NTPClient/index - OTA/index - PowerMode/index - RTC/index - SPI/index - USB/index - Video/index - Watchdog/index - WiFi/index - Wire/index diff --git a/bak/Example_Guides/Debugging - Using the Debug Interface/Debugging - Using the Debug Interface.rst b/bak/Example_Guides/Debugging/Debugging - Using the Debug Interface.rst similarity index 100% rename from bak/Example_Guides/Debugging - Using the Debug Interface/Debugging - Using the Debug Interface.rst rename to bak/Example_Guides/Debugging/Debugging - Using the Debug Interface.rst diff --git a/source/amebapro2/API_Documents/BLE/Class BLEAddr.rst b/source/amebapro2/API_Documents/BLE/Class BLEAddr.rst index 0aa319b..6ce0b27 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEAddr.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEAddr.rst @@ -24,11 +24,11 @@ A class used for managing Bluetooth addresses. ~~~~~~~~~~~ +------------------------------+--------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +==============================+======================================+ | BLEAddr::BLEAddr | Constructs a BLEAddr object | +------------------------------+--------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------+--------------------------------------+ | BLEAddr::str | Get the Bluetooth address | | | represented as a formatted string | @@ -51,9 +51,7 @@ Constructs a BLEAddr object. .. code-block:: c++ BLEAddr(void); - BLEAddr(uint8_t (&addr)[6]); - BLEAddr(const char * str); **Parameters** @@ -73,10 +71,7 @@ NA NA -.. note :: When expressing the Bluetooth address as a string, it should be written as 6 bytes in hexadecimal format. The bytes can be separated using a colon “:”, - for example – 00:11:22:33:EE:FF. - - “BLEAddr.h” must be included to use the class function. +.. note :: When expressing the Bluetooth address as a string, it should be written as 6 bytes in hexadecimal format. The bytes can be separated using a colon ":", for example – 00:11:22:33:EE:FF. "BLEAddr.h" must be included to use the class function. **BLEAddr::str** ---------------- @@ -101,19 +96,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to the character string containing the -hexadecimal representation of the Bluetooth address. +This function returns a pointer to the character string containing the hexadecimal representation of the Bluetooth address. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ -.. note :: When expressing the Bluetooth address as a string, it should be written - as 6 bytes in hexadecimal format. The bytes can be separated using a - colon “:”, for example – 00:11:22:33:EE:FF. - - “BLEAddr.h” must be included to use the class function. +.. note :: When expressing the Bluetooth address as a string, it should be written as 6 bytes in hexadecimal format. The bytes can be separated using a colon ":", for example – 00:11:22:33:EE:FF. "BLEAddr.h" must be included to use the class function. **BLEAddr::data** ----------------- @@ -144,7 +134,4 @@ This function returns a pointer to a 6-byte array containing the Bluetooth addre NA -.. note :: The MSB of Bluetooth address is stored at index 5 of the - byte array. - - “BLEAddr.h” must be included to use the class function. \ No newline at end of file +.. note :: The MSB of Bluetooth address is stored at index 5 of the byte array. "BLEAddr.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEAdvert.rst b/source/amebapro2/API_Documents/BLE/Class BLEAdvert.rst index 334964c..271803b 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEAdvert.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEAdvert.rst @@ -18,7 +18,7 @@ A class used for managing BLE advertising settings. .. code-block:: c++ - class BLEAdvert + class BLEAdvert **Members** ~~~~~~~~~~~ @@ -28,7 +28,7 @@ A class used for managing BLE advertising settings. | | singleton class. You can get a pointer to this class using | | | BLEDevice::configAdvert(). | +=================================+======================================================================+ -| **Public Methods** | | +| **Public Methods** | +---------------------------------+----------------------------------------------------------------------+ | BLEAdvert::updateAdvertParams | Update the current BLE advertisement settings. | +---------------------------------+----------------------------------------------------------------------+ @@ -60,7 +60,7 @@ Update the current BLE advertisement settings. .. code-block:: c++ - void updateAdvertParams(void); + void updateAdvertParams(void); **Parameters** ~~~~~~~~~~~~~~ @@ -74,12 +74,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEWifiConfig `_ +Example: `BLEWifiConfig `_ -.. note :: Please use the other class member functions to set the BLE advertising - parameters before using this function to update the advert data. - - “BLEAdvert.h” must be included to use the class function. +.. note :: Please use the other class member functions to set the BLE advertising parameters before using this function to update the advert data. "BLEAdvert.h" must be included to use the class function. **BLEAdvert::startAdv** ----------------------- @@ -94,7 +91,7 @@ Start BLE advertising. .. code-block:: c++ - void startAdv(void); + void startAdv(void); **Parameters** ~~~~~~~~~~~~~~ @@ -109,15 +106,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEWifiConfig `_ +Example: `BLEWifiConfig `_ -.. note :: This function gives you more control and flexibility over BLE - advertising parameters. This function should not be used to start the - BLE advertising process without first registering the necessary callback - and handler functions. Call BLEDevice::beginPeripheral() to register the - necessary functions and start advertising for the first time. - - “BLEAdvert.h” must be included to use the class function. +.. note :: This function gives you more control and flexibility over BLE advertising parameters. This function should not be used to start the BLE advertising process without first registering the necessary callback and handler functions. Call BLEDevice::beginPeripheral() to register the necessary functions and start advertising for the first time."BLEAdvert.h" must be included to use the class function. **BLEAdvert::stopAdv** ---------------------- @@ -132,7 +123,7 @@ Stop BLE advertising. .. code-block:: c++ - void stopAdv(void); + void stopAdv(void); **Parameters** ~~~~~~~~~~~~~~ @@ -147,14 +138,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEWifiConfig `_ +Example: `BLEWifiConfig `_ -.. note :: This function gives you more control and flexibility over BLE - advertising parameters. This function should not be used to directly - stop the BLE advertising process. Call BLEDevice::end() to stop - advertising and free up used resources. - - “BLEAdvert.h” must be included to use the class function. +.. note :: This function gives you more control and flexibility over BLE advertising parameters. This function should not be used to directly stop the BLE advertising process. Call BLEDevice::end() to stop advertising and free up used resources. "BLEAdvert.h" must be included to use the class function. **BLEAdvert::setAdvType** ------------------------- @@ -169,18 +155,22 @@ Set the BLE advertising type. .. code-block:: c++ - void setAdvType(uint8_t advType); + void setAdvType(uint8_t advType); **Parameters** ~~~~~~~~~~~~~~ -advType: the desired advertisement type. Valid values: +advType: the desired advertisement type. -- 0 = GAP_ADTYPE_ADV_IND : connectable undirected advertisement -- 1 = GAP_ADTYPE_ADV_HDC_DIRECT_IND : connectable high duty cycle directed advertisement -- 2 = GAP_ADTYPE_ADV_SCAN_IND : scannable undirected advertisement -- 3 = GAP_ADTYPE_ADV_NONCONN_IND : Non-connectable undirected advertisement -- 4 = GAP_ADTYPE_ADV_LDC_DIRECT_IND : connectable low duty cycle directed advertisement +- GAP_ADTYPE_ADV_IND (0, connectable undirected advertisement) + +- GAP_ADTYPE_ADV_HDC_DIRECT_IND (1, connectable high duty cycle directed advertisement) + +- GAP_ADTYPE_ADV_SCAN_IND (2, scannable undirected advertisement) + +- GAP_ADTYPE_ADV_NONCONN_IND (3, Non-connectable undirected advertisement) + +- GAP_ADTYPE_ADV_LDC_DIRECT_IND (4, connectable low duty cycle directed advertisement) **Returns** ~~~~~~~~~~~ @@ -190,13 +180,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBeacon `_ +Example: `BLEBeacon `_ -.. note :: If connection requests should be allowed, call this function with - GAP_ADTYPE_ADV_IND. If all connection requests should be rejected, call - this function with GAP_ADTYPE_ADV_NONCONN_IND. - - “BLEAdvert.h” must be included to use the class function. +.. note :: If connection requests should be allowed, call this function with GAP_ADTYPE_ADV_IND. If all connection requests should be rejected, call this function with GAP_ADTYPE_ADV_NONCONN_IND. "BLEAdvert.h" must be included to use the class function. **BLEAdvert::setMinInterval** ----------------------------- @@ -211,14 +197,14 @@ Set the minimum BLE advertising interval. .. code-block:: c++ - void setMinInterval(uint16_t minInt_ms); + void setMinInterval(uint16_t minInt_ms); **Parameters** ~~~~~~~~~~~~~~ -minInt_ms: the desired advertisement minimum interval, expressed in -milliseconds. The valid values for the interval are from 20ms to -10240ms. +minInt_ms: the desired advertisement minimum interval, expressed in milliseconds. + +- 20 to 10240. **Returns** ~~~~~~~~~~~ @@ -230,11 +216,7 @@ NA NA -.. note :: BLE advertisements will repeat with an interval between the set minimum - and maximum intervals. Set a shorter interval for the BLE device to be - discovered rapidly and set a longer interval to conserve power. - - “BLEAdvert.h” must be included to use the class function. +.. note :: BLE advertisements will repeat with an interval between the set minimum and maximum intervals. Set a shorter interval for the BLE device to be discovered rapidly and set a longer interval to conserve power. "BLEAdvert.h" must be included to use the class function. **BLEAdvert::setMaxInterval** ----------------------------- @@ -249,14 +231,14 @@ Set the maximum BLE advertising interval. .. code-block:: c++ - void setMaxInterval(uint16_t minInt_ms); + void setMaxInterval(uint16_t minInt_ms); **Parameters** ~~~~~~~~~~~~~~ -minInt_ms: the desired advertisement maximum interval, expressed in -milliseconds. The valid values for the interval are from 20ms to -10240ms. +minInt_ms: the desired advertisement maximum interval, expressed in milliseconds. + +- 20ms to 10240. **Returns** ~~~~~~~~~~~ @@ -268,11 +250,7 @@ NA NA -.. note :: BLE advertisements will repeat with an interval between the set minimum - and maximum intervals. Set a shorter interval for the BLE device to be - discovered rapidly and set a longer interval to conserve power. - - “BLEAdvert.h” must be included to use the class function. +.. note :: BLE advertisements will repeat with an interval between the set minimum and maximum intervals. Set a shorter interval for the BLE device to be discovered rapidly and set a longer interval to conserve power. "BLEAdvert.h" must be included to use the class function. **BLEAdvert::setAdvData** ------------------------- @@ -287,16 +265,17 @@ Set BLE advertising data. .. code-block:: c++ - void setAdvData(BLEAdvertData adData); - void setAdvData(uint8_t* pData, uint8_t size); + void setAdvData(BLEAdvertData adData); + void setAdvData(uint8_t* pData, uint8_t size); **Parameters** ~~~~~~~~~~~~~~ -adData: advertising data formatted in a BLEAdvertData class object +adData: advertising data formatted in a BLEAdvertData class object. + pData: pointer to a byte array containing the required advertising data. -size: number of bytes the advertising data contains, maximum of 31 -bytes. + +size: number of bytes the advertising data contains, maximum of 31 bytes. **Returns** ~~~~~~~~~~~ @@ -306,9 +285,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEWifiConfig `_ +Example: `BLEWifiConfig `_ -.. note :: “BLEAdvert.h” must be included to use the class function. +.. note :: "BLEAdvert.h" must be included to use the class function. **BLEAdvert::setScanRspData** ----------------------------- @@ -323,14 +302,16 @@ Set BLE scan response data. .. code-block:: c++ - void setScanRspData(BLEAdvertData adData); - void setScanRspData(uint8_t* pData, uint8_t size); + void setScanRspData(BLEAdvertData adData); + void setScanRspData(uint8_t* pData, uint8_t size); **Parameters** ~~~~~~~~~~~~~~ -adData: scan response data formatted in a BLEAdvertData class object +adData: scan response data formatted in a BLEAdvertData class object. + pData: pointer to a byte array containing the required scan response data. + size: number of bytes the scan response data contains, maximum of 31 bytes. **Returns** @@ -343,4 +324,4 @@ NA NA -.. note :: “BLEAdvert.h” must be included to use the class function. \ No newline at end of file +.. note :: "BLEAdvert.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEAdvertData.rst b/source/amebapro2/API_Documents/BLE/Class BLEAdvertData.rst index 01f2a22..a20bff1 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEAdvertData.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEAdvertData.rst @@ -18,17 +18,17 @@ A class used for managing BLE advertising data. .. code-block:: c++ - class BLEAdvertData + class BLEAdvertData **Members** ~~~~~~~~~~~ +----------------------------------+------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +==================================+====================================+ | BLEAdvertData::BLEAdvertData | Constructs a BLEAdvertData object | +----------------------------------+------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +----------------------------------+------------------------------------+ | BLEAdvertData::clear | Clear all advertising data. | +----------------------------------+------------------------------------+ @@ -121,7 +121,7 @@ Constructs a BLEAdvertData object. .. code-block:: c++ - BLEAdvertData(void); + BLEAdvertData(void); **Parameters** ~~~~~~~~~~~~~~ @@ -138,12 +138,7 @@ NA NA -.. note :: This class is used for managing BLE advertising data for two primary - uses. First is to assemble advertising data for broadcasting as - advertising packets. Second is to process and split up the advertising - data received from a scan into separate types. - - “BLEAdvertData.h” must be included to use the class function. +.. note :: This class is used for managing BLE advertising data for two primary uses. First is to assemble advertising data for broadcasting as advertising packets. Second is to process and split up the advertising data received from a scan into separate types. "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::clear** ------------------------ @@ -158,7 +153,7 @@ Clear all advertising data. .. code-block:: c++ - void clear(void); + void clear(void); **Parameters** ~~~~~~~~~~~~~~ @@ -175,7 +170,7 @@ NA NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::addData** -------------------------- @@ -190,13 +185,14 @@ Add binary data to advertising data packet. .. code-block:: c++ - void addData(const uint8_t* data, uint8_t size); + void addData(const uint8_t* data, uint8_t size); **Parameters** ~~~~~~~~~~~~~~ -data: pointer to array containing desired advertising data -size: number of bytes in the array +data: pointer to array containing desired advertising data. + +size: number of bytes in the array. **Returns** ~~~~~~~~~~~ @@ -208,12 +204,7 @@ NA NA -.. note :: This function is provided for flexibility in adding BLE advertising - data. Other functions should be used for adding advertising data, if - possible, as this function does not perform any checks on the validity - of the data. - - “BLEAdvertData.h” must be included to use the class function. +.. note :: This function is provided for flexibility in adding BLE advertising data. Other functions should be used for adding advertising data, if possible, as this function does not perform any checks on the validity of the data. "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::addFlags** --------------------------- @@ -228,25 +219,22 @@ Add flags to advertising data packet. .. code-block:: c++ - uint8_t addFlags(uint8_t flags); + uint8_t addFlags(uint8_t flags); **Parameters** ~~~~~~~~~~~~~~ -flags: desired flags to add to advertising data. Default value: (GAP_ADTYPE_FLAGS_LIMITED \| GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED) +flags: desired flags to add to advertising data. Default value is (GAP_ADTYPE_FLAGS_LIMITED | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED). -Valid values: -- GAP_ADTYPE_FLAGS_LIMITED: LE Limited Discoverable Mode. +- GAP_ADTYPE_FLAGS_LIMITED (LE Limited Discoverable Mode -- GAP_ADTYPE_FLAGS_GENERAL: LE General Discoverable Mode. +- GAP_ADTYPE_FLAGS_GENERAL (LE General Discoverable Mode) -- GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED: BR/EDR Not Supported. +- GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED (BR/EDR Not Supported) -- GAP_ADTYPE_FLAGS_SIMULTANEOUS_LE_BREDR_CONTROLLER: Simultaneous LE - and BR/EDR Controller Supported. +- GAP_ADTYPE_FLAGS_SIMULTANEOUS_LE_BREDR_CONTROLLER (Simultaneous LE and BR/EDR Controller Supported) -- GAP_ADTYPE_FLAGS_SIMULTANEOUS_LE_BREDR_HOST: Simultaneous LE and - BR/EDR Host Supported. +- GAP_ADTYPE_FLAGS_SIMULTANEOUS_LE_BREDR_HOST (Simultaneous LE and BR/EDR Host Supported) **Returns** ~~~~~~~~~~~ @@ -256,9 +244,9 @@ This function returns the current total size of advertising data. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ +Example: `BLEBatteryService `_ -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::addPartialServices** ------------------------------------- @@ -272,8 +260,8 @@ Add partial list of service UUIDs to advertising data packet. ~~~~~~~~~~ .. code-block:: c++ - - uint8_t addPartialServices(BLEUUID uuid); + + uint8_t addPartialServices(BLEUUID uuid); **Parameters** ~~~~~~~~~~~~~~ @@ -290,7 +278,7 @@ This function returns the current total size of the advertising data. NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData:: addCompleteServices** --------------------------------------- @@ -305,14 +293,21 @@ Add complete list of service UUIDs to advertising data packet. .. code-block:: c++ - uint8_t addCompleteServices(BLEUUID uuid); - uint8_t addCompleteServices(uint8_t uuidBitLength); + uint8_t addCompleteServices(BLEUUID uuid); + uint8_t addCompleteServices(uint8_t uuidBitLength); **Parameters** ~~~~~~~~~~~~~~ uuid: the desired UUID contained in BLEUUID class object. -uuidBitLength: UUID bit length for which a blank entry is to be added. Valid values: 16, 32, 128. + +uuidBitLength: UUID bit length for which a blank entry is to be added. + +- 16. + +- 32. + +- 128. **Returns** @@ -320,13 +315,9 @@ This function returns the current total size of the advertising data. **Example Code** -Example: `BLEBatteryService `_ +Example: `BLEBatteryService `_ -.. note :: uuidBitLength is used when a blank entry in the advertisement data is - required to be present. It is to indicate that no services with UUIDs of - a certain length are available. - - “BLEAdvertData.h” must be included to use the class function. +.. note :: uuidBitLength is used when a blank entry in the advertisement data is required to be present. It is to indicate that no services with UUIDs of a certain length are available. "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::addAppearance** -------------------------------- @@ -341,7 +332,7 @@ Add device appearance to advertising data. .. code-block:: c++ - uint8_t addAppearance(uint16_t appearance); + uint8_t addAppearance(uint16_t appearance); **Parameters** ~~~~~~~~~~~~~~ @@ -356,12 +347,9 @@ This function returns the current total size of the advertising data. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDGamepad `_ +Example: `BLEHIDGamepad `_ -.. note :: Refer to “gap_le_types.h” or Bluetooth specifications for a full list of - device appearance values. - - “BLEAdvertData.h” must be included to use the class function. +.. note :: Refer to "gap_le_types.h" or Bluetooth specifications for a full list of device appearance values. "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::addShortName** ------------------------------- @@ -376,7 +364,7 @@ Add shortened device name to advertising data packet. .. code-block:: c++ - uint8_t addShortName(const char* str); + uint8_t addShortName(const char* str); **Parameters** ~~~~~~~~~~~~~~ @@ -393,7 +381,7 @@ This function returns the current total size of the advertising data. NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::addCompleteName** ---------------------------------- @@ -408,7 +396,7 @@ Add complete device name to advertising data packet. .. code-block:: c++ - uint8_t addCompleteName(const char* str); + uint8_t addCompleteName(const char* str); **Parameters** ~~~~~~~~~~~~~~ @@ -423,9 +411,9 @@ This function returns the current total size of the advertising data. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ +Example: `BLEBatteryService `_ -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::parseScanInfo** -------------------------------- @@ -440,7 +428,7 @@ Parse advertising data packets received from a scan. .. code-block:: c++ - void parseScanInfo(T_LE_CB_DATA *p_data); + void parseScanInfo(T_LE_CB_DATA *p_data); **Parameters** ~~~~~~~~~~~~~~ @@ -455,12 +443,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ +Example: `BLEBatteryClient `_ -.. note :: The information of the received data from advertising data can be - accessed using the member functions starting with “has” and “get”. - - “BLEAdvertData.h” must be included to use the class function. +.. note :: The information of the received data from advertising data can be accessed using the member functions starting with "has" and "get". "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::hasFlags** --------------------------- @@ -475,7 +460,7 @@ Check if received data includes advertising flags. .. code-block:: c++ - bool hasFlags(void); + bool hasFlags(void); **Parameters** ~~~~~~~~~~~~~~ @@ -485,15 +470,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns true if flags are present in received advertising -data. +This function returns true if flags are present in received advertising data. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::hasUUID** -------------------------- @@ -508,7 +492,7 @@ Check if received data includes service UUIDs. .. code-block:: c++ - bool hasUUID(void); + bool hasUUID(void); **Parameters** ~~~~~~~~~~~~~~ @@ -518,15 +502,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns true if service UUIDs are present in received -advertising data. +This function returns true if service UUIDs are present in received advertising data. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::hasName** -------------------------- @@ -541,7 +524,7 @@ Check if received data includes device name. .. code-block:: c++ - bool hasName(void); + bool hasName(void); **Parameters** ~~~~~~~~~~~~~~ @@ -556,9 +539,9 @@ This function returns true if device name is present in received advertising dat **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ +Example: `BLEBatteryClient `_ -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::hasManufacturer** ---------------------------------- @@ -573,7 +556,7 @@ Check if received data includes manufacturer data. .. code-block:: c++ - bool hasManufacturer(void); + bool hasManufacturer(void); **Parameters** ~~~~~~~~~~~~~~ @@ -590,7 +573,7 @@ This function returns true if manufacturer data is present in the received adver NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getAdvType** ----------------------------- @@ -605,7 +588,7 @@ Get advertising type of received data. .. code-block:: c++ - T_GAP_ADV_EVT_TYPE getAdvType(void); + T_GAP_ADV_EVT_TYPE getAdvType(void); **Parameters** ~~~~~~~~~~~~~~ @@ -622,15 +605,21 @@ This function returns the advertising type of received advertising data. NA -.. note :: Possible types: +.. note :: + + Possible types: - - GAP_ADV_EVT_TYPE_UNDIRECTED - - GAP_ADV_EVT_TYPE_DIRECTED - - GAP_ADV_EVT_TYPE_SCANNABLE - - GAP_ADV_EVT_TYPE_NON_CONNECTABLE - - GAP_ADV_EVT_TYPE_SCAN_RSP + - GAP_ADV_EVT_TYPE_UNDIRECTED - "BLEAdvertData.h" must be included to use the class function. + - GAP_ADV_EVT_TYPE_DIRECTED + + - GAP_ADV_EVT_TYPE_SCANNABLE + + - GAP_ADV_EVT_TYPE_NON_CONNECTABLE + + - GAP_ADV_EVT_TYPE_SCAN_RSP + + "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getAddrType** ------------------------------ @@ -645,7 +634,7 @@ Get Bluetooth address type of received data. .. code-block:: C++ - T_GAP_REMOTE_ADDR_TYPE getAddrType(void); + T_GAP_REMOTE_ADDR_TYPE getAddrType(void); **Parameters** ~~~~~~~~~~~~~~ @@ -662,12 +651,15 @@ This function returns the Bluetooth address type of received data. NA -.. note :: Possible types: - - - GAP_REMOTE_ADDR_LE_PUBLIC - - GAP_REMOTE_ADDR_LE_RANDOM +.. note :: + + Possible types: + + - GAP_REMOTE_ADDR_LE_PUBLIC + + - GAP_REMOTE_ADDR_LE_RANDOM - “BLEAdvertData.h” must be included to use the class function. + "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getRSSI** -------------------------- @@ -682,7 +674,7 @@ Get received signal strength indicator (RSSI) of received data. .. code-block:: c++ - Int8_t getRSSI(void); + Int8_t getRSSI(void); **Parameters** ~~~~~~~~~~~~~~ @@ -699,7 +691,7 @@ This function returns the received signal strength. NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getFlags** --------------------------- @@ -714,7 +706,7 @@ Get advertising flags of received data. .. code-block:: c++ - uint8_t getFlags(void); + uint8_t getFlags(void); **Parameters** ~~~~~~~~~~~~~~ @@ -724,15 +716,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a single byte containing the advertising flags -found in received advertising data. +This function returns a single byte containing the advertising flags found in received advertising data. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getServiceCount** ---------------------------------- @@ -747,7 +738,7 @@ Get the total number of advertised services in the received data. .. code-block:: c++ - uint8_t getServiceCount(void); + uint8_t getServiceCount(void); **Parameters** ~~~~~~~~~~~~~~ @@ -757,15 +748,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns the number of advertised service UUIDs in received -data. +This function returns the number of advertised service UUIDs in received data. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ +Example: `BLEBatteryClient `_ -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getServiceList** --------------------------------- @@ -780,7 +770,7 @@ Get a list of advertised service UUIDs in received data. .. code-block:: c++ - BLEUUID* getServiceList(void); + BLEUUID* getServiceList(void); **Parameters** ~~~~~~~~~~~~~~ @@ -790,15 +780,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to a BLEUUID array containing all -advertised service UUIDs. +This function returns a pointer to a BLEUUID array containing all advertised service UUIDs. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ +Example: `BLEBatteryClient `_ -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getName** -------------------------- @@ -813,7 +802,7 @@ Get advertised device name in received data. .. code-block:: c++ - String getName(void); + String getName(void); **Parameters** ~~~~~~~~~~~~~~ @@ -823,15 +812,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns advertised device name contained in a String class -object +This function returns advertised device name contained in a String class object. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ +Example: `BLEBatteryClient `_ -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getTxPower** ----------------------------- @@ -846,7 +834,7 @@ Get the advertised transmission power of the received data. .. code-block:: c++ - int8_t getTxPower(void); + int8_t getTxPower(void); **Parameters** ~~~~~~~~~~~~~~ @@ -856,15 +844,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns advertised transmission power of the received -data. +This function returns advertised transmission power of the received data. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getAppearance** -------------------------------- @@ -879,7 +866,7 @@ Get advertised device appearance in received data. .. code-block:: c++ - uint16_t getAppearance(void); + uint16_t getAppearance(void); **Parameters** ~~~~~~~~~~~~~~ @@ -896,10 +883,7 @@ This function returns advertised device appearance of the received data. NA -.. note :: Refer to “gap_le_types.h” or Bluetooth specifications for full list of device - appearance values. - - “BLEAdvertData.h” must be included to use the class function. +.. note :: Refer to "gap_le_types.h" or Bluetooth specifications for full list of device appearance values. "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getManufacturer** ---------------------------------- @@ -914,7 +898,7 @@ Get advertised manufacturer in received data. .. code-block:: c++ - uint16_t getManufacturer(void); + uint16_t getManufacturer(void); **Parameters** ~~~~~~~~~~~~~~ @@ -931,10 +915,7 @@ This function returns advertised manufacturer of the received data. NA -.. note :: Refer to Bluetooth specifications for full list of - manufacturer codes. - - “BLEAdvertData.h” must be included to use the class function. +.. note :: Refer to Bluetooth specifications for full list of manufacturer codes. "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getManufacturerDataLength** -------------------------------------------- @@ -949,7 +930,7 @@ Get length of manufacturer data in received data. .. code-block:: c++ - uint8_t getManufacturerDataLength(void); + uint8_t getManufacturerDataLength(void); **Parameters** ~~~~~~~~~~~~~~ @@ -959,15 +940,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns the number of bytes of manufacturer data present -in received advertising data. +This function returns the number of bytes of manufacturer data present in received advertising data. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEAdvertData.h” must be included to use the class function. +.. note :: "BLEAdvertData.h" must be included to use the class function. **BLEAdvertData::getManufacturerData** -------------------------------------- @@ -982,7 +962,7 @@ Get manufacturer data in received data. .. code-block:: c++ - uint8_t* getManufacturerData(void); + uint8_t* getManufacturerData(void); **Parameters** ~~~~~~~~~~~~~~ @@ -992,12 +972,11 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to an array containing manufacturer -data. +This function returns a pointer to an array containing manufacturer data. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEAdvertData.h” must be included to use the class function. \ No newline at end of file +.. note :: "BLEAdvertData.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEBeacon.rst b/source/amebapro2/API_Documents/BLE/Class BLEBeacon.rst index 08c657e..7f2a52e 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEBeacon.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEBeacon.rst @@ -24,11 +24,11 @@ A class used for managing iBeacon BLE advertising data. ~~~~~~~~~~~ +------------------------------+-------------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +==============================+===========================================+ | iBeacon::iBeacon | Constructs an iBeacon object | +------------------------------+-------------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------+-------------------------------------------+ | iBeacon::getManufacturerId | Get current manufacturer ID value | +------------------------------+-------------------------------------------+ @@ -78,11 +78,11 @@ A class used for managing altBeacon BLE advertising data. ~~~~~~~~~~~ +------------------------------+---------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +==============================+=======================================+ | altBeacon::altBeacon | Constructs an altBeacon object | +------------------------------+---------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------+---------------------------------------+ | altBeacon::getManufacturerId | Get current manufacturer ID value | +------------------------------+---------------------------------------+ @@ -149,7 +149,7 @@ NA NA -.. note :: “BLEBeacon.h” must be included to use the class function. +.. note :: "BLEBeacon.h" must be included to use the class function. **altBeacon::altBeacon** ------------------------ @@ -181,13 +181,10 @@ NA NA -.. note :: “BLEBeacon.h” must be included to use the class function. +.. note :: "BLEBeacon.h" must be included to use the class function. -**iBeacon::getManufacturerId** ------------------------------- - -**altBeacon::getManufacturerId** --------------------------------- +**iBeacon::getManufacturerId** / **altBeacon::getManufacturerId** +----------------------------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -209,24 +206,17 @@ NA **Returns** ~~~~~~~~~~~ -The function returns a 16-bit unsigned integer containing the current -Company ID. +The function returns a 16-bit unsigned integer containing the current Company ID. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: Refer to https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ - for the full list of assigned Bluetooth company identifiers. - - “BLEBeacon.h” must be included to use the class function. +.. note :: Refer to https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ for the full list of assigned Bluetooth company identifiers. "BLEBeacon.h" must be included to use the class function. -**iBeacon::getUUID** --------------------- - -**altBeacon::getUUID** ----------------------- +**iBeacon::getUUID** / **altBeacon::getUUID** +--------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -242,6 +232,7 @@ Get the current UUID value. **Parameters** ~~~~~~~~~~~~~~ + UUID: Provide a pointer to a 16 elements uint8_t array containing current UUID. **Returns** @@ -254,17 +245,10 @@ NA NA -.. note :: UUID is a 128-bit number used to uniquely identify a beacon. It is - commonly expressed as a 32-character hexadecimal string. UUIDs can be - generated at https://www.uuidgenerator.net/. - - “BLEBeacon.h” must be included to use the class function. +.. note :: UUID is a 128-bit number used to uniquely identify a beacon. It is commonly expressed as a 32-character hexadecimal string. UUIDs can be generated at https://www.uuidgenerator.net/. "BLEBeacon.h" must be included to use the class function. -**iBeacon::getMajor** ---------------------- - -**altBeacon::getMajor** ------------------------ +**iBeacon::getMajor** / **altBeacon::getMajor** +----------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -293,17 +277,10 @@ This function returns a 16-bit unsigned integer containing the current major val NA -.. note :: Major and Minor are values used for customizing beacons. These can be - set to any value. Refer to https://developer.apple.com/ibeacon/ or - https://altbeacon.org/ for more information. - - “BLEBeacon.h” must be included to use the class function. +.. note :: Major and Minor are values used for customizing beacons. These can be set to any value. Refer to https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more information. "BLEBeacon.h" must be included to use the class function. -**iBeacon::getMinor** ---------------------- - -**altBeacon::getMinor** ------------------------ +**iBeacon::getMinor** - **altBeacon::getMinor** +----------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -332,17 +309,10 @@ This function returns a 16-bit unsigned integer containing the current minor val NA -.. note :: Major and Minor are values used for customizing beacons. These can be - set to any value. Refer to https://developer.apple.com/ibeacon/ or - https://altbeacon.org/ for more information. - - “BLEBeacon.h” must be included to use the class function. +.. note :: Major and Minor are values used for customizing beacons. These can be set to any value. Refer to https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more information. "BLEBeacon.h" must be included to use the class function. -**iBeacon::getRSSI** --------------------- - -**altBeacon::getRSSI** ----------------------- +**iBeacon::getRSSI** / **altBeacon::getRSSI** +--------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -370,18 +340,10 @@ This function returns an 8-bit signed integer containing the currently set RSSI NA -.. note :: The beacon RSSI value is the received signal strength at 1 meter. This - can be used to estimate the distance to the beacon. Refer to - https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more - information. - - “BLEBeacon.h” must be included to use the class function. +.. note :: The beacon RSSI value is the received signal strength at 1 meter. This can be used to estimate the distance to the beacon. Refer to https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more information. "BLEBeacon.h" must be included to use the class function. -**iBeacon::setManufacturerId** ------------------------------- - -**altBeacon::setManufacturerId** --------------------------------- +**iBeacon::setManufacturerId** / **altBeacon::setManufacturerId** +----------------------------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -408,18 +370,12 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBeacon `_ +Example: `BLEBeacon `_ -.. note :: Refer to https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ - for the full list of assigned Bluetooth company identifiers. +.. note :: Refer to https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ for the full list of assigned Bluetooth company identifiers. "BLEBeacon.h" must be included to use the class function. - “BLEBeacon.h” must be included to use the class function. - -**iBeacon::setUUID** --------------------- - -**altBeacon::setUUID** ----------------------- +**iBeacon::setUUID** / **altBeacon::setUUID** +--------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -428,19 +384,18 @@ Set UUID value. **Syntax** ~~~~~~~~~~ - .. code-block:: c++ - void setUUID(uint8_t* UUID); +.. code-block:: c++ + void setUUID(uint8_t* UUID); void setUUID(const char* UUID); **Parameters** ~~~~~~~~~~~~~~ -uint8_t* UUID: Provide pointer to a 16 element uint8_t array containing -the desired UUID +uint8_t* UUID: Provide pointer to a 16 element uint8_t array containing the desired UUID. -const char* UUID: desired UUID expressed as a character string +const char* UUID: desired UUID expressed as a character string. **Returns** ~~~~~~~~~~~ @@ -450,19 +405,12 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBeacon `_ - -.. note :: UUID is a 128-bit number used to uniquely identify a beacon. It is - commonly expressed as a 32-character hexadecimal string. UUIDs can be - generated at https://www.uuidgenerator.net/. +Example: `BLEBeacon `_ - “BLEBeacon.h” must be included to use the class function. +.. note :: UUID is a 128-bit number used to uniquely identify a beacon. It is commonly expressed as a 32-character hexadecimal string. UUIDs can be generated at https://www.uuidgenerator.net/. "BLEBeacon.h" must be included to use the class function. -**iBeacon::setMajor** ---------------------- - -**altBeacon::setMajor** ------------------------ +**iBeacon::setMajor** / **altBeacon::setMajor** +----------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -489,19 +437,12 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBeacon `_ - -.. note :: Major and Minor are values used for customizing beacons. These can be - set to any value. Refer to https://developer.apple.com/ibeacon/ or - https://altbeacon.org/ for more information. +Example: `BLEBeacon `_ - “BLEBeacon.h” must be included to use the class function. +.. note :: Major and Minor are values used for customizing beacons. These can be set to any value. Refer to https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more information. "BLEBeacon.h" must be included to use the class function. -**iBeacon::setMinor** ---------------------- - -**altBeacon::setMinor** ------------------------ +**iBeacon::setMinor** / **altBeacon::setMinor** +----------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -528,19 +469,12 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBeacon `_ - -.. note :: Major and Minor are values used for customizing beacons. These can be - set to any value. Refer to https://developer.apple.com/ibeacon/ or - https://altbeacon.org/ for more information. +Example: `BLEBeacon `_ - “BLEBeacon.h” must be included to use the class function. +.. note :: Major and Minor are values used for customizing beacons. These can be set to any value. Refer to https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more information. "BLEBeacon.h" must be included to use the class function. -**iBeacon::setRSSI** --------------------- - -**altBeacon::setRSSI** ----------------------- +**iBeacon::setRSSI** / **altBeacon::setRSSI** +--------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -567,19 +501,12 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBeacon `_ - -.. note :: The beacon RSSI value is the received signal strength at 1 meter. This - can be used to estimate the distance to the beacon. Refer to - https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more information. +Example: `BLEBeacon `_ - “BLEBeacon.h” must be included to use the class function. +.. note :: The beacon RSSI value is the received signal strength at 1 meter. This can be used to estimate the distance to the beacon. Refer to https://developer.apple.com/ibeacon/ or https://altbeacon.org/ for more information. "BLEBeacon.h" must be included to use the class function. -**iBeacon::getAdvData** ------------------------ - -**altBeacon::getAdvData** -------------------------- +**iBeacon::getAdvData** / **altBeacon::getAdvData** +--------------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -601,24 +528,17 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a uint8_t pointer to the structure containing -beacon advertising data. +This function returns a uint8_t pointer to the structure containing beacon advertising data. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: Avoid changing the beacon data through the returned pointer, use the - member functions instead. - - “BLEBeacon.h” must be included to use the class function. +.. note :: Avoid changing the beacon data through the returned pointer, use the member functions instead. "BLEBeacon.h" must be included to use the class function. -**iBeacon::getScanRsp** ------------------------ - -**altBeacon::getScanRsp** -------------------------- +**iBeacon::getScanRsp** / **altBeacon::getScanRsp** +--------------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -640,18 +560,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a uint8_t pointer to the structure containing -beacon advertising scan response data. +This function returns a uint8_t pointer to the structure containing beacon advertising scan response data. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: Avoid changing the beacon data through the returned pointer, use the - member functions instead. - - “BLEBeacon.h” must be included to use the class function. +.. note :: Avoid changing the beacon data through the returned pointer, use the member functions instead. "BLEBeacon.h" must be included to use the class function. **altBeacon::getRSVD** ---------------------- @@ -676,20 +592,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns an 8-bit unsigned integer containing the current -Reserved value. +This function returns an 8-bit unsigned integer containing the current Reserved value. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: Reserved for use by the manufacturer to implement special features. The - interpretation of this value is to be defined by the manufacturer and is - to be evaluated based on the MFG ID value. Refer to - https://altbeacon.org/ for more information. - - “BLEBeacon.h” must be included to use the class function. +.. note :: Reserved for use by the manufacturer to implement special features. The interpretation of this value is to be defined by the manufacturer and is to be evaluated based on the MFG ID value. Refer to https://altbeacon.org/ for more information. "BLEBeacon.h" must be included to use the class function. **altBeacon::setRSVD** ---------------------- @@ -720,9 +630,4 @@ NA ~~~~~~~~~~~~~~~~ NA -.. note :: Reserved for use by the manufacturer to implement special features. The - interpretation of this value is to be defined by the manufacturer and is - to be evaluated based on the MFG ID value. Refer to - https://altbeacon.org/ for more information. - - “BLEBeacon.h” must be included to use the class function. +.. note :: Reserved for use by the manufacturer to implement special features. The interpretation of this value is to be defined by the manufacturer and is to be evaluated based on the MFG ID value. Refer to https://altbeacon.org/ for more information. "BLEBeacon.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLECharacteristic.rst b/source/amebapro2/API_Documents/BLE/Class BLECharacteristic.rst index 051e04c..f6cca40 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLECharacteristic.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLECharacteristic.rst @@ -22,13 +22,14 @@ A class used for creating and managing BLE GATT characteristics. **Members** ~~~~~~~~~~~ + +-------------------------------------------+----------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +===========================================+==================================+ | BLECharacteristic::BLECharacteristic | Constructs a BLECharacteristic | | | object | +-------------------------------------------+----------------------------------+ -| **Public Methods** | | +| **Public Methods** | +-------------------------------------------+----------------------------------+ | BLECharacteristic::setUUID | Set the UUID of the | | | characteristic. | @@ -158,7 +159,6 @@ Constructs a BLECharacteristic object. .. code-block:: c++ BLECharacteristic::BLECharacteristic(BLEUUID uuid); - BLECharacteristic::BLECharacteristic(const char* uuid); **Parameters** @@ -174,9 +174,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setUUID** ------------------------------ @@ -208,7 +208,7 @@ NA NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getUUID** ------------------------------ @@ -240,10 +240,10 @@ The function returns the UUID of the characteristic in a BLEUUID class object. NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setBufferLen** -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +----------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -270,12 +270,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ - -.. note :: Characteristic data buffer has a default size of 20 bytes and can be - increased up to 230 bytes. +Example: `BLEUartService `_ - “BLECharacteristic.h” must be included to use the class function. +.. note :: Characteristic data buffer has a default size of 20 bytes and can be increased up to 230 bytes. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getBufferLen** ----------------------------------- @@ -307,7 +304,7 @@ The function returns the currently set internal buffer size. NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setReadProperty** -------------------------------------- @@ -327,8 +324,11 @@ Set the Read property value of the characteristic. **Parameters** ~~~~~~~~~~~~~~ -value: To allow connected devices to read characteristic's data. Valid -values: true or false. +value: To allow connected devices to read characteristic's data. + +- true. + +- false. **Returns** ~~~~~~~~~~~ @@ -338,9 +338,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ +Example: `BLEBatteryService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setWriteProperty** --------------------------------------- @@ -360,7 +360,11 @@ Set the Write property value of the characteristic. **Parameters** ~~~~~~~~~~~~~~ -value: To allow connected devices to write characteristic data. Valid values: true or false. +value: To allow connected devices to write characteristic data. + +- true. + +- false. **Returns** ~~~~~~~~~~~ @@ -370,12 +374,13 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setWriteNRProperty** ----------------------------------------- + **Description** ~~~~~~~~~~~~~~~ @@ -391,7 +396,11 @@ Set the write without response property value of the characteristic. **Parameters** ~~~~~~~~~~~~~~ -value: To allow connected devices to write characteristic data with no response. Valid values: true or false. +value: To allow connected devices to write characteristic data with no response. + +- true. + +- false. **Returns** ~~~~~~~~~~~ @@ -403,7 +412,7 @@ NA NA -.. note :: “BLECharacteristic.h” must be included to use the class function.\ ** +.. note :: "BLECharacteristic.h" must be included to use the class function.\ ** **BLECharacteristic::setNotifyProperty** ---------------------------------------- @@ -423,8 +432,11 @@ Set the Notify property of the characteristic. **Parameters** ~~~~~~~~~~~~~~ -value: To allow connected devices to receive characteristic data -notification messages. Valid values: true or false. +value: To allow connected devices to receive characteristic data notification messages. + +- true. + +- false. **Returns** ~~~~~~~~~~~ @@ -434,12 +446,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: Enabling this property will add a CCCD descriptor to the - characteristic. - - “BLECharacteristic.h” must be included to use the class function. +.. note :: Enabling this property will add a CCCD descriptor to the characteristic. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setIndicateProperty** ------------------------------------------ @@ -459,8 +468,11 @@ Set the Indicate property value of characteristic. **Parameters** ~~~~~~~~~~~~~~ -value: To allow connected devices to receive characteristic data -indication messages. Valid values: true or false. +value: To allow connected devices to receive characteristic data indication messages. + +- true. + +- false. **Returns** ~~~~~~~~~~~ @@ -472,10 +484,7 @@ NA NA -.. note :: Enabling this property will add a CCCD descriptor to the - characteristic. - - “BLECharacteristic.h” must be included to use the class function. +.. note :: Enabling this property will add a CCCD descriptor to the characteristic. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setProperties** ------------------------------------ @@ -495,7 +504,7 @@ Set the characteristic properties. **Parameters** ~~~~~~~~~~~~~~ -value: desired characteristic properties. Default value: 0x00 (no properties) +value: desired characteristic properties. Default value is 0x00 (no properties) **Returns** ~~~~~~~~~~~ @@ -507,7 +516,7 @@ NA NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getProperties** ------------------------------------ @@ -539,7 +548,7 @@ This function returns the currently set characteristic properties expressed as a NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setReadPermissions** ----------------------------------------- @@ -557,7 +566,7 @@ void setReadPermissions(uint32_t value); **Parameters** ~~~~~~~~~~~~~~ -value: desired characteristic read permissions. Valid values: +value: desired characteristic read permissions. - GATT_PERM_READ @@ -577,12 +586,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: If no permissions are set, the default permission is - GATT_PERM_NONE - - “BLECharacteristic.h” must be included to use the class function. +.. note :: If no permissions are set, the default permission is GATT_PERM_NONE. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setWritePermissions** ------------------------------------------ @@ -600,7 +606,7 @@ void setWritePermissions(uint32_t value); **Parameters** ~~~~~~~~~~~~~~ -value: desired characteristic write permissions. Valid values: +value: desired characteristic write permissions. - GATT_PERM_WRITE @@ -620,12 +626,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: If no permissions are set, the default permission is - GATT_PERM_NONE - - “BLECharacteristic.h” must be included to use the class function. +.. note :: If no permissions are set, the default permission is GATT_PERM_NONE. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setPermissions** ------------------------------------- @@ -645,7 +648,7 @@ Set the characteristic permissions. **Parameters** ~~~~~~~~~~~~~~ -value: desired characteristic permissions. Valid values: +value: desired characteristic permissions. - GATT_PERM_READ @@ -677,10 +680,7 @@ NA NA -.. note :: If no permissions are set, the default permission is - GATT_PERM_NONE - - “BLECharacteristic.h” must be included to use the class function. +.. note :: If no permissions are set, the default permission is GATT_PERM_NONE. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getPermissions** ------------------------------------- @@ -705,17 +705,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns the characteristic permissions that are previously -set using the setReadPermissions, setWritePermissions and setPermissions -functions. +This function returns the characteristic permissions that are previously set using the setReadPermissions, setWritePermissions and setPermissions functions. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLECharacteristic.h” must be included to use the class function. - +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::readString** --------------------------------- @@ -743,12 +740,9 @@ The function returns the data in the characteristic internal buffer as a String **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: Non-ASCII data may result in unexpected - characters in the string. - - “BLECharacteristic.h” must be included to use the class function. +.. note :: Non-ASCII data may result in unexpected characters in the string. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::readData8** -------------------------------- @@ -780,7 +774,7 @@ This function returns the data in the characteristic internal buffer expressed a NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::readData16** --------------------------------- @@ -805,15 +799,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns the data in the characteristic internal buffer -expressed as a uint16_t value. +This function returns the data in the characteristic internal buffer expressed as a uint16_t value. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::readData32** --------------------------------- @@ -845,7 +838,7 @@ This function returns the data in the characteristic internal buffer expressed a NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::writeString** ---------------------------------- @@ -861,7 +854,6 @@ Write data to the characteristic data buffer as a String object or character arr .. code-block:: c++ bool writeString(String str); - bool writeString(const char* str); **Parameters** @@ -877,9 +869,9 @@ This function returns TRUE if write data is successful. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::writeData8** --------------------------------- @@ -909,9 +901,9 @@ This function returns TRUE if write data is successful. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ +Example: `BLEBatteryService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::writeData16** ---------------------------------- @@ -943,7 +935,7 @@ This function returns TRUE if write data is successful. NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::writeData32** ---------------------------------- @@ -951,8 +943,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Write data to the characteristic data buffer as an unsigned 32-bit -integer. +Write data to the characteristic data buffer as an unsigned 32-bit integer. **Syntax** ~~~~~~~~~~ @@ -960,7 +951,6 @@ integer. .. code-block:: C++ bool writeData32(uint32_t num); - bool writeData32(int num); **Parameters** @@ -978,7 +968,7 @@ This function returns TRUE if write data is successful. NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setData** ------------------------------ @@ -998,9 +988,9 @@ Write data to the characteristic data buffer. **Parameters** ~~~~~~~~~~~~~~ -data: pointer to byte array containing desired data +data: pointer to byte array containing desired data. -datalen: number of bytes of data to write +datalen: number of bytes of data to write. **Returns** ~~~~~~~~~~~ @@ -1012,7 +1002,7 @@ This function returns TRUE if write data is successful. NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getData** ------------------------------ @@ -1032,9 +1022,9 @@ Read data from the characteristic data buffer. **Parameters** ~~~~~~~~~~~~~~ -data: pointer to byte array containing saved data from data buffer +data: pointer to byte array containing saved data from data buffer. -datalen: number of bytes of data to be read +datalen: number of bytes of data to be read. **Returns** ~~~~~~~~~~~ @@ -1046,12 +1036,10 @@ This function returns the number of bytes read. NA -.. note :: If the data buffer contains less data than requested, it will only read - the available number of bytes of data. - - “BLECharacteristic.h” must be included to use the class function. +.. note :: If the data buffer contains less data than requested, it will only read the available number of bytes of data. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getDataBuff** +---------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -1080,7 +1068,7 @@ This function returns a pointer to the uint8_t array used as the characteristic NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getDataLen** --------------------------------- @@ -1112,7 +1100,7 @@ This function returns the length of the last written data (in bytes) in the inte NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::notify** ----------------------------- @@ -1141,9 +1129,9 @@ NA **Example Code** -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::indicate** ------------------------------- @@ -1172,7 +1160,7 @@ NA NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setUserDescriptor** ---------------------------------------- @@ -1204,7 +1192,7 @@ NA NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setFormatDescriptor** ------------------------------------------ @@ -1224,19 +1212,13 @@ Add a data format descriptor attribute (UUID 0x2904) to the characteristic. **Parameters** ~~~~~~~~~~~~~~ -format: refer to -https://www.bluetooth.com/specifications/assigned-numbers/format-types/ -for the valid values and associated format types. +format: refer to https://www.bluetooth.com/specifications/assigned-numbers/format-types/ for the valid values and associated format types. -exponent: base-10 exponent to be applied to characteristic data value +exponent: base-10 exponent to be applied to characteristic data value. -unit: refer to -https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf -for the valid values and associated units. +unit: refer to https://btprodspecificationrefs.blob.core.windows.net/assigned-values/16-bit%20UUID%20Numbers%20Document.pdf for the valid values and associated units. -description: refer to -https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors/ -for the valid values and associated descriptors. +description: refer to https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors/ for the valid values and associated descriptors. **Returns** ~~~~~~~~~~~ @@ -1248,7 +1230,7 @@ NA NA -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setReportRefDescriptor** --------------------------------------------- @@ -1270,7 +1252,13 @@ Add a HID report reference descriptor attribute (UUID 0x2908) to the characteris id: HID report reference ID -type: HID report type. 0x01 for input report, 0x02 for output report, 0x03 for feature report. +type: HID report type. + +- 0x01 (input report) + +- 0x02 (output report) + +- 0x03 (feature report) **Returns** ~~~~~~~~~~~ @@ -1282,11 +1270,7 @@ NA NA -.. note :: HID report reference ID should begin at 1. Some HID host systems may - consider an ID of 0 as invalid. - - “BLECharacteristic.h” must be included to use the class function. - +.. note :: HID report reference ID should begin at 1. Some HID host systems may consider an ID of 0 as invalid. "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getReportRefID** ------------------------------------- @@ -1317,8 +1301,7 @@ This function returns the report reference ID previously set using the setReport NA -.. note :: “BLECharacteristic.h” must be included to use the class function. - +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::getReportRefType** --------------------------------------- @@ -1343,16 +1326,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns the report reference type previously set using the -setReportRefDescriptor function. +This function returns the report reference type previously set using the setReportRefDescriptor function. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLECharacteristic.h” must be included to use the class function. - +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setReadCallback** -------------------------------------- @@ -1360,8 +1341,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Set a user function to be called when the characteristic data is read by -a connected device. +Set a user function to be called when the characteristic data is read by a connected device. **Syntax** ~~~~~~~~~~ @@ -1373,12 +1353,11 @@ a connected device. **Parameters** ~~~~~~~~~~~~~~ -fCallback: A user callback function that returns void and takes two -arguments. +fCallback: A user callback function that returns void and takes two arguments. -chr: pointer to BLECharacteristic object containing data read +chr: pointer to BLECharacteristic object containing data read. -conn_id: connection ID of connected device that read characteristic data +conn_id: connection ID of connected device that read characteristic data. **Returns** ~~~~~~~~~~~ @@ -1388,9 +1367,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ +Example: `BLEBatteryService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setWriteCallback** --------------------------------------- @@ -1410,13 +1389,11 @@ Set a user function to be called when the characteristic data is written by a co **Parameters** ~~~~~~~~~~~~~~ -fCallback: A user callback function that returns void and takes two -arguments. +fCallback: A user callback function that returns void and takes two arguments. chr: pointer to BLECharacteristic object containing written data. -conn_id: connection ID of connected device that wrote characteristic -data. +conn_id: connection ID of connected device that wrote characteristic data. **Returns** ~~~~~~~~~~~ @@ -1426,9 +1403,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. +.. note :: "BLECharacteristic.h" must be included to use the class function. **BLECharacteristic::setCCCDCallback** -------------------------------------- @@ -1436,8 +1413,7 @@ Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: “BLECharacteristic.h” must be included to use the class function. \ No newline at end of file +.. note :: "BLECharacteristic.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEClient.rst b/source/amebapro2/API_Documents/BLE/Class BLEClient.rst index f6fac4d..23aa6d3 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEClient.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEClient.rst @@ -11,8 +11,7 @@ Class BLEClient **Description** ~~~~~~~~~~~~~~~ -A class used for discovering and accessing BLE GATT services on a -connected remote device. +A class used for discovering and accessing BLE GATT services on a connected remote device. **Syntax** ~~~~~~~~~~ @@ -23,13 +22,14 @@ connected remote device. **Members** ~~~~~~~~~~~ + +------------------------------------+------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+====================================+ | No public constructor is available for this class. You can get a pointer| | to an instance of this class using BLEDevice::addClient(). | +------------------------------------+------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+------------------------------------+ | BLEClient::connected | Check if the remote device | | | associated with the client is | @@ -88,7 +88,7 @@ This function returns TRUE if the remote device is connected. NA -.. note :: “BLEClient.h” must be included to use the class function. +.. note :: "BLEClient.h" must be included to use the class function. **BLEClient::discoverServices** ------------------------------- @@ -118,10 +118,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartClient `_ - +Example: `BLEUartClient `_ -.. note :: “BLEClient.h” must be included to use the class function. +.. note :: "BLEClient.h" must be included to use the class function. **BLEClient::discoveryDone** @@ -145,20 +144,17 @@ NA **Returns** ~~~~~~~~~~~ -This function returns TRUE if the service discovery process has been -completed successfully, FALSE if the service discovery process failed, -is still in progress, or has yet to start. +This function returns TRUE if the service discovery process has been completed successfully, FALSE if the service discovery process failed, is still in progress, or has yet to start. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartClient `_ - -**Notes and Warnings** +Example: `BLEUartClient `_ -.. note :: “BLEClient.h” must be included to use the class function. +.. note :: "BLEClient.h" must be included to use the class function. **BLEClient::printServices** +---------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -187,11 +183,10 @@ NA NA -**Notes and Warnings** - -.. note :: “BLEClient.h” must be included to use the class function. +.. note :: "BLEClient.h" must be included to use the class function. **BLEClient::getService** +------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -204,7 +199,6 @@ Get a service with the specified UUID on the remote device. .. code-block:: c++ BLERemoteService* getService(const char* uuid); - BLERemoteService* getService(BLEUUID uuid); **Parameters** @@ -215,16 +209,14 @@ uuid: the desired service UUID, expressed as a character array or a BLEUUID obje **Returns** ~~~~~~~~~~~ -This function returns the discovered service as a BLERemoteService -object pointer, otherwise nullptr is returned if a service with the UUID -is not found. +This function returns the discovered service as a BLERemoteService object pointer, otherwise nullptr is returned if a service with the UUID is not found. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartClient `_ +Example: `BLEUartClient `_ -.. note :: “BLEClient.h” must be included to use the class function. +.. note :: "BLEClient.h" must be included to use the class function. **BLEClient::getConnId** ------------------------ @@ -256,7 +248,7 @@ This function returns the connection ID for the connected remote device. NA -.. note :: “BLEClient.h” must be included to use the class function. +.. note :: "BLEClient.h" must be included to use the class function. **BLEClient::getClientId** -------------------------- @@ -288,9 +280,7 @@ This function returns the BLEClient object's client ID. NA -.. note :: The client ID is used when calling internal GATT client API. - - “BLEClient.h” must be included to use the class function. +.. note :: The client ID is used when calling internal GATT client API. "BLEClient.h" must be included to use the class function. **BLEClient::setDisconnectCallback** ------------------------------------ @@ -298,8 +288,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Set a user function as a callback function when the remote device is -disconnected. +Set a user function as a callback function when the remote device is disconnected. **Syntax** ~~~~~~~~~~ @@ -311,11 +300,9 @@ disconnected. **Parameters** ~~~~~~~~~~~~~~ -fCallback: A user callback function that returns void and takes one -argument. +fCallback: A user callback function that returns void and takes one argument. -client: A pointer to the BLEClient object corresponding to the -disconnected remote device +client: A pointer to the BLEClient object corresponding to the disconnected remote device. **Returns** ~~~~~~~~~~~ @@ -327,8 +314,4 @@ NA NA -.. note :: The user callback function will be called after the remote device has - disconnected, before the characteristics, services and client associated - with the remote device are deleted. - - “BLEClient.h” must be included to use the class function. +.. note :: The user callback function will be called after the remote device has disconnected, before the characteristics, services and client associated with the remote device are deleted. "BLEClient.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEConnect.rst b/source/amebapro2/API_Documents/BLE/Class BLEConnect.rst index 870e887..5616e50 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEConnect.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEConnect.rst @@ -24,13 +24,13 @@ A class used for managing BLE connection settings. ~~~~~~~~~~~ +------------------------------------+------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+====================================+ | No public constructor is available as this class is intended to be a | | singleton class. You can get a pointer to this class using | | BLEDevice::configConnection | +------------------------------------+------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+------------------------------------+ | BLEConnect::connect | Scan and search for all accessible | | | BLE devices, then select and | @@ -72,8 +72,7 @@ A class used for managing BLE connection settings. **Description** ~~~~~~~~~~~~~~~ -This class function is used to scan and search for all accessible BLE -devices, then select and connect to one of them. +This class function is used to scan and search for all accessible BLE devices, then select and connect to one of them. **Syntax** ~~~~~~~~~~ @@ -81,49 +80,40 @@ devices, then select and connect to one of them. .. code-block:: c++ bool connect(char* btAddr, T_GAP_REMOTE_ADDR_TYPE destAddrType, uint16_t scanTimeout); - bool connect(uint8_t (&btAddr)[6], T_GAP_REMOTE_ADDR_TYPE destAddrType, uint16_t scanTimeout); - bool connect(BLEAdvertData targetDevice, uint16_t scanTimeout); - bool connect(BLEAddr destAddr, T_GAP_REMOTE_ADDR_TYPE destAddrType, uint16_t scanTimeout); **Parameters** ~~~~~~~~~~~~~~ -char* btAddr: pointer to the targeted BLE device's Bluetooth address -expressed as a character string. +char* btAddr: pointer to the targeted BLE device's Bluetooth address expressed as a character string. -uint8_t (&btAddr): targeted BLE device's Bluetooth address contained in -a 6-byte array. +uint8_t (&btAddr): targeted BLE device's Bluetooth address contained in a 6-byte array. -destAddr: targeted BLE device's Bluetooth address contained in BLEAddr -class object. +destAddr: targeted BLE device's Bluetooth address contained in BLEAddr class object. targetDevice: advertising data packet scanned from targeted BLE device. -destAddrType: Bluetooth address type of targeted BLE device, Valid -values: +destAddrType: Bluetooth address type of targeted BLE device. -- GAP_REMOTE_ADDR_LE_PUBLIC +- GAP_REMOTE_ADDR_LE_PUBLIC -- GAP_REMOTE_ADDR_LE_RANDOM +- GAP_REMOTE_ADDR_LE_RANDOM -scan timeout: duration in milliseconds for which to look for the -targeted BLE device before giving up. +scan timeout: duration in milliseconds for which to look for the targeted BLE device before giving up. **Returns** ~~~~~~~~~~~ -This function returns true if the connection is successful, otherwise -false. +This function returns true if the connection is successful, otherwise false. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ +Example: `BLEBatteryClient `_ -.. note :: “BLEConnect.h” must be included to use the class function. +.. note :: "BLEConnect.h" must be included to use the class function. **BLEConnect::disconnect** -------------------------- @@ -143,22 +133,22 @@ Disconnect from targeted BLE device. **Parameters** ~~~~~~~~~~~~~~ -connId: connection ID for target device. Default connection ID set to 0. +connId: connection ID for target device. Default value is 0. **Returns** ~~~~~~~~~~~ -This function returns true if the operation is successful, otherwise -false. +This function returns true if the operation is successful, otherwise false. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEConnect.h” must be included to use the class function. +.. note :: "BLEConnect.h" must be included to use the class function. **BLEConnect::setScanInterval** +------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -175,7 +165,9 @@ Set the scan interval when searching for the targeted device. **Parameters** ~~~~~~~~~~~~~~ -scanInt_ms: scan interval in milliseconds. Valid value: 3 to 10240. +scanInt_ms: scan interval in milliseconds. + +- 3 to 10240. **Returns** ~~~~~~~~~~~ @@ -187,11 +179,7 @@ NA NA -.. note :: Scan interval defines how often the scanning process is started. The - value set for scanInt_ms must be equal or larger than the value set for - scanWindow_ms. scanInt_ms value is defined in units of 625 microseconds. - - “BLEConnect.h” must be included to use the class function. +.. note :: Scan interval defines how often the scanning process is started. The value set for scanInt_ms must be equal or larger than the value set for scanWindow_ms. scanInt_ms value is defined in units of 625 microseconds. "BLEConnect.h" must be included to use the class function. **BLEConnect::setScanWindow** ----------------------------- @@ -199,8 +187,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Set the BLE scan window when searching for the targeted device to -connect to. +Set the BLE scan window when searching for the targeted device to connect to. **Syntax** ~~~~~~~~~~ @@ -212,7 +199,9 @@ connect to. **Parameters** ~~~~~~~~~~~~~~ -scanWindow_ms: scan window in milliseconds. Valid value: 3 to 10240. +scanWindow_ms: scan window in milliseconds. + +- 3 to 10240. **Returns** ~~~~~~~~~~~ @@ -224,11 +213,7 @@ NA NA -.. note :: BLE scan window defines how long each interval should be scanned for. - The value set for scanWindow_ms set must be equal or smaller than the - value set for scanInt_ms. scanWindow_ms value is defined in units of 625 microseconds. - - “BLEConnect.h” must be included to use the class function. +.. note :: BLE scan window defines how long each interval should be scanned for. The value set for scanWindow_ms set must be equal or smaller than the value set for scanInt_ms. scanWindow_ms value is defined in units of 625 microseconds. "BLEConnect.h" must be included to use the class function. **BLEConnect::setConnInterval** ------------------------------- @@ -248,11 +233,13 @@ Set the BLE connection interval duration. **Parameters** ~~~~~~~~~~~~~~ -min_ms: minimum acceptable connection interval in milliseconds. Valid -value: 8 to 4000. +min_ms: minimum acceptable connection interval in milliseconds. -max_ms: maximum acceptable connection interval in milliseconds. Valid -value: 8 to 4000. +- 8 to 4000. + +max_ms: maximum acceptable connection interval in milliseconds. + +- 8 to 4000. **Returns** ~~~~~~~~~~~ @@ -264,12 +251,7 @@ NA NA -.. note :: The BLE connection interval defines the period between successive - connection events between a connected central and peripheral device. - Even if there is no data to exchange, a connection event is required to - maintain the connection. max_ms should be larger than or equal to min_ms. - - “BLEConnect.h” must be included to use the class function. +.. note :: The BLE connection interval defines the period between successive connection events between a connected central and peripheral device. Even if there is no data to exchange, a connection event is required to maintain the connection. max_ms should be larger than or equal to min_ms. "BLEConnect.h" must be included to use the class function. **BLEConnect::setConnLatency** ------------------------------ @@ -289,7 +271,9 @@ Set the BLE connection slave latency value. **Parameters** ~~~~~~~~~~~~~~ -latency: Connection slave latency value. Valid value: 0 to 499. +latency: Connection slave latency value. + +- 0 to 499. **Returns** ~~~~~~~~~~~ @@ -301,13 +285,10 @@ NA NA -.. note :: The BLE connection slave latency defines the number of successive - connection events a connected peripheral device can ignore without being - considered as disconnected by the central device. - - “BLEConnect.h” must be included to use the class function. +.. note :: The BLE connection slave latency defines the number of successive connection events a connected peripheral device can ignore without being considered as disconnected by the central device. "BLEConnect.h" must be included to use the class function. **BLEConnect::setConnTimeout** +------------------------------ **Description** ~~~~~~~~~~~~~~~ @@ -326,7 +307,7 @@ Set the BLE connection timeout value. timeout_ms: connection timeout in milliseconds. -Valid value: 100 to 32000. +- 100 to 32000. **Returns** ~~~~~~~~~~~ @@ -338,12 +319,10 @@ NA NA -.. note :: The BLE connection timeout defines the duration a peripheral or central - device must wait after a failed connection event to consider the connection broken. - - “BLEConnect.h” must be included to use the class function. +.. note :: The BLE connection timeout defines the duration a peripheral or central device must wait after a failed connection event to consider the connection broken. "BLEConnect.h" must be included to use the class function. **BLEConnect::updateConnParams** +-------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -372,11 +351,7 @@ NA NA -.. note :: Update the connected device with new connection parameters such as - connection interval, slave latency and timeout values. The connected - device may reject the new values if it is unable to conform to them. - - “BLEConnect.h” must be included to use the class function. +.. note :: Update the connected device with new connection parameters such as connection interval, slave latency and timeout values. The connected device may reject the new values if it is unable to conform to them. "BLEConnect.h" must be included to use the class function. **BLEConnect::getConnInfo** --------------------------- @@ -396,10 +371,9 @@ Get connection information. **Parameters** ~~~~~~~~~~~~~~ -connId: connection ID to device get connection information from +connId: connection ID to device get connection information from. -pConnInfo: pointer to T_GAP_CONN_INFO structure to store obtained -connection information +pConnInfo: pointer to T_GAP_CONN_INFO structure to store obtained connection information. **Returns** ~~~~~~~~~~~ @@ -411,7 +385,7 @@ This function returns true if the connection information is successfully obtaine NA -.. note :: “BLEConnect.h” must be included to use the class function. +.. note :: "BLEConnect.h" must be included to use the class function. **BLEConnect::getConnAddr** --------------------------- @@ -431,25 +405,23 @@ Get the Bluetooth address for a certain connection. **Parameters** ~~~~~~~~~~~~~~ -connId: connection ID of device to get Bluetooth address of +connId: connection ID of device to get Bluetooth address of. -addr: pointer to 6 byte array to store retrieved Bluetooth address +addr: pointer to 6 byte array to store retrieved Bluetooth address. -addrType: pointer to uint8_t variable to store retrieved Bluetooth -address type +addrType: pointer to uint8_t variable to store retrieved Bluetooth address type. **Returns** ~~~~~~~~~~~ -This function returns true if the connection address information is -successfully obtained. Otherwise, false. +This function returns true if the connection address information is successfully obtained. Otherwise, false. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEConnect.h” must be included to use the class function. +.. note :: "BLEConnect.h" must be included to use the class function. **BLEConnect::getConnId** ------------------------- @@ -465,37 +437,32 @@ Get the connection ID for a certain device. .. code-block:: c++ int8_t getConnId(char* btAddr, uint8_t addrType); - int8_t getConnId(uint8_t* btAddr, uint8_t addrType); - int8_t getConnId(BLEAdvertData targetDevice); **Parameters** ~~~~~~~~~~~~~~ -char* btAddr: targeted device Bluetooth address expressed as a -character string. +char* btAddr: targeted device Bluetooth address expressed as a character string. -uint8_t* btAddr: pointer to a 6-byte array containing targeted device -Bluetooth address. +uint8_t* btAddr: pointer to a 6-byte array containing targeted device Bluetooth address. targetDevice: advertising data packet scanned from targeted device. -addrType: Bluetooth address type of targeted device. Valid values: +addrType: Bluetooth address type of targeted device. -- GAP_REMOTE_ADDR_LE_PUBLIC +- GAP_REMOTE_ADDR_LE_PUBLIC -- GAP_REMOTE_ADDR_LE_RANDOM +- GAP_REMOTE_ADDR_LE_RANDOM **Returns** ~~~~~~~~~~~ -This function returns the requested connection ID. Else, returns -1 if -failed to obtain connection ID. +This function returns the requested connection ID. Else, returns -1 if failed to obtain connection ID. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ +Example: `BLEBatteryClient `_ -.. note :: “BLEConnect.h” must be included to use the class function. +.. note :: "BLEConnect.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEDevice.rst b/source/amebapro2/API_Documents/BLE/Class BLEDevice.rst index a8e1621..4f4d24a 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEDevice.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEDevice.rst @@ -24,13 +24,13 @@ A class used for general control and management of BLE functions. ~~~~~~~~~~~ +------------------------------------+------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+====================================+ | The public constructor should not be used as this class is intended to | | be a singleton class. Access member functions using the object instance | | named BLE. | +------------------------------------+------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+------------------------------------+ | BLEDevice:: init | Initialize resources that are | | | required for BLE to function | @@ -107,12 +107,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ +Example: `BLEBatteryService `_ -.. note :: Call this member function first before using any other member functions - in the BLEDevice class. - - “BLEDevice.h” must be included to use the class function. +.. note :: Call this member function first before using any other member functions in the BLEDevice class. "BLEDevice.h" must be included to use the class function. **BLEDevice::deinit** --------------------- @@ -144,10 +141,7 @@ NA NA -.. note :: Call this member function last after all other BLE operations have been - terminated. - - “BLEDevice.h” must be included to use the class function. +.. note :: Call this member function last after all other BLE operations have been terminated. "BLEDevice.h" must be included to use the class function. **BLEDevice::connected** ------------------------ @@ -179,9 +173,7 @@ This function returns TRUE if BLE device is connected, otherwise false. NA -.. note :: Peripheral mode should use connId = 0 - - “BLEDevice.h” must be included to use the class function. +.. note :: Peripheral mode should use connId = 0. "BLEDevice.h" must be included to use the class function. **BLEDevice::setDeviceName** ---------------------------- @@ -189,9 +181,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Set the BLE Generic Access Profile (GAP) device name which will be -visible after a connection is estabalished. The default device name is -set as “AMEBA_BLE_DEV”. +Set the BLE Generic Access Profile (GAP) device name which will be visible after a connection is estabalished. The default device name is set as "AMEBA_BLE_DEV". **Syntax** ~~~~~~~~~~ @@ -215,12 +205,7 @@ NA NA -.. note :: The GAP device name has a maximum length of 39 characters. Other devices - can see this name after a BLE connection is established. This name is - separate and different from the device name sent in a BLE advertisement, - the names should be the same but are not required. - - “BLEDevice.h” must be included to use the class function. +.. note :: The GAP device name has a maximum length of 39 characters. Other devices can see this name after a BLE connection is established. This name is separate and different from the device name sent in a BLE advertisement, the names should be the same but are not required. "BLEDevice.h" must be included to use the class function. **BLEDevice::setDeviceAppearance** ---------------------------------- @@ -240,8 +225,7 @@ Set the BLE Generic Access Profile (GAP) device appearance. **Parameters** ~~~~~~~~~~~~~~ -devAppearance: desired device appearance expressed as a 16-bit unsigned -integer. +devAppearance: desired device appearance expressed as a 16-bit unsigned integer. **Returns** ~~~~~~~~~~~ @@ -253,10 +237,7 @@ NA NA -.. note :: Refer to Bluetooth SIG assigned device appearances at - https://www.bluetooth.com/specifications/gatt/characteristics/. - - “BLEDevice.h” must be included to use the class function. +.. note :: Refer to Bluetooth SIG assigned device appearances at https://www.bluetooth.com/specifications/gatt/characteristics/. "BLEDevice.h" must be included to use the class function. **BLEDevice::configAdvert** --------------------------- @@ -281,18 +262,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to a BLEAdvert class instance for -configuring BLE advertising parameters. +This function returns a pointer to a BLEAdvert class instance for configuring BLE advertising parameters. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ - -.. note :: Use this member function instead of creating a BLEAdvert class instance - manually. +Example: `BLEBatteryService `_ - “BLEDevice.h” must be included to use the class function. +.. note :: Use this member function instead of creating a BLEAdvert class instance manually. "BLEDevice.h" must be included to use the class function. **BLEDevice::configScan** ------------------------- @@ -317,22 +294,17 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to a BLEScan class instance for -configuring BLE scanning parameters. +This function returns a pointer to a BLEScan class instance for configuring BLE scanning parameters. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ -**Notes and Warnings** - -Use this member function instead of creating a BLEScan class instance -manually. - -“BLEDevice.h” must be included to use the class function. +.. note :: Use this member function instead of creating a BLEScan class instance manually. "BLEDevice.h" must be included to use the class function. **BLEDevice::configConnection** +------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -354,18 +326,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to a BLEConnect class instance for -configuring BLE connection parameters. +This function returns a pointer to a BLEConnect class instance for configuring BLE connection parameters. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ - -.. note :: Use this member function instead of creating a BLEConnect class instance - manually. +Example: `BLEBatteryClient `_ - “BLEDevice.h” must be included to use the class function. +.. note :: Use this member function instead of creating a BLEConnect class instance manually. "BLEDevice.h" must be included to use the class function. **BLEDevice::configSecurity** ----------------------------- @@ -390,19 +358,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to a BLESecurity class instance for -configuring BLE bonding security parameters. +This function returns a pointer to a BLESecurity class instance for configuring BLE bonding security parameters. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ - -.. note :: Use this member function instead of creating a BLESecurity class - instance manually. - - “BLEDevice.h” must be included to use the class function. +Example: `BLEHIDMouse `_ +.. note :: Use this member function instead of creating a BLESecurity class instance manually "BLEDevice.h" must be included to use the class function. **BLEDevice::setScanCallback** ------------------------------ @@ -422,8 +385,7 @@ Set a callback function for processing BLE scan results. **Parameters** ~~~~~~~~~~~~~~ -scanCB: a function that returns nothing and takes in a scan data pointer -of type T_LE_CB_DATA\* +scanCB: a function that returns nothing and takes in a scan data pointer of type T_LE_CB_DATA. **Returns** ~~~~~~~~~~~ @@ -433,12 +395,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ -.. note :: Use this member function to set a callback function that will be called - for each BLE device scan result found. - - “BLEDevice.h” must be included to use the class function. +.. note :: Use this member function to set a callback function that will be called for each BLE device scan result found. "BLEDevice.h" must be included to use the class function. **BLEDevice::beginCentral** --------------------------- @@ -458,8 +417,7 @@ Start the BLE stack to operate as a central device. **Parameters** ~~~~~~~~~~~~~~ -connCount: maximum number of allowed connected devices. If no argument -is provided, default is maximum allowed connected devices for specific board. +connCount: maximum number of allowed connected devices. If no argument is provided, default is maximum allowed connected devices for specific board. **Returns** ~~~~~~~~~~~ @@ -469,12 +427,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ - -.. note :: Use this member function to start the device to operate as a central BLE - device, after other BLE parameters are set correctly. +Example: `BLEScan `_ - “BLEDevice.h” must be included to use the class function. +.. note :: Use this member function to start the device to operate as a central BLE device, after other BLE parameters are set correctly. "BLEDevice.h" must be included to use the class function. **BLEDevice::beginPeripheral** ------------------------------ @@ -504,12 +459,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ - -.. note :: Use this member function to start the device to operate as a peripheral - BLE device, after other BLE parameters are set correctly. +Example: `BLEBatteryService `_ - “BLEDevice.h” must be included to use the class function. +.. note :: Use this member function to start the device to operate as a peripheral BLE device, after other BLE parameters are set correctly. "BLEDevice.h" must be included to use the class function. **BLEDevice:: end** ------------------- @@ -541,10 +493,7 @@ NA NA -.. note :: Use this member function to stop the device operating in either BLE - peripheral mode or BLE central mode. - - “BLEDevice.h” must be included to use the class function. +.. note :: Use this member function to stop the device operating in either BLE peripheral mode or BLE central mode. "BLEDevice.h" must be included to use the class function. **BLEDevice::configServer** --------------------------- @@ -564,7 +513,7 @@ Configure the BLE stack for services. **Parameters** ~~~~~~~~~~~~~~ -maxServiceCount: Maximum number of services that will run on the device +maxServiceCount: Maximum number of services that will run on the device. **Returns** ~~~~~~~~~~~ @@ -574,11 +523,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ - -.. note :: Use this member function before adding any service to the BLE stack. +Example: `BLEBatteryService `_ - “BLEDevice.h” must be included to use the class function. +.. note :: Use this member function before adding any service to the BLE stack. "BLEDevice.h" must be included to use the class function. **BLEDevice::addService** ------------------------- @@ -598,8 +545,7 @@ Add a new service to the BLE stack. **Parameters** ~~~~~~~~~~~~~~ -newService: the service to be added, defined using a BLEService class -object. +newService: the service to be added, defined using a BLEService class object. **Returns** ~~~~~~~~~~~ @@ -609,9 +555,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryService `_ +Example: `BLEBatteryService `_ -.. note :: “BLEDevice.h” must be included to use the class function. +.. note :: "BLEDevice.h" must be included to use the class function. **BLEDevice::configClient** --------------------------- @@ -641,12 +587,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ +Example: `BLEBatteryClient `_ - -.. note :: Use this member function before adding any client to the BLE stack. - - “BLEDevice.h” must be included to use the class function. +.. note :: Use this member function before adding any client to the BLE stack. "BLEDevice.h" must be included to use the class function. **BLEDevice::addClient** ------------------------ @@ -666,29 +609,19 @@ Add a new client to the BLE stack. **Parameters** ~~~~~~~~~~~~~~ -connId: the connection ID of the connected device to create a client -for. +connId: the connection ID of the connected device to create a client for. **Returns** ~~~~~~~~~~~ -This function returns a pointer to a BLEClient class object, -corresponding to the device with the specified connection ID, which can -be used to access the services and characteristics on the connected -device. +This function returns a pointer to a BLEClient class object, corresponding to the device with the specified connection ID, which can be used to access the services and characteristics on the connected device. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEBatteryClient `_ - -.. note :: Only one client should be added per connected device. +Example: `BLEBatteryClient `_ - The BLEClient object and any service, characteristic, descriptor - associated with the connected device will be deleted when the device is - disconnected. - - “BLEDevice.h” must be included to use the class function. +.. note :: Only one client should be added per connected device. The BLEClient object and any service, characteristic, descriptor associated with the connected device will be deleted when the device is disconnected. "BLEDevice.h" must be included to use the class function. **BLEDevice::getLocalAddr** --------------------------- @@ -722,8 +655,4 @@ NA NA -.. note :: Local device address is only available after starting in central or - peripheral mode. This function will return all zeros for the address if - central or peripheral mode is not in operation. - - “BLEDevice.h” must be included to use the class function. +.. note :: Local device address is only available after starting in central or peripheral mode. This function will return all zeros for the address if central or peripheral mode is not in operation. "BLEDevice.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEHIDDevice.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDDevice.rst index 8c8eef2..15782ce 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEHIDDevice.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDDevice.rst @@ -11,21 +11,20 @@ Class BLEHIDDevice **Description** ~~~~~~~~~~~~~~~ -A class used for creating and managing HID over GATT Profile (HOGP) -services. +A class used for creating and managing HID over GATT Profile (HOGP) services. **Syntax** ~~~~~~~~~~ .. code-block:: c++ - + class BLEHIDDevice **Members** ~~~~~~~~~~~ +------------------------------------+------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+====================================+ | The public constructor should not be used as this class is intended to | | be a singleton class. Access member functions using the object instance | @@ -87,14 +86,12 @@ services. **Description** ~~~~~~~~~~~~~~~ -Initialize the HID Device profile by creating the required services and -characteristics. +Initialize the HID Device profile by creating the required services and characteristics. **Syntax** ~~~~~~~~~~ .. code-block:: c++ - void init(void); @@ -111,12 +108,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDGamepad `_ - -.. note :: The HID Device object should be initialized before any HID reports can - be sent. +Example: `BLEHIDGamepad `_ - “BLEHIDDevice.h” must be included to use the class function.\ ** +.. note :: The HID Device object should be initialized before any HID reports can be sent. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setNumOutputReport** ------------------------------------ @@ -130,7 +124,7 @@ Set the number of HID output reports to be generated. ~~~~~~~~~~ .. code-block:: c++ - + void setNumOutputReport (uint8_t numOutputReports); **Parameters** @@ -148,11 +142,7 @@ NA NA -.. note :: The number of output reports should be set before BLEHIDDevice init() - function is called.The default number of HID output report to be - generated is 1 if it is not set. - - “BLEHIDDevice.h” must be included to use the class function.\ ** +.. note :: The number of output reports should be set before BLEHIDDevice init() function is called.The default number of HID output report to be generated is 1 if it is not set. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setNumInputReport** ----------------------------------- @@ -166,7 +156,6 @@ Set the number of HID input reports to be generated. ~~~~~~~~~~ .. code-block:: c++ - void setNumInputReport (uint8_t numInputReports); @@ -185,11 +174,7 @@ NA NA -.. note :: The number of input reports should be set before BLEHIDDevice init() - function is called.The default number of HID input report to be - generated is 3 if it is not set. - - “BLEHIDDevice.h” must be included to use the class function. +.. note :: The number of input reports should be set before BLEHIDDevice init() function is called.The default number of HID input report to be generated is 3 if it is not set. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setReportMap** ------------------------------ @@ -203,15 +188,15 @@ Set the HID report map characteristics with a HID report descriptor. ~~~~~~~~~~ .. code-block:: c++ - + void setReportMap (uint8_t* report_map, uint16_t len); **Parameters** ~~~~~~~~~~~~~~ -report_map: pointer to HID report descriptor +report_map: pointer to HID report descriptor. -len: HID report descriptor length in bytes +len: HID report descriptor length in bytes. **Returns** ~~~~~~~~~~~ @@ -221,20 +206,17 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDGamepad `_ +Example: `BLEHIDGamepad `_ + +.. note :: -.. note :: The HID report map characteristic can only be configured after - BLEHIDDevice init() function is called. + The HID report map characteristic can only be configured after BLEHIDDevice init() function is called. - HID report descriptor is a hard coded array of bytes that describe the - device’s data packets. For example, how many packets the device - supports, how large are the packets and the purpose of each byte and bit - in the packets. + HID report descriptor is a hard coded array of bytes that describe the device's data packets. For example, how many packets the device supports, how large are the packets and the purpose of each byte and bit in the packets. - For more information on HID report descriptor, refer to - https://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/ . + For more information on HID report descriptor, refer to https://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/. - “BLEHIDDevice.h” must be included to use the class function. + "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::inputReport** ----------------------------- @@ -248,19 +230,19 @@ Send a HID input report to connected device. ~~~~~~~~~~ .. code-block:: c++ - + void inputReport (uint8_t reportID, uint8_t* data, uint16_t len, uint8_t conn_id); **Parameters** ~~~~~~~~~~~~~~ -reportID: HID report ID of input report +reportID: HID report ID of input report. -data: pointer to the HID input report data to be sent +data: pointer to the HID input report data to be sent. -len: length of HID input report data in bytes +len: length of HID input report data in bytes. -conn_id: connection ID of device that the HID report will be sent to +conn_id: connection ID of device that the HID report will be sent to. **Returns** ~~~~~~~~~~~ @@ -272,10 +254,7 @@ NA NA -.. note :: HID input reports can only be sent after BLEHIDDevice init() function - has been called. - - “BLEHIDDevice.h” must be included to use the class function. +.. note :: HID input reports can only be sent after BLEHIDDevice init() function has been called. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setOutputReportCallback** ----------------------------------------- @@ -289,7 +268,7 @@ Set a user callback function for receiving HID output report data. ~~~~~~~~~~ .. code-block:: c++ - + void setOutputReportCallback (uint8_t reportID, void (*fCallback) (BLECharacteristic* chr, uint8_t conn_id)); **Parameters** @@ -297,10 +276,9 @@ Set a user callback function for receiving HID output report data. reportID: HID report ID of output report -chr: BLECharacteristic class object containing received HID output -report data +chr: BLECharacteristic class object containing received HID output report data. -conn_id: connection ID of the device that send out HID report data +conn_id: connection ID of the device that send out HID report data. **Returns** ~~~~~~~~~~~ @@ -312,10 +290,7 @@ NA NA -.. note :: Setting a user callback function for output reports can only occur after - BLEHIDDevice init() function has been called. - - “BLEHIDDevice.h” must be included to use the class function. +.. note :: Setting a user callback function for output reports can only occur after BLEHIDDevice init() function has been called. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::bootKeyboardReport** ------------------------------------ @@ -329,18 +304,17 @@ Send a HID boot keyboard input report to connected device. ~~~~~~~~~~ .. code-block:: c++ - + void bootKeyboardReport (uint8_t* data, uint16_t len, uint8_t conn_id); **Parameters** ~~~~~~~~~~~~~~ -data: pointer to the HID input report data to be sent +data: pointer to the HID input report data to be sent. -len: length of HID input report data in bytes +len: length of HID input report data in bytes. -conn_id: connection ID of device that the HID input report will be sent -to. +conn_id: connection ID of device that the HID input report will be sent to. **Returns** ~~~~~~~~~~~ @@ -352,11 +326,7 @@ NA NA -.. note :: By default, the HID service Protocol Mode characteristic has boot mode - disabled. To send boot keyboard input reports, the Protocol Mode - characteristic needs to have boot mode enabled. - - “BLEHIDDevice.h” must be included to use the class function.\ ** +.. note :: By default, the HID service Protocol Mode characteristic has boot mode disabled. To send boot keyboard input reports, the Protocol Mode characteristic needs to have boot mode enabled. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setHidInfo** ---------------------------- @@ -364,28 +334,23 @@ NA **Description** ~~~~~~~~~~~~~~~ -Set HID information such as HID class specification version, country -code and flags for HID service. +Set HID information such as HID class specification version, country code and flags for HID service. **Syntax** ~~~~~~~~~~ .. code-block:: c++ - void setHidInfo (uint16_t bcd, uint8_t country, uint8_t flags); **Parameters** ~~~~~~~~~~~~~~ -bcd: 16-bit unsigned integer representing version number of base USB HID -Specification implemented by HID Device +bcd: 16-bit unsigned integer representing version number of base USB HID Specification implemented by HID Device. -country: 8-bit integer identifying country HID Device hardware is -localized for. Most hardware is not localized (value 0x00). +country: 8-bit integer identifying country HID Device hardware is localized for. Most hardware is not localized (value 0x00). -flags: Bit flags indicating remote-wake capability and advertising when -bonded but not connected. +flags: Bit flags indicating remote-wake capability and advertising when bonded but not connected. **Returns** ~~~~~~~~~~~ @@ -397,10 +362,7 @@ NA NA -.. note :: For detailed information on the characteristic, refer to Bluetooth SIG - HID Service specifications. - - “BLEHIDDevice.h” must be included to use the class function. +.. note :: For detailed information on the characteristic, refer to Bluetooth SIG HID Service specifications. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setBattLevel** ------------------------------ @@ -414,13 +376,13 @@ Set battery level data of the Battery service. ~~~~~~~~~~ .. code-block:: c++ - + void setBattLevel (uint8_t level); **Parameters** ~~~~~~~~~~~~~~ -level: battery level expressed as % of full charge +level: battery level expressed as % of full charge. **Returns** ~~~~~~~~~~~ @@ -432,10 +394,7 @@ NA NA -.. note :: Battery level is set to 100% by default. For detailed information refer - to Bluetooth SIG Battery service specifications. - - “BLEHIDDevice.h” must be included to use the class function. +.. note :: Battery level is set to 100% by default. For detailed information refer to Bluetooth SIG Battery service specifications. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setPNPInfo** ---------------------------- @@ -449,23 +408,19 @@ Set PNP data of the Device Information service. ~~~~~~~~~~ .. code-block:: c++ - + void setPNPInfo (uint8_t sig, uint16_t vid, uint16_t pid, uint16_t version); **Parameters** ~~~~~~~~~~~~~~ -sig: The Vendor ID Source field designates which organization assigned -the value used in the Vendor ID field value. +sig: The Vendor ID Source field designates which organization assigned the value used in the Vendor ID field value. -vid: The Vendor ID field is intended to uniquely identify the vendor of -the device. +vid: The Vendor ID field is intended to uniquely identify the vendor of the device. -pid: The Product ID field is intended to distinguish between different -products made by the vendor. +pid: The Product ID field is intended to distinguish between different products made by the vendor. -version: The Product Version field is a numeric expression identifying -the device release number in Binary-Coded Decimal. +version: The Product Version field is a numeric expression identifying the device release number in Binary-Coded Decimal. **Returns** ~~~~~~~~~~~ @@ -477,11 +432,7 @@ NA NA -.. note :: By default, sig and vid are configured to indicate Realtek as the - vendor. For detailed information refer to Bluetooth SIG Device - Information service specifications. - - “BLEHIDDevice.h” must be included to use the class function. +.. note :: By default, sig and vid are configured to indicate Realtek as the vendor. For detailed information refer to Bluetooth SIG Device Information service specifications. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setManufacturerString** --------------------------------------- @@ -495,7 +446,7 @@ Set manufacturer information of the Device Information service. ~~~~~~~~~~ .. code-block:: c++ - + void setManufacturerString (const char* manufacturer); **Parameters** @@ -513,10 +464,7 @@ NA NA -.. note :: Manufacturer is set to “Realtek” by default. For detailed information - refer to Bluetooth SIG Device Information service specifications. - - “BLEHIDDevice.h” must be included to use the class function. +.. note :: Manufacturer is set to "Realtek" by default. For detailed information refer to Bluetooth SIG Device Information service specifications. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::setModelString** -------------------------------- @@ -530,7 +478,7 @@ Set model information of the Device Information service. ~~~~~~~~~~ .. code-block:: c++ - + void setModelString (const char* model); **Parameters** @@ -548,10 +496,7 @@ NA NA -.. note :: Model is set to “Ameba_BLE_HID” by default. For detailed information - refer to Bluetooth SIG Device Information service specifications. - - “BLEHIDDevice.h” must be included to use the class function.\ ** +.. note :: Model is set to "Ameba_BLE_HID" by default. For detailed information refer to Bluetooth SIG Device Information service specifications. "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::hidService** ---------------------------- @@ -565,7 +510,7 @@ Get reference to HID service. ~~~~~~~~~~ .. code-block:: c++ - + BLEService& hidService (void); **Parameters** @@ -576,28 +521,28 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to the BLEService class object for the -HID service. +This function returns a pointer to the BLEService class object for the HID service. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ +Example: `BLEHIDMouse `_ -.. note :: “BLEHIDDevice.h” must be included to use the class function. +.. note :: "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::devInfoService** +-------------------------------- **Description** ~~~~~~~~~~~~~~~ -Get reference to Device Information service +Get reference to Device Information service. **Syntax** ~~~~~~~~~~ .. code-block:: c++ - + BLEService& devInfoService (void); **Parameters** @@ -608,15 +553,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to the BLEService class object for the -Device Information service. +This function returns a pointer to the BLEService class object for the Device Information service. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ +Example: `BLEHIDMouse `_ -.. note :: “BLEHIDDevice.h” must be included to use the class function.\ ** +.. note :: "BLEHIDDevice.h" must be included to use the class function. **BLEHIDDevice::battService** ----------------------------- @@ -630,7 +574,7 @@ Get reference to Battery service. ~~~~~~~~~~ .. code-block:: c++ - + BLEService& battService (void); **Parameters** @@ -641,12 +585,11 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to the BLEService class object for the -Battery service. +This function returns a pointer to the BLEService class object for the Battery service. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ +Example: `BLEHIDMouse `_ -.. note :: “BLEHIDDevice.h” must be included to use the class function. +.. note :: "BLEHIDDevice.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst index b847e59..bc23e69 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst @@ -18,18 +18,18 @@ A class used for creating and managing a BLE HID Gamepad. .. code-block:: c++ - class BLEHIDGamepad + class BLEHIDGamepad **Members** ~~~~~~~~~~~ +----------------------------+-----------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +============================+=========================================+ | BLEHIDGamepad::BLEHIDG | Constructs a BLEHIDGamepad object | | amepad | | +----------------------------+-----------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +----------------------------+-----------------------------------------+ | BLEHIDGamepad::setReportID | Set HID report ID for the HID Gamepad | +----------------------------+-----------------------------------------+ @@ -37,31 +37,31 @@ A class used for creating and managing a BLE HID Gamepad. | Report | | +----------------------------+-----------------------------------------+ | BLEHIDGamepad::buttonPress | Send a HID Gamepad report indicating | -| | buttons pressed. | +| | buttons pressed | +----------------------------+-----------------------------------------+ | BLEHIDGamepad:: | Send a HID Gamepad report indicating | -| buttonRelease | buttons released. | +| buttonRelease | buttons released | +----------------------------+-----------------------------------------+ | BLEHIDGamepad:: | Send a HID Gamepad report indicating no | -| buttonReleaseAll | buttons pressed. | +| buttonReleaseAll | buttons pressed | +----------------------------+-----------------------------------------+ | BLEHIDGamepad::setHat | Send a HID Gamepad report indicating | -| | hat switch position. | +| | hat switch position | +----------------------------+-----------------------------------------+ | BLEHIDGamepad::setAxes | Send a HID Gamepad report indicating | | | position of all axes | +----------------------------+-----------------------------------------+ |BLEHIDGamepad::setLeftStick | Send a HID Gamepad report indicating | | | position of axes corresponding to left | -| | analog stick. | +| | analog stick | +----------------------------+-----------------------------------------+ | BLEHIDGamepad:: | Send a HID Gamepad report indicating | | setRightStick | position of axes corresponding to right | -| | analog stick. | +| | analog stick | +----------------------------+-----------------------------------------+ | BLEHIDGamepad::setTriggers | Send a HID Gamepad report indicating | | | position of axes corresponding to | -| | triggers. | +| | triggers | +----------------------------+-----------------------------------------+ **BLEHIDGamepad::BLEHIDGamepad** @@ -77,7 +77,7 @@ Constructs a BLEHIDGamepad object. .. code-block:: c++ - BLEHIDGamepad(void); + BLEHIDGamepad(void); **Parameters** ~~~~~~~~~~~~~~ @@ -92,14 +92,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDGamepad `_ - -.. note :: By default, the BLEHIDGamepad class assumes the HID report descriptor - implements a gamepad device with 16 buttons, 6 16-bit axes and an - 8-direction hat switch. This class will not work if a different - gamepad report descriptor is implemented. - “BLEHIDGamepad.h” must be included to use the class function. +Example: `BLEHIDGamepad `_ +.. note :: By default, the BLEHIDGamepad class assumes the HID report descriptor implements a gamepad device with 16 buttons, 6 16-bit axes and an 8-direction hat switch. This class will not work if a different gamepad report descriptor is implemented. "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::setReportID** ------------------------------ @@ -114,13 +109,12 @@ Set HID report ID for the HID Gamepad. .. code-block:: c++ - void setReportID (uint8_t reportID); + void setReportID (uint8_t reportID); **Parameters** ~~~~~~~~~~~~~~ -reportID: The report ID for the gamepad device, corresponding to the - HID report descriptor. +reportID: The report ID for the gamepad device, corresponding to the HID report descriptor. **Returns** ~~~~~~~~~~~ @@ -130,11 +124,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDGamepad `_ +Example: `BLEHIDGamepad `_ -.. note :: HID report ID should start at 1. Some systems may consider a report ID - of 0 as invalid. “BLEHIDGamepad.h” must be included to use the class - function. +.. note :: HID report ID should start at 1. Some systems may consider a report ID of 0 as invalid. "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::gamepadReport** -------------------------------- @@ -149,37 +141,63 @@ Send a HID Gamepad report. .. code-block:: c++ - void gamepadReport (hid_gamepad_report_t* report); - void gamepadReport (uint16_t buttons, uint8_t hat, int16_t x, int16_t y, int16_t z, int16_t Rz, int16_t Rx, int16_t Ry); + void gamepadReport (hid_gamepad_report_t* report); + void gamepadReport (uint16_t buttons, uint8_t hat, int16_t x, int16_t y, int16_t z, int16_t Rz, int16_t Rx, int16_t Ry); **Parameters** ~~~~~~~~~~~~~~ -report: pointer to gamepad report structure containing data on all inputs -buttons: bitmap indicating state of each button. 1 = pressed, 0 = released. -hat: position of hat switch. Valid values: +report: pointer to gamepad report structure containing data on all inputs. + +buttons: bitmap indicating state of each button. + +- 1 (pressed) + +- 0 (released) + +hat: position of hat switch. + +- GAMEPAD_HAT_CENTERED (0) + +- GAMEPAD_HAT_UP (1) + +- GAMEPAD_HAT_UP_RIGHT (2) + +- GAMEPAD_HAT_RIGHT (3) + +- GAMEPAD_HAT_DOWN_RIGHT (4) + +- GAMEPAD_HAT_DOWN (5) -- GAMEPAD_HAT_CENTERED = 0 -- GAMEPAD_HAT_UP = 1 -- GAMEPAD_HAT_UP_RIGHT = 2 -- GAMEPAD_HAT_RIGHT = 3 -- GAMEPAD_HAT_DOWN_RIGHT = 4 -- GAMEPAD_HAT_DOWN = 5 -- GAMEPAD_HAT_DOWN_LEFT = 6 -- GAMEPAD_HAT_LEFT = 7 -- GAMEPAD_HAT_UP_LEFT = 8 +- GAMEPAD_HAT_DOWN_LEFT (6) -x: position of x axis. Integer value from -32767 to 32767. +- GAMEPAD_HAT_LEFT (7) -y: position of y axis. Integer value from -32767 to 32767. +- GAMEPAD_HAT_UP_LEFT (8) -z: position of z axis. Integer value from -32767 to 32767. +x: position of x axis in integer. -Rz: position of Rz axis. Integer value from -32767 to 32767. +- -32767 to 32767. -Rx: position of Rx axis. Integer value from -32767 to 32767. +y: position of y axis in integer. -Ry: position of Ry axis. Integer value from -32767 to 32767. +- -32767 to 32767. + +z: position of z axis in integer. + +- -32767 to 32767. + +Rz: position of Rz axis in integer. + +- -32767 to 32767. + +Rx: position of Rx axis in integer. + +- -32767 to 32767. + +Ry: position of Ry axis in integer. + +- -32767 to 32767. **Returns** ~~~~~~~~~~~ @@ -189,9 +207,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDGamepad `_ +Example: `BLEHIDGamepad `_ -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::buttonPress** ------------------------------ @@ -206,12 +224,14 @@ Send a HID Gamepad report indicating buttons pressed. .. code-block:: c++ - void buttonPress (uint16_t buttons); + void buttonPress (uint16_t buttons); **Parameters** ~~~~~~~~~~~~~~ -buttons: bitmap indicating buttons pressed. 1 = pressed. +buttons: bitmap indicating buttons pressed. + +- 1 (pressed) **Returns** ~~~~~~~~~~~ @@ -223,7 +243,7 @@ NA NA -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::buttonRelease** -------------------------------- @@ -238,12 +258,14 @@ Send a HID Gamepad report indicating buttons released. .. code-block:: c++ - void buttonRelease (uint16_t buttons); + void buttonRelease (uint16_t buttons); **Parameters** ~~~~~~~~~~~~~~ -buttons: bitmap indicating buttons released. 1 = released. +buttons: bitmap indicating buttons released. + +- 1 (pressed) **Returns** ~~~~~~~~~~~ @@ -255,7 +277,7 @@ NA NA -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::buttonReleaseAll** @@ -271,7 +293,7 @@ Send a HID Gamepad report indicating no buttons pressed. .. code-block:: c++ - void buttonReleaseAll (void); + void buttonReleaseAll (void); **Parameters** ~~~~~~~~~~~~~~ @@ -286,9 +308,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDGamepad `_ +Example: `BLEHIDGamepad `_ -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::setHat** ------------------------- @@ -303,22 +325,30 @@ Send a HID Gamepad report indicating hat switch position. .. code-block:: c++ - void setHat (uint8_t hat); + void setHat (uint8_t hat); **Parameters** ~~~~~~~~~~~~~~ -hat: position of hat switch. Valid values: +hat: position of hat switch. -- GAMEPAD_HAT_CENTERED = 0 -- GAMEPAD_HAT_UP = 1 -- GAMEPAD_HAT_UP_RIGHT = 2 -- GAMEPAD_HAT_RIGHT = 3 -- GAMEPAD_HAT_DOWN_RIGHT = 4 -- GAMEPAD_HAT_DOWN = 5 -- GAMEPAD_HAT_DOWN_LEFT = 6 -- GAMEPAD_HAT_LEFT = 7 -- GAMEPAD_HAT_UP_LEFT = 8 +- GAMEPAD_HAT_CENTERED (0) + +- GAMEPAD_HAT_UP (1) + +- GAMEPAD_HAT_UP_RIGHT (2) + +- GAMEPAD_HAT_RIGHT (3) + +- GAMEPAD_HAT_DOWN_RIGHT (4) + +- GAMEPAD_HAT_DOWN (5) + +- GAMEPAD_HAT_DOWN_LEFT (6) + +- GAMEPAD_HAT_LEFT (7) + +- GAMEPAD_HAT_UP_LEFT (8) **Returns** ~~~~~~~~~~~ @@ -330,7 +360,7 @@ NA NA -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::setAxes** -------------------------- @@ -345,22 +375,34 @@ Send a HID Gamepad report indicating position of all axes. .. code-block:: c++ - void setAxes (int16_t x, int16_t y, int16_t z, int16_t Rz, int16_t Rx, int16_t Ry); + void setAxes (int16_t x, int16_t y, int16_t z, int16_t Rz, int16_t Rx, int16_t Ry); **Parameters** ~~~~~~~~~~~~~~ -x: position of x axis. Integer value from -32767 to 32767. +x: position of x axis in integer. + +- -32767 to 32767. + +y: position of y axis in integer. -y: position of y axis. Integer value from -32767 to 32767. +- -32767 to 32767. -z: position of z axis. Integer value from -32767 to 32767. +z: position of z axis in integer. -Rz: position of Rz axis. Integer value from -32767 to 32767. +- -32767 to 32767. -Rx: position of Rx axis. Integer value from -32767 to 32767. +Rz: position of Rz axis in integer. -Ry: position of Ry axis. Integer value from -32767 to 32767. +- -32767 to 32767. + +Rx: position of Rx axis in integer. + +- -32767 to 32767. + +Ry: position of Ry axis in integer. + +- -32767 to 32767. **Returns** ~~~~~~~~~~~ @@ -370,9 +412,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDGamepad `_ +Example: `BLEHIDGamepad `_ -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::setLeftStick** ------------------------------- @@ -387,14 +429,18 @@ Send a HID Gamepad report indicating position of axes corresponding to left anal .. code-block:: c++ - void setLeftStick (int16_t x, int16_t y); + void setLeftStick (int16_t x, int16_t y); **Parameters** ~~~~~~~~~~~~~~ -x: position of x axis. Integer value from -32767 to 32767. +x: position of x axis in integer. + +- -32767 to 32767. -y: position of y axis. Integer value from -32767 to 32767. +y: position of y axis in integer. + +- -32767 to 32767. **Returns** ~~~~~~~~~~~ @@ -406,7 +452,7 @@ NA NA -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::setRightStick** -------------------------------- @@ -421,14 +467,18 @@ Send a HID Gamepad report indicating position of axes corresponding to right ana .. code-block:: c++ - void setLeftStick (int16_t z, int16_t Rz); + void setLeftStick (int16_t z, int16_t Rz); **Parameters** ~~~~~~~~~~~~~~ -z: position of z axis. Integer value from -32767 to 32767. +z: position of z axis in integer. + +- -32767 to 32767. + +Rz: position of Rz axis in integer. -Rz: position of Rz axis. Integer value from -32767 to 32767. +- -32767 to 32767. **Returns** ~~~~~~~~~~~ @@ -440,7 +490,7 @@ NA NA -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. **BLEHIDGamepad::setTriggers** ------------------------------ @@ -455,14 +505,18 @@ Send a HID Gamepad report indicating position of axes corresponding to triggers. .. code-block:: c++ - void setTriggers (int16_t Rx, int16_t Ry); + void setTriggers (int16_t Rx, int16_t Ry); **Parameters** ~~~~~~~~~~~~~~ -Rx: position of Rx axis. Integer value from -32767 to 32767. +Rx: position of Rx axis in integer. + +- -32767 to 32767. + +Ry: position of Ry axis in integer. -Ry: position of Ry axis. Integer value from -32767 to 32767. +- -32767 to 32767. **Returns** ~~~~~~~~~~~ @@ -474,4 +528,4 @@ NA NA -.. note :: “BLEHIDGamepad.h” must be included to use the class function. +.. note :: "BLEHIDGamepad.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEHIDKeyboard.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDKeyboard.rst index 070e42d..c6fe99d 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEHIDKeyboard.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDKeyboard.rst @@ -26,12 +26,12 @@ A class used for creating and managing a BLE HID Keyboard. **Public Constructors** +------------------------------------+------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+====================================+ | BLEHIDKeyboard::BLEHIDKeyboard | Constructs a BLEHIDKeyboard | | | object | +------------------------------------+------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+------------------------------------+ | BLEHIDKeyboard::setReportID | Set HID report ID for the HID | | | Keyboard and HID consumer | @@ -93,9 +93,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDKeyboard `_ +Example: `BLEHIDKeyboard `_ -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::setReportID** @@ -114,11 +114,9 @@ Set HID report ID for the HID Keyboard and HID consumer control. **Parameters** ~~~~~~~~~~~~~~ -reportIDKeyboard: The report ID for the HID keyboard device, -corresponding to the HID report descriptor. +reportIDKeyboard: The report ID for the HID keyboard device, corresponding to the HID report descriptor. -reportIDConsumer: The report ID for the HID consumer control device, -corresponding to the HID report descriptor. +reportIDConsumer: The report ID for the HID consumer control device, corresponding to the HID report descriptor. **Returns** ~~~~~~~~~~~ @@ -130,7 +128,7 @@ NA NA -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::consumerReport** ---------------------------------- @@ -162,7 +160,7 @@ NA NA -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::keyboardReport** ---------------------------------- @@ -178,7 +176,6 @@ Send a HID Keyboard report. .. code-block:: c++ void keyboardReport (void); - void keyboardReport (uint8_t modifiers, uint8_t keycode[6]); **Parameters** @@ -198,7 +195,7 @@ NA NA -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::consumerPress** --------------------------------- @@ -228,9 +225,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDKeyboard `_ +Example: `BLEHIDKeyboard `_ -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::consumerRelease** ----------------------------------- @@ -260,9 +257,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDKeyboard `_ +Example: `BLEHIDKeyboard `_ -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::keypress** ---------------------------- @@ -282,7 +279,9 @@ Send a HID Keyboard report indicating keys pressed. **Parameters** ~~~~~~~~~~~~~~ -key: HID keycode for key pressed, value ranges from 0x00 to 0xE7. +key: HID keycode for key pressed. + +- 0x00 to 0xE7. **Returns** ~~~~~~~~~~~ @@ -292,9 +291,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDKeyboard `_ +Example: `BLEHIDKeyboard `_ -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::keyRelease** ------------------------------ @@ -314,7 +313,9 @@ Send a HID Keyboard report indicating keys released. **Parameters** ~~~~~~~~~~~~~~ -key: HID keycode for key pressed, value ranges from 0x00 to 0xE7. +key: HID keycode for key pressed. + +- 0x00 to 0xE7. **Returns** ~~~~~~~~~~~ @@ -326,7 +327,7 @@ NA NA -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::keyReleaseAll** --------------------------------- @@ -356,9 +357,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDKeyboard `_ +Example: `BLEHIDKeyboard `_ -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. **BLEHIDKeyboard::keyCharPress** -------------------------------- @@ -366,8 +367,7 @@ Example: `BLEHIDKeyboard `_ +Example: `BLEHIDKeyboard `_ -.. note :: “BLEHIDKeyboard.h” must be included to use the class function. +.. note :: "BLEHIDKeyboard.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEHIDMouse.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDMouse.rst index 892d5f0..c0fec29 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEHIDMouse.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDMouse.rst @@ -18,18 +18,17 @@ A class used for creating and managing a BLE HID Mouse. .. code-block:: c++ - class BLEHIDMouse - + class BLEHIDMouse **Members** ~~~~~~~~~~~ +----------------------------+-----------------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +============================+=========================================+ | BLEHIDMouse::BLEHIDMouse | Constructs a BLEHIDMouse object | +----------------------------+-----------------------------------------+ -| **Public Methods** | | +| **Public Methods** | +----------------------------+-----------------------------------------+ | BLEHIDMouse::setReportID | Set HID report ID for the HID Mouse | +----------------------------+-----------------------------------------+ @@ -64,7 +63,7 @@ Constructs a BLEHIDMouse object. .. code-block:: c++ - BLEHIDMouse(void); + BLEHIDMouse(void); **Parameters** ~~~~~~~~~~~~~~ @@ -78,12 +77,12 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ - -.. note :: “BLEHIDMouse.h” must be included to use the class function. +Example: `BLEHIDMouse `_ +.. note :: "BLEHIDMouse.h" must be included to use the class function. **BLEHIDMouse::setReportID** +---------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -95,7 +94,7 @@ Set HID report ID for the HID Mouse. .. code-block:: c++ - void setReportID (uint8_t reportID); + void setReportID (uint8_t reportID); **Parameters** ~~~~~~~~~~~~~~ @@ -112,8 +111,7 @@ NA NA -.. note :: “BLEHIDMouse.h” must be included to use the class function. - +.. note :: "BLEHIDMouse.h" must be included to use the class function. **BLEHIDMouse::mouseReport** ---------------------------- @@ -128,21 +126,31 @@ Send a HID Mouse report. .. code-block:: c++ - void mouseReport (hid_mouse_report_t* report); - void mouseReport (uint8_t buttons, int8_t x, int8_t y, int8_t scroll); + void mouseReport (hid_mouse_report_t* report); + void mouseReport (uint8_t buttons, int8_t x, int8_t y, int8_t scroll); **Parameters** ~~~~~~~~~~~~~~ -report: pointer to mouse report structure containing data on mouse inputs +report: pointer to mouse report structure containing data on mouse inputs. + +buttons: bitmap indicating state of each button. + +- 1 (pressed) + +- 0 (released) + +x: mouse x-axis movement in integer. -buttons: bitmap indicating state of each button. 1 = pressed, 0 = released. +- -127 to 127. -x: mouse x-axis movement. Integer value from -127 to 127. +y: mouse y-axis movement in integer. -y: mouse y-axis movement. Integer value from -127 to 127. +- -127 to 127. -scroll: mouse scroll wheel movement. Integer value from -127 to 127. +scroll: mouse scroll wheel movement in integer. + +- -127 to 127. **Returns** ~~~~~~~~~~~ @@ -154,7 +162,7 @@ NA NA -.. note :: “BLEHIDMouse.h” must be included to use the class function. +.. note :: "BLEHIDMouse.h" must be included to use the class function. **BLEHIDMouse::mousePress** --------------------------- @@ -169,12 +177,14 @@ Send a HID Mouse report indicating buttons pressed. .. code-block:: c++ - void mousePress (uint8_t buttons); + void mousePress (uint8_t buttons); **Parameters** ~~~~~~~~~~~~~~ -buttons: bitmap indicating buttons pressed. 1 = pressed. +buttons: bitmap indicating buttons pressed. + +- 1 (pressed) **Returns** ~~~~~~~~~~~ @@ -184,9 +194,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ +Example: `BLEHIDMouse `_ -.. note :: “BLEHIDMouse.h” must be included to use the class function. +.. note :: "BLEHIDMouse.h" must be included to use the class function. **BLEHIDMouse::mouseRelease** ----------------------------- @@ -201,12 +211,14 @@ Send a HID Mouse report indicating buttons released. .. code-block:: c++ - void mouseRelease (uint8_t buttons); + void mouseRelease (uint8_t buttons); **Parameters** ~~~~~~~~~~~~~~ -buttons: bitmap indicating buttons released. 1 = released. +buttons: bitmap indicating buttons released. + +- 1 (pressed) **Returns** ~~~~~~~~~~~ @@ -216,10 +228,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ - -.. note :: “BLEHIDMouse.h” must be included to use the class function. +Example: `BLEHIDMouse `_ +.. note :: "BLEHIDMouse.h" must be included to use the class function. **BLEHIDMouse::mouseReleaseAll** -------------------------------- @@ -234,7 +245,7 @@ Send a HID Mouse report indicating no buttons pressed. .. code-block:: c++ - void mouseReleaseAll(void); + void mouseReleaseAll(void); **Parameters** ~~~~~~~~~~~~~~ @@ -251,7 +262,7 @@ NA NA -.. note :: “BLEHIDMouse.h” must be included to use the class function. +.. note :: "BLEHIDMouse.h" must be included to use the class function. **BLEHIDMouse::mouseMove** -------------------------- @@ -266,14 +277,18 @@ Send a HID Mouse report indicating mouse movement. .. code-block:: c++ - void mouseMove (int8_t x, int8_t y); + void mouseMove (int8_t x, int8_t y); **Parameters** ~~~~~~~~~~~~~~ -x: mouse x-axis movement. Integer value from -127 to 127. +x: mouse x-axis movement in integer. -y: mouse y-axis movement. Integer value from -127 to 127. +- -127 to 127. + +y: mouse y-axis movement in integer. + +- -127 to 127. **Returns** ~~~~~~~~~~~ @@ -283,9 +298,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ +Example: `BLEHIDMouse `_ -.. note :: “BLEHIDMouse.h” must be included to use the class function. +.. note :: "BLEHIDMouse.h" must be included to use the class function. **BLEHIDMouse::mouseScroll** ---------------------------- @@ -305,7 +320,9 @@ Send a HID Mouse report indicating mouse scroll wheel movement. **Parameters** ~~~~~~~~~~~~~~ -scroll: mouse scroll wheel movement. Integer value from -127 to 127. +scroll: mouse scroll wheel movement in integer. + +- -127 to 127. **Returns** ~~~~~~~~~~~ @@ -315,6 +332,6 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ +Example: `BLEHIDMouse `_ -.. note :: “BLEHIDMouse.h” must be included to use the class function. +.. note :: "BLEHIDMouse.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst b/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst index 5d25492..f81d1c0 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst @@ -18,19 +18,19 @@ A class used for managing BLE GATT characteristics on connected remote devices. .. code-block:: c++ - class BLERemoteCharacteristic + class BLERemoteCharacteristic **Members** ~~~~~~~~~~~ +------------------------------------+---------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+=================================+ | No public constructor is available for this class. You can get a | | pointer to an instance of this class using | | BLERemoteService::getCharacteristic(). | -+------------------------------------+---------------------------------+ -| **Public Methods** | | ++------------------------------------+---------------------------------+ +| **Public Methods** | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic:: | Get a descriptor with the | | getDescriptor | specified UUID on the | @@ -76,34 +76,34 @@ A class used for managing BLE GATT characteristics on connected remote devices. | | integer | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic:: | Write data to the | -| writeString | characteristic as a String | +| writeString | characteristic as a String | | | object or character array | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic::writeData8| Write data to the | -| | characteristic as an unsigned | +| | characteristic as an unsigned | | | 8-bit integer | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic:: | Write data to the | -| writeData16 | characteristic as an unsigned | +| writeData16 | characteristic as an unsigned | | | 16-bit integer | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic:: | Write data to the | -| writeData32 | characteristic as an unsigned | +| writeData32 | characteristic as an unsigned | | | 32-bit integer | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic::setData | Write data to the remote device | | | characteristic | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic::getData | Get the characteristic data | -| | from the remote device and read | -| | the data in the buffer | +| | from the remote device and read | +| | the data in the buffer | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic:: | Enable notification or | -| enableNotifyIndicate | indication for the | -| | characteristic | +| enableNotifyIndicate | indication for the | +| | characteristic | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic:: | Disable notification and | -| disableNotifyIndicate | indication for the | +| disableNotifyIndicate | indication for the | | | characteristic | +------------------------------------+---------------------------------+ | BLERemoteCharacteristic:: | Set a user function as a | @@ -123,27 +123,25 @@ Get a descriptor with the specified UUID on the remote device. .. code-block:: c++ - BLERemoteDescriptor* getDescriptor(const char* uuid); - BLERemoteDescriptor* getDescriptor(BLEUUID uuid); + BLERemoteDescriptor* getDescriptor(const char* uuid); + BLERemoteDescriptor* getDescriptor(BLEUUID uuid); **Parameters** ~~~~~~~~~~~~~~ -uuid: the desired descriptor UUID, expressed as a character array or a BLEUUID object +uuid: the desired descriptor UUID, expressed as a character array or a BLEUUID object. **Returns** ~~~~~~~~~~~ -This function returns the found descriptor as a BLERemoteDescriptor -object pointer, otherwise nullptr is returned if a descriptor with the UUID is not found. +This function returns the found descriptor as a BLERemoteDescriptor object pointer, otherwise nullptr is returned if a descriptor with the UUID is not found. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::getUUID** ------------------------------------ @@ -158,7 +156,7 @@ Get the characteristic UUID. .. code-block:: c++ - BLEUUID getUUID(void); + BLEUUID getUUID(void); **Parameters** ~~~~~~~~~~~~~~ @@ -175,8 +173,7 @@ The function returns the characteristic UUID as a BLEUUID class object. NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::setBufferLen** ----------------------------------------- @@ -191,12 +188,12 @@ Set the size of the internal data buffer of the characteristic. .. code-block:: c++ - void setBufferLen(uint16_t max_len); + void setBufferLen(uint16_t max_len); **Parameters** ~~~~~~~~~~~~~~ -max_len: the size in bytes to resize the internal buffer to +max_len: the size in bytes to resize the internal buffer to. **Returns** ~~~~~~~~~~~ @@ -206,11 +203,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartClient `_ +Example: `BLEUartClient `_ -.. note :: Characteristic data buffer has a default size of 20 bytes and can be - increased up to 230 bytes. “BLERemoteCharacteristic.h” must be - included to use the class function. +.. note :: Characteristic data buffer has a default size of 20 bytes and can be increased up to 230 bytes. "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::getBufferLen** ----------------------------------------- @@ -225,7 +220,7 @@ Get the current size of the characteristic internal buffer. .. code-block:: c++ - uint16_t getBufferLen(void); + uint16_t getBufferLen(void); **Parameters** ~~~~~~~~~~~~~~ @@ -242,9 +237,7 @@ This function returns the current internal buffer size that is set. NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. - +.. note :: "BLERemoteCharacteristic.h" must be included to use the clas function. **BLERemoteCharacteristic::canRead** ------------------------------------ @@ -259,7 +252,7 @@ Determine if characteristic has read property enabled. .. code-block:: c++ - bool canRead(void); + bool canRead(void); **Parameters** ~~~~~~~~~~~~~~ @@ -276,8 +269,7 @@ This function returns TRUE if the read property for the characteristic is enable NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::canWrite** @@ -293,7 +285,7 @@ Determine if characteristic has write property enabled. .. code-block:: c++ - bool canWrite(void); + bool canWrite(void); **Parameters** ~~~~~~~~~~~~~~ @@ -310,8 +302,7 @@ This function returns TRUE if the write property or the write no response proper NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::canNotify** -------------------------------------- @@ -326,7 +317,7 @@ Determine if characteristic has notify property enabled. .. code-block:: c++ - bool canNotify(void); + bool canNotify(void); **Parameters** ~~~~~~~~~~~~~~ @@ -343,8 +334,7 @@ The function returns TRUE if the notify property for the characteristic is enabl NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::canIndicate** ---------------------------------------- @@ -359,7 +349,7 @@ Determine if characteristic has indicate property enabled. .. code-block:: c++ - bool canIndicate(void); + bool canIndicate(void); **Parameters** ~~~~~~~~~~~~~~ @@ -376,8 +366,7 @@ The function returns TRUE if the indicate property for the characteristic is ena NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::getProperties** ------------------------------------------ @@ -392,7 +381,7 @@ Get the characteristic properties. .. code-block:: c++ - uint16_t getProperties(void); + uint16_t getProperties(void); **Parameters** ~~~~~~~~~~~~~~ @@ -409,8 +398,7 @@ The function returns the characteristic properties. NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::readString** --------------------------------------- @@ -418,15 +406,14 @@ NA **Description** ~~~~~~~~~~~~~~~ -Request for characteristic data from the remote device and read the -data in the buffer, expressed as a String class object. +Request for characteristic data from the remote device and read the data in the buffer, expressed as a String class object. **Syntax** ~~~~~~~~~~ .. code-block:: c++ - String readString(void); + String readString(void); **Parameters** ~~~~~~~~~~~~~~ @@ -436,16 +423,14 @@ NA **Returns** ~~~~~~~~~~~ -The function returns the data in the characteristic data buffer -expressed as a String class object. +The function returns the data in the characteristic data buffer expressed as a String class object. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartClient `_ +Example: `BLEUartClient `_ -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::readData8** -------------------------------------- @@ -453,15 +438,14 @@ Example: `BLEUartClient `_ +Example: `BLEBatteryClient `_ -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::readData16** --------------------------------------- @@ -487,15 +470,14 @@ Example: `BLEBatteryClient `_ +Example: `BLEUartClient `_ -.. note :: “BLERemoteCharacteristic.h” must be included to use the class function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::disableNotifyIndicate** -------------------------------------------------- @@ -798,7 +775,7 @@ Disable receiving notifications and indications for the characteristic from the .. code-block:: c++ - void disableNotifyIndicate(void); + void disableNotifyIndicate(void); **Parameters** @@ -814,8 +791,7 @@ NA NA -.. note :: “BLERemoteCharacteristic.h” must be included to use the class - function. +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. **BLERemoteCharacteristic::setNotifyCallback** ---------------------------------------------- @@ -830,7 +806,7 @@ Set a user function to be called when the characteristic receives a notification .. code-block:: c++ - void setNotifyCallback(void (*fCallback) (BLERemoteCharacteristic* chr, uint8_t* data, uint16_t length)); + void setNotifyCallback(void (*fCallback) (BLERemoteCharacteristic* chr, uint8_t* data, uint16_t length)); **Parameters** ~~~~~~~~~~~~~~ @@ -851,6 +827,6 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartClient `_ +Example: `BLEUartClient `_ -.. note :: “BLERemoteCharacteristic.h” must be included to use the class function. \ No newline at end of file +.. note :: "BLERemoteCharacteristic.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLERemoteDescriptor.rst b/source/amebapro2/API_Documents/BLE/Class BLERemoteDescriptor.rst index 3be442d..55110a7 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLERemoteDescriptor.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLERemoteDescriptor.rst @@ -24,13 +24,13 @@ A class used for managing BLE GATT descriptors on connected remote devices. ~~~~~~~~~~~ +------------------------------------+---------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+=================================+ | No public constructor is available for this class. You can get a | | pointer to an instance of this class using | -| BLERemoteCharacteristic::getDescriptor(). | +| BLERemoteCharacteristic::getDescriptor() | +------------------------------------+---------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+---------------------------------+ | BLERemoteDescriptor::getUUID | Get the descriptor UUID | +------------------------------------+---------------------------------+ @@ -65,7 +65,7 @@ A class used for managing BLE GATT descriptors on connected remote devices. | BLERemoteDescriptor::writeData32 | Write data to the descriptor | | | as an unsigned 32-bit integer | +------------------------------------+---------------------------------+ -| BLERemoteDescriptor::setData | Write data to the descriptor. | +| BLERemoteDescriptor::setData | Write data to the descriptor | +------------------------------------+---------------------------------+ | BLERemoteDescriptor::getData | Get data from the descriptor | +------------------------------------+---------------------------------+ @@ -100,7 +100,7 @@ This function returns the descriptor UUID as a BLEUUID class object. NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::setBufferLen** ------------------------------------- @@ -132,10 +132,7 @@ NA NA -.. note :: Descriptor data buffer has a default size of 20 bytes and can be - increased up to 230 bytes. - - “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: Descriptor data buffer has a default size of 20 bytes and can be increased up to 230 bytes. "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::getBufferLen** ------------------------------------- @@ -167,7 +164,7 @@ This function returns the current internal buffer size that is set. NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::readString** ----------------------------------- @@ -175,8 +172,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Request for descriptor data from the remote device and read the data in -the buffer, expressed as a String class object. +Request for descriptor data from the remote device and read the data in the buffer, expressed as a String class object. **Syntax** ~~~~~~~~~~ @@ -200,7 +196,7 @@ The function returns the data in the descriptor buffer expressed as a String cla NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::readData8** ---------------------------------- @@ -208,8 +204,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Request for descriptor data from the remote device and read the data in -the buffer, expressed as an unsigned 8-bit integer. +Request for descriptor data from the remote device and read the data in the buffer, expressed as an unsigned 8-bit integer. **Syntax** ~~~~~~~~~~ @@ -233,7 +228,7 @@ The function returns the data in the descriptor buffer expressed as a uint8_t va NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::readData16** ----------------------------------- @@ -241,8 +236,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Request for descriptor data from the remote device and read the data in -the buffer, expressed as an unsigned 16-bit integer. +Request for descriptor data from the remote device and read the data in the buffer, expressed as an unsigned 16-bit integer. **Syntax** ~~~~~~~~~~ @@ -266,7 +260,7 @@ The function returns the data in the descriptor buffer expressed as a uint16_t v NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::readData32** ----------------------------------- @@ -274,8 +268,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Request for descriptor data from the remote device and read the data in -the buffer, expressed as an unsigned 32-bit integer. +Request for descriptor data from the remote device and read the data in the buffer, expressed as an unsigned 32-bit integer. **Syntax** ~~~~~~~~~~ @@ -292,15 +285,14 @@ NA **Returns** ~~~~~~~~~~~ -The function returns the data in the descriptor buffer expressed as a -uint32_t value. +The function returns the data in the descriptor buffer expressed as a uint32_t value. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::writeString** ------------------------------------ @@ -316,27 +308,24 @@ Write data to the remote device descriptor as a String object or character array .. code-block:: c++ bool writeString(String str); - bool writeString(const char* str); **Parameters** ~~~~~~~~~~~~~~ -str: the data to write to the remote descriptor, expressed as a String -class object or a char array. +str: the data to write to the remote descriptor, expressed as a String class object or a char array. **Returns** ~~~~~~~~~~~ -This function returns TRUE if writing data to remote device descriptor -is successful. +This function returns TRUE if writing data to remote device descriptor is successful. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::writeData8** ----------------------------------- @@ -361,15 +350,14 @@ num: the data to write to the descriptor buffer expressed as an unsigned 8-bit i **Returns** ~~~~~~~~~~~ -This function returns TRUE if writing data to remote device descriptor -is successful. +This function returns TRUE if writing data to remote device descriptor is successful. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::writeData16** ------------------------------------ @@ -377,8 +365,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Write data to the remote device descriptor as an unsigned 16-bit -integer. +Write data to the remote device descriptor as an unsigned 16-bit integer. **Syntax** ~~~~~~~~~~ @@ -390,21 +377,19 @@ integer. **Parameters** ~~~~~~~~~~~~~~ -num: the data to write to the descriptor buffer expressed as an unsigned -16-bit integer. +num: the data to write to the descriptor buffer expressed as an unsigned 16-bit integer. **Returns** ~~~~~~~~~~~ -This function returns TRUE if writing data to remote device descriptor -is successful. +This function returns TRUE if writing data to remote device descriptor is successful. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::writeData32** ------------------------------------ @@ -420,7 +405,6 @@ Write data to the remote device descriptor as a 32-bit integer. .. code-block:: c++ bool writeData32(uint32_t num); - bool writeData32(int num); **Parameters** @@ -438,7 +422,7 @@ This function returns TRUE if writing data to remote device descriptor is succes NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::setData** -------------------------------- @@ -458,9 +442,9 @@ Write data to the descriptor. **Parameters** ~~~~~~~~~~~~~~ -data: pointer to byte array containing desired data to write +data: pointer to byte array containing desired data to write. -datalen: number of bytes of data to write +datalen: number of bytes of data to write. **Returns** ~~~~~~~~~~~ @@ -472,7 +456,7 @@ This function returns TRUE if writing data to remote device descriptor is succes NA -.. note :: “BLERemoteDescriptor.h” must be included to use the class function. +.. note :: "BLERemoteDescriptor.h" must be included to use the class function. **BLERemoteDescriptor::getData** -------------------------------- @@ -492,9 +476,9 @@ Get the descriptor data from the remote device and read the data in the buffer. **Parameters** ~~~~~~~~~~~~~~ -data: pointer to byte array to save data read from buffer +data: pointer to byte array to save data read from buffer. -datalen: number of bytes of data to read +datalen: number of bytes of data to read. **Returns** ~~~~~~~~~~~ @@ -506,7 +490,4 @@ The function returns the number of bytes read. NA -.. note :: If the data buffer contains less data than requested, it will only read - the available number of bytes of data. - - “BLERemoteDescriptor.h” must be included to use the class function. \ No newline at end of file +.. note :: If the data buffer contains less data than requested, it will only read the available number of bytes of data. "BLERemoteDescriptor.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLERemoteService.rst b/source/amebapro2/API_Documents/BLE/Class BLERemoteService.rst index 190a447..9718074 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLERemoteService.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLERemoteService.rst @@ -24,12 +24,12 @@ A class used for managing BLE GATT services on connected remote devices. ~~~~~~~~~~~ +------------------------------------+---------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+=================================+ | No public constructor is available for this class. You can get a | | pointer to an instance of this class using BLEClient::getService(). | +------------------------------------+---------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+---------------------------------+ | BLERemoteService::getUUID | Get the service UUID | +------------------------------------+---------------------------------+ @@ -67,7 +67,7 @@ This function returns the service UUID as a BLEUUID class object. NA -.. note :: “BLERemoteService.h” must be included to use the class function. +.. note :: "BLERemoteService.h" must be included to use the class function. **BLERemoteService::getCharacteristic** --------------------------------------- @@ -83,7 +83,6 @@ Get a characteristic with the specified UUID on the remote device. .. code-block:: c++ BLERemoteCharacteristic* getCharacteristic (const char* uuid); - BLERemoteCharacteristic* getCharacteristic (BLEUUID uuid); **Parameters** @@ -94,13 +93,11 @@ uuid: the desired characteristic UUID, expressed as a character array or a BLEUU **Returns** ~~~~~~~~~~~ -The function returns the found characteristic as a -BLERemoteCharacteristic object pointer, otherwise nullptr is returned if -a characteristic with the UUID is not found. +The function returns the found characteristic as a BLERemoteCharacteristic object pointer, otherwise nullptr is returned if a characteristic with the UUID is not found. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartClient `_ +Example: `BLEUartClient `_ -.. note :: BLERemoteService.h” must be included to use the class function. \ No newline at end of file +.. note :: BLERemoteService.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEScan.rst b/source/amebapro2/API_Documents/BLE/Class BLEScan.rst index f226fb4..2b8c7eb 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEScan.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEScan.rst @@ -24,13 +24,13 @@ A class used for managing BLE scanning settings. ~~~~~~~~~~~ +------------------------------------+---------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+=================================+ | No public constructor is available as this class is intended to be a | | singleton class. You can get a pointer to this class using | | BLEDevice::configScan | +------------------------------------+---------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+---------------------------------+ | BLEScan::updateScanParams | Update the lower Bluetooth | | | stack with the current scan | @@ -83,12 +83,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ -.. note :: Stop any scans in progress first before using this - function. - - “BLEScan.h” must be included to use the class function. +.. note :: Stop any scans in progress first before using this function. "BLEScan.h" must be included to use the class function. **BLEScan::startScan** ---------------------- @@ -104,7 +101,6 @@ Start BLE scanning. .. code-block:: c++ void startScan(void); - void startScan(uint32_t scanDuration_ms); **Parameters** @@ -120,15 +116,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ - -.. note :: Set the scan parameters first before starting a scan. BLE scans will - occur continuously for the duration set with BLEDevice::setScanWindow() - and will repeat with a time interval set with - BLEDevice::setScanInterval(). Call this member function without an - argument to start scanning until BLEDevice::stopScan() is called. +Example: `BLEScan `_ - “BLEScan.h” must be included to use the class function. +.. note :: Set the scan parameters first before starting a scan. BLE scans will occur continuously for the duration set with BLEDevice::setScanWindow() and will repeat with a time interval set with BLEDevice::setScanInterval(). Call this member function without an argument to start scanning until BLEDevice::stopScan() is called. "BLEScan.h" must be included to use the class function. **BLEScan::stopScan** --------------------- @@ -160,7 +150,7 @@ NA NA -.. note :: “BLEScan.h” must be included to use the class function. +.. note :: "BLEScan.h" must be included to use the class function. **BLEScan::setScanMode** ------------------------ @@ -180,10 +170,7 @@ Set the BLE scanning mode. **Parameters** ~~~~~~~~~~~~~~ -scanMode: GAP_SCAN_MODE_PASSIVE for passive scanning, -GAP_SCAN_MODE_ACTIVE for active scanning. - -Default value: GAP_SCAN_MODE_ACTIVE. +scanMode: GAP_SCAN_MODE_PASSIVE for passive scanning, GAP_SCAN_MODE_ACTIVE for active scanning. Default value is GAP_SCAN_MODE_ACTIVE. **Returns** ~~~~~~~~~~~ @@ -193,12 +180,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ -.. note :: Active scanning will request for scan response packets after discovering - an advertising device. Passive scanning will only capture advertising data packets. - - “BLEScan.h” must be included to use the class function. +.. note :: Active scanning will request for scan response packets after discovering an advertising device. Passive scanning will only capture advertising data packets. "BLEScan.h" must be included to use the class function. **BLEScan::setScanInterval** ---------------------------- @@ -218,9 +202,9 @@ Set the BLE scanning interval. **Parameters** ~~~~~~~~~~~~~~ -scanInt_ms: scan interval in milliseconds. Value range of 3 to 10240. +scanInt_ms: scan interval in milliseconds. Default value is 40. -Default value of 40ms. +- 3 to 10240. **Returns** ~~~~~~~~~~~ @@ -230,12 +214,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ -.. note :: A BLE scan will repeat with a time interval set with this member - function. - - “BLEScan.h” must be included to use the class function. +.. note :: A BLE scan will repeat with a time interval set with this member function. "BLEScan.h" must be included to use the class function. **BLEScan::setScanWindow** -------------------------- @@ -255,9 +236,9 @@ Set the BLE scanning window. **Parameters** ~~~~~~~~~~~~~~ -scanWindow_ms: scan window in milliseconds. Value range of 3 to 10240. +scanWindow_ms: scan window in milliseconds. Default value is 30. -Default value of 30ms. +- 3 to 10240. **Returns** ~~~~~~~~~~~ @@ -267,13 +248,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ -.. note :: A BLE scan will scan continuously for a window duration set with this - member function. The scan window should be less than or equal to the - scan interval. - - “BLEScan.h” must be included to use the class function. +.. note :: A BLE scan will scan continuously for a window duration set with this member function. The scan window should be less than or equal to the scan interval. "BLEScan.h" must be included to use the class function. **BLEScan::setScanDuplicateFilter** ----------------------------------- @@ -305,10 +282,7 @@ NA NA -.. note :: Enabling duplicate filters will ignore scan results for devices already - discovered previously. - - “BLEScan.h” must be included to use the class function. +.. note :: Enabling duplicate filters will ignore scan results for devices already discovered previously. "BLEScan.h" must be included to use the class function. **BLEScan::scanInProgress** --------------------------- @@ -340,7 +314,7 @@ This function returns TRUE if BLE scanning is in progress. NA -.. note :: “BLEScan.h” must be included to use the class function. +.. note :: "BLEScan.h" must be included to use the class function. **BLEScan::printScanInfo** -------------------------- @@ -370,9 +344,6 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ -.. note :: Use this member function to parse the various fields of received - advertisement data packets and print the results out to the serial monitor. - - “BLEScan.h” must be included to use the class function. \ No newline at end of file +.. note :: Use this member function to parse the various fields of received advertisement data packets and print the results out to the serial monitor. "BLEScan.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLESecurity.rst b/source/amebapro2/API_Documents/BLE/Class BLESecurity.rst index 68b0f54..2184a90 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLESecurity.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLESecurity.rst @@ -24,13 +24,13 @@ A class used for creating and managing BLE bonding security parameters. ~~~~~~~~~~~ +------------------------------------+---------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+=================================+ | No public constructor is available as this class is intended to be a | | singleton class. You can get a pointer to this class using | | BLEDevice::configSecurity | +------------------------------------+---------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+---------------------------------+ | BLESecurity::setPairable | Enable pairing and bonding after| | | BLE connection | @@ -90,9 +90,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ +Example: `BLEHIDMouse `_ -.. note :: “BLESecurity.h” must be included to use the class function. +.. note :: "BLESecurity.h" must be included to use the class function. **BLESecurity::setAuthFlags** ----------------------------- @@ -114,8 +114,6 @@ Set BLE bonding security requirements. authFlags: desired BLE bonding security requirements. -Valid values: - - GAP_AUTHEN_BIT_NONE - GAP_AUTHEN_BIT_BONDING_FLAG @@ -138,9 +136,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEHIDMouse `_ +Example: `BLEHIDMouse `_ -.. note :: “BLESecurity.h” must be included to use the class function. +.. note :: "BLESecurity.h" must be included to use the class function. **BLESecurity::setIOCapability** -------------------------------- @@ -160,9 +158,7 @@ Set BLE device input and output capabilities. **Parameters** ~~~~~~~~~~~~~~ -ioCap: desired device input output capabilities. - -Valid values: +ioCap: desired device input output capabilities. Default value is GAP_IO_CAP_NO_INPUT_NO_OUTPUT. - GAP_IO_CAP_NO_INPUT_NO_OUTPUT @@ -174,10 +170,6 @@ Valid values: - GAP_IO_CAP_KEYBOARD_DISPLAY -Default values: - -- GAP_IO_CAP_NO_INPUT_NO_OUTPUT - **Returns** ~~~~~~~~~~~ @@ -188,10 +180,7 @@ NA NA -.. note :: The IO capabilities of the peripheral and central device will determine - which bonding authentication method is used. - - “BLESecurity.h” must be included to use the class function. +.. note :: The IO capabilities of the peripheral and central device will determine which bonding authentication method is used. "BLESecurity.h" must be included to use the class function. **BLESecurity::setSecReqEnable** -------------------------------- @@ -211,9 +200,7 @@ Enable sending SMP security request when BLE connected. **Parameters** ~~~~~~~~~~~~~~ -secReq: TRUE to enable, FALSE to disable. - -Default value: FALSE +secReq: TRUE to enable, FALSE to disable. Default value is FALSE. **Returns** ~~~~~~~~~~~ @@ -225,7 +212,7 @@ NA NA -.. note :: “BLESecurity.h” must be included to use the class function. +.. note :: "BLESecurity.h" must be included to use the class function. **BLESecurity::setSecReqFlags** ------------------------------- @@ -245,9 +232,7 @@ Set security request requirements. **Parameters** ~~~~~~~~~~~~~~ -secReqFlags: desired security requirements. - -Valid values: +secReqFlags: desired security requirements. Default value is GAP_AUTHEN_BIT_NONE. - GAP_AUTHEN_BIT_NONE @@ -261,10 +246,6 @@ Valid values: - GAP_AUTHEN_BIT_FORCE_BONDING_FLAG -Default value: - -- GAP_AUTHEN_BIT_NONE - **Returns** ~~~~~~~~~~~ @@ -275,7 +256,7 @@ NA NA -.. note :: “BLESecurity.h” must be included to use the class function. +.. note :: "BLESecurity.h" must be included to use the class function. **BLESecurity::setStaticPin** ----------------------------- @@ -295,7 +276,9 @@ Configure device to use static pin input for BLE bonding. **Parameters** ~~~~~~~~~~~~~~ -pin: BLE bonding static pin. Valid values are 6-digit integers ranging from 000000 to 999999. +pin: BLE bonding static pin. Valid values are 6-digit integers. + +- 000000 to 999999. **Returns** ~~~~~~~~~~~ @@ -307,12 +290,7 @@ NA NA -.. note :: Using a static pin will enable BLE bonding and pairing, set the IO - capability to GAP_IO_CAP_DISPLAY_ONLY and set the bonding security - requirements flags to (GAP_AUTHEN_BIT_BONDING_FLAG \| - GAP_AUTHEN_BIT_MITM_FLAG \| GAP_AUTHEN_BIT_SC_FLAG). - - “BLESecurity.h” must be included to use the class function. +.. note :: Using a static pin will enable BLE bonding and pairing, set the IO capability to GAP_IO_CAP_DISPLAY_ONLY and set the bonding security requirements flags to (GAP_AUTHEN_BIT_BONDING_FLAG | GAP_AUTHEN_BIT_MITM_FLAG | GAP_AUTHEN_BIT_SC_FLAG). "BLESecurity.h" must be included to use the class function. **BLESecurity::setPasskeyDisplayCallback** ------------------------------------------ @@ -332,11 +310,11 @@ Set a user callback function for passkey display during BLE bonding. **Parameters** ~~~~~~~~~~~~~~ -fCallback: A user callback function that returns void and takes two arguments +fCallback: A user callback function that returns void and takes two arguments. -conn_id: connection ID of connecting device +conn_id: connection ID of connecting device. -passkey: bonding passkey to display to user to confirm connection +passkey: bonding passkey to display to user to confirm connection. **Returns** ~~~~~~~~~~~ @@ -348,7 +326,7 @@ NA NA -.. note :: “BLESecurity.h” must be included to use the class function. +.. note :: "BLESecurity.h" must be included to use the class function. **BLESecurity::setPasskeyInputCallback** ---------------------------------------- @@ -368,10 +346,9 @@ Set a user callback function for passkey input during BLE bonding. **Parameters** ~~~~~~~~~~~~~~ -fCallback: A user callback function that takes no arguments and returns -the bonding passkey entered by the user +fCallback: A user callback function that takes no arguments and returns the bonding passkey entered by the user. -conn_id: connection ID of connecting device +conn_id: connection ID of connecting device. **Returns** ~~~~~~~~~~~ @@ -383,9 +360,10 @@ NA NA -.. note :: “BLESecurity.h” must be included to use the class function. +.. note :: "BLESecurity.h" must be included to use the class function. **BLESecurity::setNumericComparisonCallback** +--------------------------------------------- **Description** ~~~~~~~~~~~~~~~ @@ -402,12 +380,11 @@ Set a user callback function for numeric comparison during BLE bonding. **Parameters** ~~~~~~~~~~~~~~ -fCallback: A user callback function that takes two arguments and returns -a Boolean to indicate user approval for the numeric comparison +fCallback: A user callback function that takes two arguments and returns a Boolean to indicate user approval for the numeric comparison. -conn_id: connection ID of connecting device +conn_id: connection ID of connecting device. -passkey: bonding passkey to display to user to confirm connection +passkey: bonding passkey to display to user to confirm connection. **Returns** ~~~~~~~~~~~ @@ -419,4 +396,4 @@ NA NA -.. note :: “BLESecurity.h” must be included to use the class function. \ No newline at end of file +.. note :: "BLESecurity.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEService.rst b/source/amebapro2/API_Documents/BLE/Class BLEService.rst index e7fa658..026676c 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEService.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEService.rst @@ -24,11 +24,11 @@ A class used for creating and managing BLE GATT services. ~~~~~~~~~~~ +------------------------------------+---------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+=================================+ | BLEService::BLEService | Constructs a BLEService object | +------------------------------------+---------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+---------------------------------+ | BLEService::setUUID | Set service UUID | +------------------------------------+---------------------------------+ @@ -54,13 +54,12 @@ Constructs a BLEService object. .. code-block:: c++ BLEService(BLEUUID uuid); - BLEService(const char* uuid); **Parameters** ~~~~~~~~~~~~~~ -uuid: service UUID, expressed as a BLEUUID class object or a character array +uuid: service UUID, expressed as a BLEUUID class object or a character array. **Returns** ~~~~~~~~~~~ @@ -70,9 +69,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: “BLEService.h” must be included to use the class function. +.. note :: "BLEService.h" must be included to use the class function. **BLEService::setUUID** ----------------------- @@ -104,7 +103,7 @@ NA NA -.. note :: “BLEService.h” must be included to use the class function. +.. note :: "BLEService.h" must be included to use the class function. **BLEService::getUUID** ----------------------- @@ -136,7 +135,7 @@ This function returns the service UUID in a BLEUUID class object. NA -.. note :: “BLEService.h” must be included to use the class function. +.. note :: "BLEService.h" must be included to use the class function. **BLE::addCharacteristic** @@ -165,9 +164,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEUartService `_ +Example: `BLEUartService `_ -.. note :: “BLEService.h” must be included to use the class function. +.. note :: "BLEService.h" must be included to use the class function. **BLE::getCharacteristic** -------------------------- @@ -192,12 +191,11 @@ charIndex: position index of characteristic. **Returns** ~~~~~~~~~~~ -This function returns a pointer to the BLECharacteristic at the -requested position index else return NULL. +This function returns a pointer to the BLECharacteristic at the requested position index else return NULL. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: “BLEService.h” must be included to use the class function. \ No newline at end of file +.. note :: "BLEService.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEUUID.rst b/source/amebapro2/API_Documents/BLE/Class BLEUUID.rst index 850b79d..78a5600 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEUUID.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEUUID.rst @@ -24,11 +24,11 @@ A class used for creating and managing UUIDs. ~~~~~~~~~~~ +------------------------------------+---------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+=================================+ | BLEUUID::BLEUUID | Create a BLEUUID object | +------------------------------------+---------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+---------------------------------+ | BLEUUID::str | Get the character string | | | representation of UUID | @@ -50,7 +50,7 @@ A class used for creating and managing UUIDs. **Description** ~~~~~~~~~~~~~~~ -Create a BLEUUID object from a UUID character string +Create a BLEUUID object from a UUID character string. **Syntax** ~~~~~~~~~~ @@ -58,9 +58,7 @@ Create a BLEUUID object from a UUID character string .. code-block:: c++ BLEUUID(void); - BLEUUID(const char* str); - BLEUUID(uint8_t* data, uint8_t length); **Parameters** @@ -70,8 +68,9 @@ str: UUID as character string used to create object data: pointer to byte array containing the desired UUID -length: number of bytes in array containing the desired UUID. Valid -values of 2, 4 or 16. +length: number of bytes in array containing the desired UUID. + +- 2, 4 or 16. **Returns** ~~~~~~~~~~~ @@ -83,7 +82,7 @@ NA NA -.. note :: “BLEUUID.h” must be included to use the class function. +.. note :: "BLEUUID.h" must be included to use the class function. **BLEUUID::str** ---------------- @@ -115,7 +114,7 @@ This function returns a pointer to the UUID represented as a character string. NA -.. note :: “BLEUUID.h” must be included to use the class function. +.. note :: "BLEUUID.h" must be included to use the class function. **BLEUUID::data** ----------------- @@ -140,18 +139,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to an unsigned 8-bit integer array -containing the UUID expressed in binary form. +This function returns a pointer to an unsigned 8-bit integer array containing the UUID expressed in binary form. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: Returned pointer is of const uint8_t* type and will not allow changing - of the data. - - “BLEUUID.h” must be included to use the class function. +.. note :: Returned pointer is of const uint8_t* type and will not allow changing of the data. "BLEUUID.h" must be included to use the class function. **BLEUUID::dataNative** ----------------------- @@ -159,8 +154,7 @@ NA **Description** ~~~~~~~~~~~~~~~ -Get the binary representation of UUID, with the UUID LSB in array index -[0]. +Get the binary representation of UUID, with the UUID LSB in array index [0]. **Syntax** ~~~~~~~~~~ @@ -177,18 +171,14 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a pointer to an unsigned 8-bit integer array -containing the UUID expressed in binary form. +This function returns a pointer to an unsigned 8-bit integer array containing the UUID expressed in binary form. **Example Code** ~~~~~~~~~~~~~~~~ NA -.. note :: Returned pointer is of const uint8_t* type and will not allow changing - of the data. - - “BLEUUID.h” must be included to use the class function. +.. note :: Returned pointer is of const uint8_t* type and will not allow changing of the data. "BLEUUID.h" must be included to use the class function. **BLEUUID::length** ------------------- @@ -220,11 +210,4 @@ This function returns the length of the UUID, in units of bytes. NA -.. note :: A 4-character UUID will be 16 bits / - 2 bytes long. - - A 8-character UUID will be 32 bits / 4 bytes long. - - A 32-character UUID will be 128 bits / 16 bytes long. - - “BLEUUID.h” must be included to use the class function. \ No newline at end of file +.. note :: A 4-character UUID will be 16 bits / 2 bytes long. A 8-character UUID will be 32 bits / 4 bytes long. A 32-character UUID will be 128 bits / 16 bytes long. "BLEUUID.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/BLE/Class BLEWifiConfigService.rst b/source/amebapro2/API_Documents/BLE/Class BLEWifiConfigService.rst index fdce3cf..a52a9a4 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEWifiConfigService.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEWifiConfigService.rst @@ -25,12 +25,12 @@ the device ~~~~~~~~~~~ +------------------------------------+---------------------------------+ -| **Public Constructors** | | +| **Public Constructors** | +====================================+=================================+ | BLEWifiConfigService:: | Create an instance of the | | BLEWifiConfigService | BLEWifiConfigService object | +------------------------------------+---------------------------------+ -| **Public Methods** | | +| **Public Methods** | +------------------------------------+---------------------------------+ | BLEWifiConfigService::begin | Start background thread to | | | process WiFi configuration | @@ -75,12 +75,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEWifiConfig `_ +Example: `BLEWifiConfig `_ -.. note :: Only one instance of this class / service should be - created. - - “BLEWifiConfigService.h” must be included to use the class function. +.. note :: Only one instance of this class / service should be created. "BLEWifiConfigService.h" must be included to use the class function. **BLEWifiConfigService::begin** ------------------------------- @@ -110,9 +107,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEWifiConfig `_ +Example: `BLEWifiConfig `_ -.. note :: “BLEWifiConfigService.h” must be included to use the class function.\ ** +.. note :: "BLEWifiConfigService.h" must be included to use the class function. **BLEWifiConfigService::end** ----------------------------- @@ -144,7 +141,7 @@ NA NA -.. note :: “BLEWifiConfigService.h” must be included to use the class function.\ ** +.. note :: "BLEWifiConfigService.h" must be included to use the class function. **BLEWifiConfigService::addService** ------------------------------------ @@ -174,9 +171,9 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEWifiConfig `_ +Example: `BLEWifiConfig `_ -.. note :: “BLEWifiConfigService.h” must be included to use the class function. +.. note :: "BLEWifiConfigService.h" must be included to use the class function. **BLEWifiConfigService::advData** --------------------------------- @@ -201,18 +198,11 @@ NA **Returns** ~~~~~~~~~~~ -This function returns a BLEAdvertData object that contains the required -advertising data fields for the WiFi configuration service to work. +This function returns a BLEAdvertData object that contains the required advertising data fields for the WiFi configuration service to work. **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEWifiConfig `_ +Example: `BLEWifiConfig `_ -.. note :: The advertisement data needs to be correctly formatted for the - corresponding smartphone app to recognise the device. WiFi configuration - service advertisement data requires the local BT address, and should be - called only after peripheral mode is started and may also require - stopping and restarting the advertising process. - - “BLEWifiConfigService.h” must be included to use the class function. \ No newline at end of file +.. note :: The advertisement data needs to be correctly formatted for the corresponding smartphone app to recognise the device. WiFi configuration service advertisement data requires the local BT address, and should be called only after peripheral mode is started and may also require stopping and restarting the advertising process. "BLEWifiConfigService.h" must be included to use the class function. From 1d77103e588f4999001b4c6418933a2c9886ba3e Mon Sep 17 00:00:00 2001 From: zhangzhenwu Date: Fri, 4 Oct 2024 14:48:05 +0800 Subject: [PATCH 3/6] Update index.rst --- source/amebapro2/API_Documents/BLE/index.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/source/amebapro2/API_Documents/BLE/index.rst b/source/amebapro2/API_Documents/BLE/index.rst index 408ce6a..38c6f31 100644 --- a/source/amebapro2/API_Documents/BLE/index.rst +++ b/source/amebapro2/API_Documents/BLE/index.rst @@ -24,4 +24,3 @@ BLE Class BLEService Class BLEUUID Class BLEWifiConfigService - From c0fab9af1ca0ef9cad3fb7e9007506e815f7b5f3 Mon Sep 17 00:00:00 2001 From: zhangzhenwu Date: Fri, 4 Oct 2024 15:47:27 +0800 Subject: [PATCH 4/6] Error debug --- .../amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst | 1 - .../API_Documents/BLE/Class BLERemoteCharacteristic.rst | 1 - source/amebapro2/API_Documents/BLE/Class BLEScan.rst | 8 ++++---- .../NeuralNetwork/Class NNModelSelection.rst | 1 - .../Example_Guides/BLE/V7RC Car With Video Streaming.rst | 1 - 5 files changed, 4 insertions(+), 8 deletions(-) diff --git a/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst b/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst index bc23e69..0da9c65 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEHIDGamepad.rst @@ -279,7 +279,6 @@ NA .. note :: "BLEHIDGamepad.h" must be included to use the class function. - **BLEHIDGamepad::buttonReleaseAll** ----------------------------------- diff --git a/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst b/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst index f81d1c0..add383b 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLERemoteCharacteristic.rst @@ -271,7 +271,6 @@ NA .. note :: "BLERemoteCharacteristic.h" must be included to use the class function. - **BLERemoteCharacteristic::canWrite** ------------------------------------- diff --git a/source/amebapro2/API_Documents/BLE/Class BLEScan.rst b/source/amebapro2/API_Documents/BLE/Class BLEScan.rst index 2b8c7eb..c715907 100644 --- a/source/amebapro2/API_Documents/BLE/Class BLEScan.rst +++ b/source/amebapro2/API_Documents/BLE/Class BLEScan.rst @@ -23,13 +23,13 @@ A class used for managing BLE scanning settings. **Members** ~~~~~~~~~~~ -+------------------------------------+---------------------------------+ ++----------------------------------------------------------------------+ | **Public Constructors** | -+====================================+=================================+ ++======================================================================+ | No public constructor is available as this class is intended to be a | | singleton class. You can get a pointer to this class using | | BLEDevice::configScan | -+------------------------------------+---------------------------------+ ++----------------------------------------------------------------------+ | **Public Methods** | +------------------------------------+---------------------------------+ | BLEScan::updateScanParams | Update the lower Bluetooth | @@ -344,6 +344,6 @@ NA **Example Code** ~~~~~~~~~~~~~~~~ -Example: `BLEScan `_ +Example: `BLEScan `_ .. note :: Use this member function to parse the various fields of received advertisement data packets and print the results out to the serial monitor. "BLEScan.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/NeuralNetwork/Class NNModelSelection.rst b/source/amebapro2/API_Documents/NeuralNetwork/Class NNModelSelection.rst index 4a045ea..39b2011 100644 --- a/source/amebapro2/API_Documents/NeuralNetwork/Class NNModelSelection.rst +++ b/source/amebapro2/API_Documents/NeuralNetwork/Class NNModelSelection.rst @@ -56,7 +56,6 @@ nntask: Neural network task to perform. Default value is NA_MODEL. - OBJECT_DETECTION, FACE_DETECTION, FACE_RECOGNITION - objdetmodel: Neural network model used for Object Detection. Default value is NA_MODEL. - DEFAULT_YOLOV3TINY, CUSTOMIZED_YOLOV3TINY (YOLOv3 model) diff --git a/source/amebapro2/Example_Guides/BLE/V7RC Car With Video Streaming.rst b/source/amebapro2/Example_Guides/BLE/V7RC Car With Video Streaming.rst index 790d1fd..c890302 100644 --- a/source/amebapro2/Example_Guides/BLE/V7RC Car With Video Streaming.rst +++ b/source/amebapro2/Example_Guides/BLE/V7RC Car With Video Streaming.rst @@ -99,7 +99,6 @@ in your Serial Monitor, the message "rtp started (UDP)" will appear: |image09| - 2. Establish BLE Connection Open V7RC APP and select "Control Centre": From 5d3231d0cda03e9537753551994d9b7eadbf2a62 Mon Sep 17 00:00:00 2001 From: TristonKF Date: Thu, 10 Oct 2024 16:15:45 +0800 Subject: [PATCH 5/6] Updated API docs and Added new example docs and images. Updated API docs: Class AmebaFatFS.rst Class VideoStream.rst Class UVCD.rst Added Example docs: Display Free and Use space of SD card.rst UVCD Object Detection.rst Added new image folders: Neural_Network_- _UVCD_Object_Detection Dispay_Used_and_Free_space of_SD_card --- .../image01.png | Bin 0 -> 98853 bytes .../image02.png | Bin 0 -> 50071 bytes .../image01.png | Bin 0 -> 95308 bytes .../image02.png | Bin 0 -> 55757 bytes .../image03.png | Bin 0 -> 46422 bytes .../image04.png | Bin 0 -> 29629 bytes .../image05.png | Bin 0 -> 55898 bytes .../image06.png | Bin 0 -> 39358 bytes .../image07.png | Bin 0 -> 439655 bytes .../FileSystem/Class AmebaFatFS.rst | 67 ++++++++++++ .../Multimedia/Class VideoStream.rst | 38 +++++++ .../API_Documents/USB/Class UVCD.rst | 80 ++++++++++++++ .../Display Free and Use space of SD card.rst | 41 +++++++ .../Example_Guides/File System/index.rst | 4 +- .../Neural Network/UVCD Object Detection.rst | 101 ++++++++++++++++++ .../Example_Guides/Neural Network/index.rst | 1 + 16 files changed, 331 insertions(+), 1 deletion(-) create mode 100644 source/_static/amebapro2/Example_Guides/File_System/Display_Used_and_Free_space_of_SD_card/image01.png create mode 100644 source/_static/amebapro2/Example_Guides/File_System/Display_Used_and_Free_space_of_SD_card/image02.png create mode 100644 source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image01.png create mode 100644 source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image02.png create mode 100644 source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image03.png create mode 100644 source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image04.png create mode 100644 source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image05.png create mode 100644 source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image06.png create mode 100644 source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image07.png create mode 100644 source/amebapro2/Example_Guides/File System/Display Free and Use space of SD card.rst create mode 100644 source/amebapro2/Example_Guides/Neural Network/UVCD Object Detection.rst diff --git a/source/_static/amebapro2/Example_Guides/File_System/Display_Used_and_Free_space_of_SD_card/image01.png b/source/_static/amebapro2/Example_Guides/File_System/Display_Used_and_Free_space_of_SD_card/image01.png new file mode 100644 index 0000000000000000000000000000000000000000..b3768e99766e7f9594de006e9ae7291a1d74c6fa GIT binary patch literal 98853 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

M!Ml0MM4B5q(h`cx+Q0jP^7zI=!T(( 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 literal 0 HcmV?d00001 diff --git a/source/_static/amebapro2/Example_Guides/File_System/Display_Used_and_Free_space_of_SD_card/image02.png b/source/_static/amebapro2/Example_Guides/File_System/Display_Used_and_Free_space_of_SD_card/image02.png new file mode 100644 index 0000000000000000000000000000000000000000..ba583f068e9df141f4159cd14de6ea2adc076f11 GIT binary patch literal 50071 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 MR+7q>cqkra1Q+@ZKbaS09q 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 z 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 L?g{GAE06yM`MSC+ literal 0 HcmV?d00001 diff --git a/source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image06.png b/source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image06.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd2ca380c0717fb81a918c433367afebe45c808 GIT binary patch literal 39358 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%0A6+66^oYP;m32ae+mc+CPAVpxtu9%>0FT}V_Uiv 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 NXG%|t9~=Jse*kl;MNj|$ literal 0 HcmV?d00001 diff --git a/source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image07.png b/source/_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image07.png new file mode 100644 index 0000000000000000000000000000000000000000..28b5c5de0cebd150bea906bf20cfe4bc96c9d121 GIT binary patch literal 439655 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%0Ar!xcyi-#p%D{ih43T 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

-&2-0$>!cejbI4t2klCmL_9*oLG(c@ zgb;x6LmFBtRF;C48IeUos6))eI|HdipfW@NB$$O58fR0+k$%V_L)?tB(2dVP1|)!? zNk-~t1?gYpWsWj3XmxB!^V>pmpCA7DXLCyUnd~%ScFD3Yzd8Dw-(PnyPH1h^E2%nD z*P8jm&tAim8krc6 zL<j(hz#^}LE@S!|J!VR%tR&8t7irRAUh=3C|FcJ+{0D@K(~HtQz4PRb+j zcwRwZXM&`e@A)emQ!dST2Te zZ6+Trl*XkX7$GGh{4BcQ-C4vSl7E3A)|V}4?-*c+|DmKNgcob0{^Q!*`xO~erD+I5 zXz6s)5F=p_VF=v-ufHgsC!sikAygT{7#b={A4C{R>tm$%Ff%)fvs#O?8VWNDsF6X= zHeL>vK|XGwK|Ud2{sAFAo_=mFUQW*5&K^NtUZH+|(IFuTF<~k3e(_NbA%5XmshrN1 z`thNLnF+v9-Skw$g9rEK9&~;Ay!)$H+07m1A<##-+RSCxSx4f*YRRQCghj;!B% zP7Dyk3(6*Z~# z>awbv*KOaSvU`vE;iDR7bar35a@6qFd2@@K?jBYlp>FYs0qI%sOioT+1EaO0d2D*% z;b+57zU+PQq-AQRVPd>~bfkJ{ptQS-)zVzn*5M~gOP)YIx7eg38s2YSG@`B8S7FpxTHQ*Fle2v#l&v2JcBOBp@5GpK9&7Y1v zkDr-WM)?u%b6LeO+LEz{m-tH zFun9dNk;Liho7B&{f&{UX>48jts>UdvRc-kz6-tAYTDSoAt`5P*QDOqD^<_T+X>Al zsFkX$=0mT3p~NUU?Bp06V zIWbK|0fSl5`Kg7slH0fEHEf!iT|HH)lo7ty*IQ=x>5d=&vTv&K)U~6Z(@is!IppdV6?0gHTAmkS)>VTeC>hFVf0 zLWLautQj}+*PtK_!Da8o&{v&kn(Pa5qx*Ycpxh@lIZtY`A6I8TtjdDSRbsfuGDklVKhp3YNBUMgiU~VR8B@| zciX**5x`LO#Axl*Wc~fwy4m~fpFivP{Hv6jMialV%Qh~D^^LckzO?zcj@rSKY6niL z?LVo$@8rh)r#2lpz3JfDjr&e1X&#i_yhjFm2$2X$2vh+r7eizX5bvBJfun;20$`F> z*COxypTu(U<57CK-soXhXn5+wrW~F70!BPM<$?;o51v z+ZT<^u9;b1x3IlxX?NAe;hL@EH9N;^w%{QbE{5#gNy`ta3^{rs3^}@!@cYn#=%J1G zcpeS!%*W>ydFVO1892Ec*t;3pxt_aqXZ?rBWt6zTb9A^RS)}!GS%bHj@ps)L z74d(!B#VB-7(k1wL>~$;2-t)$#0#zuEeMxEU?3FXf0;FiN+_sGw0Po7Fz~F%zY|g3 zY#qFI@#ZytRtbr(fWNxJBx1`%#8J2pabHAindsVO!lKKBL{KX%vP=YdXqC7OLP*pJFG?Fw^d{vZh!$(hP5^|C8nl$CeaLNDd%Vzhaza}?|5yr z@>6pQaxbiY`TM{8{Kr2urzSOKCKl#o_!QBPF^UgnX0A6j*?RNlrhvd*$w|_#PKu5; zr(GSXiPRKd@502y3|5hIe(E+?+if&J9#RfzPSF{?TES-2B)m4vi6%VUo;Gj zyXVlaghwk}(>>|sb0sY7a#YlUjM~h?P%A)Nn<6;XFW3v*HvT2ctL6kW6%FLi>f&WZ335rx4DVnjcIC#j(33k0le!B?iGk8v zK!GpZ!6GWCf{!7{I4hoe(sW@A*EIC`jb{HMXl9BZ^ePYumpBFU)|n3sE(+dghO0ht z1BJ1OM8#B45rPr&;(`E%kcZ&sXD5xZlb{cm!8_n-HI%-B7~(3(GF+Y^9?JW?j<<`R zR~f=2TA(6cxc#rVhf|}Y8c{x~GDQEpiT*j>y8pB`=W$K;qiVvSEMU-7N$MmAWrCAN zmQHgqgceP6(}#{1B9$Rj79tqpRff_BF^2jetgLQkc1vMKMOp&I$IZj~u9u^=r;EL> zkB7IPr<=E{o3Fc9kWWBNXh?iiWNJc0N0d-2ttnDmi`{k!WeHh+qiMk)b*e=!ahxLV?bv zo$`>4J8^wzhpd{G97I)1Ru#~rDYHS7l!8b#h%X_9jXN-gj%Xe_rE&1&*8L~cb{CEc?(jW69Xzh-W8-OBEo zmHky~`>TK(9}d9~-$U=f5CDk$CP^s>V~ATZ`iLxF zgMvuJ4Jr;T!q7_LRjWiG*g8TVmDNIPgoIbG0l^6BhXf2nA_$$233pZw;Y?tXj<=+V zo0aHfOLS!A{MnKyV)GHk5`u`VT`np{vSO{&N-=53YH^u0V%z|Ugdo!L!ZHd%G77@7 zO2TpwbblN84-9misgmkiB~=NPjq>Um3Y#<`syp`s#1CK5ys5q1~!%Ba^&YolE zd|t!sW9K*5l&9wBaPHN7G1)uYRyo?hsi>qEFf*&l@-u1C9C~(sMoMBxKs%FOl9t5G z&&sPPO{=U(s;o_}Y)-9cjLBzJm(>0Emmhxo`c*e2x;rcBUQT*ZPC^Ddj#-(~*2Ns` zBSKP~Bx0IE&*H<@`SF;P63UgY3GSN}x$+RAJ$y{6K^O5P%w*IP$dtE(4gZ;xP zv6QL;dUtJYcUyb!&``rbe@t$6Y(Z{faY0H6Bbi0dXBRVaGitJEorS3b#i@hEsr}5< zURFvEE2WP~8)VRin6x2A(l8@&qBv=$C~2xFe!4h*2HMiR2lbWrYs*J!i|Sdi)x}}; z%#h*wgz2`F={DLdv@OZw&B?uW)Y8gu&s;mt0*9%u@S-$-m%Y}P%DZ< z(`3Xt+_tgsIXa3Ook`8VZ5cX?h`Y`j!AM}=8PO7Ixjgz;82YM{`FS%sPv|owq1?yS zSsJ1+#mibWv-*sGZ`w_)$2bH%UQrvbxVe5Xm zE&F7*>_z7>ZrUTeakmUaeb=I374Zv2K%)7;h?E+-nJb$2i_U4vsojhD5bJ-%kD!v4xiLIa&pH}_$8bakkD}? zA&en@eP}zv5Sk-9pmX`8?#;`lme(wSL3URGL)P}!Y#grII9#zIByzrL10HfEAtVxj zk-M$~*G5aj;}LO^r=Ej{zJnXY(9y%p!{6A^eeX#f@pbCLaw@Cw>?HSyOHv$KB%b$0 zkU=Os39Z10gcjFzxESKjj(uEN2wu2+H4erQ@(|BYghaeRe+4fqSFBmJa&cDjTb_iV zgR&YTyihHG7#R6avU0T$$%<8L7KQf|p2!0#EzAm(`ST@2;YEKSX@>JoFp#8yZfxdS{bFavP$Bz%2M(w60%C75^^FE za%*LjCFIvjD5#1ns)<6BRK?eClHR1Dw)ddiw(aY7?9n)J^0u3MN=YfBt)+f^r2WBk z>-~w22b1kHBTd8IwcRa@YEE)yQedc$ySwdOBi-vd$MkfL-aL2MPVZc}y-{I=M`uC& zSV{U+Svs2JDoL4U)23M4~a=#)K zG7BjO4<$j+8fyMD8L0_z;>OvrAzon&Q9b8;S6 z7L65WeA89`o6*iEP2~@28NGB`cV1FQ9&Nn3_-SX&(~g=iy6c~`R6S{}eA-qyRmUEx zEb1&RXe%jbDJ^I%EAFi>ovg2ZJv{jHx8MBp*m_8Ys#Ln3csx?eKXkex}j#Kg!zY= zv8O#P{pH2OwVZ(}W?f!NU4B}5R$^r?t-dI&5&kp2o;A~6JJnJ-(^7H2rE<2p{C;EU zOjFrp182OBF&nOK3MXn( zN2?QuD&zXgqk781yUW9R%EP?f%eHgocf%{b=i+jK~&6`ssI3` zKt|b#59@QEG~|zQlEyi-QC8w$FhOsdzl$M z#Rx;K1?lxUsReNnZf3>~cWygd-gR@db$54i_j2_M@rz7|j-vE^1UvqTFTgeP|=v>n}b9MX4 z%Ni#xY8<}Mtuzt0) z;z}t6V9+u!5PSin;O}6*got>ShCB-qgpOdyW#n1GYk)6{F(mjg8+RWB2?@z4 zp>^wGva7`9R;-m-PF4S-Py7hnhkLmon(VCW;}$Pj>t zgrLuR2(Mkfnrk2~mADUi9s=|Tty(EWTGCm8wxOZGL$YRQ6?fS+UTm}wLwwWxyIBOF zMZwo_F|;TcL&QVeEC&e*i7ppj%MBMp;wvB`;;Tg^1hYm|Qdmq{SWJclFeJ>ykUU^W zTuxb1ew{R6NCq$@D=IE4CAVHiQB6uwO%kG{E~&CnVY8;f7A?6g+od*ck=?vqc%7=+ z!NccGO^rQ0f-=$=9j#5X6CICdz(dUw0}aF76>ayjS^3mds$Y<&nVF%^se`)bkDFXQ zb?e+A%PZQ^jwTHm(PO2VMacCsd zZJ z#Fr4XY}zy<_8%33&{`P{q=|M{`S3K{`S{5-+%Y>-{1cH_RUY|<$wF}Z-4pWZ-4zB zUHR7^fB5dFAHIWkd;8P(KmGV$KmP4kKm6^tKYaJ6AO7~6AHV<2n;-xB_Q&u3@#gpc zc=N}9zWM&=fBf?w-~H+5?|=8tf4up}n?Jw(>A!yZ{trKX|EIS<{pHOMe};>H{QkQi zzJvVjryu_I_NVXO{`lv&Km7Mwc!Q0S7w2Me|RQ%lNP2 zVu<9!3#eJ#1=MKuG+Hx+J(TkRD2KLprcZKGMj1&X#YrPfE{6Jx6ME77C8dW>=_;gj z(c?Plv7H4d9r>UlN_RngA06F}W3VV~u!vv?7z7x~?8X>s%+Dy#NRIGycC|DG47u1_ zySUi9xI20Jdj`dXM$%%#!9y5B5$UwZtTY;{xTxt~NmoZjUw73|f8F?4!}N6H>|Dd_ zTg z0ESeyACO$HA+=$<+{PVBFpgGLpTtY5_sVb5lw7|_SYBn7wBjl$g%y$l>r_xdLTZ@^ z&pO-)=x0$tJbVBN27PVwLR3V?fiLf4&A$x)%>^IAJBvz#gjR^j%BpVNr>(OaFm&L! z<{|CvfFUHI;}F2md~pbSXzSq<8b?p=)IPWG%tgS^8AIdimUg<<_M|d&6|Wh>5<)Ft z=qkdH^Hl*4UA1)u9>K^wjFvEngpVP82Ty$m4?{IL62yakpF9H*7%f;mjU_}3#19ukyg~AC5qjPkWF}rK zh#?X*zTlw%hHzG*RYcsZLOag5ON$VL(9$B}k`?nhnJ)+l`sU-qL(l5vD_27YTG9~+ zT!#21$RH9PhUNnpLOaNCR*HzN5aBHw5)p%kt3}1vpa6qVi|#3lZm^FeBm#e$5-1{) z@@u6P#ATEu<<`k6tcOU-Dv65Ah)c@LE2_z_+bE-?Dy66@rKBpYvQcS^<~og?${ITq zw`r}@+@-9!OJ(=ot;bL7yL9Qgy9C$bA3kH4+ z2zh^KKl~58!%si|{3HIsAm8x1`?VqPaR?MFof40LC^`*yxI?hR}%sQwPOA7JA_2!A*7it^oLJA3`J@^83!p1Esv;`ZI+hNjv#@1DA8e##K#>}{(HcO1?e+n+bKyI^du zYvF#~!tJV=%Ow-XOU4f8Z`+=~X>-oN^7IX}MrQO!=ox%hm^M;RNS^-Ve5W{E&CwyTlUFq-V2sOQ*SuX zhZZ>r3kj(Rfe96mWC2WSm`b=}B)@6bx^4T^cOTU{e0Il?bIRNHu2lr_sEH|UmfE19 zqPb7w;K^Ob&#l+oE3tl)sN#k-GU%rCD<$Od)EL>p1Q-Gd@%D9pIHdL?2pz$YFK_hC zjU)IJp$s21q+K-r&XCIlUjl)TSSzzqLTDxH!**b!Uu3I4zU9q;ijDtvI?RW(hhfsY8^n(lp7~*#X zYDGjp{0={8F*RVw(aXTm%g_m7=#HDOv4e-!kyEQB70_`2;&Lm+WD$dS0R{;iBZRpF z;Y)}gG!DNL9Dt@EdITl(j)x=yY!Z-=VAbd2vS6 z!gw3Mi1=y|F`kFeef7~~nS`vUlpLBPlfoF1RhCmwkylWWmQ@s&l#`ZKR!~w^P*#&s zTn~{360K8{RoyJVaVtbteY33k7WvH@Dm(XVI&@^~iIaOSUp5a6%B-(zyg$?Z#gq0& z_gm+Xhw278it0);S-J7)RR2JC3sZel!%KJdbihNFS5Jo7+^k3n?JrIlVWmv4Q>WOe zs5r!?&7z?C&$s=%V>Cn zHd~qq;g*F;s0c$G3dt0|!^Ryz5^3Qwa&c(_T6xVuw}9n)h_|mERFpV@FqAUP&KxYG zca#*(_O!qK34QVZ=Jl)5j)tk>zNz8fsiB_P(Z2iR1GA8c!P#-h5Dx0k@G?CnDS+9uIu|c;MBep_dOwU(TVtm>YR9H~eyL3Kfd z^ru(jKmYvKfBf|4*{ZBjR>J+7tYK#S5Q92^4=CbJlf7(X0dAh-eAQC?703o!95fD2 z!s~~KhXjHLaiIu#h&Ne=J@nz-WK49CLrKGoq#-7) zpF!(m(s~(5J;e!Kh4CGQly<-nFCBDB7d^h4p3nmrDopODr}oiP0Ylw|sXgGK;>;dq zPFrDSBR#X3MK82{ zD+c=N#zyN$M{7sNYDUNFCZ?O`9=AMtS~oKX81hcfx#Hk@&fMno9g7pU?w-13cIuY- zshbuj4b36YId#(t#nAeMp5;l1zSU_1>(hqT(4H}{K5J-w?xywmTeg>s?XQ`+=$bj} z-gUZW>TuP>;gXS^4m_)Gsbgq$-q7-l-rbYeO&}+(8tpryyG#4B*0BrQkLYL|*4cXS z?8d#?YP(M$Fkw8YXdWg`A|#UCgh(Weju7cO5;2Zoz>t1O@^L9Vc0g zAu>~T_{1)Zq2pKduHLmWw0F_BbH0u+gjNn+v9>1|x{Nvyhs)NEkSo?sz#t+af+2pb zi0`2#7~)li5QaProIFfGLe5?nZr)Yex&warDH2NKW07LvaGQbc| zHeCHcKtC8jWRQ;`5^^y&@Q_~?f(R6TmaUrazbgn&f*3*`0-zwNEGMT|^Uwn$(85E0 zco>55cg}P1-iI7E8Q>{g%Mb^rQipz>g%8LVoB;_Tf6d_UwL+c?jvP$3~S^0JHit8cJ zkp&Mase*^3m4QU6((BZuRMaIQ>(wPyH%f2XDz#>3^779Hvy9SSW!@X#YF z)C09)9@J?6Krg!r4jta%?VC4MWsG!MR2D5PD=91|HL@^=$|^|W6w+!r87-B0?KK6h z71>Sfw3gCLNMmVQb7@)|gp<<2PVQuZ^R%S25F5I?=%# zYiA5K6%N$r4b8_Q0!(&^KLYVO(cnOb& zDbbe`*_##Fof+8+$q4IC5ADbdYt0O6$qsMM4sXedXw3@m$O-Mr4((o$@UHC0j_ioe z?1--1$iCdDespX4nErf}f&6I5pg@Ko1t=r*=uvtM4s;+2J#~Z@*<(_&k5_z3hm7d?a2&=^x~G^>B8xpPY^%ksje(E*qaw| zkK%T}gZ1;z-~IIc?*@vgGnMJnA}*{}u@>Me*~_OhKtB*euK&a)OCi2yoy zUW{KWA{{buMn+JHXaR;$W$26dV~E_212BYdMusNK9@pm1RifjCCOIi%Od6Ud0|}vR zgvkS}H1wq$Yo>O3pcHF3@vrwN`3RQ`eu-m z*G!IGzJ2`4?PHg39lw0*z&Sn5qvs)84x9!Ufq^78ptVQR>buAs94~u7LeQ#c9o)QM zd&e=r&^hI;d&TkDjMA#xWz{uRw(kQB?K^ovVUs3EXqA-Wa&f$cp1)d%TO1NtF!V8b zUvY>Sh&;8ZGW3BE^zie}X9Y*_r=YWi)=En#t7#oNvHRE=Xc30MKwJ!=_I()IeNyM} z#cL;Z4X<0+-g0z97y=1d+9C{D*$POAbihM|L{5-PR!)~J9ihEq&0SkfFtjwtLk=Fg z4(@trjto5HVd)!u(b!_kfn&02TUVi*kx8!*6_5}=BGU61BJSb-V&5sDwe!a<@|Ab|*9_!+7$R3L8i&C3{MT|Ngd!mmd?K8zhuf#g#XR zt=k~HZoS0DEqg9qwg?HOl$KOZjJJRBwDZfSou5Bye>77y)Kl0{l~c~lVbe46(<5Vo z++3|}%?xzU9nsa^>u+ILl@iriK=x#xDZUd`bXANJ2oOX%5B^ znJgn1DoLE?piHvjCz;eqjG@8O>{d=reOXa{PRf7%>5uTG^YYbKX_*Nz)Q}iTPZ<4sRfSE}#hs0uo|e*{=912P#T~Wu&YHrmT9n>;Mo(SwM0eH9VBPHSy_wEYU$vHIz;`iX(6;jYrbcFs^6XSlU=sFBfEliyRG-CLg7TbABenmSODJX}H>ElD1Q zwv;wn2K}V5lH@UT2w&tyDElvi)_A}w@G6lXd2U*EOD6~-)ZA>7etmF|E zjbx0SGQmlifR>kW9KnZh!DLD5B)WB7>Qq^pK;U5t2|8`O90m1phdV-^`nXJ$r%slo zO_p;rftK~4&z&qy881m0=g`JE$%`_^p`qUc{AQp756Q2H7yK(q9%d(vm8JIPMSeNb z0J8n@yWe-@Mn0^~o+yLg9-1aY+w6&l3SySMXk#wL5Xm#VXqwE05&Zytpbz>XecTF8 zlcDR;O~>AkA#&&lrMhwi^2fT5&OMxr2w`ml$f?O`N!G2%O!)J_ITe0OmI z2&uOyske}ZFjSDzTaesUkPH~=EKKb#&gd%6YApl|Wj8YNsta=p(`nSmP&;dLUA?P% zxAaVHEqtRwsQH;GEP67#D3Mi^$YG>bl(V|J>L(`ar>5$srfVmss>dg*$EWViJZyaM zS^eze!ma_&l9VmMYEA4e z8`+*W1Wuun5(I>_=j7ELCoXM0bWRnYc!V~!ZQdiTj+P(EZrZ(0^U#(9CwCk@r*-%& zUA{f{?Fm^v(Uz z7$QOE7~z-y%NN2m!V=3xB$uz1QBc>|d*a-#qo*|w9*1nl2I6NihH$n5o=%-VdRh03 z-fdk=yIT&fdbW;8LY8({EfIz;q3|)p_YkTNU9xh#WC<8TfxjVwRU**OQX7%&W_tGS zs50c}ao5A|=oLN1tvlq@wyu$o2i7bXm0r1a!894c&`J?0avQRDWYJlRTnzD+4H4+@ z(X;d+2^T>8zzD_=AZeA_`nou6O~v&U8I0WMgh($RXLlDH3*#G?wfEmX zcZBBScrT0EU63+SnmbjJHB*{#zchWeB;`IQd5)cgaT7m_FhqG!5)bqN13fOMJp>7r zCC!zh@((HxIrfR3Lh+_3>C%?(Gy1KiNgi)Lk01J=uQk|&o!lw+_$SRZjc^3 zM2}k%7>pe*q>L0%M~f(( zjIz;(LdKX0V+?eV^e8i7X~?mP!_39UEs_isQ-MTXnZch8*216WkKg^FD=+FnZT4h2 zI1(Meh?Wg~!q6uSeZtTu41L1TCk%bU(4u_8(EpEk8o!|W9B5J^9i*2kjtvS>Zb#2!W>w7ra^K1OnHF|DsC8QrzMAf+dt1{mt1 zr*_a&+v(|TMVT!{Sq(+mC0WVIQ6c{Bj^?JfZ{5~6wK8=N^omTOW|lI`dpjxzx+?~H zN(XyN2K!2e1~@~5?BSuZvGIzDsmjUOn&}4(bDuRn_@e3Im(`PxD5Z5~p>Y@OJ#=iG zb!?o@SUQ|Gw?BCE?k(Ri+t_5Qm}Ix~Li@xV+xRToge*IhY>0VO+U=nD+kuo@0hBu- zi6ln;aRwe?SDpN?IQU+)_0qBOIC;lW8)D*c(!}9}k_4x+SLepwb2s*!)7^9K#y%ZA z={Hsh18pT!STCxyVXcy?nBoQzw69xvwUiwKydH%$f@THqo6o-%&69X_%5 z^aXNDGJ>HSHV#)UY`{ZTEp4w@5&e)Bb&!oL?SV(AwRAvpWC%lOrVMqgoGx2)x8IXR zMS>V2xnb*SVCQz#+-}$D3tGoc$*OIGe;u$6cjFlJg(X+7m4&Plm4U1fm02z#O;!#; z$UW+TN2J3=(ozqhUo3Ht$g<^p_W&0JJAw~M@b0h`z#3jaKL|i8-x2bZU<6-C0z!J9 zoZcDG3|jQFaFg27z#FbW3#FH#c`?GEC3M3NxliG3ZV=)yzK0f(Xi*4pJ|?_7ppl!P z;XA^LN&|YtCFR8=0wc;{(f(*vxKtfW|3K&E3QZh=?a_eLi)&q%T6*tH! zsiG*WDXddhP}wNAUR`FxMrpN85^5VIHg8qjw@>rpg=@~v$@O)e&!6?adfEBxi;mBp zv^|__otbJJ9j@wZ&0!VAB~k(dye&;{I++_&{M?iL-Pj3XLuL6Bl?Brkd9!8NvnA=X zoYecAlvy-ch87RaFym&Jv5PXzh{1`TW(f94XJMGJh)O^lPW%*`I?1ApGvg+hapTNb zXeaRq$pj8ugA+f+;bLeSt;nX$l+fUNbgGOtU6npro6}yA>Ed+T-N)X^&-u5%|1Es! zbPn|zxR}`nyIBP~nfTco`8yf`bOKyH5TgJW%P{X7E*43}Iq(i|-@fsP^1tI{YZd5x z*U#R>&*4s>i%F21QLu+msHaJow@J9~op3*sP;Zl9FOwjzyCGgy5q{Q@{x*@mHW5Cy z5x!2bLC%z57fOgLCDb;|=ccRGaf1t5rw?vEyhHQ&-t)Jw`NxH@8_McC@8z>|qZ7kI zBfTiGzIo|UEtR>$jYY$?c_Wn>!b9gfLVD7@`j4lf)0@Q3moTz4@`^ z3>vf|xFEWZj*f>OdRGSXQ9DeJCgBeXhFmaG7&BTFH_nJ3XC_PliI^k_6HKaL#>w4t zmni2W0~i`-Cy@xMi+G4jB4z^rAql$g81J4NOGAV-UYY_JdfbOF^uu?5=p+~_0}Le+ z43QhY0*TO?p(Pk%e%;36t_K1S@ePDJ3qvFX`e`a8DuTg(v1X`)yMUTp4<342pZ5ej z#3fPATvawYaHuq6qBLWilQzOm85G12lh(sX;-|MbskeyMTa?salsr(Ff-6HQo%yu( zJX%|RN^3z{3q7Neo>`iilp7xv>gnuiXJKJ(Y-VX{>tg306->!arPozd4|Z1$_Erw{ zmyh(9jtrEJ4uOQ2!$X|Wv9gJ&s;RlU*~jJ=xS3-)do z?A*@VyIpehJYnW=!#m`5aLmo%*dSIlwZ1F5x-Gi8CAz9PsuCr#qBXpvDX6%{k6sy2 zR2^7U9aLE5msjSRQfN=jcA#e4#H3q9rdUO%nMWiW1;iQq$C(5|VvPKvjC><+xCCCY z^S)^9amLK~w5bE+l!=|T5m3qMq>;@@BWuX1+tw#e_bgtD4$ZcbvMu3ovy0`tFlg_MEzMSmy==RHSv}jK)E2OrnFT zJNBz=-z~psyM)R{NtKPzN~}{CS5gHJt&ve)Bdr7;S_K|LcWFgI_YK9tHo`5xCIkVX zypJ#B7)CyE_zWTu#1I5V_*V+P33&&8pD+kMm$VSTkf_vhyr~{AL>3HT41sxoQcqy^PijVFqCpUE;M1F~kok5g`wuLXovI zsuH~eLoNn(t~y5M8+IR3+jT%xem%fq#Ts!TNrhFQy4B)996=1N#0!Z?pF4tTMJNPA z%imcXTCsN7a=;Kc05HU_2Ejwp!C6iWv1ZvaUWg|MYxu-jWFUU{7w{v~~b@ZS?Xe9zkoejIWY{&)OOF~nOBB*v%DlE72wPG^D`5)qXK{Q!dqhD6p%uSI$zA(1CG5AuY-*>9FE3hN#mlq#Vp3gdxF> zKnRB7r&#fLt#l#;tsFv?g9LOFdv?NDS;|;#PHRPmqvI_nPg{E*r{53^4fp9fnwt4J z-to1+>1}7|V}H}n>878vp`WwCyF$iIL%gm!nNf?f35J}*eQ&y3oBBE!dE4FcvA^Z- zd^5nsFv#67#M3a;^H!M8t#H3vVZJv*yl(}2-wyFM3h_1$^|^!MeJ9MvEW*z+I?yUM z*d{i_Jlx;V+wqLWtwRQvcU?Zc^Zbd^MmOw3eW>(|+$v^%C4-uqWbb3^5$KSZ99qFi zA8ligH!+5*b4JQihB=9YtoQ*YWq?5$ET#?>#}5~xf)J7rCedI4wZ9;)w}4$({g)nzE*sREEB6EqvC3uWv5;yrBRvggit@RGasxChtL2_Dp%!ba~cf zNycbN+90nu1Q_b&Vkoh@7^SBOVW9u*OSur6Y z?halKmX0=N*4Cyr4%QByPW~~W>1;Z??OthjTX}zX&G>ND#7M=&aOv1Eb9k_LXplWR zRx&nOId#AO{*%UsU$#Ac+4bz(qMk92G`eXh<*KXyMJKN-E>(J`9d zI!tTqr_^-B*LB5Iw)quQcxJIZGMElYxp%@6Zu&>-dq>>x47=eKrsoxY!!z`TXUGkY zpzE#ymmPgB*m<6}^}Jx?e%9RS#BJ*%h873)?(V&6yyuG1o~uUtt{LyUZUWhJ<@T;i zH+P&j&^&iT^DN5FvwFKB;Gt7j51i9Ia$f)NIo-V{FYY*YcFVqFfFYIbd)IB-CBIoy zYQtv9^_w8XLu=*N3(Kw(#vUReRU&lLR`{MqtvuR8)to6m$Nrb)%P4$+@iHwOm^9_<;z#E6_!+71AQTh6~a;r z=(7+*t3{+CYj`9=9$F)@e6=`a*{Vez5}Xku1rmPn2$w;i2R?>~hp=q;S!5u77F`Ar z#0@`-o+U;hLgHV;A14tUUlhU1-kC-462K6I%(V%UXc2$}L#*?!FeE4;ZgB`CgfJu~ zvsPSoVPH@ST7C$I$mTLxc@?tV3}*x1M)JyP;2{|mb?NmRB{yu8-MU@%;NczTFX+3t zrq|VVefee6!-tJ?bL~%_bUu36K0DhqGF;x=n9pHRY4MH@*0$y*L2eGdHg^;KT!*Wf z6V=6IWx4k&^Jgn^z(X^f)M-`{K58f)K!fO096ePOHCYrnSr`d@0S2KCcF((QG|h~e zV#ZCgDAS}Y#E6BA6~{oJGr@$1aT6qnM-=>Zi>AZi%NTzba=$M}@$TqhR>B}VX|OW0 zhLLD%Z(!wYZtdmpo8KV}bqx1ku{SmLcDU_rr|)U2?`^N|;{?(3ak}B_bi>aX#TN&4 zU=a0~no$b5l_AG)KLa;wV;=`YFI#;tJ3SummN8hCI#@#MXD1A>5(c0} z|Kf?mMF~T6u7?IusC|GTZe=L858cfa-T#Yh2U`@P91`gB2N#80Fjh=31bEL|b!T!3P^$JMT#zbjl!b22HB6tXS(Nc^t#0{i^TDT0xnJSR5Lu7}7$P%eTn}LkK^|1+%vNMg0ftI5$4b%#F+?gu-Ng{JS_m)% z66!Ca4HVJ_5QdU_3R1f1Ded{mE&0g}dC86RjN1J4jObu*drP~!w;ila?d&a_J)N9= z-Tb0M(pUvWXd<_k)7@S_HC8t>UNJe!85?Ge3^9j?S)mE()7>sWpO6(ei#CHzIcMMV5 z2IE=>sO>|^-Q$@9GkK#A3n!kkX1-w0e#yE2j5Yg=G5vYbN3@vtFH_^I$OG8J0>)9KSZD(}1YG2uQ z;_}XuSNER2c1TD6=z0AEXRhuzdUo3ZeACt~J7v|k$*64w3}FUs6jxCf2Mj5yipr}1 zhJS5n)$=P*8A2uVm||4|KS4*-A`%#;xT@iC-vSbNKXWBbltJb&xXMPu_D)((0$ zj)*}PHkSo3#0z2&ccu(K6!4H>xFsUuA#TUY>8dTh>AkJ1uCkwA$E9d-TQ z0Et$vUc5qRVaPpS5s3(fRtrf8^D09CARv)Iq(#J>Ba{S>ZYgLA3g4R@}%qGqt=OuvX&Nh zZA~7d$j!sW&f471#opJ>Jley)m60`4Su|XdGh1CSSCuzgmNm;gmO62U6+g|L6pNlJ zj>05@4m6vj9WrAquDn_2Ih~zJ0kh zi7{r<7$b3%kpS&5x`liE5G%2dmDI&aD@+eJHM?f!aM#@3{?`~o?Zf?-?aYk4op1R# z8hAPAdpjEVIP3eO=t2B&D-eAj)S83~eC1mQN=8*)9!>qfA*Ua*gGRIq7Wm>D(FIw{sFA=)G|@Mf@=L4doV zzxz!;cRf$XI{}`48Hudk=H>_EMcwrjPG(qU3^gOVvMi^ywy>o%vkSh_OH#Txv~D)7 zhn>{ROzdYQ4HPB}6eJE7Bn}lMfQJV1DZS`s4Cr=MW9;}b4ry_q1A`oJQo>|;T6cEnlFASlLwIQsYC+Y@UU!y& zhrYr3LDir(G)IQQ^AJb~SBZE_h;Xe4O`KuPkO?n@A*>=8d=4Xx`Cl~TJ#ES#YtEVJ zXY(pULr>U}H%FNHJEz7AXXLYvLO^#NL50{M(myC~;j01y4*<)iR6H{eVv-J-@Ykd4{ z;OpNEzW#kkVfhWO5VME`J@3#fZh_alLasu5!fr(*29-4=b&Vu+kHmM6QMyJUv7JM) z9fL7#15qsl(X9iqt%EVm{n1UmQH{M(4c$=L5?$B&n_gHH8SW4$eO2=?o=SW89 zXj;c`LPHOwwj;dco=<+MR}RNLli`wD2ysd-u#8PN3Z`Ci4LWkiai5{peu%#LA${|G zmv3unU)g=~%7L@G2TotxqkU21;Hgc!kF49eTUvFigbJz#i7BhCRZ>Iu(^f?H(-u+K zAR>=e4w0bS*F&Hq3sJ%?%1S8(ywn%Nsxzl3_=0@@EEl1Ft-H^ z9niUQ(b(*=sim%!{dH@5BB6I-XlZyJBC}>z7(-V4LJ>D;6Fy+b+WDG|v#yPc9>S2* zIRoQ$+ja`eu0xYt%Y>E-OA1RWtPzu2AuJ^*p+y+tOGs#~EVQeIrB^P%(AovJB;#fg zg9P$E3_<24L3pu5LXbsFfh=MW$)aoC7d~Q;W8NRZ%SZ%&RPImvu5rN#OquaZL>~zE zN>Wwghxb}SB2phBA#14lGi4;WTqGqdDj|p=2!FCnT2>K4_S=&!_w(fa1!bJh2CffzvF-_^hmIxf)BM;%uKe^=8`pG(e`aYcCqLpCA)dTtK4{andA7{F`c z9pL%^cf9})y+Bk15)6V7#t;gAs2}WO5bAd;BG4!z&^R*4C_LbHsE={D-<=45;}D-) z{_ZA$UQY3m$u%72Ks#fgHLfh*KFZG_*o~GEN2jN-3zKVDsm*0sEoGTatdx62iA{wG z?S+XQ1qt1G34QsA11Jf7dDNbKYIi=RJ3p?sAhtI@rmrA&pdf}+eHKlDL5AtvSum1e z`ht+b(V|$$I0Ipbl!b78jueL$=Km0eIJCu`cLZJw5?YkRaZVz1CM(i=7Gmh(VhnMY zT7SaOCk%bU&?gLi!q9v22}7SS^a(@%&tQo2O$Ym%b~IB49fBd~yaplh#tDyJ;Z@aS z)(kFt*~WO$Hoy3qtiOKITKv2PoRt4%W8P=Yd1Ea(vx6MoG}#F7=y_Mkv({oRhOmbS zhPbIOcv6Qv^spxXepT*tS=Lxd2EhxT)*uWE&dn6A>Bg6XauJV-^q-np?rjttv$r>S(SS9;g@@EFT*wn;0*j zoGhQ5DuqnVRLsr+h8i9}8+`q{;a~n&IJ-vAH{2{D@rGCERrf$$@38AWVV8Zv3;{#s z4T;?&l&+!J?$PM3k;u;B$d18?_JPRO{)py2NK|uwWOHvsV^4Tvcj&z?lJLf!$dxOnLt!E;&dpxCUG`SNcrE3hOV}yp23~k#`LStW4WorPVCXi7R!mNwtG{my&ErKXJ z&ggDCqO<4J6|E!ZwjIz`-+4%7+aB2sTg4Q?J?n+!Ro2KV3(2h$mRBKJBe#w`gmJ+D zfcPB<2ua}H9Re5Fw22VoU_-lsv(`4lC9J~OAG>&L*+JAKaxl32>T3s=>zGi`T zkX7h?~n0Ysbr0j#sT5uUk9mT07}kIoz^wzF=sgqOn^D zWQkVxh^&CGPl@+q2zM4?NJvz6jfl*9F|=|igO-eN*9<|HUi3?Q;+6hllHWdn#I*C@D#PfqveeZa!`fL2h>8uC@iS zK|P$Du`2pZ4gG#q-b`u66gzba-@SF3Ng=afc;i?!FbGDb&>-bL77v;NgNL{?!{T

&=2%NYlDJ(3_v`PARnNQ9tvU*k`M?f(CbE^=XF2#Yrd}6eBE^6hY9q!72<6a z=4TS>YaHxt9OQL3)XyP4!YIVsHZj66CE7C5&pg1@HOwb2jha=E%HibQt7SIS6jhhz zlozE|6eQK;CpF|Jwd5ss`;CT zI#GK5Txl+bh z)J}RzYko>YUUE*Pe}bP|VNxtL$j8!1-^1B9G9oB4Ce+Ep$>8p-@T6GQy{i10vfP^T zqUL+0ya7?G$XBGukG{$!iQ+j|wLt!0*VeJDUZT%swePPHtD3M(83`TVf zMRyKGb)q)19f2vVtv|TAH>jlt+EBQ%eK5Ln7(^APftU6Yu3>++ZXgdnR(Doyk zL~!x3Q(7lZ@6OTQOG2v~$Wyl?@u&_f@n4E<*q63l-fA;_YScwgqPUz#NsFTMc68^j)3 z@H<(YHF)tgxdxqYM8?s=Ba)RuD|xq@UAY>Sh;R!en$H>`aUt&7YH@-gXhqhdqlWk- z!n^Keh>9ctMpE*4ml-J+k&X8%GKw3d!9yzQ=oV(1w#jeZzUknRD;Cy)sp*L&rDgqt zEe{^HK7QQs_({{$bi>GSU0*M=wmP51h@-}Mc{uyKI|RB|$NRg~<|Gc47tGWZ->;$1 zl;?nlxXXr^@iVOW8734 zL1M`3aO011H`M>Kvu$iq0ldSTw{NXN19W*9LK5 zK%kFR6v7P*!Ug(4UU~tZsFD=m2`{-B>~%ZT*C^c2ILyx|*!y;nmvM*>Na%vA?G-P_ zn;~AN5&o8ufi9FVA6iUUMnX(3Es>s@$;ruJW@Qwl=H(_9+_Nu@@UQZ zw6+3TI~|>|*F{h2r6=_jB=qD{`torVt$;dIKpifi3>U-=7r-wcf+|KMg|-03$-8`E-}Q#`%WZDfyY`B9mobko&fx0~qN~ z>yd{Z)fPOcEtn|F9A>8svC;YBAR!)x_(6vZAqg>3h8U^C#py#u>3xN1-9;Il#hLXv zw2V-nU>y0O%(iX$gS|5(*MR zSN6m8fi1m3prYm;P*iC9V0hPXM9)Z6?-(SqcQmqRG_rRrtaB*5YY6pmqPj<7dPZY< z#-h7NqPs_9yTC~!047TBcx>+&a4NQYEUtSrzGpnKXFR2MGJSA1t#69fG0Gf&5?oXz zvsYV2>+qJtXH|9{UZ;6LVbe}Y<&9#B8${*M66w{_iYvGnQUnjJmO-;%Yvk5p_i$&# zkbA&P(uymkaL|>|L9ap>635UX^dT4`Y5~pg)B+en;dNkSg_tZqp|DV0r|b{*Jp_#^}{wDrI-jG-fdA+ms)&mhf1+M0*8wT_(B z1PL8ExkLNx?lTvTUe(hvHoIhIbGph?`Ru?U-FIZY%w6a<3o_7Y9g)o57 z+G;$xhW6gW$Q5h*t5$Ybp|!NVZe_1)X{T#pd&|~YN8f1E&I3X+%IIHhwb(KtiRHpl zD@3GLi!PSXqO8RG$cThU7GQ{MB3mws!-ozp=u7>B7(y2;8vG!JmWFQ>!F=GUrQyHT z|3X&aEE?p8JjEr^a%E1R!K^3owTBgG-zG`jwesr9^Ah-Hd5ZvR@d2S~i3;?Y`|Hc?wNTURt&l|NgS zHG?+T=DBNB2RG(Lfm;VHkwR~oRYmb@NDXhwieV=NQv4mP zjjtWpz2(H|qsPu_|KeA_gfE?r!MgUq7>%_99RqWmnP{cPfb94H~KalrvG0g;s8 z#Ds`6T2y{o95XYaEGw}tKed^j27g{%#p!*;X}yKXy@hCZ(O^;Ha1m{!h&EOXNg69o zd<@1HlI$EXY#IEV2v9 zyodgkeir537$SSnrpwdbk0E3rf*}ZCi1Ujs&bOWH*Sw&SZq6@zN+7@J=C+_8j3Lw^ zdEJE=M1nEIdEL$Wwww97yYQRN+^;)xo_FWp?=E;UQT6w?1VhtLn^-S8tG{Y3ecsA` z(Z;&Cme4@d`SMnxB4F${;g!h?zRfOdDaO z4;82P7p3QF`c0n#SK8{wN&Nh+Z{)tJkp1$taZ|dH)w@9UDGU_U_ zN||XTjI7GioVuEV=Ejn~UiiO>h6fMp9zLpl_^9sj)8;Rqcf9|>Yo ze0~4O8$RKe-Ga;`Xg*oYFh+GSyUv?Y>0i+h-U5i}@onnzZSMAO>45-l5NiNKm_gxf z{b6kbq3r{~?ft=R{ei?xZG8bPz5Mt$cl$MU`!{v@we$qQQ*C`g9Rop~gTbAHAzi~E zT|>}Wln|65(gve99|(bfx4MVJx<|shN1}R0qaj@*pdxDbSVH$$QujD>>NDTG5~U;O zWp^D_KX6iI=b?4m_sOekN+_v|DQpmtT?gO6Yd|)bHGmrkst+v*F%Vp{C|n6aNZ|*J z!etPa5VROB;FXo)auBp3A9oO6aLYZxhzA-7T+DqdEFNxWQ821jNuVA6tMOLKSIszCn zF$b~$hAx>~BMCvEV{W}bJRgc3I)%s*2V>}}6&T3=sx>gk4q?d34hFAV*7cEXVhScnHGB5DD;ziy={5 zD-xCDhu8?6OC*VpBa)VvkWrG5Q(eJaFP`^2`?B}h7cFx$RsB7!V?)(#O-bp=K|#I&Ud}!Rzd_#ih106OBx5FDpM+6C+ng|#gDWVMINA=`{x2FZQr38S4 z+EN0W5`7!uz3SqSgsP+6s-jU#I#to`RnZ<5QSRkY9%Ydp>v6zWv7zeEW-U;Y+8bx9hT%$sL3t7bKzi%FyB%`nvH* zf63W4x)@c4zJL4HJT&0Chm)b7JCV>0XnE6QhJhY{A%kF)cQOdVA4d#Yh#`LX zHo6t&XA~Y_92s~gD(FsR5VWRI!DcZbW--C0(SZiRp75c@f$p{;Uamx)Ran&D8|~>F zU;u%k8Cp7}bLeiQyBq0}7`j7{l$4e(=}zg82I=k;@XYW3ob#M3xZ;ZM-uqqeTAx)Q zD!Ls6zx_5-SI{`{n}wu=QKXKAxvh(;sG7etHhFG*;@rjxtG+&BIg{ozj?-(%QvTjU ze$m5jUrGL%hr#nFtyN5_@SuDaLJgeTesu%??g!Vk$V0-mM)?mNOqnLlV45wQji`L+ z21B-Vz&7gkkqEo531KG$;fMP6*~33Ph!U*A9StHU_Emz#w)@C5aIW{|C;6VX0q3q2 zbE7o7fx2t8{rLF`(b*pRs-khzr^f@4&`6(?^4M-i^MIL;w|bDP9e?RL?d2l6BbpL^I=gA? zjPE$V7@R=Wj0%+dmVgHC2)#^5)kKh&*JnLv7v#<^4qm!Gp^3Q<19Kaz%d_LZ=xOJL zxCBQQ=4N^ZdV0qNA~n@Mj>@yL$(a#ar@PfxGF_8iz(-_Jik?26#ty+qAY%UtZz?mK zl89&kHq?Zj1Oq?6KkZ*>-t)$jL; zBFDQm&K~?Js^gvDq{l#*l3@s^e@uaKMvM+VA`cOTmNDX)&hz4}^2!{M6(ovXmFiaH zw6b*Wj12YL@SO^LFZ30+yHPpv%%**(W`!n9%Mx}mJJye-Do~FQC;)#u!h+@k+}tHl z)yJ*61Pw%D5<&3fSPcQ&Np7@ex%R}z05@Xc$6!vddBaEkq^0_{X_(~Djjl7ig8tz+c_LP8&w1ujrw^VGaq$aJqJ@isa@cmUz*t!0|3xSMfVGZ; zBRhWLKKO}7P=%&EcGLY6>j7?*vDe1fsv|Awb=N2iT%@|0)AKOWHp@r>?9i#{S*h8W zncg!{)3GyEBH^ZL5^8GUYU;CpFJ$`OtZqKOSm||t) z<{T>VWqPPpS0)6imIUov#|+DH4{+2pJRj2E#Nb6pbRuIY#xt_vi%6@0*^8 zm2W4UbvDH1-(2n9KH61}BFvMoXA>{8Kq%F+=Bz<+w-UtQsOenk&&iy_0Km|dYw zn6cK4Q|F?IHZk5Tfu4xI@Sf@?;15)fR;a)oz#}FMp=FM8opw z@TlSXZr{IDM89ck!teTWzxsaK4$a>Q-M=Ypy3{tj5=k3v0PTg$W%&bR{%-C!sGM82s zr&bC)Ey*@qP(uX&a$rssg^Cv{L;DX7IzBLu=mhiH=5qgX-}21b(i9#4{1R*^oaq;3 zq^Hf$l&i6{agUk%J*Y=O=j+LPyD#JA;(cKA?XJ^j`SDVHxZyyg#@Ji<^TPAOxW8&Q z%Qs)3k)8{l1Sdv9CpnpaztB84omheqkwi^noKkafvFxJvKqHRN5|8gfOK8XoyiDtC zn01%FUzkA~sLx*FyTlzu+}ED_H#n`o67Yz~J&;1WKB}r5HH}l>&yu6Ozag|{M*T^y zT4W^H7ZP}(K}grrwjKwzN`KYtA1pn5Pl6DcmyH;-?sIjPi#mgrW;|E#$Er4|OFGn* zB($}#$$!YDzX7i%=462)NhLJEP%s$>2GTqNs|K!^4^Z2U3Qf>(6S#Ky*A)w$;(!y4 zjj%P3>^`bO;xVm=cQyv5Zc)24{fVidc0Wn`U`HVsc=dI1L1cL9Trda)fp*31ohtMS zfV9n?wTQ$4L*@CtG^XD#iwI`m7%d3-jw8VpTUh({uIV5A*t5fL;PzHC-R%f(!k+Y1 zBn^s+c@*|Tji_>TQy$49)%sN5ZMKu|vSVqwW4nF+=}*O*f?3a4{azoQZ8VOcSqe0# zhBYJ!nqa)U;TuNj{+nl0JOIUw?)JhAZH*=lfHVz$eS(X7`$diQ@cjA9=M#~CMAz(` zQqTWr0D-2XFzjs$KW(EsuTPX^(DP~T_D*yyx&XRdqYjLEC-YHKM@~{lOJ71u#;m%k zFsiDsHYX)1C#AM9ruCT~J^oCH&A1+bsaRQ4nVEMScvpXsok4CQT%Da)Mt018@f7%m)~dQ>+|x4JdW3exwWvPrHC`*Pm@d$&2+(d7c7|yWLstQY(dJ#0i<6Q z6R1Bz*rkO<$D%H#5|73(T$Hh#<+1JMVX72{t-@`$>|J?3s3OLzW_PHFYo&o}3{!*R zNDuG47vMI2Rj26A6V21TT~xE<^%~dy=F8Ww=*7pjHZS0I_51D9Fb;)4qxX&Vg04xo zBcT4o`%thU@%8+JG;_@i&$1-o2-Wu(HF*(VmaHcRg)j9H+IP!@!5)~AQ z7#*ra9p*|3XbUrahr}6=-bISV=Rejay>@B*=HPVa{IyLS~$Yh#0p0&bs z^`bjh5#A_p4 zZ_JCs!mNKi`YyvZ?NscmF>sJgkJ;`s6dcwZ`W?3XA<%JE(4zjeHs;?-LVAuUGPMB% zkz7?B)t%})-v;eAO#)b(U}jMX@mgm6;GAVFC(p#_u?-Et)7||TQ}d`XYL~J5kjh)k z+rZmK(Zs~2M@{W(cl)<&nf!h;Hcq*vic@HohBSFl~2A|jsT5eRTXh9Qkd z5_3ob|IDJSwIru?Ag8qoto}sZ>3LfZ2~JzA^Ym9KKNl*gzlj>VM|3~V(m45`$XF3O z8WyRgqsZ(AFZB^oA_461tt8t2aR9dw8y<*W7#D0uWeIFTNYe`j3%j9I>D@A2OZJX$ zX;*G5;N?Y*1WGP4Rb^|8M6>EEwD2)xZ7BD~YBG49Jyaf0Ly^{z*<VUgfN_}Qed}; z-glpwxMA< z*nxnEEfOxxW+~cONw|T3bN^I1X{ie2mH2v@eYZbjh}~R>X(q!K3(v*g6p%#w`qFWY zZ5wgEP8-^|cRT4J-$x&7{6i!E`Bg|WnOiT9S0{oNX5EwF zLV8c2G^A#?&%r>>!4t>H(=&N&Zsk$SeL?V@L!)TU{Plf7UO~|0#(8s)=p?v66pRZW zWY!g2FjD-{k1pG-hO4uYKT|VJTQhG-%jEaQ?DM0CY$WLKV^fvRLhi=+{r3Gv=uJ1ca8|tZZO9ZZ1R%Ltej}BznlI|u@<2# zgO9@d5b+1=rT`7{DxSXe0SX2JBvt*zTGXI|hA3AMjsYWJd>cei5#}Y7lVse^g>2{c ztNVll<+Y|5(M{1r20#k7r1DNAUHf>{4Lh)I%2GZG;TE$8w*_+9UB2_Q<$QPwyi{HM zFPl`fMRAKLAG0UV?)M2#Ri22AzoKdtb6hY>F zv3H-5-ro68x??p~4(=_=jXn9=J+q-lyX&@xF##N5;gMWh9H4@~~#l}Iok2ZwB#1R!I0sP#Y`HZt}qp|1J;zqrt@@sBU_ z2+(Zpnl3AN59z_ou*M3E*eXI?BbuLt7IOL@CH1v5tg9QzdXpGonWEaN(4>yS+WMHX zte-DGj7Sb9kAL!`6724IHERD-`XHQDnVDIZNybWg_^YOJg58F`n9j#fpiM}>RiC77 zeL)e&?PAYTMdu(s!$$c_sWLvmZMtvO_myP=NywOE$A=TunETyoE&r?QlM{wK{aP*fRgzKc}83H!?0ybP!RB z-f3HJbyu8?#jU5eJ}MF`B3@nwdd}Xy&L(<`u6EBK?N)r`W8fmhg<(Y_Oh_=m zw=hq%azEFViob$P)cOVX}tWXZ< z`AG`D;X5%ys2tQQHE@+zOp`vJQi?J}R9A6#%!MPG5QU9d26W8k^U4Nzy>7^4h_586Y>-|@`Ql;h#U_t$Ba?z2DHezL-kJYK@#iGbc9in= zlto(Jxh;3guDdDE+nCwdxw@O)3Z4g?;qmR3e2y79%S=CtyL61T<*dmomVs%P_m!zw z<{Y7@oPJU2NX32RM29z6Jd_&~OH8I%7~NqA10jSV=o_is`y}k`5&26BBO&SkYjl~# z=$ln2bU%^W)mj{@F{!LIRx%5_ef|}b-OTK`*5$NW*Kfm4DeMV6@r*-2xhSG7G$NTo;a8Ti zc90ZxR6$Am=p*dBfd}+LHoS#Xfb45miNTnhFvDjll`W9^5Qppft>Y%}&2uCh(jFjB zXw-bDhxWD{%zwCvu=0QeFBdEk3a0pDvsYMU+>C*63udK+RPIw^Aeq_513A#7KUxy# zN}5YL&`Hr2OVe6OmB?AisT-=evEC=uR&~^N6ebnck38QM9@|rA&-1b$ew2>T98;`c z%@){!e9@#?&@9@cc^!1ZLT<8ZJMDv7DyRjwH#8-;-<=gxWx!Y@#$HU%D6I0m4NUT7 zEK>DSl8@z&=-33|@dzLii=o7Kny5!^A_D5w<%R%WdSo6~W=JrY{Xb5fEpuTK?CBE| znq#NpZC>RPk$v=3Fg7jC7Zy7iL3D=2o_%7>#s7JKB~w#(GDq;I_Y$AUXDk!J2a@9! zTj%vIm!-u(p_a4NHiN$-N7+m4*`y{dE%TqekziC^U%_im*f0g)M86euaiNfxeW3Se zh`4QQ9|cC-in2vXz#fQyVg9y<8Di;HRddj3IOndv&^)EZ$hQMl^!WItakHo3?8D+YQISIIDCB9g zY40D$by7lwcFU3RZ5ZjI55;MES$fp`HYEWCV`}ez066i2CDz^*ev0@Ff?eXm1O>p? zEf!N?FMb=I*dUIf-b60FK^(Z(u0E?~Wek>G6myZDvph@!Z;%V@b84mXMKVE_%V3&J zh`nSFRmX4;uS^7O4ah*U~K2&WA?ehVZi@z9q z`xaG8l-$2!Ed>=fuK*cp-qdu1$&s3UxCnQL@!#aiC9k=A{eihA!W03o^(TW3AtoI# zHnvN|=ev^-m(O|vyo%*jo~lz^*x2odTNM^(yD3Q&<7IIp?4GexUNMTLIy^IeGLj@h zFZS7?+3k|6e(K_4)vsp1I&oP8ajRbs52XX5obeA01)N^amgNn`z~5 zhgh=gKQ=#GkI%%C;^b(rdm0AKISXhj+kIh$;j#t^w4^PUs?)W^=Tz~ow{RrZsL;)( zVa}zRD!8I8s$Mi`2ZrFw5{AsB!T=Sgo+%K$7ud1g0p*C;!qSx=sZL2Tp`l}^E^5_L z(Nl8Hg}$K3)A5#jlD4TYGuAXK+cl&=C%l^GuMexxpp#4b@3#pE|F_cY2#m8NH9Z`# zt4=+*H){2hyjavrO1fJAL~m`Qd|tSPH)EIDZb)E;bHzEpfGb7?`-a|OW{;<@K`Ng> zKh2#!uaCV&eCZ5{-_h0_7b*3yT;PRTrg26Tr=wRJHAiSgKz(RK)4zFJ*m4FV^$$;D zj7S39U_@>yNf6TJF9bYEnAt<(HzZUK4%3)05kG?k0|oW?a{8vL<3dw3%^NS0@_L3g zHt&z@W!8gDa>!QrxZD4Tj_!M*RS36L`pqQz6cJI-{p3cf;DSA2z}1)}tX|@yl7^NB z3WwB~Bo#Oc+L6-Qk@7V(r7SchDkY`1zP{`@qKTBRf=t+T@#TjN2J4Tw)VY}nVsgfB zWIw)wtnZqMcyx#s(`uQPucBwLy}UbeCa62lX8YGqKK()25>pdsjK*t3Mn@Qfzjc*| zc0WDlqJs`hao{8P=Q*KZram=ruNp@S*T7(s3F}~~;1DJO)Lc#v&2-lY8!zUXDfZSf zvW*BKB1hT6(HSM%_@Og!aPBgt@=aQ{6VvM%4H7{#X(&_~Xmrqc-y2xdEdjEJ12}Eg z`wn|)S63%h|MfoO_tY}@cT7;(?)L-Rk0RkYZ$x|xti^ck!378K70gD0i(sKf`ftGU zJ$(9k^7rS-Q=8-?#VqP!{(XNh16~LeL8KrI;Z}l%u^5qt4>uwpDN^z^F6qDf=;2Bn z)_6x2gMoxYJczWOfXO)o`l%Q{KoP@JDx*InYhZ@6d@Z-D5`F(&>hF*=ibfw~r>}_7 z3|$^qKyRMO%UV%ShcC-$6vV0wkE2{btC~TJ=;w+Sq1G0qOPn=4O&iPp6=!#IFiG4h zN)C`@^UeCulVv8Ek#@dFkeQcbNh@c;uvWDnR7B0xSzJU=1C`rPwsm%GNj7N-S~ zO;0c}Cb;0L9-u|6&!Lfw*o=Q%|sNM)R{ttfGnXIiFgNw%7>{#tJffxA>ul0Pg`L zb526#5#c!u*NlxJsuY#O(0H3u&^!GD+-UyOfggcGib-6gj9&@^RzvSOzww4u6F^@|@au@x8!M&<$2 zahlA7F>`dIXnwh3N>U##5?|aV<@-FMP;V!u0$(r3C3nFU05hEAdVD7O5GZXj6l(Qu z=FRNMGev>aQtJaukY=g;scmcofv;Cbq%Cfh|1|d_tUV!b#rLszzZX9%6qV`vKMdvv zAm6Zx(~@WrI!N&IUU9Dz`A$2q2RN!11SNo)vJR5$u@hZ z&%efui7XDs$YWVi6RNe>Y8CKmG7tdhHAeKbKOK4Rf#@cZm2GpDzz}q&i2($Nw1_(zGN~z(zNOXPJQg#K~+r41{Sp7cF5~cn641DwN z5{spUBH;b$hEGDXp)<9W*Qqva&MJ$FLgkK{k4FMY)uTZwrKFzbEDLRWf!$nC5!$J{ zX?rt_6@-}|_bSWR&q!Rlt=(uPct6s!MN%}F&>Dynip$vpPk>^lDb zx%X(uxBWzLacL^sSfr-r)AdT`&XOnW$rEsR$7k#C+8N<*z}sSXzFOU7vHG+6_=LB` zQ3U2~UBKi!WpPFfTqD0*50S#=TO;>aKfTMpI4?Umw>-TFoJ@}`xY+38#JuW0-?!a5 zDLB|cY1ZD+^&iazium3BmtN*ELZordrz%UF*Qnn#H#?(w+Bpn3tcNU%+qr93i@w1H-kQ`wByyzOu+qpp1%D&0yf-Zm)_g&Y=+ zVpLR#w3Vg0-fgjrij1n=K9yi8ig226!WhR#iY*G~{ezLD7_x&MCJ=bTR^eJ!K6`N-sx%VF_toyJel`(L*M6%)380jBm)n}AvetzgZsiD8MAUsBg|YdOA2T08p&+DTg= zmv-@V7xIT^W)Dn^{@6>qZPJOq(@J>Y70o*KzZ*QPF%f$lr!?sbygB*y@9Avw-`j4@ zXHuU#-p-;q0nw|9)Dr?(qLV1l5>#tx;8rLk86_{|{Jj9@f^ssive_3bPAsSSW(s=) z%918ZNhi|$M(lw?gT{MlzPllwhv8bAO`$Wj4)6&o|*2d>iSoF{G({h;6cviH+^}Bx`G}#b$d`l&asZb z0&6{Kvp8iVtivfa4Wpu6u6i}<-hT9l0ip_Csu4YP_@r!*svBD0=VL^@TfC8&rsBaH z^ByYKl(ded#!xitX?B!g zp6cD%m4ltOSuN3ViC`@(!3a>X+v&Tpt2u+ZNNnR75%1O87xGV0*wN+4EuV&8a^7RJ zz02k06?3q6BlM3_r6ym?=q`}{mETUyBk zbqqe{7!ddAVN1YC>V+)M78(dv;o%MAu1Q4bsIreKn2i#+Vy!sPcS*v&cVPsAXf}iQ zF$TD_;6^1k{M}<3^#2gmA)^4uK3nBpwwt2WCUT`Es{C!K?(?&HhIT0 ziHe5gG~%x+dO2U%gVSb&doy`?@cZ}b0s`n?Jh_gK-3?mG z&NjWz6V%21+}*YH^dX)q{uaiv7RCmFW)9>H)d>rRnZ1+P1t{%4%lyAL@7+F(MqSx6 zDjl+`Qr1l7R4IL9R3&Ct?)xV|kqF6UDG>jzP|iOB;ZQk-?AXHddX_Q%U}vuoA=i#L zr+b8H+KVt*TQd+I!u#&xnE#^U0Ta0bmtnEb#Oy8!N5aH|L9KCafHWmEKJ)vk} z6Ih?F>+~DC9y@B+om~6r^ZcxLrU;XrRK6{@JoGHVDknSY?NcN63-E`V?$6XWyQHmR zpNEWAd9g2yS}ZCTM~ie>EsUnoG?Whw>EF$KmoKqD2j1*E zCv6hw`ir>m8L4KF8vpodY}?fIBXQi5GJ~{>O}tQAqJ$=RM)-@`fpu`CdhL>v9I$cY zao+BmL9ZxCT(l)Lf69o%@*M^k@A^QV5w5x*VW6_q?R-mon1_CVg>5Yq&n_DD&Pv{h zObs__B%Q=cHrhR3ieIfSw`|+_N^Yo5!*o2%=L?PajLZ#tuz&ZMdCTT5MD z6Q`&P+e=5=p&iYu8{{p_zwP0~-5PebR&bYAa+NZ14~@;qjBCh_=S$}%&!&M@uBoyY zhZRmO7$lyTd7$7A59ef^O8R{GW@XegOzcB^yc0Cw0amsVUixX?k@1bujrrbQmKeOT zA1puY%N>aworsSZ%PcfwXEn!9iHoBX5ORp#oNwC3T2zoec`TY6j;Pcy!%fH8A z)qgJsCa_W(lee93iLl?ZqNDS3gl!Z$oU|r<|m4x?S7<-D5{1!0m0AjZSOhhLpNaJU+Y07`RW6e0Mc92ARU6f0sfc#C|58;|{U38lT7T3<-e1;FwGW>9cRle?TG9t=mWHNUIPH(u$Yxl-Kb z%q(ZS1Z#H5r!M)WPs-zk7}3}xj+*E|#*YmL%U^}!Q6DI~hM$8HmW5o-{2SVVYALEla&IL6Sj(gz<8z zUdwZN`q%0v1W3@yjVY?0L>qe@QYy;zg5x(O_JT=-1iH-|gaGU1(ApyTlDl-Dz30_F`bFxU zCvrwcfNP)y{KcYF!8+w!KIK%&e(Y%K$yYCU?C_lZJH8}@^DV)7UjReTTJ02nghJ&ipeD zbs=9s)gZml!~zxi=ng(<4LxfOJf;mlrVl*U7j=N8&CUhhu&*Y)`>Fvi=Z2rS`Ca_? z(gvlS=583`CLK;rY)wQ0B@cF^cZQo<95?T-_n04N&D<5V`5bcKD98nCJtMy#H^brs zwvJ-820POmtf*d;9X|IJB}bkP4Gzuwd}LLg-|rHjm8O#8#;wol{b9Ydj;WfPrECOMLf zzs;9PAx1Gu3ZRUgI6kI6BBIwp&93!`f=`Vh?g?SrIjO^JJ@iVPkA{wpLDE*mAbnW4}r z@`}rZen>Mzmxx^iY?CH|0TQy}0#N=a(bn**5{fK#DtOp#(L89?=#~w@sxNMoaK5lI z8MHX|SXgq{u-`WvkDN$yeX(>fv1m0lZ>g+pqonmcQMdSpW8eqZCtg+?E5@NeHJr+KY6?={czCV`1<@|#3B7&gD8A4@8Ft0-_|U@W=0&NX`po9!S8ob0;wuB#6J zx(JoslCIezmEg2S*Yi3G$0i z{F~A-vFag7iAVf^SHghTc6;4@{4hXe5TGoJqbj>Cg{>Nnl@J*cgOU^vOhf@DNV z(S(LL6h70N`!oCz8vcZGj!Lj#Z}cH~v%K05$l+n=Ijp|N>R+866C`3iuBL_@=2CMhkUe z4mlT#;Xq=~Ae>-wBSuS462^h7El9$+`Lid4rna51JiA8n&&4;VzX`$6<|6;3TqW#yQ@n$u^P432DUgt@Rj1=URM?eIApw<3b-KgJbEhuE~y!e}~zX(M={*w#D^ zvtWuo+CP3H2sNe6wXjY-SkBrS7M0oXyePjJpHX1RB={2yHY9{eaFSMVFTaLg-waqA z?Xd)0FDy7{+Y~5m-Tv+IBY6}m)fe#OO zt&zTb-Be7$5xq;seOU@v5__>hVwb>-_KA&YCB1OlAMD@3{%om^BuD$$f*?kVtN$Ll zhBXiB60-VPlZ`Ms5uo0U~G)(PL~veW(!amp7$y|1#BY%oIqp`)b-pPL_v zLianmd!)O@yD(&f;;;#`e*FlETo=DB`+jwPgM6xF$a zg=#>9v(#WsUm%cqiT&?&Ki(~PijKj6V_MsL*x_7dDgVy3_4vs3*Z5Ud2L2MHi*5S& z+Q7tlCaOnnbLq}2IMS`Q1s%z3WQiXTx&{GwkO~%0^#hH$X)Mj`4l0rLtGFWgra>R&<^k@k+ZInC-$XYWCG zA3M!DF0D8b228WF)g@Yyi>eE)gk>EZbN)F2Sj~XgQ8qJCrfNrMojR8`RPCc^5&t!j z>OG!}$>&v$k=Ve-dW;YC?r7Q(ato0oDA^I+ym9`;Kx1)bjsX~8FB%EqqW?wOn{#Md zsCkhFQ1B^Ynupl*u+nQ$_iSRyASUkvk*FPuk1PAdTjyHl%4zxWM0u7{TmjD|u!aQ+ z6BJ|=VD4QAsW_g3q}g`*e zkh(lr{rz^_&%(@%2g;Y@hU0>v;*=^hLDohpP7Zc36+5_!U!*)sZ`ye3*twkK^eE`s zboYq}ViNS>_Vgyi=9{-j&~HILe;4~d8>dP;VW{yql=D-+w3VmC#~4Zlb~NL*>rQ`c zv>y8>muO2!lU?Lc|1AdWMDf1{Uy=qD=n985I;~@8EmO8Sv@8vfxKFQbL#tPb87{_+ z!F&istaw}^mQ-@C@90Qxw47}uJq-#2HA;arIh-0J(r=_NMEn^++pP$ ztHy+XpHE+rJ;-$P*e|D)@VMoyt&^PUtgK-_1}7%w?XCCI=QYAe1|}vfg_?IjecZ%r z>l4}JE6aTUHmmKMR_b#ty*K~m-u&x+444vWsi;(BU6v2LZEta|UiY<+|68X$`B&F* zUF37qT*nuK{TkPgjVopg^clPcYfFx924`E%ehnvMzu2|_;wXf}B`3`j23^kkFIJSl zj2|29ymmg7or#Hq{Kg@z{+At3wyX}K28ZYtsfYdXHwsp_b{Lvf) z5-Pq=xd;U7cRz981?|qp+udZmIv(e||3nzXKlgSpXI&5qG~5;KWAopMz21JhEGnlA zM9X}eNz2syKADGbQQzody^>Qtm!B(S^}P0;`}8t^$KpJ4?jV5QX%bb_`ZI^qBC4j% zica9hh*oTfXqM;+WQ3?9ILjv}RGE?a#e&%jXQX8}lsNhB7;IY{V z@aL)Y+m3s>v0*Xfw;8Zr4l&!D%v4`TGNE^>`!1<;AyT3M8?)thg!HQkD%dMkb85 zOuH?G+KxV*(rcoPS~ULo(^=6o%)n??sW+Q11(bzTt99lhLy&&IJOaqS$5rnl8TiwH zC=RKUU&EZxNXOo!1;|HTdqh@CTs*KeRzpl3SxsL!)1Vi)M$Lx-TVE!&W|gL3$zV?ifX6 zijl6eEmJ|}d(4*~ru0#a#0qS~RfOqBNc8a?YsGd|3%pC2LI(B`s1=c@CPNoo0R-Lp~VFvh$$(F{9J()xR29a<<2PW;e@r(d)U zh^kiVea;rOvyC_bZ8a!3PHqNGgPtW}gAnEqLaatDp1s$1+;EUjgl_>q*V(^My_!a> zMQ4zpS6FVICUifs2jW3DQocEOQu>9z|Bw%{^?@x@StL!L%g8J!{FPP~y zdX4Vug}kI0PQUB%%xqU`L5fL!fcCP5)5`%a&t~&V^C0y zn!)|!(T2WgR{wHpD{WoOArM7=AdA*T`uU*aA`_7h$FaM0b??P_slmVH+scWXWeaNS zaIe|8&9?%AGE7WNKBwP4FC*KC{@xcGZGr8P%swMl?Ug%TM5q}~q`58CEBm#M<3sU6 zYxlWAf%k7`v0bpE&Tk#iVv06-83qz0;$DWhn4;0WXc!JO4SY2iMdwT1aVeo)Q&8;q zlJ0@OatoEm3;hkdEqM~aw}uJDtAv0O(?n5Gn-oM4tsGSAu zg&kgm;{kx!WZpJ!sqEX*{%4IMKaFr&9(^VXRst+DJQ7M8MA(>SMq}lphc*nvOa&ss z&BNo7s2Ye?vr-NN%eBNA^J(ieA)hQ>>x%-pdmvXKndrSo@4=aw$;8mFt+$u?NZnDl zYB6zzjJoeDF?Scj#{{c8jEn3)?6#ya9>-q`S_D~?e=lL`Zr0MT$jBgmM?kM#(w5&0 zV+85X8J0R%aC)_Tfi(q)kyZKd8(!HKAMey1mnK%`1sT4MrdFutrHeha?#@7V4nYGP zT;EASv-enseQ&9o>;JD52I7q?e`#wagOe0*!H{S z>~X&FwG&v%RA4$Z837p?9MCrq^92W@O;X7Z%SMaS?(&pRDm zTU|#F!$!Zk3FPt838UNCD|OHsPY==Mw2xXHYS^UZs}e>K!0)d?ojDp;;CX1~ee40t zM?vqIYhOhjR>L~$?U<(6B}co_yBvMIn~WTC2{Y%CJ?o$TR5BW}yk+$89%7d$pw@G2rXK;z-81NhI}+Z!_Fx*6bq-USA9Z4Z>}s{Egdt z$WRE)(u4HTf}makv4tk_x2E_pyOd^Wr02XDITkHXRSA~; zw7pLt^1B|jjF{ggwB941R*RuJoCWGh+T-$-mb71H{wS8Yp=iYA0kL4wy@Itzbbys~ zWqr{X@xoJE6-hOf>GfJ>h6}P~U$=~#HX}Bhho89{EjzzqbyW9fo-n%!w4kuB@E0i` zxmdvAR^Gb5m-FWK_ObI_Qu~dy?r>9rLAuLEt>xU$U+vA5UGCek*PCL{246n}d$Tk1 zjfV49$L&xA6w?Xw7rS!PU0GwuF%rYjwr!ah6j@Zba);I=eq@nnP}oiOh(9(B8FSaD z#{2m#mSb0b;+`7c5fN}Lg(nIBEZhTUNlJ;boFRXY2;dwIaZ~`t;`LF>){e};?C_~M z;xx1=+$o5guOn$8GG79 zRy1jAn5goS%w1n=X#2Y1+3{x_$XfZ}jqqtSObybL17dz3k=Ks%9jbktD2ZG1_xM3+ zf~Q$F#a2_m(>R;mE|7~@_{J&m57ch+b%7VDpz%Is)vw$%f6-X-lee=2PLo5@hRDPr znYAb2Mo4DYC~-{mtuWu|F+eTufOthT1iX54G}>K{ z%iojSL^ww6fv1bFJ1xncU8O8Yy`0d*H1eh@VJHVrP;4fzEsm&h1oz=U;069ehwA!` zsN2m(0{%hs=~}mAzs|sz-DT0&$o0!`ObZf{(_mA8Br=%gD-;;>I+_tv-1cLi}25boCTi z_s;t5;;pU(hhhz)gQ&+Oh$j9Bmp;ghzbPuZ6)q!vg_vYB2n+spAU=(hw#_+87b0}0wRB~FtClB~d$!X2j%}Y0~Tj}WFa%kV-%NNexzkM?_@W`DT8G`=<7`luw z6mcm&5@9GQ;YKnhp_JsCX(`~Ln`ucmQxk7kf=Gm6$TDZhiXm*mQ1b2U6bSaXRttte zLT_LQ*AE#n2oKuC=mYJ9hiF7^8WAw$$E5hPr~zyUC5S@_;n2c3vq8dp^6Tkk?bd?#pNO6@Y>8OpH%qc?&}} zaQUJ9I1FLax~=cRzphn6z?~s2=O+yPgrT1>^b>~0^Am>tFZ{6@$eN!p^b>}D!qES( zVCZ!L;GhY8x98O^ljh60(k(frnJzG|RtkmZGQDH%-RSlZt|u z4aVoyMbE19Kdw+bu8X zMp|RLWME7&_EbLlL^k?FJp5QV_=wv#!s{F3bdNGy`@~%%nvv%XuYT3?>X(Aj8lRMG z=VRv__8oQDb#TQNS9DXlgUdRn9S-h$opv8_+;!M-=b^1T4sO}Lca!VR_0AsaoVG*O zY;j$-Zp-Y2E2d!>LZF#$_t6adDcGRc8^Ii7MbG zcOG~gJH2v?i`}v{Xwjw_^FEwz|2Bp`7|(}T@IIO|gr*H)?c4ciIk{o$Y);vfC&qaO;o*n=wG7wpv! zFnr(^vHW=-jBqpk57>k+Fpc#l41|AaYx^z?A)^3stYooq4BC(JWujx-e*;EuA`(B( z`1!4|z8&|Fg+%xhJjOjVbHRdHOPAQKS+&y5<=DO3Q8W^Gh+)z)OSGIygSf6l*;Jn2 zSfXnwQ&(u{5?V}Jcxbd&a&kaQ?1RkcdwPCGe~GMD&u>wZJM*Z0YP8nNP!VHT%NWwY z^$9(twZ8ybO0SC4qaybx$=wQKmx9zGC$&llO~R}Oentf&(M*jkp(L2d@qnRXV*I3G zGQf~3Ct5{_5vPT-V*IiL?gU;qdTpQE)&1Kq?%Q#0-_DbJcbzzNXsd(cXRi^4G)0;% zfT4p25AE8ucZWM*$iv;m-QC&E-Pzs4)nm7Z+b$0WSI2eR99C>vzj~X4%l{ z?0@9;^$b4ue~uyi2K!5K5myspZX_jKM;^j3l!_+_7&Pvo1ngEa?2+|oouR}VXn<^d zm<&C&-hv^J5DFS5OYlSz|fF&tPMTDm5zUDTL$47(6CzssXq!suc{QUt5KkX z^$~__pI47RzJAg}>>;>~@O#a09s!2F#xR86P4*hA3_a;Lj!&Q-dI}h-H$1B@d{UYB zs6swkD#oWv_Zql;25xUL7zi&20fSh55Dljft^0(LXnX=SRvEHo5Dk@u@~AC&)J6rl zT0%5)GgY}UtOS2jv==GX7fl}-70(e$LN_0zt#7ya!o2ijf^w7l%E`=qPtM~*0P7~bc!zY84qa7s!O{V_F;_g~adu3s3d0|^wQCm55@)}B2^(ClnC@*NO zGxl|s4h@tH51EGt3`2dz1HJnGp2Dv7f{qqNOM|e!idk7gGU>Cl1#wc5Kb?9vJM&6% z;;HC}y}mxqw{JOIySnl6<;~ZwJKep%%Rl&BO2%~p zxF)ltv|LzhV&oOX5Qz6eBhK8q?{?tm=Iwhoy6)ZJwgAsz z?b|l~l-6xPA8gVz9#k3Ha}X^r1Q}cvy<)SI-ICQ)W&mf@p1KIAe9&F9er%wCXkIW<7WZK2d3WGP@z%TEnMv=mO2`_VL{nzXo;KHR z+PrzQmn@mTZtY4J=e0YxUk(lsSD2LzRh&}2u+pTcFD+;+D*_KSn6))}j*1QNAT6yz>Bxl=}Jm*h4JbLx5NmCU44TB3;*XC%eziSb&Sb%qdzGNTmf5z^F9K|%m0 z#*ZHEmF<5!+4E}HwX=6m9=>#N@9DjJ&Ky3zZIkosR|rE|jc(ieO(*v6Kj7iM$K7?8 zyUPwY=k0Dz+ufaadARP`wPW|L9q#U~j?Ru795!#*;;`At(QV(Jlh>~txN<&|$AL3^ zXT=b9YyCKe0?$UF`|9yb#t=vdJTxA(+E85NwS?&F@o_g260RpE+(=5io}6?&1?5I+ z5}G_@nL?BV47!QRLP<9>l5b_E;JKZZdM7*8S{4EW0fw-e5J(8ExcGpS<3%DoAfp-6 zcpV6DJ!udE3O(18PQ*fbz#w}uX%NNxaikpi>Z5m;xM%bg__Z4yai&%X&cXC-U zR7l0vC9XA&jZL{T{O&Km|K%Tl^ZIvR489nt z?yW8Bswn9yGk2Gj^j203)>Mr&)I4gg`M9O#No(D+j`lBxd%u0s|JxTMfB53zzkc=b z-@bhO-B%xf_toQn`*QSmF9v?~q~o*U`lnsS-WqkYF~3o-s@Lb$7c1-Z(rS&gQX{U= z^2~({eF0Tlz%uFi7xPTNRMu?v#764-Q6N@sTVa= zF)K{D#YO3ARiu#T$DrOP=HAZAx|o!FBrIZ&U(gP3KZk3#-0ypzjEuRSnszTE<7!Oo zjo28UjPzJKJy#~9=jT)9@^lV2JR|F7P{_&K_xGH;;(X}jI`=(G9Gn)c+YDK}!C~Rr zjdsgd%~`r~&XN^#7cEDR#kN~8-5zW07C?*L^EH3k-1$=>2r=`fA`;;xBD;@fL7;Cp z1v1la>MTp9&9aBUVYZn%3(IW#X>+g>A`C5u*lkqE zc_)VOTj(b+WSv0$L%|A2=wAI3kUI}f-g$85uGd9Rzn#aU1?`Wm z4E@MVLeDz`hXDnE9e8~RhX~%c#wr!tm#m2SZv;PsZLIsPAK*t~$fg1`IrvN1tCr)j zH5Vqwdhna?dJl$XVi=k`&CU+pX1{FdqD>oDxjOH4qtIWa*qpaGLS68BL zC@HKrY3d9G6-875F(x@AJi;?B(kng2hn5^7A;i=wnV&Wp#!BS_IxbwU(1OL-!|g54 zw+9d9k^5ETJ_V^)4kRLX%gJ3bQimkBRZIX3)v!`ZDe-_I12JAlh}9BeHP&IWtmypA zC}l>3EHzY=7{rhDXM}qZ1McMb-%0Yk?sxIjjiU$8?%R9z$ce4v7}9BUTi0$px_j4N zH<#V6&O2Njcc8&Br|qszySBUR-MM|wPLCZPZmw=Fj?PZooSnc!YaKT4IDBx|>Ek$t z{`mL5-%gA@736y%BKT~0;JNVNbKz*6q4QBe=f@>D1k^kk5chX6w?nm3z{VF)BN zP9iQNfMZD@hY`f42eYZ6Y+5*r8qFld(ur|2Vmd9CKqoTTBms|_FJYGy2&>h?2Jnzp z+@%rrYIty^?#G6}u*Ddm13*EQA^dK#LCu7RaKwCHFz#57e@EVrq45QTEEsBeFNV-v zjgv5>zySm;4jtRzJ8>{s%Sf1+-Xu{YNT}eeM%CAi%C8!wUo?ncH_9G1C_d>041EWm zM3F%3~9kY?7kv)PZ8`v z=`3WT6^8JdQ2s<&s6|C?loK0dx%JZADq)U+k)p_qV8{89BOeeV9^^!N<;3{r#03zN zLz%>QE;E(K%@j&UyhnwS}s3nW{pbSEb6Y%`a*!D(*1oJB-HO z(z4;I+9yq&Uk>*D`pM8AUXK0S=O6#Cub=(~GI?dSja&C9=i{p63YhJO9H z?R9U%v-XB3tpKUohb@gyJKJCOx4r0Zc+y=q*sN+O<(6pJ#v+zM%{HmwA0P+*4OZ#o zO(p8i8ck0F9$kO4VX&=awA(z^V;b!NB$>zhO{4wV!CrN5cYaTotgTJh)Xb==$u^pz zrHZ=*(uMf=W5I#@J?|a3fBPWh?#*MKch38H-;4;o8x?*(CfX-4(LXKKKP}xqBikz} z?N(ImIUm2nH*W2|aM9`Tk+tsImu}fQZ_T>d%T}PLVJ}!Tb>4!h^XAW3xOm2bMKcyI znz?ZCtc6QvLAwC5Xx6-iGa>d!NO-2roi`03$$sh_JJim$n_?5#g#CDD8bXrYbc7+i zIAjm+ooSCwID7u$xeJ%sFJ5U69$LO;>Do<8)^41)eC@K0+qQV@b=`N=?Z7eD{YRbm z9d_Dx1dk(R@8NBG4?FHTv~ABJG&+U_Uu)6j$jRO3uN=O983imu=SJ6EbC<4}F@NbtGwt!Up?@)D7M^!3iZ~He z?D@cwA5f76LpBfeux1j2@Yo(;YaQE6ddc=Jc>a%L=gY?qn?x4Ayf3(Erc8r&VqVdt zSibi+H}N-)W60XEJl=KI?CEpurrX)im_L8^k|lFju2{Hf!`dC&kKVbNA>o0CL={GH zr9ob8%&#>U)S1+EMoqm*X;czfnQ_S>k&#~UQC?Z`{yEX!{EV=%nxe6aye>7fU&Drr z7KS105%(B|2J^u~6bwV8J_Wf~PVSMBx}?N5QBD&-vyPooK}#y3pkXo{dP-|dQC74% z6B3o55ur+tP^N{;Q$i(4LBcqHR)iNN=q}O!PNvVTh?`gLojiVi|Ne7FPHx@k^!n9n zxajCLx-Dxq9N4~n=e8}|9UZniZQbF#&BJBeb{EH;?k>AM-1Z_2xx2Z$y1KhLy1H!K zx@DciW~W^q8$H~TX;e7F|N8si?#$QWJxR#WNRfdvpq@p{^Ec1ub zl5eD?+(=KonUQuYGyQf}#+|GTXi+CS{ccVg7Rvw`Hem>jky#`(i9s|7NC;u*z7<1E zk|%@ofJyOYTQKCyMjrBm4v>h;^nWt}TzUY99>}7GF)0xYauki6KqID7bF*j!B0YyM zpcN{(rhGwFk)%l{ZP$srb%Gu(c!-T5m^oa;!k%((d3fqz5#16EdbkJt!$3T#?pWOOp1c!7RuAEYpC7IajeE#~p;uLMY{C#eQiftx(fCfwtJWi}1tbhZ z*kD;BU?~5~2Ic4V($DI|uNq{J>J*=L8E_1J^<-eAO!c@{J6fJMQYsrX2?q?^9$=6b z!tB;C07E?*CNKzL2!+{;76NDY6tcPtQBA0`kO6sPXiPueBHz6P=A&`<8$)YB4SgAZ-hESX%l;?_6Byk~CqM?h5 zXnZx9smRIZB*$fih9vleCHhAu2Sp|Y$7e?7(9>yrlB7VOD=Vt&tZN%;t8TBXYAe-N z<|zz(rCFpb6)Vdms!Ca2wOm;(D`?1rDC<>*zLMH!t-Zf`H1xaYqyO^q$)CRbC^9CeEct;JpRKcPriHg$^ZJ| zPlT`rgLk z!DiEFN9kBk=~!>+!+!JFpmAiNc(`9bIG`OEDC+Mo=k$#>0|QU{`W*MX zcjEq?6L;?%xO{QT-aV_FoK|kzwrumprJFY{Si8o4<%+p0md#ndZ0_3m2g*SU79`f|>Ic;Ezn2KG%LasAw*(qKQnKV?TY)+-bAtOq)H|ilOPSA8a(o z4m#84V2@h@6=7AP8Fq_i*e{;5XodZK^9J_c=^lbzCZC}DSt(h|A=O_p|5d8B`%B1VP z?Ivizf(+>6)PUA%4%8W+iEQ- zkR_82csux8#(!3LK?v`EXnofG>^alz>}J^8PoFn$=E8;WU#{KS)e9Xqxt=^0Mah*` zm=!f;l1h`POs}Xm=GB=B>P?y^b5V_+C1WOM#YD#VMMXS_k9d$8`GArbU=k8q)a=%L zdJnqPp$i_iPBDE*O+%HTeDDytUj-7vFobysFw`L?wD7a)*r`?YE@=5mk^8sY(x5riLj}LZyj8!dO3Uq!%;PlM;A0*Y9qU=N;ekXD%K%aQ^5i z8w}|kRW*-htBt4 zXv~N(gcp#k#Ua3u{AH!=WhJzhVB(p`_eiNFEKNj379HPTnLk{8wD z7d5gcu&2HFAAkQ>_#9t++}l^87^x{5EK~HGM193v&`+m^(WPa8gb;>`P{2SqhM?^( zWJ2&&7RL=lg|y~TAT8L?7+w>q6=hcovMPBQC9G5pDK0-diXR_9484;bd@CpX9x2wB zoDe`t3Z$fmu}N_pY8;!Mz-1>3gc(9vjzFHxlV`J~Sqw>rq>yf?QdTr*>)K2;%?3l6 zs>mQy>m{lpVV*`TlruAkiD|?n5<8p9&tZxP94S$lM^Wh5c_v<-i7z*>#d^9(M~7BY z%n%ndBxbI(T4d@ksejhi_0`a$?_NClU#}pK|LxO}-#zL7<>_m_``z6B&9AwB=o7oYz7SD*g*tLOjz z<)?r7`jdbE>fyh<9Q^ia@7IqyKOb#-J=FZ^V8gS4x~Bt`kNR{y&5FhHh37bm|`U6!$b0w%040Yee-G zjB-=9rXWcsj^r={;J>}h)LZe<7eWJ$dfh&J@A^saJLdyDuZ8;DjtICN6>v8?_(q7| z*$21wUq0h@?11C`T^qMMuiEOc0;sfc{lZl%=Pg@mzkKPurAzHF9?hIL9|FIXPJ`b~ z0Y-LUBh-h?MAkt|q2R&$7>`iU@3M0&Fq$!U0c6&^#d8;}v|F-f@mhzCt~;Ig9CF(~ zfgx8cIEElj`;R)|B_dQSI=pr7;VpX)I~_j0`~2l2H|`v}jg5RE@gVo$0RtVm?*%O$ zZ0R7&ylG3`1kgmVK{U$&NJ41dG?LJ5&z+|)xE(&Z!DZ+4c}u6vSukbRJoKQ9?=1_x zFX(Ay@5j(DrhN2^shAb;@`-KUhKTj@JW+m_{N?aWrq9~}j#y7_{Sx>d>*n_aNeDi< z7BrZP8qCTvHBmqbO$_l1z3=CL)BnMx zkO!Btqr3{JNmUY3YaaZcoYRYzpJ8Amq7N0)h6*S{s5pc?WFe89+$$ybNQfQ6oECm& zJu9u6o?JmqDj_8RiS*gg+N@|TkSHUvAT2yEB}|zdDo+ZQCIpJ(0))~2+(=(qhAO-`HEI616w-MYcmakD$-A&3XG?k?^gZV)GT z*KH6tSGPU8W-ncIJ1_vw@b7>5i&t#SIUnzxko^GqcVgRS{(Nf#-RIHJn5wSjNJQ72+@-TAw6J|yf_qZ4jqL{_u(-n1$KII zXtwd@(EQl6KsGIiMGIw8!x@xFIx(I>PGORBxKxIaA&@YY3U;xYUs1$w(2F_@qJE=r z#3&du@W=F=Q7v;s3vi(i>lhY`j>GG z$%ku-`pXo3CQ+{*jgfU0(IH($^zI^hPa(Y*f=LKrs1RWYB!p%NjSr3C5^7PA@n8dF z#Cj=UD5pl44HznAr4~~Xi*n-x2?04lHwhuPb0hANW4$Sf{^X=UYFa3V7|W%^@fZm_ zcCt{IE|z5rWmy7QHd~ZI>q9F8LaOcZtfna@9e8<@2)nK z=COrjmVn3<5a`?t3Okw1N~H0U8KP8%IGrv@V@Oe0@^p?ei=)cs6y&mXWWJfBtj(_) zs~h-s^!cA&zx>PR&;I!0(eIxO{c3dZm&3i^^!NUygL5fBfiQ zo{s$Xao^V??Vk-cf7;jhw7dCPcgM@VzAuIczaAU?&Bu@a@chZYz4-Lszj*nVuU`M{ zmtXzw-+leh-&@-M{QZ~z_`~P_@rPG`{oRv)`)26dm+h}VZu(@T=5c@daHpxiRnyfV zsWov*3pwTjt~pOtZ!~mN6}6NWG?{hn6^8B_Q(s->!>)!;M;l*1Zv6aN?|ti> z=Z(|1ubjAg;qZmi2hN_@d-BMh><&;Z$_VKOU*AP7U~d1QyS?myys?9~1%H;&!Dj|RxF`{57c!SsUZ{M3=eD4?;Mv5ump`T5i@^etpv}r$|hT30DoBp0NbJ2d+I4Pl8dTOJB)>*(pOVOaY9cZv@xR5@I zWw?Mkm`55=kp`6Heg(NtM(ULkyT!TSp(bu-Ei<)>mQ+efFq7gf<7JuAnv5uQT4X^g z?x7GMkuoJzmJlL|3t>kFP{INUp+UD#oVa}QtkY(f*VwJ~dX3Iu_1b;zt{#q?UAC-s z+PubT^IGRE8{8bXYgoT_B4>=ndb}lOXJYXm~0@@2P z5tks*5f`JOjfBpnm~hNPQCAYiF@#MUx|WiJ4~^j%x{g$YhRG(4lvyQY#Sk`a2r!gw z#gI1z8z!^C5DLN&@jgh14H6<_7@~S{X%KH79gml7;3Xaw>=?Y`!=d?O^M``i^bj_X zh!Vk~#;~c0Y-&1(n$01TxnvqMo6ATml2L25!d{bP$S4{q7K{~hM|JEG?54sYEhZu4 zA=a=Cp=U(Lv1VAy8HQE|D#A0todIla5Z1>wQLG*77}@x2p>Yi10Spal*zd#;yb1ua zUe!tcM#m%!!8e9x3xR~_U229chFbGLLO6!3Wg&8dj8rE<7^)RyS8+4SSgB@4 zYB4oMm=u)mdnGII1~K9uDf$69-j|vfKu-Ipo z8N3u4JCV$YWAW33lH39fx30Oky{n?TzjpLd`{QRlPoDP;jkOxgd3-U2CCFiN(`f7@ z8Y_Xyil=eo8G>YvG@UC;=g87fD@|id)0na}x+;T~mqRb0ib_O=4nxb6mcGyX2EQ8Y z|FXaD^WN^)UG1;h+dpgXc-`LfdDp;Ky@Ov5417JU*)rr+D{+We>zt8 z>1Z7Q>uF#4XuD~!xwyBku(eE9Q_ME1$ZA2Rl%6G_6C{jW2`fj)$Y2ta$(gY^DPbuw zK2gCp{qCK)aq;l^QwPo--*xODz-Yy$^>)ja%v`u&+C2LybLV_GXZ92T5PFK_f*A`I zKnpL;T7*4U5~;{;7W^;U-hP(-yxI2iXU|(SXWrsD*llHV7q3{jYU6rm53DS7)cpWp z=ol`cNtGez14o^~L;H_79f0;Ic*ybKF^^N{4`07?6vNOFY*rA&ilM{zk%7>3>G9xe zC*rZX=ba?7U=_ zW_&+kk3jv>s_23j%DaLGR0?H==V|P4gjE`*}~S&qKAm3%$`&B7#2p zIatI4=fOG_9^q%kUqVMhCT0cMehKTIw|^S8hgpNYgdaBPdxY3xXzI+_c;ywv&VCmB zSGHimw1o?&Em~-|de!1shp?Dj_GBa1Uk0XfmUUGJ!-9`Ke*~=@A7PQ3dJI z`RUQp#0YMDBrPVw>-@PJ=PtQ!-Hxv_giWAccfiAKr;~&Gwhhh>YaKU%ht|1l+331; zlZW%xov1$Kgw!_Smf&L?z&^|o+azn_(w*-8UBQ0$m{-Pf4>X9zTlyY{sET) zgRcaKfQL|J2rv{Dd_FP^av>`GLUaUbqrxvnqFj!SfLw|WpTJOj4DygoWe5O-8|XSx z5ndlk0SQ@yFf_R`gwLTK#}F2@=pw=pX)=aTO~`^FFD``YZ6hIXKH~@D%V+xX7=AoP zAdiXez2~46i9$KFC=NZI%ShtTQrP5727yFP9Orco=awgBs?r zj%CHr2nfkypm7puu}!RxO9)zwK^Fa3VDwh3^&uQX782nS!t%WsqJV)wLY)u=>1SY? zXC=ZXCjQ4p-eUt7TIhdLD#9u~61?OCc~&BV!>lbFfCC7SG|nl-t7^sT8ffJ}qF2?@ z7d7&yRq_{Tm<(a)tH<4ACfSpUf-$oc*x0Y<_UYK&8b%kO$08vHo<6{kn%=FZcjlu9 zkl_q!QBhlz)Mki+(xjjOgK!DeONn?{s78=g&Ce`nrG)Yv$~+MK;2NFX)M$=73rF_ z`c}OT(o(Ex))%4Hpl>x9JItmIv$?}$Za0}b&89AMNq0$UZy8EYnYp{v1Uoy;=B|>G z?$VO(va+6v%D(EF!MeuL=H^H3ouBmfeA?gjyubU!KYAfBx$0 zzkT!T|NPDG|M{=K|L1qV{^!4Z@z-Cy`d?p<{q{xc>yhf`eU;DqO;5V@W9_QmT27sw zQCTFYHA?oZnfl>#EZCRvQOuOGg?jAGKCKY^fS+sT^sl7;LH2YOe0BFYl}|G?x`t>IH?8Ts}2AD=|1J!Y?M|PN4Ti&zq-jUp{&B;-O2Y zcAYxxa(EA9+x}e}ce-ud;j(_a3-nIj>E@24jpqpc+~9>cnHPCCV(MV2;Mn-!tKb(?I+G2yn6H4 zt$X-AU*i~hfE9-jgO1$yI_ilYvx=TPKmKGfw2CzBv8o8K54|V&F(>bNpT6gP>bB?Z zQ|Ikgu3xdqY2MPcQ)e%nK6?RLV`=)FkFW=+0*3H=*Aa%^cfqp;E_>gLA-pW~!8FKp z0MPdbzg}9exF}O5?i%|qk_a4tUGG6Q=&JwWL|_l9k-R@}0Fn^GkR_A8YisbA#t*Z8 z)L%@+zl#Y3*nU&ioz~zxZI6LiPd;h?JM;G2ZDV_q573jsu=SvAV*7UM*R}0fU$xD| zF_SWWJpSETgV)BanKEPMv{`fTnk!aqwV!E+CR0zt=2I_Px7J~Y$Elk)(%B4UMTxSy zOi^1ZuPaqHmMNP`6%A&2tx-{}XKTgb=@Act@A&)Q4D-E~7JapoV&%c0+jzOc{wsy^-o!j@gZrkbN z;O@A=b@Li$@X)5U&YRb{ZrR}Bv>BgI?dr1C*~QV>)!D_(W%s^4OV_UnjzSpv*T4St zMsVQ1%NLK{x^d*@jbpcNow$4N)C2Exe*Tw&f-i-jnbd%xv!Oxf!h%sELeGbXK<8q3 z=%t9TOOfH1qQWjmhh2#dyBvcsbU7aPQ2f;-Y#Mcn1w+?UlcBu^ZK~y-vNteWE5*<=q(JPsnfaOA%r0g*_%W4=Frd>8Lk{Y(?`Gr@%RW>(D4yK$Fj#8-;c#l z!1NU`{RNCbAv1ta_vg_9c(fn^BTUGO6tH3htVBLNn@1&ZNh~2nm(Q!!OIr=HZlk2n zDC*Pm2lSjlJ!=Tngz&IYDF_=BLlV++M)h1gxQ+0aAgD@&bpSmGN$)0+WhY)DvV~DE zdNvv79krCPkBT`E3`Ts|2?oMO!9>_GeAtf#Y3Yec06XEO zH&rA@9;%kVssbBHU)IQuwdxx$K8*O(&rTgADd*O#lis{r%%Jg#=?+1>t+=%+fAkI<`VEw8>S*GCE%ns zlcA+p->lU&YP5}Te4(yEQ{1RCH0jN)rqZ_3lD5*)_Oi0}vJyx~Sw&A3AgSlmzM(IM zAN}gl<6k{``nzYJ{pqW3{`%W*|Kkt8`Okm-_MhMV@}GbF=AVE1;-7zd{m(zW_>b?N z{rUHgzWa9g4_|iw`gzl5BNb0N&122F;d)JPwW3ZZtt}GO6o{$|#5EALv{s$hsMofZ z7`rN~h8mm3+S@DQ+#OVO2(L)3;dXtv=ecN(ee9 z?;{Ld@buex{H*=T^~*MFo3m);)Y%KBSuivkGGzv|v#eM2_g?MrV6T4vtz>|q52nEd z7`xm~oBngG{hpx1-n`->SYV&$zlb4g?PolQM0nw6y!>O;4?d;Fx``e0^C?)#WYV{6 zo40>Bh;G;lkVup8z2HW%P~h!v?SpA}xd^qBUP8g@G?RC}CzHN}b1zkT!*K*3+N9&e592LK68oiPhNonsC*70+5CvbUdR z55HY3uv@ll*@g`shY#Ng3C`qm_y&!n(kQJfQ2>ToDpV~Mc`fCIZ58rrT?RilC?PN? z{6Togy)fUaInmxaZg!oD)o+lD7$qYHA^O!{!+fY^jujyfjjCxV;Gul*5OqLF9#Bzx z&L2MZC59oRM(em{^^u+K``w)OxNY6(w8?ezT9-|0oHwp@-n7yZEnmMH$Iu`C_SfULuP<}nwtn|chXeaujvd>5;o`B|cTYd? zz8DyIDHy|0Xz-bkK-@!TF%n(Caxpv%^HAue=uq&`rRZ=pe+W$>ipGmW;GwH2Nmo;o z!9ds2PgW8SBG97<~m3qh|2s-tjmNqo6OJ)`RXNqjY1%Av8?(tYiX1Sa9ng4B^&+ zz$RWa8b1avAc2Pj_>nk_08c<7>?V9rk^E(i;%SxqlL-uUJu^sNmF0h8ls(i7hqRo2 z4FCwQ31Jc{U|7>t0KZHyI`SB8Dte2OHf|uqAiNp`sgsiGpcUuV2mwP`SY;@qjGbD_ zN-JZhYe{kR@cZfBmoogWWd_~MjkuQ^<;hA7mQv!Sv_vT*889T{A`i* zW-4hjm9?A8I>1S=X)w3IOIm$hp}x96Ujr%B*AyA*w8jQ~Nt3ap#f;KwE^RNZ=q#`8 zuWlHwZyaf88f|WV+}8d{cjwE#?pFi-Uq5{Ohu2U4?dwP1ef{K5-#-8A?_d8X@aS*9 z{pWvv`_I3A{hxpQ;&1=@dmbcg*CvWmSAy=GdvNve)zf><9o=>2u*Zo5 z?#K4KAKky_)Uo|%PC@pZIKK1P(H%#RdK@{r{RoDkLq}W=9fmj`M6KIFz|avlc=hPX zU8m0NyLj~ow$|cte9<6FImZ)G1{{OegvKTG&RFR)-a%Bd_N{wPdHMi`E_(X89Xvj7 z<;Epz9j4nY1`JJ~3mCGSGGh*s5Qd=-@n>AT6GQkOn|v^3%7;_2K*u)t9%wNWd`~8M z$a<}{=I6iy8wvd=483ER?5$Y!^F}OS!ZBnSMZ&*v+n<2#`7Oub9}=xsiR%q94*UEQ z-zokbftk=tuxI8kreSg#Kk_{RW4%9?Q~f|DRb}3naSu)U0F(a)@tu|*#ansbyKKME z)S0uV&YUxSw&gYj$V@wXR2;IOH*?j%sDK}OR7|MuH zr-kJMgOWnzi9xdXKyh3UKPH$LAI?jTP4M%%eB{VipMQ=pR8;7^YQ@o=?g!kQ_PIIk za^CE|b-mk`b= z2*0%+tu&35h#oLp6B4$Gn zhEQ06B6g676)a+fiP(`sR=j|bETCrzsB{5ED5ff9409pB!60cjNxBSzUOl&8&mPdS zAh?Hc452E~gnKyn>}gy=_yLx~tQfKshoH3$8ZW~nG`To5^gaxs(KK{ZJwAaNJoGa_ z3_eT-`PgV-5LODZ6n>tSSTKawjqq4Kguf92C&4i^G4ZHcX^Ww69(O)37JpHi|H2@9 zTr3>XatDf-eej_{LZ}pE!BBTT9nzJLjgjTiF$|&SY@l&5OhPz@5QAjIT4=G#P_-bl zhM!TzORwMnhEht|89GV=Biu9j{`q9Di)nsWvqEm=M&1Vu$tVecAqhQ6#!iuQ)8xD~ z881!DP2n)&nDiK+42>K~%n8fM3?^g+Lz|TW3<}Cf4TLr;EjTMZn2;Gt%!wcqqsX}t z5DGDplpB$o69(@h<%Uy8QFLl7iyqHmCi1zdTwW?ukirzDvBVi{Sr$u{#g*p>^GPB# zMXaWx6j1qvRBj=iuVx4enIa8aq~(eU8=V z4WzhEQ(Ujn*K4$O8eL;?akEk1Y|=NI4ISl1H1buWAE-5qHdQ?Btb5tt`KynIfA{Li zcVB(>_uu~NpWpqM+|M~0B{{HpzKfQkRho@-X_sgEfr>*r5 z8*7H^%6ckGI!aA#WwGBE=y|%EXFt4IOS)QL)p)RN{DyY^#n_r_X ztS{C!muOqci<-;S&87J$=EAlTO?xTNB%`P~v?3lUpOqt{#?j$#CB`o`{8og|dG8x1 z?_4^5^Zc=^XAfUGeelAGy{C`uJbq;7@uNGAfrr37has+q54jvV=z93D+o8kmhmW{} zmX4p?efr$~3kXBUZ{0g_=l+R1Xx@57Ka z__seX7Y7e)A_-v_8ZWJ(pbrn<0#^P3^uV`+1Owj!<``T~Grt!@aHREY@5ztAkS#>s z&XgH5@!*>vC;Y3!8?7C15`HRt{u93coxu;A6uk0e^W|niP-O_eNfWCKArH-8fM@Qa z#q*afo40)VmYqAiW1&PvNY!2;Z!ocoI?4-KnnLvZOTpbg|v z`{0*#8L2}`Y!efj`Ptwh%am$joRJW#&5A5c3(HFhRVD>107G$sviM+OY_KRXLY9@7 z9_)Ab)Nvd`#Rd7!D;A&F>3-17X}|lnJ#JfeI&Ip%4GosLYyu3eLfO35W$Ol4r%kRd zTinq6>216A>{zyT1&*QL{`KDvT)8lR^M;k~F6(xAIPBl&a{Tz-OIMEHy?@@{AHz_{ zMF3E6AfEFfK`7Yrj2A+KFCh;>LM}&zUWCMip^4S8QCH$(@oCgol97i{eF)1HY~Tz$ zG(Lwq?RI9`9klu)w3f=yIEL_HvP>Hcp}Wbv0YeZ51j7&=FhuZX5`6$eERrvq;?Jc8 z@EHC)B%uHSD-fV#)8fGaWZeuBae~EMNRWgRBpnad4~9rMp%PAnm>nZx#S0m!0vbU; zr3xub0ZA;OYV+CET49Sp1Rm-u#_L1eK^+H-f_n&6dcZg1qhR=KA(Zig5I&_E_9F&i z62eJ@_Sj~^NtWOw8rE}Lg_AKfX0zxbp6)!#PZ;_MLqB2YCk$Eg6NY}m&`%ip2}A#n zVhEq{gH8I8;Wv&!A6NtVK@4Gdf)?)xJ}E^QvP`Ca3qxN6h71TppB76W=>)?X4txNi zL0-Px-U51`8X2e;V^C)vwM#|qP*FPbXn>)16}?qSwM>^Dmyi`hHNYTAZnc`I%+xR1+h)l$~y1r1InZ67QUjy>mL%=W<5ijqI>H?9>n$B~e026j2i-%w!Bh z=`wDbh?UHy#?r}=bW$WGH-eZQnw=h)lMw_M%FYPNP7lgV1qlV^WP}njLUS|2h}poP zC=wwY^pl$tijS!gvO{4H@Q6x^Vo+n*^msNSfyqi_@RFILbhap+B}%6WQfd5DnjnQP zL_A_iGST`*vTT~1z=X(h*>W;hN#*C!`2|dV0ZUlO6>0<`jX+Sq;pH*;c}!s*QV{41O-M3z(`-2Us6|C+Mp?`*HkoUD;sr{4cdx&O*uHJUWY{wDXY_) ztF?y8LTz~gL{pKcE>jkiEAz|q3MvZhW6J3{ogzq_|@b7Uq2f9?Z;!kc{2LzN29-fIP}ZW{;vl6zZx3)W@PkNV`JYw z9QkIn=Vf2V(~jnc&2@vdbptguebu%7)wKiF)xA}f-Q{JSWo4b^6lqtxJ@D??dzVk#ID7i$x#QQ)?mBsB_o<^hk016pcF_IkLAN6ZTn_DXIkey9 z&;hr@2i=bxc0YP#=gE_M&z|3Z@#^8LH;>)CbL`gL<9F^O24NF@Cb8zEr_U)*A804- zhv3}7`?#6lFsq#Km(bhqBMhCoes}Zsz4pu3+Am!_eeQzkv*%5pZ9iq^oDZ?b!s8Ew z2MK)$K@(p9ANaL@$}dpx$7@&^gsyOK;hc)ZGg(4-07EG6zB<|l#}Iy}y_H1Pyuljy zNFV+P488Fdo8Sz>(SzIr?YM*hMiwMZ#t`hWVrXLL8^JL&!-^psZR6+xTVTOPwXmP( zG|Vw@Bp&P~+gJ|9-}OU5e;q&YL&ga5vT49%R2?$eyW(85LYmMybiwrtV5bti9JzY`ji#G*2E`D}BMuo?}P zNgGR*&E@&6)W7 zIFF6sA=YD^WeO2~%l$|pV_3}?D4_SMD7`9bx18LLd8mP#S<6Z*CnuPRvHI+&qV#a} zxQFENLGt)uQEZ?*HL4&tMUt7wOpN;FS6{+K$5@!}ynMllU2aD_oDc4B-s`??m-FTw zjvL*#u5)!*gJZ~P;~K|JYaO?&ciOhe#TgBj?b*9?`C7{`*>C^)rvq2cFWj@#A|gUIGlA^YgzD7;q&t@KsLX{k5UQf_6W+{sM4o0X1XDD`f3>b;z_ z`)^F31`MH*GBkl2B!tZwLeqv2hAhD(ME2uQApTrx0Gj(u_vg_q2ErHw+_Aa`^+g=m zkN1Pb76~B?StTUp1Y*HG6e8h-OW4t3R-BlXBw}QU=mZg+BB3)S6tRq|Enrt_`OU?G zE(5=>m^+~74eGcEL)geyKQLhYPIv$cE*NO>Ou`M?V`bBuft|Jo_BnVC|;N-O1LsIsC`A6$sKaXj(C`BeX_=|MLbNr4hlJi-tqK}1WC zu~Ow+gds6Ai9?BHkRoZh5#;PJQg$dYD>N5;lNp?o5lom!2qZT%BsVLRkd5XQ5r9FN z!CC2nS!sdU8NtLHz)&Qa7)7VVFllj2Mm&QVPva!gxycM(3X_+@;G(f2^BQ4iXqKs%GE4|nx#~;A*w=79+m=)K&=(3b)rI@xJWN9(uoVS;(RRXVyW6B z%Qs0?MybjyQVBuEEdyhrS#f{&HyGb${>kuHn}MBcBb9 zevUHqs;~dkp1x1J2VeG$ydE0+V&u_R568Y5>wMN()n8+1HRV+os;Ud~YPETFI!%kY zxU1aQQ(^2W*LRi_H0za(MY4Lev@T!KP?*=OS2buPm3cgql%)~mN~tN#j5uOK5-l|> zJ?hl0^Cxbe-+$rQ?lXsXoI2=nV*mEz`#eq@^f(UvgF8&pp-gBo9U%GVU>b0ZS zuOGj8>-eoZ$8O&}argd-yPl`+KR9*Y>*ReeXiweu2FFZd5aJHbBTPSN4>l_Z2NT{w zdEk2*;^lY7+yBf1zjF_K&)j<802o@f#%}S7>2v1Km@^MDeYPEV2%9#9XZEz2bEeLm z{Sm%M;ItVZO`9RIynhEY;v8ZUgEHu6!UlHK_^m#jQB)}1`3_)v)A;1bU5LV-X zJ$P+t5{B>+k+qMvGd`FK!C(5G;OC!gkx4;+k2adItzN_22i;0G+j1Y-EW3Gg<}H{rf8p!}3+F6cGP*U}QdOf_P?AScu#(8h zfl)pWe6D$UUW^I7C#Iz|=tSM6@_{nhXu0%Zndswk!N+FqVui;hX1w{zXH%SZQ~-s^E}x7+^hj=NpA>~h-Vu?;-5-evO|rwywd zH>}#a5wgb7VV(1~O>QpR_U+rfa^33CXoR8P|MlMwUAeGi%f{8)UDxgK*t~C#^U))F zE?j{BIh^WDcKdxWkO)1vBRcG2OgL5? zioOybdj&j{lz22G0=vI4PbK=@=JEUW+#8(~NS z;X)=PB;y9kpydQ%0S|>qxseifjFcTOWhY5kX%c3pgpnhmQzbM3diFQlsOHpZdF^_B zmzLM3<020s46%SFJ$YoX2<{=+#M^%Kkk<(nS%N>KLo-o88XPYgS!0VKcnek;dJl%i zAID+E5V{cz1CWJ5&&%*wDnn1r!e?f|GjvBi9#kvBg@hpquM8m!!G1Wy_YaeOURLnJ zD1T~{JTwSL(an~;5iNhHh}&Pt=~c6P3Rqovj7}^aDpVP2L&YIVivmJzmZ1QQ>Luhl z36O|XD<;)SNY%pJN%A ze|mB-B{7hh9>ya?3&`;TO1zMk#HS_jD6y>ED0)r=IV%)G$qplDg%L6LJENT(&T7|A?NI+v5q=Vc0b*=$xilb#Bp zQIe<-aw3hE%3!9mIT?I$E?-6zDkwq~RhUN;s+qz9rT~km2o2Z?H9Uca$1CCr^#Y-e z&)4y}u&Ln+v|PT1!!2U*v>cIkEv{8dHnb)T%9M)0cM|%i4=g zO&UXk+E}kPHx`vNX-b>5Wi7h$R((xZNz*`e*Q1t^SA7q^92)y_c<@zk@AJ-{=bhc3 zboRgO8+bj?|9W8Xi=lzf2b-U?R*%$`4ON;4Dz5Ge854ddJm`wQ_Z5GiD*=92{Qa-^`(5_;JLlzn@}B3>JNJ&Nv1S@v^H50uuC@3TblUd@T|~h{KYu5QAhxFY zpXUt^y&)k8S``Ud2wH5(hAbG8 zrp)?aDtaE=_hiyB)=dmd7Bh`w%X;#6#8xVA2ke6VO(CyXhpuoCQALMd9P-Ohf7{k)m>^Jm)6n_& zBS|F0dj;IScmHBqLZFhHU81116$>BM!hLLJKQb^M>KPA#L}+d` z3$0nKK^cZCUje;8pVq6QcFD;=qDEduEi0v*nqVfy73V~0GQ*29BMLJj3ezLh=~0^O zSPdaw&&bfxGyd?KZ{ecTRAKfyb2#ko^;;(opF6nw$WE67+a342ZQJXzWw(oi$F>cw z4r`o1LhF`0tX;Zg-O?=^mOF1-zklzJbsJVkVi@}4-~N2^>c!PtH*MVRy3xaZ(@u|V z`}R5?KIDAl$j-B8_g}tz?BgX7`_6!AHYb&^cS;GB}?vCbQjaf9R_AxoeS30CkzFG9hKkaMD>oERx5PRdD;uu~-LEE$I^W%A^# zf_zSyM$n`acIX7XT7JKlJBVh>u=)z=eaJ5OZDP<`Gr<}>6X==1(8L&-^(FjO=wldq zM`g%5Ox6ty8eg9AXP=a!HH2{Yyf0|}kXiK1Bzj^HJT;=AaWU-n`|$}zpe4)QWY)zS z-^S3V#gfm<3!adt2(5@8rZ9#W$E5NZ{4 zNQ<1-ARYG*U`R}?5fT7H<$xh>n#ocYN-yJO8R)69jELNj+bKSmQv9wa`&~=+zn&a$ zBQfB5YS^8Os0X=;0o3$RR!%gJ6vrh2hN2mSNJ?fHITOcFC@CwHm<9ToU=Y?1MinD$ zXbdGYG(9aiB_%K|Jv5gTOQ9yvnaNC6DvOm2VY5^C{4|j;Ln6$Sin64_Off%Q%t;lY zq=?ul(1%F4X)ChhBiGZI6XNCl9?Kk zl@>zC4kweMDbyG$J)Xu&ps|w}+%zUHoykjM3o?0<9G*CbD<*IyM4^%@Envxt*m4b5 zspIDvMfoNPq@YBqE|nFQ%ZnF`J1O2}o9Qy6Z(C^23el^(mvaRA_4MI|HX<=iLvQi-_l?Y5i zzDd9}@Hu)eOUL1wgu-$uzf>ZxQ)@9cmG@Rw^j4O3mg$=ex`tw1qruo(TG~-n)>&n0 zt2DM&7+Wg!jg`8F%KXX_iBV5hNI>FYi-6K4*OW(7h)CL6-u9F9!x+@(aA;8*upIrL8-6FIcg93h-tA z{5gvk+bvlF*P#W=moHttX7Q?3OINL4vU1g;hQsIo5dI>#g;PvM`EL&H-cvQ zAiiKF9CVlkL)cUy%UXyQ3E>#BN(hd}54HpY5VRkT2l{A`@yBE6hce4Djy8@V_|g3W zo2B$U!2x8ui5HEmWg*->6DqOK9Fw z^vs-j;}V*;V#R`$D;KU_y=d*)B^x)ab9LEw{_MTz@Khm}Wzg`;4ZKRDsM;*8Es<0e z%PMpNQ+^hY6q_9vl^B|w97fKL%Z~GBCI`0bdCwX(k1OO)%EiwrB+tr3PfGZYjGTuC z_LzbF(1504Jk+ztbSNWmRfFH};Wv0CU?``Fmr=(~t!7x(V>AJYa$}6p5@Pi^F?vF* zffR3Mq?%c2-~Il#aM9_itBAjInGg{eap&626Nk_4-*tSK+ffha!yZltw>$22aoFv= zahKzI_sy%EHZ0$^ZmGkX#oIP6-?PJM-P&bQQDJa~fB)NG&R@Haf$pVb{*hyLN2ZyT|3w!QE$09=d$t^u1dbk%xTG1^S*1@;ejccQ)AXTu1=qd}zRh zu)y=-0p}xwa122U9=aSCeK{fKQexbtBp?wkp@d6GaaWS#07D?5aSWy0$xOPFnS3`Z z#YRG~iS~ep9^__tlQO-?*$)6ilx#0rju#^r!w?xO4iSA>WHdU)r~5+$bhJ>AkOA=* zAPM>MX(&R5A1)y<5EcX-i+eb@cqTE(8XQB&Ln!=EB|lujk5CAr6oMF~AXXuWmkW|) z{B$Xhh$U8Xb!tJ4M%bYjb?bzEIzhjdKY&!k8P;+kLmEp4i_ml;0L@z%f}L*$dj|eH z18@1BVKTHTBld86=tF*nReOpL zq_Fi6>fmJ|kWe;;p{&fXjEu0X>kDq*fll&ciwDntZ1O0HCpBjsm` zxoJQsAv=lBO5`yUxb%1qEsjl%V^iW-WVB?Y7>1!SZIWMu^B62eHt2r@a6Oo@U}Xt7j!90i!gNMNv%7|cW_ zJC)7PUj!CF<)6MP#FdJCSg&TR97L_ zS1JtEs*-wjSwmrIy}G2nprj7PT$^vI&NEah^%ZhMl@j*A0hP_#(#9fV9b%KF0Uzqmy3FOB#)_Vj%7La$;)K2Qn{=| zt|(VZ%rcQtDlJjwRTdT0=(LSyV{4_kz24m3U~X?x*H=i&jeK)4Q?I5L<>ll_(QzhEty{if!}7K3maaw~TD)S_ zq7^IgEL^r?0bHL@(6tKv?!IKnyd_IPNDCG(nU4ji1lKbZ{PMP7(VY1UX4u(Jojv=b znKP%%obl1D>5wU?o$=Ak=^tWw3qv#B7%#)sV)f8FgCFx_jvGARI&Z z&>lu2RM$Zrcq3jGvJ{5^L(mz=(D)l|Vk@CZ7@GOPkHpZlS-+Sz+nNt7nKj;`XEV8}Mso#W!cZ;5|r(27CWV{HIEXaRSGA#~5Y zRYK6m0c0DCgqAJC2FO-G;GgJ12>SQAdf~dYE4OWRJ$&fs&1+$~*&L%*R8=CVED=7`9Av!fOHX$TEIXph}UQV=Eg@W?1R{gj-|6!@*Nf}^B{Ipc~ zv6=S>7-Zx=G@{9=fFV31*kjKJ;98YO>5%3&qdV=>5Qb<;CFFP`F~&dy48;}`V)WTj z`kW|zZj6bRRLV;E?hn6#i%xGtb*9e^Zc0qN_Z`o3CockB_U<^o(-k~)X#2JUZVvlh z9rikJ+_`m~+vZg+8&_;wx5RnVioG7&)~s9@6^S0l@t42-<>IwVn;f?|Zg<_{?y}k4 zWy_B3TXuSE-nnDz-rX*T4!9oL?{?(C={q;B1o~VI^f?#kb0)~=Ot3HHY>4lf5Wlmb ze&<31FboBrj|@Q`LL>^q?y--#oDh2%VF(h3k{o*_Ddu`|+|AU)n`tPw((xou#%208LNAu&;07DQ=LYR&CbU*MA7Jo4d z)r6#MeEbW84hQ!T9^5^)2C^nt!N)wr4^aw2l;9yjxKbE7o@k{oRv}E3^D|`}rh=;~ z5R_}hEydDy%tO7%Lp<=%5Rwo8hyyJaY#eQ}hu*Le3ZQ3FWymIQ!1q*!FbtvLIq3HS zhVTKh@u9KFL6e8dq|ZwvpP0qZjNl;=cnDO4VnPKW$anz>tyuk{0-rF1@{VCLgZPVz z!WShL41H{pKu~=M!_c6X-(SeZF*H#eQqu6^5Q>5hX;skCV40NCh*+fcyL7clktOidnLt)!`y)O;BUAf*sy$^~h1ewvh*BIYCsSP6V)JfD%k zrzdb}@enpOmXsZmnc|b4?46q6m6`ypPilg1YP@d>B+k;pp7cb&v?Sk*RDWVlFqs%e zA%#=P5mZVfofbo<$I)rA47_E;v)Rc^77BxvOot99mBmYA@X|Pdd?1t~6<>&vA2GFfqjytJ;M zyrBqzsjk3On-7EnBo$XF&9J{o15T=F(Umk78tM!5b@|1OYGZ4Wv0YQ#QE2MbRgRX` zJg#c`q@n9&+u)Zyqu=yD{MGQIZ%0OdH8k|~K=0?>9iO%}J!x!v(boU%P}9q{ve6oI zf4Q;SRM?=Fl}W{BAy?1iXt`_+hf&C+=F=!D8a1CuS96$!0-jzjHmjwjT4kjXdqic0 zs=iWQTPCY1m7tU<8*7wJHR75wUa28P#JdB(?S%)O4fMSh6@D(z|KOcl2X5UwaO=jt z8`t+;zrO#*&4agY9lUY<=*=4&c5Gkc?C7*-xBI~Zj=OhlbaP$r;=IPuape|=RSpho zwrp9sY16Xx>zA%w3t0@mk*{2Z0v=kia>4Qy5Oj~vvZc_@U%C{8v~cP2MN5~Xy3rB~ zlHm9Ixo}}yvJ|d%aLt=G*KW$}*;8iC{ODbQ{g%v}iKZycnE8w8_+T0G3cg4qw5Z^L z2?;M6y-_;C8HDHUSHC~wZ?WBjxd9x5R?UXkZbBckk?km(b&L$Zam+S2hHQh*gHDJh zM+0K4viZLJ0xd^0Ik&$DKlnGn>k^f2?o8L@0Ab)VF*0} z8GE#!z5R@N^JiegWL6B#n*S~g!M`F5Lw3M!3_}aR>llU>tXaKa?V9CV95(OXx&74f zdohvJ0+qP3R9IOeszU!oNNY-^;Gr^|(5Pk?NV1rO*yM=lDF1{A@61?V6+LCBO8vaq zIAju!nMB~BCnchfjr>Q&+(!oPLkM69c?ho$u|_lu@X%lZy+=uE6K6N^Giq6>6@Vd9 zoG~}L7!M&@pB<^q3fJXC7|3yEdcq$u3=KBdQ9~cda#9Epfgv}q+&*>W+`b*BcDbM0 z?RIR3)1mEK54msM@49)9(}o>e*1B(A<-C5m(}v}{+#FUenHv#?9@P4mzyA5swM&~F z9h|niY;|*XaC6z};l6bz@{q%>om=Sq{c&T zra_R0Zf7K507|}}10=#Rlw!dUHcaM4&3Qn}c|b=V!Z9>{2N@b8^9Ky!9>N*Kr}^@z zzI>Vwp9Ulfz$!x!Bq1~+h7FL7mxUl!2EBw|R)bWON{9zp*!3fz1O)7eWK5ys0RT-Luq2BzTF!U3K ze!|dC7#hz{82Z6XVi2C6F!U3Ke!|fIpJ3>FBY#;ge_1AbQ7VOeinVy>(^84;_!=f5 z>#byvcMg+DzNk>YC{aEyl|LThu^yp>w7IZ_;yyb7dbhIoDxKYqy~}FLx>rnL^SOt1e-k_Ldp&$VK@g}zco$^!}IGc*NEZ6Uk3 zkYgy~nsoemyD2*H%xPza42&Y(s!sWA{1J(kUg?AHb8Nx=RW(jmgJcI^e zCDPbQ6m}wol}LqflBnEdDleHSNMj4qxuQ&gEL$KW2xSD3B3GgyN)#lCk}S`stBP3p zT26tE3sLKN5CD_DRBEhH7%P=Va8h+1w8a$)eYw22QfaQuFK;ZWY}S=E6_qz@%UiUi zEkz}e_9Am%R)CJm`b#VYO={X>;a)jXs(+3(pjrd^mF^C2;F%Ti}Ha5E|yDP~d}8W$r(8FHfy(7`aI%?US< zV@=e!KmOs@aM2lQt7k@dD|1unv0;fmcYQCPy>e*ph5b9v@85BJhtpwqgrNg24uGLu zj%z&}R=ciW?!124E|<;A7R(9>^no+{^{;=veC^_9$IXDDZEj9m-CVYLxNqCBed`X7 zZM$~Df2vz{Y+voTWuu3i)1iHbZeBj+=XnMs6y$X#*ar=hq46>wG*X6P2qa`3DYHx) zijTRR7;`Bxc0AEIhHwvI5=uZAN>9Kr6n{4>@m@~y-RvZ6ybR4B@*)C;GOQD*EpwLWOTnYdIdUb(TqLg3OIwPiZF&iKs87cqz%r;44Cw@eTHYW&YF319zkfqN zlLF}Z?+%mU^QI@}3;|#8;Oh+8cCaX3Rw!OW%H^-#%*%4wbIZN==)N<&ECdF6U9Ei2 zt@T}4Wk~(9RP|}8;*(O@6EpJA$0q3`qjbz58Yvcmhp-<6zrToUy}7JINyj8KfgxyH z@H@*e57mo_wIV{5C>wc*mr)KL0t~Uz^|WLSB~g(T$%yt&_qh^t>vZ@vR2&Mrd_4H- z3Gh(x^;01?Plw+(+) zafMk{Ri><|$g8W$udgnsuPSJ$Qq@%`>&lh&<%-%;S%nFlBq}!wO*)=I!`7+kntV#3 zGFL6n!IG_3WEUz3g$n2sAO*4J6Il**d7=skSB1ds(F+6%Kj}gabCUBXFTxJ4? zmB0i8(PC-T7#cN}OpPJauux-2)EFX!7DJ-PQW$YGCZ;83Je`%mU?rdq>}14K83{B9 zGm#FiVkdEUX##P!P?95%62M7{0(!oNU1SjG%cPc~QK?i{Dm7Fp%Ief*^@XK%>XJIO zsV2{W=3mQ;>*TsRnWk1!SR>Nb$#nH{LzAkkqo}G|U)iav=+syC80v<~njY13K5y!N z+1mQ7q4r^AX)gJ1Lwe%{;ny1VyvSI^6i)~C(Q zPnw%PZmk(^D(kB^ch_i};V-OMRHosY@_D6dQI$?qV-(k#gf#}bseooIV3-SeRR(Ee zg}k{+-Puso)ue83kT+Cu%MA45LYlUKV=9hi({IH`2W6&35wjDhxiLBEUJ=0;?%zIr z>)OeiSB_u1eDw0A!xt~?J#}K|v7-(_3EYu2DitZ+fX z<`_Z8S~Oa`YSm&85-J^Gbt9~FG=J%`1sII%7B88-U;$kDW?`4W>2~(h07i4?PMJOD z!&yM0H}c`kH#~$$G<`bWv2IQP#U?mzkYj9jzI9jH&nJ8X{i)a{ybE=#v5*2iVBh9! zmWS=XdD=HH1n)xn!CW#?t(jzz@!%2y(@d`Syen|n_{VrNlTJJS$t`n$aOL2&A8T*` zVf2|;@(0^9K6M(P^FuWuyfaBZZ)X~`n1`m>*`eZ)O{^HggJTFQE8-YhZa+SI8Zfj7 z{-v#64K!b}e*JO>hc(Vln|JTJ=m3E+`{5fR`Opo6i|6RSlZZL%T-}!iPq|STXOR5hTPNLyzrbk51fH zh9m?TRMWc^Wbjb4FuRtMRz^)Q=Ei`8jKmltA*MJd3abo-8z`|xYAlYSvGxW^;B7%l z6eBJ)E5s-2-VL8ir|+FPcKPtG;~q{&wr@MUecJ(7hrLc4c5hp|1H+IDV906XQv2y4 z{@yr-t{@C;a^CK|&CPj>o3o>b8^Vx>hvUwjE_-%6Yc?aAAQ-vAY4UnU~1%rbkLmg9|XD6_>7Hh~&jUMOI^EaVRW0u^ELwW$o@bA~J! z!f&2`S6K)TK5yElEF=h3L4*)6P#BVsCE%e*r7%t@OjYo6Wn8X|tx|A|g@S6Gw5eFu zUM%e?mh|gIkO93AJTwR@!tOO2)Nt^H7T+5{&wqQ)5O!<*1cvY-EeHq(FX~u3Sd_1; zRG(F;UX?45fhwR?ysE%31ZF~VLIosTLg+!QRf^AQa16a;nCw%7LnL{x~$GBF7xq>z#oQi@VeRVnF(`D}d=->4Oq6iX^glvQP_>WaLo3e?si52@-a zRrOVQ4V5Ygz^JxdQC%*tFiT1ee3OoC&@kYVT3krgt0|CTHPwJ^qNu650CH#CHtkP_-3R*d@|F0vNC+LGyHNh1BjXa zq|5+nP7otElue4{kfV9j7(OkIM~mgsV%fA97A=-Ri=$Cu=op45lo%>C7HmYNp*|Tx zjiEpvT1qsT9EBx)#LW-b}BT3j!5-E~IiXxMu;Jqxg?m!}woy6s*@r9WpagIbz zk}Ank6-Ay$Qx?z_YDS)xU1;EIOd_pWtThQiOR!mF;%iFz+H!%mQdm?e&{j!`YvqPI zMM+bhsX?WymKIfti>f602BofEfzqfnv=$gUicFmvbC0fa(A@lSP4A1gk*|6me>?Q_ zH=|E}Gy3@3k)bbo`(AYpf7$o&S0kgp93K5FT)21l{GHq9 z@7_6a?drkv=iCk*aM-zH>&~6<`{+hDxAo4>D;*q`u3wLSUk3@TS+fK#R9K*oU%GH4 zfsN)aS~LrrJd0lir_Y-=&E9^hz1@_#b3d9h=c9L!2s||F!x=LWi7)_JY=rN@i$*w% z-jo3vN}IIDhCvXFK42ParrGrIO%&__`<6WxWI*r(-aa#4A3^~k&G`A$w|(;t%3w%B zPQqUOo}dG)-zj>FjSKP5_RioK`kqX}5WZ=_(Dx6J;jdx`Orp=*0SryWTHr4r*itBZ z6GJ$IES<&p9ra5=Lbe!!e^ijA>((vXuwnV;&8r-@t#)zRb>`Il*r+rCmt)XMYbq2C z)rIYix~^73PkV7^i>A3&U0bF!YDgSvTvAk0LRdy(C^aoo%g^mGDF#av118CcNj!#b zD;7L7@DPLa>=DEuhLu5B=;*exe0ryx+$te9^0TX%sb!Re5^{VgCBB3dXCMHE!n8SI z26Bv%0vJNK){nKFa&_3}ym9xo z^*gt$*}iENcxbod#-(=CLj1jO3|+l;(ZPZtr>$;IfFY+H+qZdaciQ3Mv}?yU5BJS( zE~~dWEZneW?G88Bb0_xSzIw{{K6vPCu+KRRLwL@H2b_%vx`1OSI`mR(#O1h%OW+|) zLckzAmlLC}CPBsr%TnWSpkXq+GL$fZq3o3VIjQ#vX;@`wVweo`kY$+6he`B7v!}^; zStt-&UI@Rn9^F$WK+~uLgbY6+T5~86D+^6jhOjx*h(VZyCV2=K(pwm^RE97Q3C1Oa zR0J4`$`i$^L`e!khKx&D7w|ip7J)q9Hwa2o;A0 z87DA90095=Nkl=v9Rh)rZCd9>P{= z#DhqLNeI3D`!H0D<_x_mRef5f_@oSB=t+qbD-OvXnPd-5(lLxg5UYp!3pqV`%nl{3 z1M|>0hG>vhh>X?(9+Hsj#JSa?9KcWo{;XDZnwgoVrzWX$Vd z6_Lb(TxjKDO1_+-$%lUde6vns)I-EZy~u13mzPM(P15Qzc`e2uP*EMgs8Us1F0U#P zmm39UJ;$VD8MRCxkx9!k>sV$z+pJ?7wG4cxwt%87psE$QVqOZ98bu+7QArUDN)(k8 zM$8E&WCdks24!UiW&w=S12QxGGc*0OGW|e8;Gygc-<)(`Lb@+8!;hL3#3Y1qDY%4U zQRuN8S`3pC#h^wb2~lDg)L6PTv^Z!nA;n@sil&gGfjdNEL~d?4F*htXHxxob2_xpB zMJXxp)3b&gMTPg$<5;W&4m+94NoBE;&@dc5o(Y@$G!8$FE6fl|b0i9qOhr`{FjQ(h zbhVzPF>$pee0{k{S1u|l5ok+=hAJ7PxKgIClS257NNf36d&x+vrl(fXQX;6)aVv{B6-Au# zBDy)BVo;Kc6_jEnMX#b3t2k(U%^kEj7lbDq}-sac#M_ zx+K3uuP|z*`XWxgf&r!$2~ud3u=LdX5n)&Te9zsxd+O$m!xt~?K6%3V!2WH!cWvFd zW3$Khbz1rr2QXT&Vx`@Zr8DNun>yESsvXKSh&{x9#{Bu9 zBG`jSG<(jQ7{cpA6D1G-S9QXdgs@hqg|F*i$?fo{{C3M9m_XvjZMkNRzi^f7KVP@7#Sv^ z>9glrNc8^LVhCr@J28Y7SF~oy68HyW_ZEgwSqKOBy7lOvnZxGg+qP`kv-{+oTj7Lk zmaa%vQz5UfQg<}#`#Q~oJrE<1sI|e^T&FVY2n=FUYHV^scvfN~Kv^XfY|;K#BS8_XtCy?X^VTD}tmjL2`s3HJX_iksjm~e*2>5xxN z1Q95CNxsEb=?jJ`z zqldf8P7k-;JDqm8Z`rz93JbI9T87RQkSH$8!o&YgBP|5`Z;TW;4$P}o}8ml@pWoRX_2^I zFY7cax(%{EgLKd!0S^u8_ybxVhN1sqW$3+&F7{w+Exu71!tH{0tdxP)x*zk9@>Qh* z1xW}xa){MK$U`?y2VOYheR|)WV>@pj@wk4_?aF?atB2fg zoY)n1|3X^0XJ(8qV2GTFR$rtL!l{HvdTtagH(H_JDQ#o z$0j8S85v?$Hjqff$q{pN#R4LWmPREdGASu6YATzS#%E$#-{J{H*IoAexmhGo#Qii?<# zqI`-}kj`PoGifnwMm(RJ%woh)Na49TAvrn0+1WwR;vo=%2swc{S^gR6KACAgIq80c zbidqmKXO(OgAmT8#)z1S5FwhK9ml1k$`F$l%cRDFgwW#Jcz`UlIM`zwfDw3zOo}8C z!-+(MAtH_;LKu2n2{z7%hngFKI=K<>E*AFm67&EQdK?vrDhhPPV8lb1tV9kcna58T zin2uFY>AX0l@X;blENyvrbeZ&R~wtqa*^eo=8CS8ik|Yi z!Mdi=W|Xn!)+Zh9pLBJ;=S@OpV~sBc>OSeM__)J7 z+FU$P4>ro{s1!FCIh951@h3e`1+qH054xu&2(S5Q%` zt|%_5GH9xe+G;bXsJOmTUk9nu)>anPRH@3$Y;_(xRdPV@?P5 zxg0uh@xlF*H?HqFeR9vqle0Ze6iy6E^W^&4N{{?3XW}vt-Ha z#fxVySTJM3g6V)E%tHVp@DMhg2xZFbIS`CQ77V==v>(%eb#oS)b8U5lEgCS#pmNdl z>DV4_`a`p)Ex{&=St>*C!VtdB z5H2CKcokr1=>&%0-wa3y%^6y?3Ot1Bj_cMf-LPTV=1t4DZdv8x zo>WSSGv-Dj3}uJu$Z_;aA|6!JS$#7NMce(D|?zF?r!Ody)w$1a_tzPWp;BxxtkvrFp-oLs3_SNG)ch3fSpAGgs zhtHu74>})#FoXunqC&w#7r{dbQC10Eh=fWraN@`8`H? zzd<%oEFQon%nTHvXPCaBpGkTD1nMF5fDY!cp4VoJA%n2Lknzy+)Ou>KErvipR>wg9 z^I8?;vl`XwYG{>suxUVW7!D&VeNfP(BCI$Bfmh++FY5B}lf16Ydsd@--evg5-@k*; z@yn09Uz(&}R~3C;p8u*s^`cVsyaJKv6HGencURQ$dT@1Q^Dd_&? zkO$Wwpp%~@+H?bDIgavR0Uj@D#Bmo7$#7tx}6S?dp9w(U#c;coA_-R5xx=5HQ z5@m|SS)eG1EC&cBk>v_R+0d%gi~-*wC+^j(q!c;LC@7pN|fGIr`|E$Irff^6b}7pMLvf z?90*q7XzIiceOoiYZz>-?5fc>m^HP={3?U2R3kF01?ED5xrlGpaE*m5T^>uP;^^}v zB|3F&nYO7$*HUNfXfE&TEa`65HP_`=mGU(CIYLe%jTn`a9+(_^KP=#;zvpGIn~PxZ;ppJ*v}E1d1*=w~Y1%7RK(G!z6=^xT zQo{8T%iKjv0H#1$zh;4}7A-`anm>Qaym?aqRrdB%=h;u0XFqlRJZRA#J39!fOO0Qc zac^1G^}g7asou(DrD4;+XMZ$v_J=bdb0_7anRXw|vY#>=W$K)Hc&5*>Lz!y_N>RX#rXU)MLc7X-B1FW%bz7aG(9V`62H`C`}7{X?%ty#2o z?V|PTmu%j&)M4|Itqv<)oZU_w^Gi*ls#U_ulESXm%BN#>FP}EN{-o-Yv69g~V_%29 zqd{3=$YxU_lcFM`g5o2B2nmtgjCdWJ*pSEV)`^CU;!&e;%z)R2Si?HTu$DHgqYi1Q zgBr>}A+=wPu3J5M)OH!MNtj*3PAQ|tmyl!1sBvYKI1?#an;lk^9i}BjeD}Mr;G#3! zTt@P_B10Gom!?I@Gvhc3p&5R6*ok4}DF4u#=Wib0cXqGKQID+$TsQA=T(@iMnq6C0 zAKJcU{o*-M!M<>Yzy0NpH!h#q=CID)Wvh$RR%hoeE^dx4?k>*mF0LN#?mKsE-?`n* z!_CFR)p5J?Cf99i937T#*|coyrq!;Fu160Zy?N!V_q_{&-WP&=&IkFRl^8<<&V~j+ zdoDciTtx6WfKg1?`M7XA=b()ZzZ4e%7`l=eeKk1-pE-0LJd~brGb8C%X40J;R1>nr6#>o4Q^gM{Qp&1OV_EUHiutClCKiU z@wBxB$IwHQ5Onp(B<#l?f(8}D!q86``UyinVdy6e{e+?aw=sm<#flzi zaSY+0`MlPOA;l{+YKFT9T5E6yAsE5&aJDb&^C9T8^##vs^FHl1{p0U{gwOG-Cq1vs z@?TbKzN*OotWx!=Quz|giwXr6<)`JU=jFg7=qR6;DL(-fl_+o(p?mLj!XfZbA-Au9 z-JQqmQZYLe;2{Q%p+*U*UQDPJWz`5XYXn)fg6vxOPlcad#m%ZKD<`2XBepR)qCPPUsErS< zjtK-MDvk6l2=mMea7p)dLQ3RiALnHs>unDvl;H1_9PE-B;+7unnG@re9~Y1lACQ|G zl9v{mn--dt9F!94n-Jlh5b2W;>6;kkml)+AAL$<#>7Nu8kQNgRWX6YOC4>VRaiK|3 z{s|F2v7w%^pv@LCq}rY#UUliOA9K_3NJ5+sVI!C zD2Of3iz&~IF3XK7&5kV23@=Cz%})!-PY)@`2rVy&t*=b)X)C1>Ybc}|60wF%0tskj zFdJ#~dLpT^hggX=3hFKcy1L5QOlr#W+6Rd5D_#&8I@2<0lA_(3kdCbgmw_1TtZtO zSPn)$mgkW=^2wbAq|SVR+*N?*5Ha$Jodw;P_n?U7UG4eDAU(oHAOWu;bQFRcK_qk* z5ju;}DJ7l7kPx~cFUA(ZAxR>Ev5_mOE^!I=i1n zSCVPH6xJYvJ$apZam)Fetcu|;pXz~)hjob=Wkq|+E^T0yEwQ! zr&yX4%ndWfdb@k!-w>-^!~i-(OmeS~(hsU6XN~pqr$@wdrjenB zfxeo)uA06cj;gNiSuO3enwoE_tDjU=eN6?ebo=9*Z~pG}*Z=dCm;dL>Fa3{~{)~h2 zmtO)&0zi!Z^N)W*TOt1uEoA#ocqHRb>lfg0eh9wcANj}cf2|;3IY-Ii<$nv@@WQXa z9q50)0N>#yod5bG+Likl>|5ap`fi{L*w;h+N;Q5H)R%)>(f@|u|Bv7Q4)~vc`2D}) zKVSI6|9auq-t(LMstxEEa3I`!F!lM<|N0Yf*c|phFe`!)T!!#DvSS%KPF}#22*me~ zuf6u?6DRO}tw4xhc@ty^DG~V4t12q5tEs)N0ndJ|lX^O8Ru;Y~iRI*;?tVFcadvcn zYx=>hxhMB#9^Hm~@cK&M$|dEcS?-Xc5&k+TD=5g%s4mKGD=%O+RgST{mt>U90p|7~ z_z-2MpS0cEv)$XZt?ay^XuqLoyDo3rl(l0%)VV6`xWZ{!WHd|@D?x^a+ln9p1FZ$J zh9epJTTXshaJy{V;kN=x;$ftI$dxvigvdrYWzQnXJ>yeC>>mf)3BURB>-gT z3ZwS!Nt3YeMjN0!)YtJQ(9V80X+V^kDQ5@S*!7 z{Ck)W-5x?EqP>3Rj*`A5r(MSu-mi!V*96^H(L%G%%bfNF)}ahd)9Pkv^|Q1FV46}l zL97|+sv7L9>}#)3w3hQ~@+n1W-8l)ZsZmYI5kNy?SY2FjZG1>&bU=Bue^I!1Ua)&s zpi4%OOGCOADhI5j3HIT}34FD2SPIm$0S+%qoB zJto98GQcq^&?!2|ISynf+%-AMBO}2#D>)!PJ+wGGvMevUB0shwFSar-wk$g;Hz_bH z-Y+B8Cq2eHJ=Qxj!9PDOv@kQWydbfvEUl^{y`mzmt}dsev%H5;*+Z!4?y2ZRTP8xR z=pWui{0s6!?OI;D~h ziKtB^Xc2P3=4;v1DmJBxO|E2-Di|O}q;e*?f=(!-^_0-Mizr=%l+FTx)>TaFDxr22 zQ@e^NorMsoUB|JI+6~E3j$M+wi+Z{W0c1j*XuG51yt^~Mrwc|vhVr^Wwm_}Gx;pZE zAnyR9DnjRz;Gk1VK*$ORZ3R8xVO>S!o>CHk)r}~m3W!v4B@Nt&Qc0mylBuXoo62fn za9dgY4wj&kDeUA(34A3*)JGE!(8c|9$axBM>Ie^#UNT2XW_L9Mncq2^VBu_dkmdr?`b5iNNTr#JS%qt`pm9oXYzNNvDm9g=)vGJAB$z@=8 zW@Y5!#>C>*%+k)q^*dLu-(TIlzjpoM2C|~3J6lh7u0Pq?c)WA<{?_81^@*KpBiEOP zHZCcz&Imz_hNT2Khcm9=O!TtGd+DPJ%8;x>%4riZ+l7oSF`LpSW(-O=qhj%NuWWWe zI-`(G%f-_Q@w8kxA>|J9=}IO|PN&Nm6fvc!p)e{VE!WY=TrlJZm^ctY0aZ+E`(Dg!Ces&F;PM;j<-&!5NyEp&z9{AA2 z-M!Jh>w}xi{mYkn7iXBglA89$;_||Z(){L%VoGC0KfV2;gtR`$x(+flNZlSFZ}$>* z`g(Tyy0&{eww3K$iq`8g@SzTPhOLXcukqTK*e&z4x{2GKW}}S)CG*5$qN2V&h?{?_j8I zr>_b!WT}0|!Bku0^%n{cW$5!@Zx>y)H;mxd0Z<)nH3L0OeSK{`eH{ZsJtJd%BNIJC zV;w_dU40`RT|;e6eXVoa>Swgo&q4wtb{6*j9&S+~K1s1&DRG{tpBl*!A}bZ}%1QIe zLq6nLkmXr;=tD;`bl5iZoD8ALP5Z#DQC5vgQ#tv#dT21!q#k^V( zr%}La=hMkNidf7XS8^`(bC>%$Ykka(Uizkza$P~*QsDI=R3dsFFdK--f&NK@aF7f! z>+UU$;xe>9#Jr&(-Wq12cO7;kq4;YV!Yf11aVSFoyae|^{O6f6eEJOT!OKF==EZN% ziQWMvnwLD76+K)X{NekrF&SEWg3Hi2E<=Z(cBE5~AU%43gZmK1-7z$Ac6)?(3#@36 zy+6p_>0@llsq0emnuK^w06x^Q2>)ZS8fO{xv-J8oTH`#uagJI)O|Bj9sUGR980swV zZ!hm{D;L%kFiSJY`AOZGacybQEy)qhphSsb4e=p0u|d@_f#s2Y#o^usVP1J*p4p)u z8Nse;K`yBn;6_P)jsP;G0O$BHx8w*~CDVmKHMcC z!YwJ%Jvq`nDZ)J|3~);bafu6Zjt{<&7~+~7?w%gyofYSwn;4vz6qcPBmYxulk`Ry> zACQz7n4A=pmKvOy5tfr3nVTPzR}foJ7++GBTvwY#Y%S%I>qLweCBI_;+XA~^+C3oa z8B&l3<)i_)lo6DoE}5`HD(pZTXM+rhJEWp^i4cUTRm^Qd{{b`W1@t-|t%gUf2KbOr zs=1UZfDMM!Q_AcqWfLnn#7Y*if<-7}63SqZK`6x%{IZOJjia1U$|9D5PLT*Dq@EH& zcM+khh}cs?>?sBa-Gzki0zyv##O{vV?zS94TMnr+m)MaD385{Qgw41em7wx_T623^ zb9&lxAfg&odtOg_KC!b9#0WqYtZoFMtDw6pzZ()_8IfE;qE?e=btF1aPvf+(1npc& zH(y2&$cYefAQvh~LM2(KBnf-TJOz<0>tRT`7_x5u098E9l#H;X;~d2lUpXUI&PWt9 zV(FAnJSh@Q3I*eQ;e=2$E|g3P`!31`7Zf9l%8>=d=%RdTsc&|9cy@L4;`+qG=G5Zm z%%vN1E4Qw!-(6d~ySjdVeeJ>Kwfmcw?`>Ruuyy(2_T@+0S0C>#-rbzpxi)$I(%jzF zxxM9ytt)-YbK=Eu?#v){SW4;>c1hXIJW2z*r-k1`?ql-CMZ9qyeSl8xrP2qO{BeQe zqN4v&-@v7T(W}D~D`SdT8AZlmDn*Lvp>_tbf!JBo-CEvSUszj_kdy8g73v)x>=7K` z;^zZ6`FJ||dY$(Jyls8G%st!;FE|-GJLo&uYunkVn46q5)OlTB`*l6-mo?O0Q&l;6 z?q^N`Dk>-8X?pJ5YiG{FBle|}C;#;N33&Rx@G{yW5+2n^ME>+AG{tjRxxrS3a)&Kei;6?9s;a)M zrt-3y>PzaXrwsKie7)kTN}Htu-lf^Wz3VfN?#w>9H~rw&ZJa+8SbP57Bl8$h+vMGQ#da_fB8O4Q1Pwq8*o^ z4N1?cuydK;af#V9L#mo0R800%jCGa{w-@y`=PFzBu+?Pm!9(Z9r3petgs`EITa(AB z&Sh0*)5F*x)3e3qIC{&PE#N4b-f4&RS`oaWd7`di@VYxD0*y zS+JM0j>;(`ZB>0u6E&MTWiR(K*ZUY7 zO4@bgLnP!qnELz%*h_~>^b0EjnWkI?8M-p|oD7jbhEPcflc7zl5qn+S^&jtmxXg($ zB@#ZJK5X~-C(!s?Gl$7+kMRI3L5y(vaoxJ-@eFg zSztHLGaKd^4HxMR7ikT%2D@bhxuyqRNb`42@pVe_IiKil zALr{36W|yh?2;Jf27;0j;guTcn;PYp8WoTf?jINI72)q1?(Z7y?-uLl76bUYM*F%% zdO3%AIt9Dh2fEk>y4VD|+61}U1iRaWc-n<{+6KB=1i4!Vdsu~dScZ65gm_wpcv*&e zS%-StgaGcAfv)C(7tDh%ScJG(hPqlsc-Y1GI>!4uCkDDE2D-)jyTk{$A@_>#jgRn& ziSUjJ_Y4nl2?=xx4R#I-aSjV}iHvlQiSdey^+}5J%S#EZ%8zd>OY5k~?rF*+Hs=#t z^2r@V^qz7)txn8p60@5{tR_CQQN(GMBPD7FBoGB{QeG<{!%*s}Ybe8zm@d z0>sP)A+1h8t>u$z1mqeXxtd3=;*u&sjM&6VE(!AAfRB}$=;R7Av5Z74C1a2XrDReG znOH(16k&iB<%0u}+OkQV+2qa~az`$?J&)3nPw6Zmx95}Ea*3cmZ8^mD9AZayPg_P$ zYesilR!;|*Qy!@+A0T6q03y|q+tZoT)0x-PRY)Y1_7KW?2<1J*${tb`kx~ORV$BY0Ii;C$>%IV8}lb8F(FZE7b?w`IoJi9!4abs%n`t0J? z+~wU%OM6R~_OD*Pvv&3V^(zmyu0GmceX@J~+3oAkZe4$8f8*`FwI@4QA8ak&y*__u z1DL(JI=ZnaTO4IiD5!%1Qa_74z@!Z@DgBgoVOtZYshQW(E$ilub41g8@r+P5C+S_3 zk1P*Pu1`;{El#d33|*cczC1g$I5oI1HM}rIm+^}ls|xDM8;P9-wH1M}k6gNOvT(--PlOW2%&9^o*r68#u|o( zDmuESH8p`Z)YM)-d+s&txPEMJBz%|cH~xI;6g-Cibn@gMUqA7483}t%V-M`ZV@HvK z9J$D`65)mfzzEz1_rv2KFLJz$fmb_#Kc7I`c7qSW^Bz+obY?rQM27{E{|4-SxEZS? z{pojqehKfwIR+oW`19}n3^#!8{NZBZl_^vB=*89-)({n4-l{po%M z8pQrwhx1&A|13;*aKM4Uet!4z%Se4*eH9`~UOVgu!kU3j!Vebxc(DUn0c1sR+e>Im zD*R7@?>q#5Ow1ZzM?bpbt*B4G`O?`lFP}U2lFGS1shs_js>(}R>ZeSNY(s-`x?0KO zgR-?NqqldaAKjULcpI3wy)&}CKCp6GesPMfl(bO^O&!h6jWwN3)y&SiK2FEwe&)&` zYh#eUHAveYpltV(u;Nhnb}ueN9b59Q>vDMb5x|Gm#oeGpSGlbhX?3&Yn#rE>k&fd2 z*8KkV!okksFFr-9$#$1!iCK|?dXS-fUTr?BGKW!~MK8~!muJz+vj|10O_{MdVcsE5 z7Vc&`PDbjsx@WDm&p4ZE>%9I#@u3WT8sg!obMB-OXpqKPJ&m*aI%?oUy1E+r2HHl3 zx<*FGgb+r$hK4$NMmpLC;6pm#L+bk4Z)&QZ)7P@|cJqi1^GJyDPEYj7NCF>1GL(sY z$TJ(A(ebgBm^HS z0Uwg^Yeej30h1(T2t|w`DRV}~xFn}vlT%mZPUuoAVcp>ir<+MJ)J@y{&*4uh>caGAQu2nrVx)Og^wl>4=02VCWLp# z_;)~wM!83T8}UGib_ZBnO6sPZv@Ggc60}|7BOh8|HZCw47U&K0)VlHR@}aik;g0f= z&Who#%E9(>MN_e)E}vJP$tp=_6sAye6M8bDJHUsM!yDs+YGeJYqJ1l({7NHyijfj| z=Y@FW1iNK{5BWK#`Zy$c+9!J0#d_IAdfP?&osSE2P7HQU3UyBo^Gpu&Mzx<{??_)4 ze-~RXN6UZa;< z=Vhno<6wYrH1u&W^mZ`vbu6 zk`Ypp8CsSTSyL3-Sf1Qgo!(iW)!C5U(U48)EP?+@mE!I`DFGOilZKU)VFhATP9BjG z2ZY`If=-}M(AmrH=;L?v^4gW$HYKM`%50J{8fElGF}*=Vs}s>`g_K$WrB+C-7twwR z8i5@mNDhXgkgvu^Lc}I6yM^{;AXDQItRo2~8P9jy2DODtLC6Qc7 zAXictH7tI!K-MMgB?4k4LDWkS_YuW?=&%vl5M4RSR*v&}Ck1^|fN*eDGBhh5oIwZp z4^0b)r-Y-^q7f{Ik>Od%*hR(UrM{UfL$k|cvn%5lH>MZ1=H|C9&TcKt-MBQjv$Sw? z`O2O3)kj;KPq#Oo+*p0MdF|f%(w+4y_qVP*+P?Z|XZ5Xp;OfKci+9)N_OFg^&M21# z$46X<33ZMN zwh#5U4)iwjb~SZ(vT${_zTj-->}=)aWaa2+;pkv`-rm^O#?abY-_lag!cxoFSWQ!&!{j+l%sl%Z_AXk6{vnBLg z#|~pZ7NFu*$4%?r9{vlxYbL>L^av(4v3^Y>-_H*(iC?*Kaq0=Dad;@JJgozO- z5&WRAVi*D$A^gCPer~9b9wZg347~)LMMrb|`RtiLo<05I*)uPyo_kS4^|Ym#TXK96 zmB5;x>fhZQySq2}@YW2bL=$&*$9BMnmIM>S4277$q_lQ4b+*+JTdRcBrfC^vsgJQT zK;ImoZS_-b^pm#x35PPIXuTnCzoF>H9(C|sBwd#hx8!87BCMIZZnCEWWN5IhaIm9f zq^lI)baD3z$WVl!u7FpQ$F0UXhsv{<71@l6ELvG6wJf8jD6J+XGR6Nwh=ZAzg|3sK zs=e+xH*;OR6EBuzBpu6;?zxl3TIUQj&gg5LGt^cy&{fyf(J;{0HZcST(l#{I0#J#_ zNDs9W8R}^1gAZwI=xc)ysTu0%SesgTySc|jdZosDrziMkB>82g_~J4IB>JZc&rmm%DW5b1n+hJcv?G9*Ota5@aU zM}nCULqX0WVFL{56xy)(!wG552ZzzcH z-sj6m|MAwL{U8~_t3G9p{4&-5G-jKE&AWr*9}o zE0V4&!nRA?<|S_HWljso&_!DPM0fdUN6A=M1){rpth;KsqhheFOxaKQfQ@qb7dDdE)b&m195bfg};(p%S!NSef#M{=?-`32}&fMSD+|Sk& zVP_h6-aN#~D)fSN=mo1#XUlLGt6(Q{Z(DsgD{WT`O*acIS91-(#X{57LJJ1nt##nl zAV(9pEyT$@;(}GAi*+o>ke5@Or(>+AL$sTHlq+yP%FQ9t%`wu`DK@}8AiIofkP@EA`niW=_ z6H%ETU6CIRv8Fh#sWP>rF}J6+h}vBtU^Xj7J;QS9sFFU>$C&7)k4VWwV&b5vXHe8V zAnL|VNWpEBvYNqxWQ;~Ry-`YUkT4oRjHHk=8YQ%PF|}R{@dz|RtB03FtVS-g4&X3q zxQuEZtCq{G<*{nGtZFW+ip#2CGr@<7XoP$wp@0FASjZw4vq>dvatViA$|Qgfh6CF;1Lm-xs$mMiKHJe+{CLd<@k8uYl1q0(e#Sl~0Pm}dg75y|oK0t$! z-cb$!_w1M_|T^L>5u{rw9=BUi@9mZzrHW@k6&FWy+Vym$H1 z{*}u&mzVBtEZy6tB)&TvZOP^bK4c>bo?eSQwPe^-E`g0YEl4sJu8bv@|t*Wf~Z~ zG}*r}uACncO%HG;l+T6YKr2@^8+&yeB&Y= zd^{{KING>guyuE_^Kd=y?cwb2;~Es;6A=*@6XW3NX=H6}W@l$&ZEa|2rEOxOh7M@c z15RsepHNpr2a=pQ^E$T0_A6&j<6?x*?_kgGS6_Gq>-@!@<+w~>AhE!n>#x0Z@+3UY zUw!k<*WNshPA@?bC2)x!X@XnP^MDm0P98PQU`L(&{1S)-rcj^@|Mk+JfZxCJ67Yvt zUq0d$eB^K(pHus#E#bhIe-Q(_L^D?SHwXU7fe^=kw4Y@NO@U$dgBO9|CxdwH53j%W z!im>`Kb|`ECrp5jg$4)TuN+2@7@a(YZ!(1QN31LdgTHvo8T1xRhR(cn?(9n{Xa9Ka z%!}vF{7FsaB`uAUCI*Jy?hzHmElP=G?aI)t8xs$1PCvShcyMd-=JxRQ75UMA{!D?)Gw6;3`%J_p)jQ>GqxzoFUk9S$axc2Lv=^Jb6!>k1}FbmdMHDmgnBsWpF3fqb=FYh z?6C~#>1Y^%3>oMc8)_SY2^ne`V=`o5pslN~r2{ggr=@|Rs;Bvy+8I52YtOhS*Z4@E z)Of$NM8Aw=KO{qG9$Bd#*{L46>F#;yo&}j+g};`e;0h!|L5DK*b7d$Rm!YQr8#08- zLP&=AU_!VCJ!e9IfRS-j89Fo}Ooov9Ap7BDO1Vcs&dHK-vt+z1IS*pCLXe{nX3K>+ zU_wVFBIH97eyNyWE#NfsnIsO4&!hH>X;U)BqJq98qg<5`S1=#CE=LCQ8(^LUegguu z*H7IapdE8-guTjbI+CF;ey$8*O-P3_gnh`rW$52B^lusZw+#JThW;%>|CXVD%h3P3 zW#}EGFUVjZzI#yu;5Gw(^Ggj9ViRg&xc{Ab(LaI4pTT>NKH=SY@!J>wNrr|GW$2wF z8Nz)CL--sbkRcSO#ZP9$k7pzgr$rb-T#4>Z0D`-df;$s}+hg3Dqny2A=GFjpLrGkd zcCSl&Rz;oHcx{(hjnl-+@vgGT?(&K5$_YaCL{If(PxW|rG-2(FF~Dv9zb2yxE|bjkE{O!2f!aM^dz^Cvn;q+&6X%s3=am)fnH}$)6YrCo=$o4a_~j=1 z=cV}PCHv>51m>p&7i5Ixr3M$IhnD3=*A*u>S7!7yXEfQX{md`7u|R>sE=(kqVPQAo}k*FX-n^E!WI@^jmTX71z+VK6j^LsiAh&@F_LJ@^jM5C0_sHJpjDV0(}BA1ZK5K9T9 z5)!4HLa(MWsu`RHuDG2i>EKJcaJZrlj-ZVvXcq`OMB*-?q)RC67Ar_%IYOeOh?G=G zKV34w5)ZPaBYefUxOYn4H>2#I>FuBGg`{^{Hh8gb^4i$c%H+h#BpA}@%JkI6{QS-m zxY6?cwbh3k8&9@YAFf`#yR>v?@yfl0<%gHn-@3Z-_VU`(D_8F?EZvy{F5jBHbZh3) z?U{xBi*wtH0(^TV4L2R1ME zti)8sXoS3FJn^4m_U#QMU6a4S$AVhZfbB+OhjrzSW0|gVzgg;gkM}_ zKtfDVQhaz?ieFTuy{Ct>kC%(Dk28joueXz*uam!@bAUfOe#FJa%+W#5%2LhH@C^;k zmrtL5@x%#u-lM+YmtF!7cmbQxLDOfL4;@W5AzgUk>#x255%CJ-M$m*U41`izwZbtV5zi=P~`hlD{@xsXy ze*hVRFA1&#PV-9#LVk&kZBc>v>Y1}Jax`m(fE-^-54WMcr_Y>y?F@GE-I+5lgO37d z&%CU9?oXHuy`-V`ijL;%M*13#_Ra~>=^f3?xyg}RHzx1joP2=VhCqg<@9mH6ZVs$2 zDKE{+XGX~aMtxgtLqln2OR137G$A2g?x(Mhuy)2-dt=P~QQFO6@S&dVUN9k`6CQZL z7XIWz$9GWHM4gvejdPUR@$S-*&f<}tvTusbY@uwsUWF4FQF|vt}Z#OD8eV%+ri&T-_1zf&&J63)St?68T#VWFb@a4bFZ5s z89Jk{an?{<)lf%WUq{_YPs>-BRj=CJJmfW4WB9VF3Ltb3>}?K z7E+0NhJqkgm4sH8hSima)s~}avW7}bhN|P5YkxzAe!0(3(*I8~gyzV|$rxywj7Lue z4dNdA5DiS|P=)`EAI&>g}=q+ri{C~sSU_Y2w z;U9wD{?C=6BN=*oTJ+Y85c^EwQ}7{#@X3q_cse5n-kKFZos~S96F-@QD0w_5euR)9 z=CL>@1s={xAIwVb&xr3%32u(Dc8Bq{JMwlfaZ}c{Dr{Y1H!aZX=BU-P6rg67Tm!#A z%n+-m2$hpvm6M&7W9=0K%_YkE0&!&yyEv7an?TNv?MjbqO%7>@3#f|pDh_rj2yo8x zcg*xYpXP3pa=|jm$voECBGSbo%GEN$#Uk9rBJ2WS34}UZgg9A*I9rA|T824Tf~f@C zngv@K2U{8iSr`Uc=!aSxhT0&)Yz@Qhj6!S-0ano0IH&pjB*7P^k_BYiHFw+k-HwZA-53n%6FbuRb3AQm0J8u>4WE1LS z9pq>k;ArmWXd2>X9p&o~6X=u>;+hx=hUALYpoO@mhPq~iyXQoCWk-8v$9QH%d!&cE zq=maAhdL#NIzdbhbxw_NO^tF*jdV=|qTJJ>JyIgwlfn;|vxR%x1-V&-d09vMpN|iA zN)C6+j`t}{4Fa9Yi18@P3acrIsmY6OFH0s=Wpq~~i1j(Fwh~S|g5OmxCR9sEwK7Vb zg4WQ-Z0=<=4{+N@WyF4QSD&b}SJa^pwjCmBJw_?UBEM-s(9|z%#_1C@^$8k!`3O0u zR>G_jF)H}9QZA*KLn-2r3)$pC7O4P-Nyuj)AIhe7Wsy7539YGwHi#L-wk)jY8bRvH zBX#GKx*_HgyYh%#5OWEgdBn~<(h+bQr8^%WqmJx6a#s$yJD1dzP43Pjc4h+P?rc(b zHnA(4(3MT>&Lwo^^>pQTb>((-7j*R$6NsfG651S+My+PhYuU^OE~kmhZ2|cFHi@KL zDkaF|B!z-3Q&6Nzs!&Sg3A+UnqEJea^|A&>1*6llu^GkKtYTa9+*w(=eeKfCD+_y<=XMrnZY)gSSeV&aoV;;y z_{MzSjakL!lxSs)zckEQ9ONtx@GcDjqO0Tb^_l*yh4KBX^S4(o-&wzWXXDbXHDDfF z1UJ61FmQEBv52-oYGx4&o2!ePYck3U;tMjPbJHTTQzNq>rbT3@M`ovoq$m3)#QMZV zc}9i1M})bChPVU=xrPKe2L{-Bd73&q>DgFoS(vLE8J*VFdQ(g5w3gOcU0oHduyjgI z9WN=JKug$EPN}Fq2O2qf?%c_9D#v03@fb{)(5t{3s%odz)X!*WoK{yys2u{I@TZfn z|MA3Y5D};TnG@h8z>BW~CtrO1)Qhjb@f>i8gD(I0`pG}OdIGgGBNN&b_3r`e$|3m$WtBFgMn4v^!^K<(-+rou3-s zy*_bgck00{0Qu1U{jvScq0Os9tCz%6!`)m;b#p~kZEjCT8IMw@WH(PqyRY_B)(6Pj z!_@r|@~silt>K>ifu7yoZgi}DFFMx#h60{~@H>6inyCF6zh#k8H$^NT?I{@}l#i1t zzxWi%(EhbqT5hDcK3`a!Evm{ElxOkEG5~HFxKRePB#lv=Mk`Ju6(qN3L>Gs7C41Px z-|f-Pmeyxqsm@NpWauy9?&l59zHX*@##rODk;Z8gZB=71A#F7iJq=TRO%r_$V?7Wf z1Xz)gp$_V*Hq0EFamc$cJKz^RLm)#XL6s#zRi&XdU_uq)b(KIw9mr5kY-4R)Q(b&Z zJ;+deTRl3911k%m$`Cr9tU0L%ObDG?j~&O+nM&zSJ3fwsPE5vRC=v6a=Vd6FM?pQ* zd}M09pJhNR`fH+Z9`~* z*m3JL@+3K7r=PaWKJFR%r3@XFh2V{l|Hs=G(R|iBAV7x_b2v@*OBuqH1tI|Y^3PzZ z^fp!^I{uK~oF@BVM)B^X`02Fh$*l14obd6i0C)t<{DQ~WtB>YIkLH9A5#oOalnCO3 z8PWY|!QBbY{xEHCh`KjOxj96=J50YbM7uRa-5*3JA@3*%H{gF8apy9(riP>*48-2)(D8UF#w`$^dqcvfhb#pNPENZ^M+yPjYI8?LhX!0?TmtK4FYWq{H^u< zEOorib-YZpd;wD}e>0sB3;i%lgD@*VKh#n$#8NNVLOTSzpaw z=bWwXSsT66=MB!fm}~mj8wO!TtYBA*5Et`cXR{Dz<4`B#FlUnpSJOy$^9XnIFgMdM zR}+MrNyr7GU>NtZN(^#H4sl8ec1%P#B?UVt1z$)Ax{w&`k`Q6BE-WY z($_9N$SE=OLUNdET7-LMv`1EqM^2nq4#-x7TULZ?W`t{QjAw3)2jr!S`8Np5k z(Vm5|-i0w<#qmDX=^+id(XD049AXuhSj8h(3+W9aMx&V7DC0EAc`ZsoTfexoSJ;kn zUdxcMeN5IpA@3QNb&pCqMqY5_^=nWfU3Q#So8}ulP(wzx6Q@Rf!ccqiNGb!C5Njb=hy7CC!`Dmwr z9<*@)g;+`@mt#%hRV;cHi&n*?RWj*SY-TlwS;uD9aai?SHqgN5HuE^m99AQf(ZHbB zGnw@adL5l!#{`SwwQ~9G9DWB^(8U)LL=v*HpEWct8k?4nP07Y*~bLo>{wS=P`jdt`w(aYa0}ESp@GPA>ONE)P#E4^OU+&TLH0Z_O_5 zT)ecqaA|jOac^;PfAP}(rNzC4h5f~gz^%)3cbBH_Elu6OGIjsz)V-?{cdv}!y)t@d zX<%o*e|xrndwy_tVR-M-_}=B2y(M63_tNCfrHP%z@tsT4H?Pdxx_asU`uel|?T_y5 zeEi_nXHRc`{?^XN4>z9OzWiWoa{EgE@~mWWj5FCw9TJoJg*^&>r_*4h^oE-HSuHI!U0roOeRVxO zb$xveguxMpYI?fx_7ke-a9&qAi*e?)b2z6V;+2?}-hA`Vr%wO*)Y<=rmrk92>Es*O z3>|9aM!bFkb#|lpIwZ&W;aWBfR29P(#Njh{e?ks)>d)92tB5z>JeHwja3#X3KDY)U z69Un}y$3g;=Vb`Ld_x^j$3gAwYHF{ks=lJC@`{@3%YeG->$=*fj11m1Gqwuw&1kBp zjtmTLu1?+Aoqlk0>cRdraBp{PcVlqlO5gH=XnL@n-BZ?BQr}$M(_Pu!UQB4o<8&7F zQmf_!Evt&|tzNZeWA&zNbcm};wO}Twe!nFx1u1(N@>cQd8B@fd9-?40P4ajrAPtZG-$h zljFV9k~~urJ<^a5d1R-0=4E&nWcd}N)%AFND6qUJsJtWye5k54q`EA$2A83#$oguK zp_rz+xaRu!mWH_2hPbvy{A{u~WJ2g*G5};K`RHJ>R7zJ0r5iLTnN9!=N@0?~gi??L zAyPOL3@Wyq9xDiOso2^v)G?jTXW(EO#KI#cLx=0?|iSSNp9Ppt+%!ew(ygCu5kP#Pi6%u{tMuqw`WE8jN73M&59nc4*&4op$t79;k`erd^Rb5 zGA(>GEqpjD0KkMGJ~#r6%wcgJWC%B*e<4Hjl1KC6hqJY)pM9yM4r){iNFi zl-q+;;N~E8uaC6XOWaeEw&4#f>f8`^tnpjdc&)44))h|cG8=={w#;t7!fsz;wqB$* z&XMZJJ1hDc@+FlSoWcZZZZt77qBA+9CC;xY+NU)xs3|G9Dj}dU-oGr~w>;6OGRdzZ z*}o#uuOiXEBEhdP(jzy>Im^dB!_y|y-8$3FD#OJx)72)&!!Fz1F3a6E%iSi!%_`N| zEYZ;<$;mYFf?0x#dAy57yo+V5vw5tOS&Wl;w3B(nd6O_Z&?BP|YlBcLgAgkeBdrZ1 zt&JjW0D}k{gD@NYFl+r#5F;ytU@HT#C2tcgcOwl~BMlcLwF^e7uBK|97TR7`x<1x= zzNp}&>usguYoqIDtLty88)UB^;%E@&Y!u>b80Kmm;cgb~X%X#Z8RKOc!_OgxjJr9JtTL(Is_?|cLbutWeF^TZ9iuSjU^*=MdRMIXj*fA&4JwM*3 zt}w2pJhh`Hv%5a0ry-ZzQb_MCVRV;qNmT-BEg+=VDcH^ZoaSL+`>3dM1ko`n?i`bJ z!^i-ywVwwv)IKa}AC)3W8Wgn-i`#*IK{JBi+{bTH@aiP2YA_@ry@F3E1$g9AF1dtF zEM)fNG6^{hVm5=A#UN&45rdFL>&c`MvZy_o0E3jrBo{DAg-lWrgH%W(N#cpANt@H8rQUJGE_0-KlL` zsm&>;wvpPlJ2(IJeQ$T&mn5s{W0TW;&fdRW8kn=p6MjNeN-s5fhZcn{RhH4S5CgP! zxNfd@l;ZSK5$;|U=n!P@5@zcX=4)bO>*C|h z2pVIaY1EEJdEH%{0mpZ(jJReodg0O)Up2h!@la{x9m^yvKpgKp4CV%}&Y4X!)WX)tAj-=oPD&)qO2to0#m-D6 zPRqMM-Lb#)?qA;zjxCQa%})MZoEwx|+8Y}dS6W$CSy&YmR~1CuK9`Mu6C*wI&cns| z!`2$YvYB({)Ta9Eyvo$q$rcya3Lk%G1Io%&Wnxxl>(5S1>oP&snWI%z?!2;OMRlIK z7GI^u6%<%_N!eXz)tT+8I_5}+){p9LA6;m2}MQcgJNJDGzsbpEm-mbtOI88;(-q)1M#m3&* z!{_hm`1bWRIhfsq;s~0N#GMWEeI7ai)>&+%4uziTEh#O}i^`{pLPVuoNPIDAepDSc zdE2cpGknk{dUNjLKxa@!Xt9AA9K*&Cg9i|;w=AJpJy2%bT_$Og{d; z#Tn1^Q1Y1@lkV&eldEHXTmdXaMjKf!g^X4nC&jX0T16q;#|2$?q4*qKY`hpEc+#C; z?mhwJ5SLBq3h5Z9BOt<(pK3bFI-YD%pKR8MUlN#Clfv^_v*KE_(rU}Xg)5TdqR3tneqVX(Ws8c`9Y9?_nAJ5?#>be& z*Qh^la;g*3Pv6o_^9lC%*02^7(H0c(7Bo^;bTYP=kw3_Uo8sG;I^)?mL^|3-;YGo& zXQT6He-C#8IRZl!6G{^V`a@N%L)H1w>fnV~#AQJu4tiS;&YlH|I@C4+jE9Umfld@T zg-jGbg=!CMjohI%BO8)BG%;iX72EZDh?#c8>|8hQkRU6WUmW7Tb~v)X3^gO#H)K!K z1Jw;}D1>xI^tp(V8Xc-*ITl}?F>SS3?t@jfT9><#I*X}#{FxcP(OIy|@frDZ&=qVN z?wp@{4WW(beKznHJlRpHcJPz@5Y7fgHh5k#S&k7rDhwid-gHr0L0U0rPsz#PbIyn7 z!#nQFUG4YnQ6idn`qv)Zub)V7SUaL1+4qkCFW5}##W*R@F~!~YS0@UvnDT<5>zR$J zb4_VP>Q88-FT!42&2e~%t^8sKoz*sKv;Ex$518RQe-VcEzI*K*Kab?lx#?b6Wc{Rl z-+)~&NCQ%<$F`^>vG^+`6YYdnP%B6qmZ0 zIQ;PLof%;rx}jYH15p3rkN6m%LT%59tiJGDE}lA=EJyohT|&;^kg=>5`m}S!Y>FzMS)vM4nem<3LOCjP z5goZFWrFsYoxy7o0l7GMs>Y0?YBffV8W1DJ41SWr&fk&)gDnX#o@3K6U24Q_;j}^W zpw+{YaD#(y$%3hZ>a&8^lblCR>{hEf0i*2MnhyxB$uGezp$)INGpVwRBqu17i5N>F zt8$B^BQc?)@fw#k`4z`dI9eN!9u z@wI+lm#_B~aDH-YBDp}ijU|W-oWrwja=Xvt@bsv(-1eK2<}opo63__0r-v7;%I$o9 z=PJj|Rjffs=+(@9x93v+`kJw~t?9b6*u*#p-6cY6{?0(j+%ImMt}LSp@{1h7c16H>Ty4R zuaT5wnc9onYP7MK7asf~Y{zsq++?P5>dBBS7)LpV6UQ0sK$O&9;Rp7ohW{*&e&0`U zfcJVi1N7o>cCb*CQut>yTwFg+LAZtL`?6l34#rP^OW3}}5_Z+LgZYnxDFQW5&vKHB z8R1T7InKsDzItyYKN%P27&cOylICUirJF;y%A6l(RcAFbrCc~qNw#&Pk+yPs?vgV| zH)Q6|Nai?Ih_brNR8zJ^BN`@yRrSu9+isZ#BI1=V%_j zo$8ka&kO2Is*7z(OHC^QHpuKH&eL$Ss%-Ouwgo}-;y(D6NG<9}?u#*xoCLd^(;|k7GvhEY| z&wqFbA*krb9+@Vd=_Z~bNvar;Yv_@x=up0Mm`9|NB^0h6y|t%N;Mq7vIoirySp69C zqiyKoYbfXXy_%(gUzAfpp@=Vj>d>svq5N2jghk%+p%r2q}AFVeQ(?%&F1zr60Ov z)xV`L50Xyxqd<9t#Kz-9l!mm!2QEB!$U4MArpQ?+JS!v##_ykIdKGiTS5Iq7>2}Nj!}ZXfE=1C+Wcn zSplvDmOSqRCjNLqF8 zs;9$m{@Q5%KT!^F0&StWE0U}bNsCCE38)S-kpimowK!GahU;;`om5nH z-{AjXS!}2)Z8=FViTZXFb%-u!(AbVk7Ub@@4z=KYM45TWLU8dUWfA?D`dwfahOsb6 zt1}m~3FYGe!Nil7gdsl_TY5OGa&KDs>O6FD^3*(=mNGk1Qt7!Gl`zdw3owF zKaeCD6Kx(-t?>Xo0Y}qRe@{*35gw%38IZ=`i>(`wmi4{Wr~m1V?2q@SvF{d`0MRTd ziM+cKhXx7>(Jcq+y_DIvKkB6`TdxyT{9$ssy{*^fs*(MCN36uwoCMb%8l zR80JKpi{77j5MH(yByR(BFdb}>NNk%k|=;29nv?kF>dQ|p1?`A?~ zrU>z=BV|`Fw|2&ZxhTFAbmr0+d8WgJ=rvOD5r3Gg6r?wxmMZANC+kiYr4s+Q zel-b3(crL3#bl?)SD~x0k|-z z6HP=(DE*YM`$-AW%7d;bJPJml8smzE0dbg85%^E z5Fc9`AMf}>!9h{+dV2aI1dB;w+c2ZIg%xrP06km$3aiB;-0kzYb*`7c-Elkoxm8Ev z=>NL&mj3Md?`!#~O^LhDul{32KtBJ%=xqX+s^rMx@A5wXmnSGJ-eDTV>-e00S`_eY znt3_`uJydQSzhhNjtOLAcygCt+fQw6=k;`PHMH@&?4RvCPV}7PU@ItI(xy8o#JE@*X$yW z)dQAp<0kzB%)30jp3Z(7j0Bx01RW5J{u{pz9^aBSH94iqXk6JXP|d{AAg+;GPcs#s zosv#mn37Q*BZb_H%KD;6T}p+Xj;E4=p;t(#j7o@mYawV$6*m9oQ!9VihkxBR-<5r_ zaYd_bPNij80}_vYPS6(WsrYwV1|Fei_%!aXXRB)bAjDJa4A83ctRmZ{8rQZ8*QV;s zrt@YR#8S?)5;FvS5e5{S&1EKT^ld?|HobEG&aRh7qOV1q^B1C#6vF#Mr9TkO}p{N6T^376kn4Ghx%`1 zk`3>2>Nv32qziKvg2v&WP|Cl;P?!uu<}NC!p;|O%-1ij*gb2|}>Ct$}a#y8>S6I+L zC8hMzRk>BZq4hT3RFH-qO(4IYJBk*O8eW&zBIpTsdLw<=f4yv_`wrF+^ps>5Uno*J zi~kT64*ic^^?w^C;oxVxANZV7zZaOB?r^S}Hk2ESH6_t-?Bzql@y*VplZqS5TNNR> zn?=tNu;KZ5zAA?cclLN##yndYdIw6~8B2XQVZWl5N%Vok%@%vxLF4s$*bzU<{o}Ce zz}pm@4q#R2T9NMDl5a1)=!I@*J5ED)8OZDQ)mrX}I0-V7UTAuJ?)B#Q$;Z^22mk72p^aC zes(TB_KiLE>_PwzA+T&j&vQ{w+mQh>4IgKoePk#bHE=R^CfBP1QX$s4`mZc{? ziNAlP{%*i1JqQAtyK6XmYMTA*-9JEDFsGiFqGp?RbBS|)P;g`dArhMBt|2aLXo4O1 zmmj!7-M_-k_eYp&6kJxdKwPyRBSYCIR8I7m zbnyuZUR#{8#lviljqDPQ88H`1Mj&S;gVj4DPWD8W--sAy5>F}%P%-GMZ&lLXqN%vR z(4>VjSN(yejnn!v@5BXM)aXW~T<^d}p$pV_1u^!7fT0t0-Kk#?zkRiryMM zCNz*FW5A~qixtuv)yg!N#Wh$zk~;UKe9Q4pTeN^?)AD&3_n3;_Ay z3v#d~EJEk4(MYqgCXOkiqS=Rw{B~@%cg|*K*KbxIZ*K{b7kG}DfqmUCFYCkQ6Zeh) z=3dXwJ81zek*FZ-M`Pd^=%S^_cP#;NS?#z&BfdEOlyGO^Bc-F z;NO03OQ4|M=hIfIBe3J{b+8oWim|szddgHvS_CLs@>-T^(!LbFdXRbyLbl(CzPZ|e`=;p1!Np4X(;rK`rwOL>7}0I! z>^yIIiNCZo06{U|I%iQm!V4l_SR6^Jislb1Cns=GLVg!Gw4Mt5<-4QdM6FD|xaEhe zxBc~v!3U2iT)Hzv;iO|LWY$3;p*tw_REcJ`lDZvn_xuvvkHH442JXKvp&M+!SfOqr z$1>q75V6M(Dg|yVA^eR%S9dfBb-mo(EdgYa&*R`!=HZ%aY~*xzb&igsrSO=jWmMSg zWDBtL{kWQ54Ed~#cprQx=poRely3^|P+5-bmR4}IbiaLX=ZGHs4C#J4+FKuh^02+_ zPVxE~(<3t7%Qw<3Gz}yvvZwRqF1fT-<u=F zXGeb_&Yn_QAtfX}k5D4yRop{q2As57loJoxxj?#=}q@|Q8v8wMTtpcG`Z1|_7YFx_z~ zajh%QY%9-Ctgh$Tg}RH}m?}m@OD|1`yTYL@Dm=rUoRIJaitt-Z zR>>e_9+B*hcm^VsDSOH&)GT=;W)8?#Pd&o zP=%NVQB$Zt;s&l)QQaKje3xGgR(S2@C*LG>rvy7((zKB$QOCR0&w-vg=&<(_V8Yx_{Joc3rX;+b04$WgNR?Y;!4i zl+e$lyKG=|8O&NFgYWEA%;VbWBXlxEXX4Mt5U*w6?PBh0qn|2b?HnNT{E(NEM* zJbV8<`^A+TbXIE=73;+0IydL4l*F2}r#fVWIkcBLl*9(4^q4eZ;dDpRh)2{N(sBF*76EDC|>g>wImr&wB zLQ&&Faphw9hQvxKA|PZWASChv^4cu_jR56C0_}?Hv#P^jc7NI;53uuR0H==hw##Xa9@vbUyblm4K4&N zuLCV_&BP(o$uhy!utZv=#!*sL*;^GAPR(4-%3aFKT}oR+N?XyxOgz9&&)P*vk-CyO zdp=>pj^PM{ULwVY>RU~P`!85cC^?A?^@K9tF^-;!E-QV|TGJXYjT1#aJDd_}aK7`q z?B%bDDkbIGopiePQaM8%5)w*yyGm!##dQ|D%R?@P_E-dm+!PHei?nan<`6b?>FQ87 zw8IJCa7)QGI}$XeEj7UeVIb}c(XpW+lgaqm(tnJbC%EF32&Pcn;gX9r$#q^F^u;g_U=9w-d_G5%WiU2s+|?}>*9jK2E?o=^Ih-h zz_o1OX08BR@0*dmKaa1w=h1^JEJ*f@4|UUzb(2qq*_wu#5HM+$;abNLnny6TQ;5tn zagK(0o1LKYvTAMI!&nBsV)nOR6^XL6msX<{biYSsk!0d-=*g!Arm; zNWsKGCAlQPIK?2k!bU$iIkr8&wB9{3b?NV4TAV08?dOMSXf%^%m0olXBuj}~B$(U#gB=wx|-tbuSTrK;9>WK>mHLYsM zPB-DPG!Dcqr++b#kqmSK@{I!GJ(0f;fp|Ug67BLt{>Zdwx~Abak`<<*AyHC}JM5w0 z?4g`8dhaoD(>exQ9G#sq;fN0!iZNV_laE9fibDFuQFlH*rBSK!AZhort(BVON=dkz z&*we-?oDHE$-94#@&)y$%sNHkeT1a=eaOBmBsyMCA%9yLX<<3_&zy}$j{XgTc!dx*C!Pp0p>3wVjglodT3-LYR1y6NRL ze~+PRV(+Dw-O10l4_i+bar&6h)3J0g2;^yJ7^0oBP_+)yeB5kljRjrh9lZ&2mtA4Q zOqX>ckMMg)@gErr?uf5fSjrfEDjIMh#xD4P!qm-63T}%k<}zAD>102dxPB5LQ5Z0Z z`y2ce_y36@Zcib^CGNF$QqvF=4oJ06==1f9@$^aZ{SoCWe1<1Rt)6kHnE@|+ppvw& zk#%gKvSXlgVq}1?tw*e?h4+-rzPJo0oH7f{nVoZ?6rcKSW$iD`-a+wu^S2f#gOLy+y`#bQuIL zZ)G_y20x^}UG#^t;tixFxjV{qEteYDHs-Ym-5)D;hw<_ndA(U zB#$NuIXPwluMpS^>O2MBk(9J(Tu+oF-|opY@n*se1o{Dwgu#l+jQa+En|=h&R_ZF${y2hOt@=`4zGD&gAd)&gm$3f zV4-qlk;uB|Kn!xPL~F#G3Ig{1E|NZoR3Qk}J_uF)F4TH1=ly3aVR+494MyRerzG3W zBic)0dCOmTOWydgrMz+ezNMK;76;4Jeb8Qa)7Ev<&eS-yJt(Kgu&!*<&J;oQH7@Rq zKh$?#oRk&4v^JL1RyAK`#av~%nHpd>0V226$SfD1U9(`l03qE+D$eKa-TwM>+_hFj zYMk*h=Mhv~Aw^XI-zEF%T|~9HNNeygc@Tp*WCg;ha{nZh_$zNh_$<=c{W)5ZJ%AR1zROoj0RL*^nq ze+LX_q*PT{D6*+UWueM{{B?Rj8qDlDUJVRPdE&HnnXBIEhX;RO2-VrqFZAD?qVcQq z4skhu&WCHPeo^C>$cO99qqz|SOoQt(&}qw{{qKusPI zSGR}5&nqnc-R`f+m$rdj9dA=xfNPRV62Y#grAyoGO@q&?-2-WY^xpQC*9CzU6rj<+ z+uS7*AOzm}*J<))$V}b8hub9<5~F`lx!EECe&^*%4*wobbMu9}{BKUDNJKhb2aTQr zU%Z~XP&|8m9nUu`35pEsyUk2S1#JzT9OP zo5)0x4WJqlrWg=k_HgsnbBp+V-c5ep9lmFuaBfEM)CzAJw)e30I_n5>Yz~zjaBCfN zYGAjm9CK+}ETvPW#y6Y9)^YfW96FhRbKDF)ar{O@6UQ_oZS+JT|g2*WV<*dXs{I^MY)wjMXc~(Yn3VtAM$#kGs5$Ur#3$NthBaikVspp9o)S%$_pNC|8O_sfM8H z&A2}!878Sso;fy9GMgIq{xr)DO=> zzZqAiNh%D@qrfY2qg?PwYUsgsp0!~&6I>uPc^)xqbIW45O4e+h~cQyBvx9XPFJNGiJ!7(LDv_nMB_3F0dB88 z-nlqopwhUKh&Wfv@F!w+5x1B5;$&y(iYtN4dq$V#6uoYDP=KKwaSPWR@R;Z^vWogW zoIBNO!RCXp=^t-vrcsbQ`t*X1=!Y5p*laN!IP%xXK2#61AKW?5fWirn*~t^`^;h@Z zRrA4D^UGJv$ydyc(XH{*t1wwg2!Tlmxm^GfczS#pbbPs&61BF{UpytL3Z-zm`0zgw zqbRVnC~srWuyoHbqtCFkp6_FxZ=;^?%H06Ut*c?)A2);;W!WxH1y@4W$F(ItrRN)H z&O`mA=X;qPw$a2dR?%DS;dRLjkJ}t>beH*Jt8>=5eoWDK-QhQVAOIfliwV&&RaBi* z4LxF2ykk{*Bmf;^fF3bGml&W=&bEETO5cLJu0c<04S>4Bn_=L*uE}>fVK+oyzK>sh ziC^sg8yR8A?f1OXZ`HuCIj_vQ`k|V>0hqJ2jFxm~+?H?6SbSm7~V`m6n=6KB?5~>dRo)+rTx?a*gUaqQ61~o>CF^=xdN{TT` z8qJ>OC0dg0($10cwSD5Pb^hV;236(mNfGAV)jAi@$ySy>N$1yiH~UF9`&ow!MMkA) zR&{x1RXP5MK~6R5*uHL9z3bV&>R7+&*u3agylPi?XIJ`U<=nFhpF6m%58gDl-SQc^ za(Q8iZ*9v#ZrMTJm4JU8IEE~Lz-|zPt`mgk^2G2uV!8uq2Y{@bQY-`0r0XE}%oySZ z!Ia?q9Ow8Pe{t0H_1atp{u+S_O%_fJy zBn8WSIq5i$$Oy`4+|4)wtO! zyjw(B`g)BPc}cDDQ(6(n*Tcd1X4xriiBq_qGAp$s4EiS$4fs{;p^0g z=+Nq;UK9{D8xjo0ErYKxolc<%b-}Z!*=G*Chwupc8zd_jd?Vi5(Eni=e?!e=n z{Rr4Vf0vs>J=kqyzt81H2o*dUt61@anbmXYsFP@~+~qZ=7gn zf+Bv_*_qZE8CJLiws-`#_;{5BxK*d;`3p+aCSvCbq?vq}%;5r0sY+ zfYrrPy0?Yguw&9N!(t|0zHZvNEP@si{dM@Z15lkTzmQ}|9JIQsoVulx&p^4tjMUI- zIlS_>L$7#}VDJF|J|7z};32Zx+4x>na2Qqa$zF$)Uif|_|lzc0vy0#-eTF+<~2o%qvI}=xt29~mNa-)G$0utIBOnS0Eljk4=u6o zoQUq6NDnPYu@CNuZW?Y}O19Pc^UJ*OzcUNHBkLT$OBw4Jids8}>f|ZOwt6~aOKc|* z=FjW*jSu`eOWHY`|L2f(0V)&`PzFse(EOWeKn#K}t*5oNCU6%QK?G&@;qE1#V{5mftBN)5j+xl2W*RFzd)l8j<)DW5C-hXK)HE ziR@Mnr@?2w`{13{+YVeI?Et@f7kKjXU^T^3GTDPCw?qIm+W( z-uqKrB88J%)Ym!G4Ac?Q!+z99VX!fjhzqj$0V-%w)yK^oRxBGDPVS(r~5Y)9#f z0L{Aql}QPdzRWidaMciIv(Qd6>CQumt|JM9(Rf$7NYAnOKINPP&8#z(v@4y|!v$^J zO#>n&Yq?`LtSDLy|IKAI=aop@jb)kDsskd22*AP0^WFIy6jFh72s&%wvdJu|4#5zb z_eMpLz4}@ld6B=&Ix8uFC}9a%rW)3a%RkAcqd=dTRxPU9`~xAhKy`p6{bpP=DfGgW zm6Es^6|xR%7e7=M9U8Jyl`KMYvIw(*ZkSLP4`fX-tLV!4QB#1yka-}7-4d=?XTD&o z&C3abm5+be(6^*XRhQ4<<331XHzj_rqfx6GJD^7|4HpGa&D+2?0B`$bnqA$N#3SCq&5uS-AakA;J?y zI9%(R$S-)fZ&T#ufLMDD<@y?Ap`0Sw?sEU-(C&G23wjCb@cGi8OCr+!IT+E__wQyI zh2-kr{??Xbeh|vm$9tD&;LFXI63O=aZgJOk;LT1%-zI3xb{X}wJWn*Y@H(Z*hnXhcTHA3=BQY+wsF=0=>0uF*X%atkz7;A09+e)6HwI(a+U#_dYV8_!v2r81$W^mWwuvB7zg{+rp1zk(d zxg!P38?nURyr{%oK8nEwn76aEqhoOh5JTAa?eKF&i~8znN~q&M*5l3;pf}fjZk%ea zCF~1ezI%xGrY#a^Q4(nFVd`ySXA;a}{_M80q+y|sHPq0>kS4{Oy-@VX_OwiU{>FMa zf@*G=;8z^)rMMWNxaqC2`ub?}4+13@mb9`ZQ%xupC(q5)$bZ63M%#h3~FP z!CA7ifK&39A8nXk&NvJby<90ySv|cA|9p{D2d6^#S0dKcwdGIr9ph7L^9$3mYvY=q zwiWiZ#WpqWS6*3&3Nm_+NKC28x;Bny6(Cfqh;2osX%WDptQY~*pHl8nT4!!vU|(5h zUIZ|yDTWs|tEelkt}CvM&Z^#)5H9)ZtUbchbDg*Wo4GjnlXQ^~_3`UY(1^8gk5PoR za9*%4sz?;X55|7_SB_|sN`{|BAwR;6Cl~M|Ty?G4ZQ7MRbXbA4&}bZ0g7rVRi9}x# z8JQ*?zacBjfNxPlC7U|x__=^vf%qw(YSB+ve&Vrf&>0R~vL^|>w4z2!zZ7$2JQScB z(3YThs9fTArq2@Su3W!1v!*^@OF=^Z3$f6laB!Mz;L&hiipAPLp_SH3IH|CXTY8P* z^MGLgBGqsnzv@4F{h!b$SSy+EymSJ>4|LFtmiI69gHzH!r{IV^N|HWUB;svB3LkbF zZy%L6Ope0x`$nVj+3_v5t3mJA9_zVJy8chPulr43;si3(T%)BZQqw#)&!|ApBv0QQ zSKAy{&m8~281L%%dXy`2`;GKwV3PZ$ipSP9jWA)sum8fIB>1G;*RU&Oz*7p~71al| zC#wUUFKUFEodKNWilXGP$~^dMUX8!jd@F^+7CN^9&Y}^{qQgx!w-?s=W)zphD}S3` ztXk_Ny^aY^UA=r-CK#>CE0@%vhVGJvE|*iRVb5fRfjLi&YxYV9lkLS3k^@8iv~^H> zc*C@<-eGI4i>@Xw6K!L*)@tm;ML5obRFEuH*={$ z_9pAFHJ8*iC{wr0<$4KNaj|6QbZf=*idY;vr27<~$Uo$OQ}(7u^x{Ku09r=z;*9E9 z`B(+Ow;oW_R;sny z@eM1njSI2Ob8*dcQT20itqZXY3$X%@87F2*e*K)o!-%HAAu5yJA*1(i1$VASfE!nj`)VVR@ zyH4emuk^r|e{c?lCQryli2g~4?l(j8wn6i@Mg_ZC4lPg?##e?O^o zLoW+oF^LG6hIgcmvSyC9ty8e8i*c-ua;*MgRi|iIr*u`JbY&+~=you=$|at}4SiQK zf~NDgq|vvk&9XE8hA?;G(?0o=3FDJ#zen*;Mk5*|`cOrqwKhl(Z?KkBKx&+&sw2zT zzU{VAJ0ofSkQ#-;YG)!!O^JfOP+c?*rJkmLouo%@0rijVB~-UB+JH)BvIi!D|g&}xq~#`Z?c>q5j6bVxqXvX(gFrHKRj)9z;+eC+kURp$<$6cGsiU? zN#QPpJd6d5EP~m0x9LpUBs0_uRVPs?;G&=;9~HYg=k*SZw56;N(%^;O4a~@RUNagP)XzOo2u` zS}Lw&mbo#Vsq=b`<(Wgo*Te>45OD>4M;VT%dtI&wk=xPoei7`V{ZbMx48|T0q7Nb~ zJmsh^p# zgDmqO@eO5CnCX_~+;s+=w)YHj3xCK`H{-VCA-nF!A5ETO(Vnj0-bYCN zCFgq>PkZV4Qwk%p<^A1t7D}=}bi&)Xq`BpR-J^j*kdhnu_zLgt?bNR?0_(IYKcLb~%zpC_ZY{ggl!~M7^vFQWG-ijwwaFcR z!s7=NKf#P9q#=L;kDXQJk4rPSwmDpLg0OOCh2Mlr;4{vxKyh>e+iDZo9P5)48>=&` zio&T%uAQm6Q|s=U@~`l)AdQ4NX`38R4>?g23uEUW#%${e_?KPUYQ!OO!8BPqIkLOA9ABsOM$5PU9Y10DRccDC@2gAqXwn*^5I1m?gC zstehTXG%cVURw72lR(t8z<8do|B&xzi7%vCjyT5K3Om#ebtvHbIaC+KV@K%))H`3% zPa|M2i|uxD%cYEN+b~l*qWxXIzBt3L_W{P_|JN^qUx< zzdbCAON46B4X=LOPS<>&e90wt%`FzBoNRhWYm&Otz@#AQ|`+pJRVX=QwBS$9YPRb!{1vtnxny}WkjFpJW0N(n0hdZbR` z<=A&5HsB!{P81}OJOt6V&x`wRdlx}Q4*jWleT4<)3^4^yHYLxNQ74WWrzROlDi=1z zc4PEoGt6@{+;b~j>pC2pVj>7(vr1w!a4RT1n=rj|iM2CH?NbR+hgv*~a5$coxaP&! zR<@W1uDAw{xJF5uLK6mj z83w#ns{dGVkZ`J4zs7X4W*<}>gmmXDGok<&jl5bQPX3Z`{Yn`au_$UuI<}1_b0ZM1 z*%QWF9?@YY*?BzTb2RLWMg59N>3vA!eL&f6{_~*J3%l$c+x%rIT{2m(X-#NYU$rtp zm&`=n)i)}G$U7&G9IZvQzxMo?3kjY;Y6xlnt_)ss!OU?&J&*y+hf`=)ID}1TRhVy8 zcy1eH85LaL;H{ECoFE7{dkksp1h=*qA+3g1N`fCh2zCjpR~@NKfu}F+Mu2Y<8?Q!l zwF#Tl1&1UvUH+{DGG>KjY>^&uMy@`R3+{3vbl^(={Q(#yk3ryF5=t#IMtLJ*xmQ}{OtMl)&KQOBELfs?BEG$J~)IysL>JF&7eGcgO4WN!f1o|8ptjv?VZ4CMzJ#x6(i+KaZ6ftn*`fPNVE z-`y6O9>x>lP1xP6#Oi)&fq*IqX#3_~6x|3U&?H4J?dkJ{Agp~~VR7v82Ej>nX12|$ zHeN?pDAs}7qg+HQ52z{G(C>L{9@ddb(3kUh`SaHI9kPocDV6GJ*!pde*3rY%%>DEZ z6vkut#t9B+=_;)4E$OKJwX7k;^T!}R34rL_Hu54+yh#u;$;IcaAq7RnpH>L$oTO8o z^0HimV=shAC``mIk=POUf9&XSCl&V|Ul-(~RdKH^Vb3;#VNX$-l*>RT9#^*X4#;S7 z58dz<@%^T>$ZfV`RbyFNjU4c^vd*No+#&ciA!x)J)Nt9d^ux9~Z&}3~V^&MZzTmAa z@eNOn2`hodu2Er76=f^|el(%Av$r+8wl=&Klpv2Q1Bp03gIJ7Co4Rw`9L{;o2KI)B z=ezL0IXrl9XuSSXZ&L9uEXh@Pb1P8A7yyyVt!SSYy;BckZq1BTJXbcQ*369+kM4Jn zj75>8nKk1gQwm6lni2+cMusJiSz7)N0Q*1$zwtR)0su@1CE17D3xN#rvc&=%Ool`N zG9g@sQA{i1F_M(;cB?@t+OjsusvobmTzCVBUk&=fMOI2iKqnM}R6}l_Bx}R)!u-i9mfGPNBCv&+}r0 zz?JB^k^7T;0A%Ry1Q&b=K$W3U=IvhMO?k&nSv!~z#M_t*-Bl7mfIxBZlF#$Ta~qQ$ zh&ab1Xf^)N9YP)8J;;9K$bm2uflQ!6@cBejLJ(OL(RYnt8JOpdKD8RFeKEU z#BE#Vv|eSm085NU;1Z*8k>0e(Xo9#vZ=9z#%#iA*iFMP2+NrMUiLR>guF9d-lK!S5 zMQyIABAr{3%qdCcmZZ>gVhCwr?Fj)5k)Ac-ZZ%4iqZe(Z6J?^)}P?GSl{k#8NN7#xT^uG{PB_$THg1D%#CD*4+jbioEO-u(s<2@AC=X5E00e z{E#Qb`u(+7ZxtP285?L7A8eNr;g}wMAv4xB zJKjAf!J{bEw>m$(u_UIcB&H%O2+S!j(X%MUrz|tDCNHe1IJ~Vqg4B?}Xiw*p@+9

LC&En!$&7ycRCMRV42jo)%7D>7U;mTil(wcysRJt@)w# zVg9^Oupp9LmILA?sdBAvU~71AcWmt5?EJHIfBN?GpT7P2r|-W+{P4xW_ZZ*(_2BQHAwBx$F9%4Tr%yYs_4 zcYb{K@TZTS{_yGhKYsa_AHV+SyDuJp^_Shxo-KcLZ}zPlqj#4_@2)6!7Fbt?d#0p> zX*p|Yl)pSF*}OP(cXjms#>o8*aHE;G_ZHv3v-HvZk-kKiT}| z)p64x;#yv7$6SGy8A@!GH#QQSwZj4>uktssY-7wi>t_uD98xSNexJg z_fCukF>($Mun+XI_I9;!cLqR@G%QR`YN?&n)_7e*9Y9BksbVT~RN6V>?5is0uyOn) zkRFv+RL;Hp9AHB5_SZDjUxlcq_NtoN%h)~eF8Bo8haiV|QbYZemL|y1X+7OD`g*D+ z#_E<9dQRsZBSO-eYUz_BlXv$ozxQLn)WgIICo@jEdGq1UE(nJHy;{IcZH!T9pxS8G3a6 z%20FO45ehgQ*^Of}lirNB6b*{9bn3kVB zBWB_E`iIWysh!bN zJ*}s5S|9n)8wRRx7;Bt0)mF7Qlp)Q-%8-_to|d|1&=c z(0pB2?XP+?Y3XCLo!6{NG5e9 zle>~A-N`g!G7U_KoXn&Ec;9p?n*pSAm>8@KE<2OQ&IAYIbFu~8EI`Q37Vsd?fdt7A z);f(^g^&gz6T)N&X^>o;3mPPstdVz$xli6b&dL7WboAi0lXV zB$Qyl%~G7AK54O1Ql=1B%S8<`ew&y>6fkIPLZ5`XHXzs?C>7x{FK*Rfh0svb+7H z+lsE+^3L1xjysAj;I6Xgj`9}{1iFJ;5lGLm{rn0rA=EAnCWOh*t`xkd6{!zISsSVe z!H5i9Zi}0@gbkbgI$VZu*145nMVtJ}4PGTSaRx~R#C0yb1Oilh%sQuTo!bC11aX54 z>I2pS?sCZ5QS$sHx(9Mj1H5IGUAN3a>a)zOzQ(8qAHt}C%Vj1+7_R{(T0u(GxXNi- zVK=UD8bOAxu^NG^sJ*%oZ_2*PXhLqpYFTEttZ-Vdu|bUBvKgCPL-T7(h^EURM)ZbD z3`m+UGg=U|=1a7u1#G$v&A5@V88>Rf0u0icW(d`zZ6yOu1qy7}S8-*!xFSPRkqMDi zkU&Zg?@kSAO9^U7@T-sat&8)iiSe$8a4!kHP!Qw@dX(d9o9bqsS&hcY@U9>D&55<&DAFLf>n~Ed8~~=l$CCjrEZj!UW~P2jGb|; zy-D18)0p$7QT8U`_9nr0;6oroI$ma49wzE;#_H}S>K-NTd$~hy-F+18ZC&sxT(XBMiyE4naIyb1XIHJ8G7By>k=L;z%GFIh)pl(Fm zG%9VLP_|DfJErlL>s1kFle zYoDmCU)&C{PXu|3@`yfhTc5aHA!vx!Il1zjiITXiMiXe zQ~OgBH>W1=%#7cjnY=$g`{dH>lgo2&UAgv`ts7t7z5m0rw+}uA%lYQu`=1UDfFFN4 z`01yEAAbDlyB~i9zW?#ZzyJ8dHyB_4_`?@Je)sW@U%hqk(cae&);`|d{rtiGZ{B_K z?Z@x`@YhcdzWMy%htCfVfX@yNK0NsT@ehBy|Bp{^fAjJBr;jhccl+}DcNU-BoOrM~ zdT)LF;nw7n?eT{yT=FLJv#UY@bKX8_Yc0k`_nhKfBO2?!B;mAzTP|ddiTdKcYge0_u#AjgRe2Z z-9Pwd@29VKfB0(e$FKK){QB09-`@P;tKEP6ZT}x%-1*_Fdp~@A_q#7|e)HMxmmlwa z`SI=-AMgI{qx~;Gy7|?|cfR?{+J}!uc9s>(v%HHVq!DSClHV@lH47Q_Y;rlNqoAWP ztFbDjsyMy`b!5jCvgaqEe&v^lUkamw9#o|Z|Lj3p{Ija zaWK$!L8tZfPV4Kvsi%8FQv+T?=we5Y>7koX>FS))(LSl8{ko%7Zztocd)#p$87t5erkm9yg%KC_+B*3?wf(Ok{wsuz-)W~7X@5%KjA z;f)dAMlW@!k5k@{(4)ze05XN*+OARkhB(?}gnmRabkSsQ3t>1&zk zXrL2bwbc!@HS}~ebaXVeb+oi~wKQ}!RdhAa>S>(OLpv9p&_4Hup_ZYGy+cHxcUpXK zQFd@yL1;yBSXF66O=VKwj$O-xw0?jqz`f@xU=2OmOcZH{jkH(j>^mc@LmB#2kp>^ZUph7+;Me+c#LqG``@f$iLo)Q6A9W~0SUi-WpPP!% zCHB(uGIVd8eRqU@2V_XueOu9q)r7k5C=X=_FZ|%%b1Xx@8bpbr8^Fs#AVd4IPOLc8 zzAI@3@7cj3DhSE2IWlBO;6p82s4P?qmIE5J$p>mMs;>)bp9dQRXR6)cf&-zr!GlZC zAXFK`Cd=v|uCgIVkgw4l4VviRy1nC=F!lE8ultUQ`1$}G02LpFq?rTMiVy6)_j@X zh|#pfXub+Y#c5sUv}3dZtGv#2LH9bpdzsU5mDPTQ*>;iKFxpzGsLlo};+3Y*3*zYo zam?aGW^ocBE3z{!v@<=lBQ3NwDX1>mt0Lq=slP*spF^>)Ly?zVA>eIa;ANlhX`km| zm+N7l?QWOhW}D$=lj>}qXm1>6V*te48YbGCB%C*mKW~=cV4mP;9_L^d?O+yh-Xz4< zz~5TW*FxLNR0Hrd0n|N>)xAvAea*G}5ZZvhr4G1JfQ>#7WM_yIY-bqeXd3Qh27oF> zxLAZ=u!sUl@~}+@W>j+P~NKe}+h#nAaqP%P(JguU3)4k=-dso_rP;g0EH4ryTyD2Z@N3wH!EBb^Hq zy=rnp>I=i0iX*{|h;_;I)=Vy;NK7qLvTOQzb%UaYaYgH7Upu%F#OeOd>4DCf!7iMs zfv)lYFMEIe9@mvE?4tXBxX(Ff?{9Z^z-)`r7L(bQMYhGv7Be$5R0)bn#V9B-Gc!wO zCr;vklbB-A9doUctT^fJeZG5t`=aOV(PPau*HX#uwqK7)!ZNwAT*@yMb4$fdrBZGg zq6uQDj9V({ zp)rh+dqYF_hI+Po+Lo2g3oY{bX4!lzpjd2cUREkMdO9}xCLT_0|Ge|)?c;CXJ^T5? zudnxhdymxU;}=}K+xzef8asP_@7-6!kEaxi9sCJ7y`N8PXVkRP>)JWAZV`V}*|jz~ z{ngg;^T!*nzqya*Exm`oKfm4E`+D#FBe0nd&sSf6yYcSFyB}U|zW;gW!>{*0y#8wM z0|?O5y}j@D_P*cS`w7!2kSfUG*>8|q?R~Yk_XLZ;!@Uo8_ug;q{kFdMdVTNB>fUcF zdvBJJ0KHz=dpZ05m+7~^O#k-t%x^!>f&hJZwZ8X$6Y*|+@9oBiw_6ySA6~D&d$IiH zr^Q!4EWQ3|`Sp)0Z+=*Q{cPpUv)P{>kAJhg0c(JpP|2j{o0SmFWLE`sM$9>?ruq|8wjpI=%JONidXH=bM(Yn9aH-&m%Lq_qC%aMVqB8roKxam(~<%Aj8u2bhd_qB4k|X&5ovl8O0oHW2Jdbl)%em4(f2pc9FZK|B)Rj)|vH=Dtq$p3+la2@E*zvfeY z!TH^^q5oNB2zwhm1>i5)Y(b)fvk8sZ0NKBgA)FOy-HNz&MOckaBIA`W^UG1(7ahFb zgH44-mxl{Qhf73AgASPxk|8uAhNNeIq^t;^L%qy}KE(^{qB&;%95Z*0nK#eMn`h^P z8v!V1<>Br7F>jWU3ry3pv8mP=)T}8AkUd4o!OJ{jq^xm3Wkp~=8J{q!x|K0npALZQ zpn_0c+AuK{0SOL%Nkns!P@np=VN@alXF_v{uod{}gLOa}FhEG}$Ei(ICHtUTwI~h{ zGeDk(K%Ox0TxC=QxRn7Nux{!7L{;YjLS}z0Vz3T;D{lnt3s3++K0wInugwM^A0rh_ zP)a8#CFA6hvBsj|x`IJset#|6loDcpZBBPZhO#(CS(L0ONDyX4H>HNLlS7$_A+)$a zN^C%Vq;GYIM^%V>MTmQOsC!AEbGF-!RHusxwpMZ1E#j_Q#v-huu3JT1wFtXn7IN7% z;DV92rM|nluB(|g;9{cXY^-_PL<4X((R4P^axu}qZKQegoW@Nf4aalpc7|u{!HN#y za8BLv9J&RGgOP^aIrST7HSEu6IvQ)=G%>hkcJ`L}xm)H&H_eS4&CfcR8QPf{*qa$R znCUxO7~Zrxd(-;tO)G<27`Ls@x?eK!x@rar6}(5$0g0fd`T}0 z5Op&UJq%eN8ycHO1TCY&mQhjbn51=Fs+^E_Oexx@6v|13VnihDV>flt*&Q@yJB6X7 zFghsg9tLl)Nif1|8sO037QAy@ESr)Fh6Su%PGbv|C~c^dks9T6T5A)djmPN{OGnx} z7Y0Xm=N7)(+4%MA)t{fN{`&RiZ{K~r_uDTYKD^rd@an^d*I4p$@5Af855Mhwcnkly zM6$I93B*tM4deCR-pjo`_#^KH7JuH`dyY91SkwdLMjv*O9=%`R`>^ui-OAqk4b-xC zZ*TAJ-rn}!9xg*Wdmrxa?LETm3U{o-fRjDhd;f6n?Y;M}?!S9+@9m4NSI>7|13z!P z_-X0+)0t-vroVkK_4L8?H;<;iemME~-q^$Kk^7s&ch`ZDyPG3-w+44NdN!6jR~D4> zGc9vdvgvWb@Bpj3qgudCtSF5v%J)r8a*vO>6&ZFT$p5OJ*F_Jv^KQqd6h4XztGqHhqmV5wKe`r?bQEu;@JP^_|gCC z_%Sq^cJc&h6FSOXTkD9P?(uVmCrpga+FiRH881pY%Gcvra0q+X&p+S!*7% zRR7ZK%onC=UxFB&J99+;)Dg|&U*KpR|J+dRxQX^@@FD#(Xp3r0hK_;^sh>Hau6FXw zX;7k*r_LNdb^6%JQ%8=U{PO6DFTOna+1~j%-UT_n*pcQd0>& zE_T?2R8R5Bv7LwT`9no$6Po;8|Xgik8kpI0=`!baJ!+1B$+6jcc$e}1IzArndkhQNgCQu_(11BA2z zB3KauQ=-)VTC5QVzeP+NM52=p@i2Iw!Gp*5bFiqs8UPYdqAXmD_LHmu0wh_3MC3!G zjfJ2=d_Q$G?}RmF+|KCsw*66C?0Dp8Eq^XBo+)1^7{z|J=MA0 z)w!Lu`Q3y90R9vshI>^8IG6f375O+8dpi|+IcB@rraNCvxpgJ^_T^ZI^I=!bf-e~b zUOeY#W8iCT;BBq%Wu@n>Lf^|m&(mDj-CW1T6iqX_ZK`$K1Z)Y#TWA)xhLe%HBPbDw zk-=$Oy_2>Er|b;X?F}^@4Ylm_v~K8W+3INn@UO<}`a0JPG4!>s8ED&{)v+_ycQ7?@ zGBa?tI_GS8&ehu3^OCvmH4ESCmj3qEe)d-W4hTQ&R9YW9j2q@&*G)aI8GBwcLdUn= zFblLZ3w5-*12|cQ-L$%M(<RhmLQqQTIzWIV^*xft zUKyoFPU)64_Q*+n&6NIDN?$9vua(r>($J-->yXv7h{_a#QW?KQ#3|%53z(E#kfDa! zR2nIV!z|@^Pf<^3FaA4}H5l=U(pQ5-P9 zQ4DfhhWV|-{I(HM`N>Z!!A;B?4gr6MBp_f>FUE06dF74lN*9KVcE9>(xGZHvk&H-+TMj`?vSr zz1sfm*R@}Nnt%57+;>la`Db4NbI-n>{^s%6<9ovoc1IrUjy=3P_UJBLLO!s&*|)jc zzBDJBnGlQ(u?Ko6U2XL(vJx&UgG5ZNt4Xe@OsFUc$x8Q3h;<4Nz3k^@?tJsCgROzx zHNESX^{!shy?RmWf{mJ`*%=GdV@8I5*VX!)w&s6pssBww?Qfduf7jCZLPzVkq5g@p z1}BZroia7nzG!pN$1|e5sIgnweQ$H@yC;)Belzy{SA$O<_B_7ZwzJy2z5t%Y80xK- z35hZhtG%sdbf{x&kj`c1=VxRlM@0v^W=H$A(#pp~qzPfe6q2FpSI@tPUv^A}GKXj- z1C4pTb=mDzX&^(WGE@>TD~c85g!8h(cv%o5`PosttSDY4C=tj|GRROjmjZ9VWGEp& z%C{&sq%bNdKg>Vf&okcjcAU$t&>L4htW0j2=-)8ZxT=5pg3bvmjUyInUzmdusefst zcGTeXms*$!X&n1ZKJKUqz{3MVWskm{65}O?5zRO#p%5PXrUH3#bPZY78ck zLdXCaCzL_~?og?BXtXela0We`PLE(R!dUCYGOx|oJ|0P3z$q+6vf635aGW3@W{Ut+x$L(;L=&i0-*Nx@{%;JEt;!ph#I;MJ>ScVG?DsMRd@?TfNpjePR=|XsN|!k$ z%MeiuG8>54#zMs)K{?DFkF{51WH7NOBI8J)K9^B z0-v`369#Hi_LDRfHR=5|=>s(xh}usX0w1c&9jVJ5YbY44&mU_*>>o~22#pB1M0eq` zXo6faNiLnDluc91r)lN0jOuw7VS!V(ETXJRsPo+V!G>aGS-P?$t*tn14DO$cpr|uj*)C)z!SNuVrhfZFf%hrm3Ner7_@YW#oC$)cdlT z&lNM@>u4(@?|po(oBP;W_}N+dqaCr)N`4>+u(uAjvk19i5enE@gxXtTKw=TDS{nOX8~a)tdYg$o z3PPu>x>Zsk<(CLK#T;5*V{K}Eb#g;(8jY08WtW2w@p;ueUJX}J%M;g0+Gx^thOCRN z=xvhsa^yWM1xE8eExm9He2CfH&u$rLY8&Dyhxl!Sg0>;Pa#+|gBIz2F^iIi#my~0x zo#Sg=lN&u#o4pg8J!9+LL#rK~vvSE$6Tg=(>}81hnBsnxu$RT@pfOu1jAk-jMy5+B z6ak6ECy{uK4ctazQ)6vY1CdXnG;?T5ep8=pU~6XU<e*Sjv^>=%}eZTkaCo}`; z0~iK~(f=zS`nO;Bh#N$B?OV)az;AGV!JGzKa0!EmTMj<-1}+6M1QEJH%Zt4aZ?I83 zoOhVIK{wEWZ?NIHuReTuil#b2^8WE2NYd-=H!n6`{<8YZPb)wFxcnUWe(}d|7k>D5 z=G!NeUp)lIp4=Y+TY7YN=;7|*gPoqO)wboimc^O2#o4y`Y5q_@y|b-S$W3n`1m|Wt z$3}Yq+-d6A0WzCB=8W*h9&s%BOSZUf=YFYyp5H+kU)G=Yw zu(33Ez2%;okj zG`6xRYLn#`WrqfPc{^VZcD-7a64J$}m=HBg3E;28eHmJs=pkgHIYW(kJxGR9(HI$K zLgIW7pgSN#{HzGx{zw@%hdNrApG1le?&hk7$?9_B3!;3AV}gnz1M~0rWe57?1o-6z z`Nugsd0Cq|n;JNr)3P;CyP|vAM)SCp`cZTBBc^I!8mk=v8N$cNu*GG6*E#X|S$t{z znWOsXw6c@BY9}<+L4!_es-FV1)K6%rQ;1jE3<0~;EGRWh`%LEu1CY8VYn2qFy}2uvt~!H8rs0pvqy2|X@D z`-g9QYC>r37-m8!i3R~eqhqQwH}FOEAVZi5@nX~3ZVtQ>OyG|--Y~$7S@`w|{`gv(1wv>!GBOxrbkb7x)e=0*$g4!7& zVL?n>k=CmwP~&x)Kc|hh`|o53fSz#o|ED=aA593GJq_P$e`)=}<^F0i%0@F~t(mkU zZ&*Y!RD)zlShWH^B&dYABB(mNpAeFjLk@(ufW+W3^szF8O&D6{lwv-FNWB zngBB)VbvzKSrK|1+p-AQz&3JR7h(yPWADdY3ac35aT)E_hr)4jb&rx@-a%qD7A8oQ9Vd0YpKkX6sJf^QiO$x)U>erq@bE;pVCm*(qQL8f2T~3 zYst4S#W`3<*_ub#nuT033chp}2)c*}ykO{WW8iC}2a@Dvsp|!XWUlLGs_Sa3?Rrkz z&Dg-x)Ch1lIp=0_*4fzb);T?=v$_rjI(GWn_69okhB}TQL&gTq=I4OhW(I(>xxR~~ zfvc5)i?x9>faYbN1>7zgd0sa4xq_9Bu37k9Gxxu0;eXXU;EHL$Wz)dRra@QDg07hd zUo#K7W)^H~9s-hNZyDlXg>VEcfG{LRR(Eb&hdG}Q1zazLx?Bi!z3AhP@bkPB=zTfF z_i9wILqgc?lxWwic<=nwfYPkc>bxjoQCvfDBDo})S(U|aD3s93B=k}RtGtb0-61A) zNrBpK8KFl`=uy;m%Bz*q$`(<%LQuhD6cEbd%ksiOu?fe#a2M17v7O z1hH#W*flQd#^{}r4$R7j7FvduT7mw>md+Wea#AcCV2OI@0Kb#UZKtqWNKAPnL()JM z)B`jj31CU-90i-*%xP-l33?==f#$ZE-swln+b^E%zJ9v%`swzYr#o-Hx%>9J-M7yk zy#3+353k>R_<${9``@u5{Hep>jsKIc!!iVb1APKC!d<*R1k(0;@58TqAD(~s0M3MK z6Yf|)>{p?{6d;FoNFIH7fA`&+jTg^Xo`1je<9CZcfE9f+|NYbH@4lM+_VM`Bhhtwq z05KYRurqjnd*JS7-_}~s`f~UBa_i!ZWNM5%)YqtN&S6sT6y@EHjl2;Sd@acTYM}3B ze{V~7XOmlw=bY@$I@lUH+%R^yVFJL8wnbuy1}4;Fsj$dxaJvjq&+&Tz!aM?O1!^mDD#pXsWr*_d7Qa&w7| z@=Z_m%}DdfO83r8^8~WeJhM|hax**&vVE~RLzoPe`&WSpVKPLh4I~l*u(A-6p?wqj zT}=ot3(@Hj0E6+*WGHffs!%vKLkI*Y8f}o+^m{nbDhH!%V!e!`}eHkK+392XgHPigsIZ^GRh=7*XW9P7{4j|hHKb)0$4@K;V);~L#>=O=# z$?pFv86xd;A{qMRSpf7%Wj~kzZMW06(Z-AjWJ0(MwNmlQ&_*+PO+i|bHLOVLRwP7V zRZKug2y5b6jGA?E?FPoW2&h>T)}T{b1=TBjq)iZ4A>mgp^D1zbKuypQ_xN%%(4g`) zM8&$G0(Tv>g(HCNYOUJa8r$9)vEKq6kZB#%koXm7GwVa*bpU=Bzt$%9qN0~JXFl}Q5?iTxFccs^L2GEkKaaj+%@#p;xynzW&s^dUm}AUeM`eFz|A z3={XM%N!~1%cz*9mQGQMC&*w< zm@_pLO_EAysO1Z+nr$g2Yeoi_U;Hr2Uhrgz(19}MZXxxp<{eJ5i*$8$RHhpfG!x`Uy{&2ySA#yT$N zv;kLRosXF4xSQ*GS{Zm)8+zKD^}b-_bJ57}l5xNl6OgCC>t+GA<^eY>10Adb9Id>Z zEZuIJyE&S>IhecHnYuZcxjUG7*qgiCo4VVXx!o}Juru|7XlvqWYwBlb5#(qceDi#m z>*Yv~>oMNf%B{H_sEU(RMa~v>K^7R``9hLEI`^p5wzAZMCA>ff*NXO z6(ysZnnh&fQFvucNi|1W%a#(@5&~OHU%%?kBRw0VU8}>r>!WMm-+R9I>c!rhH>jZV=U?DUfA*zn zM=FK=m#X*wpT6MJ;DdVLLwNP*0MH}61O*B1KtJy55iU~D2O=&;Pxn4N-urO>!*3g} zf0_U3yQ%M<0OQ|09)0?7^y`PCUp*LobZ_j@y@{_LOg?=y^W9gAKYh3Q>yN81pRd3E zW&6#myKi3ayneO(^AE#M?saah$`__t!+nG{c@dwT%c5pc8xm_P!%GT6^RxZZl3k)B zZUp;-GhGbuw(|8j=YGpKKZ`ZmKm7HB(QhA*eEVqd>4UzPfK8L4lZtL$Xt15POzF}#ieZ^eI-_9~K==P|vaRSLu)vNsp)C2W7lbq@?ddUc- zXs|KAmzWKD)LE0-R*@(xj*%2ZO7bJcd6AO5Xi;vI5KXC$5*H=Vk^}pAb?6uN?c0W& zsNyJ(iWuLr2=9_m&(dJ8@(|yOP`^y~n}O#|{cTKqt&Kb^&)zc810TAmebQR%xVgqr zqcdOXqn(G2Xq`Nwe&io#zWAH^m;bGCECK7_`>w+2@_6Nw21MLgYel-XK zw;za6EEY~An~80!sG2by$)O`K4Z`X`U^d(+J~vvxix%>*4HY4xJW8M$@nq`;{S;49zu@$IzyW)iWSN!rBG!Az>}Z5PSbzdc^N@xW$G9SfaFOfLpXmXLs(@9-{JaG89G3T$xu6er=0J#>T2rE+|AX!D@ zamb4Bfw_YO%kc?JsL-{555{3iG($%dl|YHmklg<0+dmziJ5+*F3Dci~&t4*?ju29Z zL5XUThd_EN5)qY%;p*fepeA*=2JWgDu1y;uARrm2Ngb>O(m;%`gG$mdAA*P{$chdC zJ;E7p$eASN%}@(hnyQzZs^{osU_z7R!f|r`XhSYua2jtYm?9O;(#qEO_4BN%QS8WD zv>gE2OfsvhCcUF7rM)5<=&VfXsY>gsO6#di>#a=du1xKO#;R0Ab$VBIW@mLqR}G47 z6{&5Nsm*1{lEQd?P81kYV~j5`%(F7kwZ!Lkfrmq$yM2zEeYWe3^xM}`Z(U7tx*TJ7 zKJu#7olEAy7fb?ez>UuNSQ`3R82VTmcw6XuS?GIO7$PjsdRQ8ISe^B>GV-)GcC$F= zVrB^c=)7&BcgtA&mXS7?kcWw$yRojDv97C;_5sdDTF%B=Zsxjfmih<_w67B2X=&hP zZRiDhbkW%RGTIx-`J>&CY)pLM=y z2;9D4;CkM`D)4wu#zdLWC^QS!fKYFip8&F^Qu_f8YZ`f0g+cr z=ho2qM25J51#;HTlJp4_Lz2#!_THtQf%SpjwSnIC!JhS@j^)0#g&yU6Pv7R)#Dn?S zN6V|yDhWDN6T-4TeEq(gs^|as3;Kif z0N_JEVbb&L!`^ovKK%Ip{SWWofBXLJ*YDqbgY5!vAVV)P-eBW&;8Ku7BRu%+hYwHQ zzkB%Z?Y(zzcHh0(dG}`f-K(v)FE`)(y7l^(2k+l}_2C1ys0~efdW7+KKe@m6Vg2o| zi@*FZ^V7GJ&%PSNTnhAP@WD)2IJsJJxQQw1Y>Ffl#y`@^vL=-d$I$F9$`fBSdU0m$UjWw^B zYkOZeN$|2A5jKqTYNmMA2dl{j8}nv(gb8NZIHPog3OYt7>pAVX?LK!$YiRrJTd&^YoBwJ-kr%;*10 z?Tf#w9r=d_I@unVA*4YVC*Ts3p<~*}gpTWIAQ{pDwAHkA)YNp;PU@;1)lvIQ^Yq`f z&iq{mzK6b=joBq%kFcWL`0DbwnzESc@~E1Mu&S~k(4fjPOol20Yif`T5o?3%Fd3@< zy$oR*gbk4WPKIzkk)cR7J(5kuO(+VDj;V&mup$swr8`)}b1d%r5ai%SAWT@%2zwCi zLWH4`Aq-rGc>fa_isv^a@fayhlpIcDIlHlrNoe8_+r{Kz1#MJD9uyG<_|>E0x=u34 zP%Hdy9vUViAsOOT&j?Uu2xMqMQ1c)6Iym<_*mv8(c#r_?C*VNr`xvOPgNcsX_=5l) zMkPbwKp;aZANq3{+Ey}mvF~yS_HGAjw}T15BM|R)vUWR}ILL>vLJ@cp$k5@X_3*-V zc_TvB0AjQz2REwUkTq;b>wry6hBl=rA|Ddff)A~#W?O>;p+XTt2#t7x&aMYR!A)gV zh>q`A6RFBV2gY+y4MG}(pNfA-iSS!!)C>)rp|_z|9d@97L&9&NyZg3;q~{PS4MGWC zOoG4HF%#meH0Ym!2Ieps0`NT~L5cROL`aEdXnCrN5oSoUp8$7NdEQ}#`jmre6FGaL zArqKv$Q&c24pt@%RwRH44OJzM)~0|b0i(pUPZ-90Xb@1z5PoXgL4639p+8WE;%Gf6 zTFwM1Z;n>Hz$l%e6i$%x#~SlS>vKlxv$1p8a}G4~VQ=o`VCmyv?d@RYWpC+WYwmi@)b)z7+a)8! z#dGdxS8hYkD@NW|jeW11_}ZHITsQW)VeDgT4`_P!@Cm$o1+68 zBmL_`J*)j)%Y9voJw1zk{Y(908>0&k<~F`wfBf^q=fC~<>bDnf-n|BXef!JzFQ0w$ z^S9sp{M~oI{_x}LUw(f3>eYL+JreN0Cq4i63)dR(p|9S)d+_?r&ac02|MK(Q7r%V< z{w-JzxDKvL*eZR*7}c_49>af1LaI+3fT0fcam(UwQM(`r8+9Ywh(f%fJ4(@ch}_ z_fMyvKJMS$=-yuI*j!O8&r$ok3i#|Qg;>5cJN@kIr58Ug{QASfiy!8G`5vTd{OP0i z)kRK!SG`m~k_x1~?SoT8b)*_sHwSAoohugF?w8NTxL+O-)Qw>WP95wsG)yj-7uHR& zD<_!c;6tOd!eL5&e`8KBF%$kdq%2QtD@$l8j#CuIh;wlnijWk?F_S@t(5dzB-@Yd0 zgqKFTRL6SPMElf4`Vb@i8>52>VSWYPw-X&M#n@epw7n2=#nRQx;F|6kkRcn*6IPnX zuwk+zI;W26oj#^}@~GDF&(**DoBHSf>-1;;b?USKRy*>U=7}#gPaj2tVjpGbxQ-fz z`Y}C?6MC8_L58%|PwHr%*493wsi&^4uX$Qe^QgAk=UQr?>8O9EqwzN#^^+FHSNyz# zb2DSBN@J_bqiZVeRFnn-Rpmid<$+a|LA5o(U_wMfNIfyQp&_{8)3Oj~5N<+;$Hfjz zD4NX%qS&lR4l@cI2qO|(MUR(-umLZ0yaqC%k9@2NslZhU$q?#~Th#vJA30<~g4lm1 zL#l~Hf>=HWJF|?I!66qg8>$%u2AiM|)c1%Q`-OD_Lc)-+c1+UH(Fiis2EUt!WoVRN zJt?S}=GV*$YZipHi$cO*GW3@W9nv72zhvky8Tw0x{*s};Wauv$`aepBc9hHmc9l$A zO&}s4>g3$-YPt`xlY?9bn>_T-0B1r&Y+da8-5kt>K#BfThPc~G)=oPM`A`SvE_fIw zUMT5g9d;lbRSQT`I|Ca;Q^^o^76%!fLLw)@Yq6vecOxW2vieO~-4-B4aZ^%<`_LNr z5U7t}f22$R_OmZTIG`^=Bq-|;MaYNNMO7QXr!s`%!7v$)>aMtE`%vQsh>-|Q=ms}J z-t&jEK2C(Btus*+Ie~9hik;5FG-#tUi0Q^7$zn`Y$fD%mujalGBzyvWJQJ+3uhZw`+ zI9wt!@Rm_*I1C(U5IfI*qz+wT$BAIe-|Etbu*GgjjOx-yi0SAIS`5^oE@P}7^ebng zK6{jyIYP)7CS>kAQ|53T8dDpq&z@)mA1VOAkkCevwHZSM#6V42e|1`KWeNxoq9VD! zBBdW>s5}XBXz#5|?x}<%wYMs@rxJmZs??71TrzUKaL)DoSvP9~5Ghw{eUFQ0eZhyW znII*)Zt8R02zSG`5 zbpr_UvJdfgj1G27jSa|54k^fvDlUjG%#SN7h$|~eswhvbu1v3~&L9wT8p%a8RwY|N z;7J+;alib#~)22u{0 znonnzFxh2vb}55h#^jW<5M^wDUBYIUvf+|l#$uN<0ZuucQ%>bn()l%1VKqfiO%_(O zl@!^Kpm(`r^zQKFqsgf!)3Z+(7QS0Xe7ijVbZO?v{1kGdvA(r|o|WF7rJnA^?!LvI zp_PG&&9S-N>BR^0%MTV8?=H;m%+GAj&TIg4b6e1|y7q8;=c{{V|xKYcUx(>K%4znyvh9T*ZQ&eE?xF8%t$;?K_(pFf-Z z;hXVq9}PXe*LQETYiqT0W4U*CWBlufOTYZE_3qW?yH{XQYp;KXo`bua;?V(yQpQ%w zng=@vrU$9)hLBLt>z9qL+vwadI}>=rcvMInMW=6m93~qf7c7YCr#Y3Atcpoi**K$Q zoK`$aDI9Ff?XF4ds7O+lC$yBr$qQq}c~L@aq)ZAjl;S@iz=z3RQ*y$~Bb^CxKExQ` z`q%(cY%o0`oEYw3>hD$-^hj>El{wj%%x(&`~>~tA1P; z$PNNJztmR$TwCoQI_lsuz>w5UaegVi3aa7#cPRd&u zX@}pP}j@|s^^6@iz32*tjfu23d(v5NCtJIg|^vB-)y6AwK2AoOcc?| zFUAhy(^AkU+-qmv$I3z=LwCE7!9WCqc`_tEkfAks<5m}Eqm8}|Ce#JpIQP4`_f&9H zB_-?)IFN%3-Gf(kFm{z_4cb;K72i1<0S?qm+EkD?<)jUHBOW(ojhl#uO?my6tbSWo zk91}7ySXeaYI7bK=q!Q4UA1`?Y5k_B_$jNTxT01j-+-+M%=}?E3d=3 zr>MWz+yDu5fVZt9AF5s#Bi2M!e*~4FuqxDwpkf)U=ntUH0tA(7!t!-t#fGqAT~x7# z*0{kXhM*i>3d>Ok$ob_f*s_0cERZ3*1cj6fU&w}84t5MJwy6>aTSIqviV~(!c$o@v zeC^x8Q@A!Ee_|EkEU*d}7=?2*te!;8o1^Bi*Xoo?nVB$@;vRcTx~O5ZPRXFO}Tj`!SQ00t!22ad6=#F9a}RL zubPEkF%7UW^0hSZvogf?QZn$eHt@98_q5V?x6*U5*1c(^<7BCeu+VX|&~dWRy=kd; zYaeL8X`y?|Qumg*wyU|WhowHkO5f+wxqz!C0oP1J>@0)r%!6;31>G$BR{l;_eoofDPBwlwF9h7a z#^d${Z`aE{ZdU+bk86OB*L5GC8$Nz^KK>5gfe!w6Zihsgsqd}?xohz-GQZN za}VC$d-VR%y|)jxU+pgaxH|jY!sJ&o!}rJfcZa$+`?^-Ux|h59S9^!IhQ_u>#y5w@ zH%A7S`g`Vjx@WrEC)(R5Iy)x2x~6)%rh9v4`g`Yxdgq7xm&QicXT~eG9h&mP_V>FfJHJ^kv}@1MVW1zPjJ_XX1P&70R>z5Mn2w{IZ_k2&mB zsOt0K!#i}c+dD|$5{&2P56EmliFST_x%TT%OV7UtFIj!@)7EbdCi+iJgGefMJOmv6_ue=_y_o0(s}TX^}y%B$xqFMnM8_1VHN zh`FD>0U4Tq{@v2g-_QT>&A{EQmW65A^f{YJJ@4o&O91Fh7y?3w1?r+H_1_Xnx z;=z{I5oPCyvaB}G&GWjy@Ad2yzv}EewHZMJ+{!UbhVa#7k5{I~=_QNe##wIlG^Yxf zVwF$QOMx+J;ZS2vA2Fj7%^gf^DM^r{;t;9~iHl+x$$o=;Rb_~g8$pQiASe1$69ec; z!OWC9?9|A{=m0{PPeXJ-U6fySxOYjgYr6Xl|BJ>qjkK@pt6kJRZKiqRoZ9hoXCR&g zjMa`CojG>)SKj%u9-j_I5^rlWRL z7aRypAv%sG5^0{))I6!7bxKX=w3_aj(>j3Kff9Y8t^S#o+TXO!{HOYr($dMFEIE5TRqee36Q7n)i1}gc0`k<;0E4m4c zhaJU5L^iP_IqV1=HYt`Z|m zZVph%&^~D47;Zwbs(I6hSOFh%9jplS2N}X93<={z&;bMso@K{#S*aXmKC7{sQA=l3 ziCEPNPED7fzF$J_mr~p4Wowgt@Vg2B(3q5w#>K?BW_$H%E&6nP$y@- zmA=)^-0fiRcCv9L!hjqeN8p7etWbmv&$ZKbmDHU!>UIldyP3Szj7blmKygdaxCJJJ z><4_PVM|3lfCOkC$Uk!6KD zsVX($qiom?NgHUu4jYUEwc7WaMYQ{oYLP$Uk1~Y06#kxrr;tA(A1YdA7caAlmRZG1 zphS#z$id4^XD0P2y|je-V7R#%bTX<;vCH5o+P7% zZ%B_w*txc(tVvSV6y)`p6ZIKm#8f0h)j$$3RGU0ZNC6ERuSaF4F=E;{0fZ@iyf$sT zCT*-bb*wsNtR{67Vs*+WlA+|`$|MAu@trVGo(S}pC*bs!#p86B$90y*c9q6L1UgD$ zFycB(;<`)Yd*G?66pUnuU_uy>z$K!;Dy6p~siz{TyBv+aVN#XYRfYixsxu|EmY~BU z<%J2df_O<@oH!>|goxv1Mzhnx>F6A{pvGAL`Y7+Z2ybG94{;dLX!!#3&mmFOGR;nys}u9<~iH4V9H8jKNi#U${GiSK12&kJWg&YyKhg&#v# zD}5J)9zc)s)A!%(e7*PN>E1WM*LzPNzI(j+a%=Y6xv@v%y<5F)i%R*Fj6cxC@8^mK z1@a-0d`K)C6w3#tieb5YSgsguZXIiD8*c}clO1hS-O8Dsj)j5#wegYdx$(P;lMhy= zAFoY6S)YEgG56Kx^0T{J&mV1l|8Vum_Uhy9yWc(i=Ebi+y?*`j&6`)h{r38|x4@gX z?|yst?#)}sp#|~k&6}5RpwH`HUcPwr z`@4I;ZM}cB_U4y`pPzxmti1Sf{q-+vuYXy8^UKD&ms=m+Z14TH@!|F2>!0Ud{4o3C z`)xGf>tz2$scUU z?x{^{uSjky1sQ_>(?tlf!^MTMj3mE7UM;-g{o7ZpobbkYFIsXSJvo4x639voVW)+W zWBnSUd`R&B%4lCgq<49!Tdt2|SU@~+H@1d)C zLQm_Mp4JgPtuJ)7zR=e>a#ml>#?r>q%_BK6ysR|3wkCy6O`wwFDC8I_C5A?cVbEgP z%oq+cwuv3z#E#{1VlZNPO>xLV&?psJ63^pAaM|G;Rv5r$g8hUts3BAm_)sW=63V28 zGHG{M4CoNa1*hRf@%hmr0X7!Ki{x`7`4ACNs1$S{}%SqyJa@gbwCXqz1YGPCg8I{dVgl-YJM?!05R;*6-!|&#AuV0M_ z>!xH4bIp`V5phaLoE8vg__Yh7x+PH^lA$%UZ4YI=nF@dmt>a3BlKol{=u7LzWnYJv zfF0zx5AA}xU}Yh+5UicK)kb|ZD186h&+s{(E)TEB8bF3Nu(Hz*nk4kkWe8kKrCGGy zR`PBuWv7L--Q2jTK*qD70@Z#%eYPV4#|*e;B3EL)q+)w@XKw`7ddfD zMg)(+9cUXAr@4Mt(XfND+uXPd_R|bjr0THW6Kg@9RDZXnVYdZ*sNrr)<4!ZY6TJcF_`k*e$DYUbQzj+L(Kefvjkjk&CPdt#QLvw1FF;Ja>|c7QW5w55`S3W=%F` zj)M=?q3K5>L^LO93>>IF10-pp0mX4*I)VU7lr~sKG+Lx}dSjq<9B@TdxRFAZ_d z^>xhhvP*Zrp6q%RNOHZBnc*5z2I3*q+GckHc0ZLLDCTLxdV2)t_UbII82BIuE! zyN!XnjXvOEt>=!)Ncx@@`kr7y=6YV1Xlo^3YXiUYhQ2ls^?hyh{2^Y@_qNgXxv1}Z z<*eUTBcE%=$cJv2``cRuIN10h&igrB@Nuy5aj^DvumOA=&LbSpdpp^9IoWtSo%aSY z0&ZXSb-wI})rY)2uX%wFd0+STwe$A3_X)7~3vvn!z8M(k6cTtdIOt|r$nB^*F0tY6 ziBX;jk#6x3ZgJtRF`>>ecW$S~c@<`cRusn6mM4;lnH+jCIFJOCh*vFOR|r_;LT0&; zQ6^?r2-)RAP8m`nW-*6ZOlK6)ImNW5Vz#JK)Yc&EAd9-G!d{wmh}}FXXqlCEEw>Ht z_RoAhwfcPd{@eTCARoHF{NvK(ttOCMO4`XNTt(Cs)^IHa2HA*5@|X z=Qr19HddxLmuI$CN0w%r2fM}H?b7}(S%0^zzem#BDeP7XyW7P*9pb*u=CQ$!>G7ep z#f3-r*1!9D^M`NmJ^%5^ug{;oe);pe-(I548_`%80JijEf2zBWyTKYly*-IMX}pUk~{w($CgrQe?K?4gp< z_PbY$FP|;F_#QN9`IqlzzJD_P?D5ji->v-oY~$sRn=hU(eEZeZqkEGN?oQm>9@*aL zTAC9K^wvv76i@f_M%%bU3RahZB%?M6>Zk%DTS%Z%^Q#IYsxyO!_%&lZ zG-n8xp|96wz?QxF|n{ zk>ESTtARJXd;5}|6Glt)W~K&$2{BUw*l9uRv|wt2FDcfW67Nrn_p6KXsSNil47{D> za@GHmsiTSRH6v{seGN11GbZ3e>L&o)gaE@+N3@T94l;E5$Un{;{p`%q&(%uaApt9Q!y>}gYD4QmS{d%Lqv4wr+1GU)UqGAV^dO<~ego7gE_b`qD9%;zQxcqsy2 zvXCFo=f)uuYKp_QLyQ&i;>7$I5if$rzQbV#vuGhqS_p$0OeY6ZNg;G{2!jHbAVVNY z5lx&ZUK2JDhSrfG`@v)gi~mf9AmTm*(sQ6eha-T?5I#NVk6(U)6&Lias7;_ zepXbsAg*5$*Z;?=f_xxDXuM3NM7R~999@DBwV>Uo!G6$AiI@icj{V~}K!))7&e-yJ z#%3$!LBHVrZ$F{`T`mtTOX@b-S!5z{A$X#k!~)TT}lQpamja3xY%QFRi;(W+$dq5g`5{z}lD zSe%}6q(J~!QEz!X$jwkq@^CGh6^?HZ03a2s%NQjhMhNM{wMm0D34_%M16A=re`Rcc zWn6DXEYJ^^Ky_SSRa{?XY;R?3Pep8ZMSK@fjt1j8%Mv?E6M)Xrgtp?imZI3^!kCug zIQW+2V2oiDc>ZkQd4m8O{Qzr&0Be1JYdwD}T|a9*5F@_}`hJ%TeJ`E$0j?PN zTs8K(V(e>+_R;nRu3LCsHv>>^Yw2~v(%aU`$KKk<9*Yh(-rz=fxyb3f@9m3zu9v-C zuXws$adW-o3b>&NxwqGKe;>OLUxyHXhhQJOK#yyI?$?3HIRLw3^*aWHb{v?G5Zs61}~V)k)?Lu$pJ3y&GNQ4@aiIo)~*D z)U~2)omVJkq%Cvu?v?hgrB>yvqIpa#?QarxGkG0!u9C)VrZAhSoHn=wD-sBL1;Rd2 z(}0LQD3(ks+t&trcP1vDF3obtd>?>DBOt&e}TIPze2{Qm6hqow6C# zjc+ZCt1`hBQ4DrTd)md_N)gbd6n3@=yIKKWo1CkZ3A$RuJ?)B-zV_+Sp2eB5 z?X|f__m;nTvhn@54}SgW$?IRg{_W+rAAb7*n`s21fyZZiAHMtW?(6q&AHVzU{=46{ z-@RUc^ULDPpXPr3e(}{0+wb4p-Ftg)@9ozgK76~kxAogEV_)qKJ=_EaA8hpBTkG9f z9=yLk@#OB(4^OvV{B-yAuaACv{p7bdkKeq0@apA*7r#FE_2<=RPuu4w6;mVPsX>q- z@njcwP*E*xsN%tI5RKbP6SYuDH*&HxxMHMhW1wZBqh_jc661u4 z`Uw-Y6X(tx(>?KpI{47h&oI6~GIab4jT2vJo&p~_qIu>B$Piu=($GNQGNh(;@(kjX zn)YdRZ8cCLbscpzT}^d8Ej4{@HA7uBL%lQS3{C?^h9}M$o-{H3%s~I|hK3h>eVh{# zLQ6|BSjH26~+gOCiNvd|qgOvVW3u%oz5`1V4o`OyO8Ls(@95do2h?LUO?Lc{}j zQ7EeFLx*JOF!*`(s4^5M62Ti6C#{yG3IMdEnstN8_heFLhp(3hm&8O&hLByM zLphYpopv;t`j6~_S0TruZ8wv*6%9Bl`#G#c0P-8mbyPEc{s@{6gpeU0`qylNn#ex_ zGPEhL+iq^yX(8QhqwKa)Al_>w-ETwOQ&|ys4+3(yb-=z1HG&@fu9EZ#2PG)@c9?{L z80||^?Ut-&TV4x5j>k<|&8GBEfSzz`Lt4ElIhf^*Oz5rx4cMXaJ8Ts1V7Aki6r19W z_r$74TjE;PK1ul2N)Uw~wFyr!D=J^-maaFI0BcRfs6NE{cVH&8#w%F^6XFAragtlO$B5!eaJBL)Jt?_IQ2fXkF4MF%cLcCJxue4OYhj{Z-L@mC*y$ zF$2}Hc*NU>YU73oi37Ds12sT$e|1t{6%LxK)Kd}PTbbBbmE2dI+EJSEc}+ zl_~HicsoW%RVqeWM^#2gWqNaIk}xNVn-$5)h+w9NkrD#yuws5ym}hB_OKG4>WvE9* zs7HCIM@g_7{0W}z&iGY>m6PkVE3M@t_k%Rtu) zk$yK~gPjt?oYSH`GUI(RrBpLRxKIdOa?R@?hGI{P=fI+t3c;{yI5o7qWb zby4^O?3Nknz(&{bM)$xxe+s#}Rchc&${Htbrz}V@OFX1t<}N*U8~_HPO2{ z)Sf2(gj~5kFz|4C>en&wMV(y+rK$9es6OA>*bxFA3S~c z!*}n0{_exi-@W_!(XY>TfBb6eyT|kQH^7iamZt|7Ci-SadZvfErv`hchdamn75(k9 z-nQ1E&bHyMwvle-Frsy+t7V|8Ww5Jtu)AfjThiSkXqPf2T$+H{*hH;kl51!U6(mA= zV=cs5CYdVca@*yyq3+hHp^k;|{>_EShg)-B-CKV4Waq_?kKe!g`onL}_V>94`@s0{ z49y(+@Es%{_P&4r;l~djetrM`*S!zhZ+;rSzuvh%*Sa*(yfEIjJlVN6+qE%2d~aj@ z=kFfAdkN3J#^!y$-58JX#s2`Ljkx9Q4_ow$^ML#AWBj|U93+{xMy*YOOpGI zU^^SnD`t+C=dPI;Tr||O(owU}I&H3b%1q-V_z=jD!Rez~C%)7;_PP3z&(w~96@3nF zqyav3664et;6s|~$2Bn%`hyHXa!Ot6w7S+AbR zQ#)sH%0T~^zTW4$I{(j^GykQfdB)nt(!rN>qD#eAQRjhYdsr@UgY{fYGVkE9LA=Hv6;w(cpx;W z-V=k(6GHaGLxgji!nqur2refQX!;1MBq15%?VAu%pN~1Z?r(hf(*4# zOXl0?^DWeQ1$ACVS&&f|WsDU$b5+jxONM^OUo!NU4E-fTf635aGW3@W{Ut;H$H@@x zI$%E^1?cxcJDNGv^6?z8Pr%zT8Dd~lg|I!NRWd~WI83$#GE}#&WUgZ0PBj$?Td?*C zAW7T!!m$?0h8(R6I{;Ufbt&S&VAiD{_nuyp5dIYCbMW9F*?$#!KiCfj5sUCm8+MvW zJ1uD5(%m-deI-DCpd{Z12_-@XpV;&`22?EJKIpOfjn}14Hl$CH zGG@qGv()T4YR)_@XAT36+|l#rXt}dgw4`o^nl(esn4v)D)Ja6jL}T)JL(*tn{4gPI zgcv{GkO(akjj6yCIUU|M&rr=MpQGmLX%xtg7Xs^grmZ!^0QX~cO zf}ChhW+WpmoR$>Q7#CO<VT7px}%AP zlc^?f%S`i@h4w8Aotx&`PNrHn&9q!?4E?T|`CUgx)q33k#j$X|0j>kl!o$we3(Y#R z_H(fDceL@x53fZ>h1i7Lx)2Q9JRfrVe7NhSFxQLWZkM9HugCb_i1W8k3ci^d=8_iX zl6uEEHRM)GkW(tO1m8>vxs@CW+y;_DZzY7>j0?RL6Lu>)>{e97?dTY{*hH_mG{20Z z$Qo)MT~s4bQaZ+^gDV|l+x-)}L(>n&mcNRL7DuuoNVE8*^fo>=^2R z7U+W*?obZ4w+|>g29)i6ZOY!(mM*!XLndw!ikd~j7Li0Lm3GP%eXY&?ZHfV zS8rb2fBp01lupu-4*?)UW7NV?O3`3LUUyA;TSZEHO*%g#WJrKkli@PNP4wlb2J%t^ zno#V+}fu7b`NY1Gl zo;{|k|GBpImuC$>Gd%k@eS=fyFWC6{-AYP~t|OGSD2RPMj@FXSwxW*K!p_#b z&X$~x=Dgnals2h9t=_Yt#;vZ#m00ajU+Yh4xWi s}?(BM||yVqpv*LP~_MpO4xf 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 z

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

wJ!~8hz(@uuyLmaORTxc4j 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 literal 0 HcmV?d00001 diff --git a/source/amebapro2/API_Documents/FileSystem/Class AmebaFatFS.rst b/source/amebapro2/API_Documents/FileSystem/Class AmebaFatFS.rst index e4f492c..9bb201c 100644 --- a/source/amebapro2/API_Documents/FileSystem/Class AmebaFatFS.rst +++ b/source/amebapro2/API_Documents/FileSystem/Class AmebaFatFS.rst @@ -62,6 +62,10 @@ A class for file management using FatFS File system. +----------------------------+------------------------------------------+ | AmebaFatFS::status | Check if the file system is initialized | +----------------------------+------------------------------------------+ +| AmebaFatFS::get_free_space | Retrieve the free space of SDcard | ++----------------------------+------------------------------------------+ +| AmebaFatFS::get_used_space | Retrieve the used space of SDcard | ++----------------------------+------------------------------------------+ **AmebaFatFS::AmebaFatFS** -------------------------- @@ -604,3 +608,66 @@ This function returns 1 if the file system is initialized, 0 otherwise. NA .. note :: "AmebaFatFS.h" must be included to use the class function. + +**AmebaFatFS::get_free_space** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Retrieve the free space of SDcard. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + long long int get_free_space(void); + +**Parameters** +~~~~~~~~~~~~~~ +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the value of free space size up to 8-bytes. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `GetFreeAndUseSpace `_ + +.. note :: "AmebaFatFS.h" must be included to use the class function. + +**AmebaFatFS::get_used_space** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Retrieve the used space of SDcard. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + long long int get_used_space(void); + +**Parameters** +~~~~~~~~~~~~~~ +NA + +**Returns** +~~~~~~~~~~~ + +This function returns the value of used space size up to 8-bytes. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `GetFreeAndUseSpace `_ + +.. note :: "AmebaFatFS.h" must be included to use the class function. + \ No newline at end of file diff --git a/source/amebapro2/API_Documents/Multimedia/Class VideoStream.rst b/source/amebapro2/API_Documents/Multimedia/Class VideoStream.rst index d6c4338..f18cff3 100644 --- a/source/amebapro2/API_Documents/Multimedia/Class VideoStream.rst +++ b/source/amebapro2/API_Documents/Multimedia/Class VideoStream.rst @@ -1636,6 +1636,10 @@ A class used to configure and initialize the camera to generate video data strea | Video::printInfo | Print out current configuration of | | | video channels. | +----------------------------+-----------------------------------------+ +| Video::videostream_status | Retrieve video stream module contents | +| | from specific channel and pass for | +| | checking on UVC connection status. | ++----------------------------+-----------------------------------------+ **Video::configVideoChannel** ----------------------------- @@ -2000,3 +2004,37 @@ NA Example: `StreamRTSP/VideoOnly `_ .. note :: "VideoStream.h" must be included to use the class function. + +**Video::videostream_status** +------------------------------ + +**Description** +~~~~~~~~~~~~~~~ + +Retrieve video stream module contents from specific channel and pass for checking on UVC connection status. + +**Syntax** +~~~~~~~~~~ + +.. code-block:: c++ + + int videostream_status(int ch); + +**Parameters** +~~~~~~~~~~~~~~ + +ch: Channel to configure. + +- 0 + +**Returns** +~~~~~~~~~~~ + +This function returns 1 if the UVC device is connected to PC, 0 otherwise. + +**Example Code** +~~~~~~~~~~~~~~~~ + +Example: `UVCDObjectDetectionLoop `_ + +.. note :: "VideoStream.h" must be included to use the class function. diff --git a/source/amebapro2/API_Documents/USB/Class UVCD.rst b/source/amebapro2/API_Documents/USB/Class UVCD.rst index 3ea26ac..64b8dce 100644 --- a/source/amebapro2/API_Documents/USB/Class UVCD.rst +++ b/source/amebapro2/API_Documents/USB/Class UVCD.rst @@ -32,9 +32,17 @@ A class for USB UVC device API. +-----------------------------------+----------------------------------+ | **Public Methods** | +-----------------------------------+----------------------------------+ +| UVCD::isUsbUvcConnected | Check if the UVC device | +| | is connected to PC and | +| | video stream. | ++-----------------------------------+----------------------------------+ | UVCD::configVideo | Start config video of using USB | | | UVC device. | +-----------------------------------+----------------------------------+ +| UVCD::nnbegin | Begin video streaming of using | +| | USB UVC device for object | +| | detection. | ++-----------------------------------+----------------------------------+ | UVCD::begin | Begin video streaming of using | | | USB UVC device. | +-----------------------------------+----------------------------------+ @@ -72,6 +80,38 @@ Example: `UVC_Device `_ + +.. note :: "UVCD.h" and "VideoStream.h" must be included to use the class function. + **UVCD::configVideo** --------------------- @@ -104,6 +144,46 @@ Example: `UVC_Device `_ + +.. note :: "UVCD.h", "StreamIO.h" and "VideoStream.h" must be included to use the class function. + **UVCD::begin** --------------- diff --git a/source/amebapro2/Example_Guides/File System/Display Free and Use space of SD card.rst b/source/amebapro2/Example_Guides/File System/Display Free and Use space of SD card.rst new file mode 100644 index 0000000..a48e3c4 --- /dev/null +++ b/source/amebapro2/Example_Guides/File System/Display Free and Use space of SD card.rst @@ -0,0 +1,41 @@ +Display Free and Use space of SD card +===================================== + +.. contents:: + :local: + :depth: 2 + +Materials +--------- + +- `AMB82-mini `_ x 1 + +- MicroSD card + +Example +------- + +In this example, we will be using Ameba Pro2 development board to retrieve free and use space of SD card. + +Procedure +~~~~~~~~~ + +Insert a MicroSD card into the SD card slot of the AMB82 MINI board. + +Open the example, "Files" -> "Examples" -> "AmebaFileSystem" -> "GetFreeAndUseSpace". + +|image01| + +Upload the code and press the reset button on the board once the upload is finished. + +The sample code will print out the used space and free space of the SD card to the serial monitor. + +|image02| + +.. |image01| image:: ../../../_static/amebapro2/Example_Guides/File_System/Display_Used_and_Free_space_of_SD_card/image01.png + :width: 900 px + :height: 550 px +.. |image02| image:: ../../../_static/amebapro2/Example_Guides/File_System/Display_Used_and_Free_space_of_SD_card/image02.png + :width: 700 px + :height: 400 px + \ No newline at end of file diff --git a/source/amebapro2/Example_Guides/File System/index.rst b/source/amebapro2/Example_Guides/File System/index.rst index e2f54ad..8d275dd 100644 --- a/source/amebapro2/Example_Guides/File System/index.rst +++ b/source/amebapro2/Example_Guides/File System/index.rst @@ -5,4 +5,6 @@ File System :maxdepth: 1 Read and display HTML file from SD card - Simple applications with SD card \ No newline at end of file + Simple applications with SD card + Display Free and Use space of SD card + \ No newline at end of file diff --git a/source/amebapro2/Example_Guides/Neural Network/UVCD Object Detection.rst b/source/amebapro2/Example_Guides/Neural Network/UVCD Object Detection.rst new file mode 100644 index 0000000..03c4c1c --- /dev/null +++ b/source/amebapro2/Example_Guides/Neural Network/UVCD Object Detection.rst @@ -0,0 +1,101 @@ +UVCD Object Detection +===================== + +.. contents:: + :local: + :depth: 2 + +Materials +--------- + +- `AMB82-mini `_ x 1 + +Example +------- + +In this example, we will be using Ameba Pro2 development board to detect 80 different kinds of objects such as person, bicycle, car, laptop etc using on-board camera sensor (JX-F37P). + +The following examples show how Object Detection and On-Screen Display is used. + +Open the example, “File” -> “Examples” -> “AmebaNN” -> "UVCDObjectDetectionLoop". + +|image01| + +Select Neural Network (NN) task and models using modelSelect() function highlighted in yellow. This function takes 4 arguments: Neural Network task, Object Detection model, Face Detection model and Face Recognition model. Replace with “NA_MODEL” if they are not necessary for your selected Neural Network task. Note that it is mandatory to call modelSelect() function before calling the begin() function. + +Valid Neural Network task: OBJECT_DETECTION, FACE_DETECTION, FACE_RECOGNITION + +Valid Object Detection model: + +YOLOv3 model: DEFAULT_YOLOV3TINY, CUSTOMIZED_YOLOV3TINY + +YOLOv4 model: DEFAULT_YOLOV4TINY, CUSTOMIZED_YOLOV4TINY + +YOLOv7 model: DEFAULT_YOLOV7TINY, CUSTOMIZED_YOLOV7TINY + +Valid Face Detection model: DEFAULT_SCRFD, CUSTOMIZED_SCRFD + +Valid Face Recognition model: DEFAULT_MOBILEFACENET, CUSTOMIZED_MOBILEFACENET + +Choose the customized option (e.g., CUSTOMIZED_YOLOV4TINY/ CUSTOMIZED_SCRFD/ CUSTOMIZED_MOBILEFACENET) if you would like to use your own NN model. To learn about the process of converting an AI model, refer to https://www.amebaiot.com/en/amebapro2-ai-convert-model/ . Additionally, refer to https://www.amebaiot.com/en/amebapro2-apply-ai-model-docs/ to understand how to install and use the converted model. + +Note that for Yolov7 object detection training from pytorch, you will need to perform an additional step for reparameterization. For this reparameterization step, Realtek has provided two scripts in the folder Yolov7_reparam_scripts, under ~/NeuralNetwork/Yolov7_reparam_scripts. + +Command to run is: + +python reparam_yolov7-tiny.py --weights weights/best.pt --custom_yaml custom/yolov7-tiny-deploy.yaml --output best_reparam.pt + +|image02| + +Compile the code and upload it to Ameba. After pressing the Reset button, connect the “USB OTG” via micro-USB cable to the target device such as PC. + +|image03| + +Review the USB cam driver as following picture. + +|image04| + +The result of detected objects can be validated using Potplayer. You may download Potplayer from the link `here `__. + +Upon the completion of the software installation, open Potplayer, and go to “PotPlayer” -> “Open” -> "Device Settings". + +|image05| + +Next, on Device and Format drop down menu, select "USB UVC CLASS" and "H264 1920x1080 24" and click "Open device". + +|image06| + +The video stream from the camera will be shown in Potplayer. + +A bounding box with its object name and confidence score will be drawn on the RTSP video stream to highlight the recognised objects. + +|image07| + +.. |image01| image:: ../../../_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image01.png + :width: 900 px + :height: 550 px + +.. |image02| image:: ../../../_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image02.png + :width: 817 px + :height: 550 px + +.. |image03| image:: ../../../_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image03.png + :width: 687 px + :height: 600 px + +.. |image04| image:: ../../../_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image04.png + :width: 432 px + :height: 482 px + +.. |image05| image:: ../../../_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image05.png + :width: 900 px + :height: 550 px + +.. |image06| image:: ../../../_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image06.png + :width: 602 px + :height: 400 px + +.. |image07| image:: ../../../_static/amebapro2/Example_Guides/Neural_Network/Neural_Network_-_UVCD_Object_Detection/image07.png + :width: 772 px + :height: 453 px + \ No newline at end of file diff --git a/source/amebapro2/Example_Guides/Neural Network/index.rst b/source/amebapro2/Example_Guides/Neural Network/index.rst index cb058be..ca2b639 100644 --- a/source/amebapro2/Example_Guides/Neural Network/index.rst +++ b/source/amebapro2/Example_Guides/Neural Network/index.rst @@ -11,4 +11,5 @@ Neural Network Face Recognition Image Classification Object Detection + UVCD Object Detection \ No newline at end of file From 735200695c7201c8fecae2279feccdd05d53235b Mon Sep 17 00:00:00 2001 From: TristonKF Date: Thu, 10 Oct 2024 16:21:04 +0800 Subject: [PATCH 6/6] Update Class UVCD.rst edit spacing error --- source/amebapro2/API_Documents/USB/Class UVCD.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/amebapro2/API_Documents/USB/Class UVCD.rst b/source/amebapro2/API_Documents/USB/Class UVCD.rst index 64b8dce..6456585 100644 --- a/source/amebapro2/API_Documents/USB/Class UVCD.rst +++ b/source/amebapro2/API_Documents/USB/Class UVCD.rst @@ -33,7 +33,7 @@ A class for USB UVC device API. | **Public Methods** | +-----------------------------------+----------------------------------+ | UVCD::isUsbUvcConnected | Check if the UVC device | -| | is connected to PC and | +| | is connected to PC and | | | video stream. | +-----------------------------------+----------------------------------+ | UVCD::configVideo | Start config video of using USB |