-
Notifications
You must be signed in to change notification settings - Fork 118
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #370 from noonfom/mock
Add FOTA Service mock example
- Loading branch information
Showing
14 changed files
with
1,102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
ROOT=. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
scripts/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
# Copyright (c) 2020 ARM Limited. All rights reserved. | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
cmake_minimum_required(VERSION 3.19.0 FATAL_ERROR) | ||
|
||
set(MBED_PATH ${CMAKE_CURRENT_SOURCE_DIR}/mbed-os CACHE INTERNAL "") | ||
set(MBED_CONFIG_PATH ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "") | ||
set(APP_TARGET BLE_GattServer_FOTAService) | ||
|
||
include(${MBED_PATH}/tools/cmake/app.cmake) | ||
|
||
add_subdirectory(${MBED_PATH}) | ||
|
||
add_subdirectory(mbed-os-experimental-ble-services/services/FOTA) | ||
|
||
include_directories(mbed-os-experimental-ble-services) | ||
|
||
add_executable(${APP_TARGET}) | ||
|
||
project(${APP_TARGET}) | ||
|
||
target_sources(${APP_TARGET} | ||
PRIVATE | ||
source/main.cpp | ||
source/BlockDeviceFOTAEventHandler.h | ||
source/BlockDeviceFOTAEventHandler.cpp | ||
source/PeriodicBlockDeviceEraser.h | ||
source/PeriodicBlockDeviceEraser.cpp | ||
) | ||
|
||
target_link_libraries(${APP_TARGET} | ||
PRIVATE | ||
mbed-os | ||
mbed-events | ||
mbed-ble | ||
mbed-storage | ||
mbed-mbedtls | ||
ble-service-fota | ||
) | ||
|
||
mbed_set_post_build(${APP_TARGET}) | ||
|
||
option(VERBOSE_BUILD "Have a verbose build process") | ||
if(VERBOSE_BUILD) | ||
set(CMAKE_VERBOSE_MAKEFILE ON) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
# FOTA Service Mock Example | ||
|
||
The FOTA service, as defined in its [specification](https://github.com/ARMmbed/mbed-os-experimental-ble-services/blob/fota-service-github-ci/services/FOTA/docs/README.md) document, facilitates the transfer of firmware updates over BLE. | ||
|
||
In this demo, the FOTA service is used to transfer a binary from the host PC into the flash of the target. | ||
A basic _FOTA client_, implemented in Python using [bleak](https://pypi.org/project/bleak/), is used to read/write the binary stream, control and status characteristics. | ||
Please refer to [Section 1](https://github.com/ARMmbed/mbed-os-experimental-ble-services/tree/fota-service-github-ci/services/FOTA/docs#fota-service-structure) of the spec to learn more about these characteristics. | ||
|
||
To verify the success of the transfer, the application computes the [SHA-256](https://en.wikipedia.org/wiki/SHA-2) of the binary and prints it to the serial port. | ||
The SHA-256 is also computed on the host using [sha256sum](https://man7.org/linux/man-pages/man1/sha256sum.1.html). | ||
The transfer is regarded as a success if the hashes are equal. | ||
|
||
## Usage | ||
|
||
### Hardware Requirements | ||
|
||
This application requires either the [DISCO_L475VG_IOT01A](https://os.mbed.com/platforms/ST-Discovery-L475E-IOT01A/) or [NRF52840_DK](https://os.mbed.com/platforms/Nordic-nRF52-DK/) platforms. | ||
|
||
To use the Python client, the host PC must have Bluetooth capabilities, either through an inbuilt chipset or an external USB adapter. | ||
|
||
### Building | ||
|
||
The application can be built and flashed onto the target using Mbed CLI 2: | ||
|
||
```shell | ||
mbed-tools deploy | ||
mbed-tools compile -t <toolchain> -m <target> -f | ||
``` | ||
|
||
A `bin` file is required for the demo. | ||
For nRF, this must be created manually from the `elf` as Mbed Tools outputs a `hex` file by default: | ||
|
||
```shell | ||
arm-none-eabi-objcopy -O binary cmake_build/NRF52840_DK/develop/<toolchain>/BLE_GattServer_FOTAService.elf cmake_build/NRF52840_DK/develop/<toolchain>/BLE_GattServer_FOTAService.bin | ||
``` | ||
|
||
Lastly, create a Python virtual environment inside the `scripts` folder and install bleak: | ||
|
||
```shell | ||
cd scripts && mkdir venv && virtualenv venv && source venv/bin/activate | ||
python -m pip install --upgrade pip && pip install bleak | ||
``` | ||
|
||
### Demonstration | ||
|
||
1. Open a serial terminal on the host PC to receive serial prints from the _FOTA target_: | ||
|
||
```shell | ||
mbed term -b 115200 | ||
``` | ||
|
||
2. In a separate window, run the test script: | ||
|
||
``` | ||
python test_fota.py | ||
``` | ||
|
||
It scans for a device named 'FOTA' and attempts to connect to it. | ||
Once connected, it asks the user to enter the path to the binary. | ||
Use the binary running on the target: | ||
|
||
``` | ||
Enter the path to the binary: ../cmake_build/<target>/develop/<toolchain>/BLE_GattServer_FOTAService.bin | ||
``` | ||
|
||
3. The client initiates the transfer once the FOTA session begins and commits the update once the entire binary has been sent. | ||
Subsequently, the target computes the SHA-256 of the binary and prints it to the serial. | ||
Verify the `<hash>` with sha256sum: | ||
|
||
```shell | ||
echo "<hash> ../cmake_build/<target>/develop/<toolchain>/BLE_GattServer_FOTAService.bin" | sha256sum --check | ||
``` |
1 change: 1 addition & 0 deletions
1
BLE_GattServer_FOTAService/mbed-os-experimental-ble-services.lib
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
https://github.com/ARMmbed/mbed-os-experimental-ble-services/#7f7ed190a4d5da02a1340aeff3ed2e7bc9ee5b64 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
https://github.com/noonfom/mbed-os/#27160dbe0460ed5c898effbaf8881c39117ba505 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"target_overrides": { | ||
"*": { | ||
"platform.stdio-convert-newlines": true, | ||
"platform.stdio-baud-rate": 115200, | ||
"mbed-trace.enable": 1, | ||
"mbed-trace.max-level": "TRACE_LEVEL_INFO", | ||
"ble-api-implementation.max-characteristic-authorisation-count": 100 | ||
}, | ||
"DISCO_L475VG_IOT01A": { | ||
"target.features_add": ["BLE"], | ||
"cordio.desired-att-mtu": 200, | ||
"cordio.rx-acl-buffer-size": 204 | ||
}, | ||
"NRF52840_DK": { | ||
"target.features_add": ["BLE"], | ||
"cordio.desired-att-mtu": 200, | ||
"cordio.rx-acl-buffer-size": 204, | ||
"cordio-nordic-ll.wsf-pool-buffer-size": 8192, | ||
"cordio-ll.max-acl-size": 204 | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
[loggers] | ||
keys=root,logger | ||
|
||
[handlers] | ||
keys=consoleHandler | ||
|
||
[formatters] | ||
keys=simpleFormatter | ||
|
||
[logger_root] | ||
level=INFO | ||
handlers=consoleHandler | ||
|
||
[logger_logger] | ||
level=INFO | ||
handlers=consoleHandler | ||
qualname=logger | ||
propagate=0 | ||
|
||
[handler_consoleHandler] | ||
class=StreamHandler | ||
level=INFO | ||
formatter=simpleFormatter | ||
args=(sys.stdout,) | ||
|
||
[formatter_simpleFormatter] | ||
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s | ||
datefmt= |
Oops, something went wrong.