From fda3c95a4f7035c26adc45f2f747bd72f05cde34 Mon Sep 17 00:00:00 2001 From: Paul Szczepanek Date: Fri, 26 Mar 2021 12:27:24 +0000 Subject: [PATCH 1/8] Add FOTA service documentation Co-Authored-By: George Beckstein --- services/FOTA/docs/README.md | 290 ++++++++++++++++++ services/FOTA/docs/img/fota-bsc-packet.png | Bin 0 -> 22941 bytes .../FOTA/docs/img/fota-control-packet.png | Bin 0 -> 25556 bytes .../docs/img/fota-deferred-validation.png | Bin 0 -> 56666 bytes services/FOTA/docs/img/fota-delayed-start.png | Bin 0 -> 31008 bytes services/FOTA/docs/img/fota-false-start.png | Bin 0 -> 10223 bytes services/FOTA/docs/img/fota-fc-packet.png | Bin 0 -> 6884 bytes services/FOTA/docs/img/fota-flow-control.png | Bin 0 -> 34268 bytes services/FOTA/docs/img/fota-flow-ignore.png | Bin 0 -> 41160 bytes .../FOTA/docs/img/fota-immediate-start.png | Bin 0 -> 19561 bytes .../docs/img/fota-immediate-validation.png | Bin 0 -> 31299 bytes services/FOTA/docs/img/fota-service.png | Bin 0 -> 63871 bytes .../docs/img/fota-session-normal-start.png | Bin 0 -> 35269 bytes .../FOTA/docs/img/fota-session-rollover.png | Bin 0 -> 26690 bytes .../FOTA/docs/img/fota-start-not-ready.png | Bin 0 -> 24640 bytes services/FOTA/docs/img/fota-status-packet.png | Bin 0 -> 25308 bytes .../FOTA/docs/img/fota-sync-lost-packet.png | Bin 0 -> 6000 bytes services/FOTA/docs/img/fota-sync-lost.png | Bin 0 -> 43624 bytes services/FOTA/docs/latex/.gitignore | 4 + services/FOTA/docs/latex/README.md | 16 + services/FOTA/docs/latex/fota-bsc-packet.tex | 20 ++ .../FOTA/docs/latex/fota-control-packet.tex | 20 ++ services/FOTA/docs/latex/fota-fc-packet.tex | 16 + .../FOTA/docs/latex/fota-status-packet.tex | 20 ++ .../FOTA/docs/latex/fota-sync-lost-packet.tex | 16 + .../plantuml/fota-deferred-validation.puml | 31 ++ .../docs/plantuml/fota-delayed-start.puml | 21 ++ .../FOTA/docs/plantuml/fota-false-start.puml | 12 + .../FOTA/docs/plantuml/fota-flow-control.puml | 24 ++ .../FOTA/docs/plantuml/fota-flow-ignore.puml | 27 ++ .../docs/plantuml/fota-immediate-start.puml | 16 + .../plantuml/fota-immediate-validation.puml | 21 ++ services/FOTA/docs/plantuml/fota-service.puml | 53 ++++ .../plantuml/fota-session-normal-start.puml | 19 ++ .../docs/plantuml/fota-session-rollover.puml | 19 ++ .../docs/plantuml/fota-start-not-ready.puml | 18 ++ .../FOTA/docs/plantuml/fota-sync-lost.puml | 25 ++ 37 files changed, 688 insertions(+) create mode 100644 services/FOTA/docs/README.md create mode 100644 services/FOTA/docs/img/fota-bsc-packet.png create mode 100644 services/FOTA/docs/img/fota-control-packet.png create mode 100644 services/FOTA/docs/img/fota-deferred-validation.png create mode 100644 services/FOTA/docs/img/fota-delayed-start.png create mode 100644 services/FOTA/docs/img/fota-false-start.png create mode 100644 services/FOTA/docs/img/fota-fc-packet.png create mode 100644 services/FOTA/docs/img/fota-flow-control.png create mode 100644 services/FOTA/docs/img/fota-flow-ignore.png create mode 100644 services/FOTA/docs/img/fota-immediate-start.png create mode 100644 services/FOTA/docs/img/fota-immediate-validation.png create mode 100644 services/FOTA/docs/img/fota-service.png create mode 100644 services/FOTA/docs/img/fota-session-normal-start.png create mode 100644 services/FOTA/docs/img/fota-session-rollover.png create mode 100644 services/FOTA/docs/img/fota-start-not-ready.png create mode 100644 services/FOTA/docs/img/fota-status-packet.png create mode 100644 services/FOTA/docs/img/fota-sync-lost-packet.png create mode 100644 services/FOTA/docs/img/fota-sync-lost.png create mode 100644 services/FOTA/docs/latex/.gitignore create mode 100644 services/FOTA/docs/latex/README.md create mode 100644 services/FOTA/docs/latex/fota-bsc-packet.tex create mode 100644 services/FOTA/docs/latex/fota-control-packet.tex create mode 100644 services/FOTA/docs/latex/fota-fc-packet.tex create mode 100644 services/FOTA/docs/latex/fota-status-packet.tex create mode 100644 services/FOTA/docs/latex/fota-sync-lost-packet.tex create mode 100644 services/FOTA/docs/plantuml/fota-deferred-validation.puml create mode 100644 services/FOTA/docs/plantuml/fota-delayed-start.puml create mode 100644 services/FOTA/docs/plantuml/fota-false-start.puml create mode 100644 services/FOTA/docs/plantuml/fota-flow-control.puml create mode 100644 services/FOTA/docs/plantuml/fota-flow-ignore.puml create mode 100644 services/FOTA/docs/plantuml/fota-immediate-start.puml create mode 100644 services/FOTA/docs/plantuml/fota-immediate-validation.puml create mode 100644 services/FOTA/docs/plantuml/fota-service.puml create mode 100644 services/FOTA/docs/plantuml/fota-session-normal-start.puml create mode 100644 services/FOTA/docs/plantuml/fota-session-rollover.puml create mode 100644 services/FOTA/docs/plantuml/fota-start-not-ready.puml create mode 100644 services/FOTA/docs/plantuml/fota-sync-lost.puml diff --git a/services/FOTA/docs/README.md b/services/FOTA/docs/README.md new file mode 100644 index 00000000..be0396d1 --- /dev/null +++ b/services/FOTA/docs/README.md @@ -0,0 +1,290 @@ +# FOTA Service Overview + +The FOTA (**F**irmware **O**ver **T**he **A**ir) service facilitates transfer of firmware updates over BLE using GATT Characteristics. + +The FOTA service has been designed to allow for extensions to optimize transfer speeds and enable advanced update features. These advanced features are not included in the base implementation in order to maximize compatibility with constrained targets. + +## Terminology + +FOTA stands for firmware over the air +The **FOTA Target** is the device hosting the FOTA Service +The **FOTA Client** is the device acting as the client of the FOTA Service, ie: the peer sending the firmware. + +# FOTA Service Structure + +The structure of the FOTA Service is below: + +![fota-service.png](img/fota-service.png) + +There are three mandatory characteristics and one optional characteristic. + +## Binary Stream Characteristic + +The Binary Stream Characteristic (**BSC**) is the primary characteristic used to transfer firmware binary information over BLE. The maximum length of this characteristic is limited by the MTU of the connection. To maximize transfer speeds, this characteristic can only be written to using the **write without response** operation. Since firmware transfers **must** be lossless and retain the original data sequence, the FOTA service implements an application-level error correction scheme in the event of a packet loss. Corrupt data detection (ie: CRC checks) are implemented in lower layers of the BLE protocol and therefore are not required in the application layer. + +The packet structure of the the FOTA service is simple. The first byte of each write to the BSC must be a sequential, 8-bit **fragment ID**. The fragment ID must be incremented for each write to the BSC. The fragment ID must roll over from 255 to 0: + +![fota-bsc-packet.png](img/fota-bsc-packet.png) + +Subsequent bytes written to the BSC after the fragment ID are considered binary firmware data. + +Writes to the BSC may be ignored if the FOTA target is busy (eg: waiting for flash operations to finish) and unable to buffer any more data. This busy status will be communicated to the FOTA client using the FOTA Status Characteristic described later. + +Out-of-sequence writes to the BSC will be ignored and trigger a lost-synchronization response through the FOTA Status Characteristic. This implements the previously-mentioned error correction scheme. This mechanism allows for lost packets to be retransmitted and to reestablish synchronization between the FOTA target and client. + +## FOTA Control Characteristic + +The FOTA Control Characteristic allows the FOTA client to control the FOTA session. This characteristic has a variable length with a maximum length limited by the MTU of the connection. This allows the application to add more advanced commands by simply defining a new command operation code (op-code) and packet structure: + +![fota-control-packet.png](img/fota-control-packet.png) + +This characteristic only supports the **write** (with response) operation. In accordance with Bluetooth Core specification V5.2, Vol 3, Part F, Table 3.4 (Error Codes), ATT Error Codes between 0x80 and 0x9F are reserved for use by the application. Some of these error codes are defined by the standard FOTA service implementation. Unreserved ATT Error Codes may be defined by user application extensions as necessary. + +The application ATT error codes defined/reserved by the FOTA Service are tabulated below: + +| ATT Error Code | Name | Description | +|------------------|-------------------------------------------------|--------------------------------------------------| +| 0x0190 | `AUTH_CALLBACK_REPLY_ATTERR_APP_BUSY` | Application is busy | +| 0x0191 | `AUTH_CALLBACK_REPLY_ATTERR_UNSUPPORTED_OPCODE` | Op Code is unsupported | +| 0x0192 | `AUTH_CALLBACK_REPLY_ATTERR_HW_INHIBIT` | Hardware inhibited processing the op code | +| 0x0193 | `AUTH_CALLBACK_REPLY_ATTERR_LOW_BATTERY` | Low battery inhibited processing the op code | +| 0x0194 | `AUTH_CALLBACK_REPLY_ATTERR_OUT_OF_SYNC` | Transfer is out of sync | +| 0x0195 to 0x019F | Reserved | Reserved for future use by the base FOTA service | + +Any unhandled op-codes will trigger a write response error code of `AUTH_CALLBACK_REPLY_ATTERR_UNSUPPORTED_OPCODE`. + +There are multiple response error codes that may be used by the user's `EventHandler` implementation to reject a FOTA session. These include `AUTH_CALLBACK_REPLY_ATTERR_LOW_BATTERY`, which indicates the FOTA session was rejected due to a low battery as well as `AUTH_CALLBACK_REPLY_ATTERR_HW_INHIBIT`, which indicates the FOTA session was rejected by some other inhibiting hardware state (eg: device in use). + +Most standard operations use only 1 byte and have no parameters. The first byte written to the FOTA Control Characteristic is the command op-code. + +Several standard op-codes are defined and support for them is mandatory. The application is free to use any unreserved op-codes to extend the available FOTA features. + +The standard op-codes are: + +| Op Code | Name | Description | +|-----------|-------------|-------------------------------------------------| +| 0x00 | No op | No operation | +| 0x01 | FOTA Start | Initiate a FOTA update session | +| 0x02 | FOTA Stop | Abort a FOTA update session | +| 0x03 | FOTA Commit | End a FOTA update session and commit the update | +| 0x04-0x40 | Reserved | Reserved for future use by base FOTA service | + +An example of an extension op-code that could be added by the application is the ability to select from multiple "memory slots" where the binary stream can be written to. + +Each of the standard op-codes is discussed in more detail in the following "Sequence Diagrams" section. + +## FOTA Status Characteristic + +The FOTA Status Characteristic communicates status and op-code response information from the FOTA target to the FOTA client. This characteristic supports read and notify operations. The FOTA client should enable notifications from this characteristic to ensure status updates and error conditions are communicated as quickly as possible. + +Similar to the FOTA Control Characteristic, the FOTA Status Characteristic has a variable length limited by the MTU of the connection. Again, this is to allow for user applications to define extensions to the FOTA service. + +![fota-status-packet.png](img/fota-status-packet.png) + +The base FOTA service implementation defines standard status codes that all FOTA clients should recognize. The application is free to use any unreserved status codes to extend the avaialable FOTA features. + +The standard status codes are: + +| Status Code | Name | Description | +|-------------|----------------------|--------------------------------------------------| +| 0x00 | OK | Indicates a neutral ready state | +| 0x01 | UPDATE SUCCESS | Update process was successful | +| 0x02 | XOFF | Software flow control, pause writing to the BSC | +| 0x03 | XON | Software flow control, resume writing to the BSC | +| 0x04 | SYNC LOST | Out of sync fragment ID received | +| 0x05 | UNSPECIFIED ERROR | Unspecified error | +| 0x06 | VALIDATION FAILURE | Failed to validate firmware update candidate | +| 0x07 | INSTALLATION FAILURE | Failed to install firmware update candidate | +| 0x08 | OUT OF MEMORY | The underlying memory is full | +| 0x09 | MEMORY ERROR | Error writing to underlying memory device | +| 0x0A | HARDWARE ERROR | Hardware failure | +| 0x0B | NO FOTA SESSION | No FOTA session started | +| 0x0B-0x40 | Reserved | Reserved for future use by base FOTA service | + +### Software Flow Control + +If the FOTA target is unable to accept any more binary data during the FOTA session, the FOTA target will write the `XOFF` status code to the FOTA Status Characteristic. Any writes to the BSC after the `XOFF` status code has been sent will be ignored and the FOTA target will subsequently write `XOFF` to the FOTA Status Characteristic again. This is to handle the case where the FOTA client missed a previous `XOFF` status notification. + +When the FOTA target is again able to accept new binary data, the FOTA target will write the `XON` status code to the FOTA Status Characteristic. + +Each of the `XOFF` and `XON` status codes will be followed by a parameter byte that indicates the 8-bit fragment ID of the last received packet before the flow control state was asserted. The FOTA client should use this information to continue the transmission at the appropriate offset when flow control is deasserted. + +![fota-fc-packet.png](img/fota-fc-packet.png) + + +### Resynchronization + +Each write to the BSC must begin with the sequential 8-bit fragment ID of the transfer. Since write-without-response is used, it is possible for a BSC packet to be dropped. To detect this, the FOTA target caches the last fragment ID it received successfully. If the next fragment ID received is not this cached value + 1 (or 0 in the case of a fragment ID rollover from 255), the FOTA target will write the `SYNC_LOST` status code to the FOTA Status Characteristic. The FOTA target will also write the expected fragment ID as the second byte in the FOTA Status Characteristic. + +![fota-sync-lost-packet.png](img/fota-sync-lost-packet.png) + +The FOTA client must recognize this condition and correct it by returning to the appropriate location in the firmware binary being transferred (as indicated by the expected fragment ID sent by the FOTA target) and resume transmission from there. + +If the FOTA client misses a `SYNC_LOST` notification, the FOTA target will issue another `SYNC_LOST` notification upon reception of the next (out of sync) packet written to the BSC. A possible edge case in this scenario is if the FOTA client finishes writing the firmware binary without successfully receiving a `SYNC_LOST` notification. + +If the FOTA client attempts to issue a `FOTA Commit` command while the FOTA target is in an out-of-sync state, the FOTA target will respond with the ATT error code `AUTH_CALLBACK_REPLY_ATTERR_OUT_OF_SYNC` and issue another `SYNC_LOST` notification on the FOTA Status Characteristic. + +### Communicating Update Success Status + +The FOTA service does not place any requirements on the FOTA target application to communicate update success status to the FOTA client. However, the FOTA service *does* have provisions to communicate update success status. + +See the "Ending a FOTA session" section below for more information on communicating update success. + +## FOTA Version String Characteristic + +This characteristic is mandatory and must contain a version string that will uniquely identify the version of the FOTA service available on the FOTA target. The FOTA client can use this information to choose the appropriate FOTA session flow in the event of future updates. + +The standard FOTA implementations will have a version format as follows: "A.B.C" where A is the major revision, B is the minor revision, and C is a patch revision. A custom FOTA service implementation may choose to use its own format keeping in mind it may cause incompatibility with standard update clients. + +## Firmware Revision String Characteristic + +The FOTA service specification includes an optional* Firmware Revision String Characteristic. This characteristic is a standard, BTSIG-specified BLE GATT Characteristic with a 16-bit UUID of `0x2A26`. This characteristic is **only optional** if: + +- There is only **one** FOTA service instance in the device's GATT Profile **AND** +- The device's GATT profile has **one** instance of the standard Device Information Service (UUID: 0x180A) that includes **one** instance of the Firmware Revision String Characteristic (UUID: 0x2A26), and this characteristic is populated with the revision string of the firmware associated with this FOTA service. + +The intent behind this is that the firmware revision associated with a FOTA service is always available. If there is any ambiguity (eg: the GATT profile has two Firmware Revision String Characteristics in its structure), the FOTA service Firmware Revision String Characteristic is **mandatory**. + +Additionally, there is a conditionally optional Characteristic User Description Descriptor (CUDD, UUID: 0x2901). This descriptor is optional **if and only if** there is only one Firmware Revision String Characteristic available on the server (and therefore only one FOTA service instance as well). + +If there are multiple FOTA services or multiple Firmware Revision String characteristics, this descriptor is **mandatory**. + +The contents of this descriptor should be a string that describes the module that this FOTA service instance updates the firmware of, eg: "cellular modem", "coprocessor", etc. + +# Sequence Diagrams + +The following sections show sequence diagrams of possible situations during a FOTA session. + +## Starting a FOTA Session + +Writing the FOTA Start command to the Control characteristic starts a FOTA update session. This allows the user's application to perform any necessary preparations before beginning an update session. eg: shutdown other subsystems, close files, update the UI to indicate the update to the device user, erase flash memory in preparation to receive the update binary, etc. + +The FOTA target may choose to issue an immediate `XOFF` status notification to pause binary transmission until all preparations have been completed. Otherwise, the FOTA target, if ready, will issue an `OK` status notification. + +In the prior case, the FOTA client should not commence binary transmission until the FOTA target has issued an `XON` status notification. See the flow control section for more information on software flow control. + +This section shows two possible cases for starting a FOTA Session: **immediate start** and **delayed start** + +The application is responsible for implementing the necessary logic in the `FOTAService::EventHandler` to perform either FOTA start types, as required. + +Each of the following sequence diagrams assumes the following preconditions: + +- There is an existing BLE connection between the FOTA client and FOTA target +- Depending on how the FOTA service is configured with regard to security, link security may be established as required (ie: paired/bonded, link is encrypted). +- A FOTA session has not been started + +### Immediate Start + +To start a FOTA Session, the FOTA client must write the FOTA Start Op-code to the FOTA Control Characteristic. In the immediate start case, the FOTA target replies immediately with a status notification of **either** `OK` or `XON`. The FOTA client should interperet either of these as a positive response and proceed with the FOTA session immediately: + +![fota-immediate-start.png](img/fota-immediate-start.png) + +### Delayed Start + +The delayed start allows a FOTA target to perform any required preparations before a FOTA session begins. Preparations may include actions such as: +- indicate the FOTA session start to the device user through UI or LEDs +- erase the update memory + +**Note:** If the preparations can block for a long period of time (eg: erasing an entire SPI flash chip), they should be either: +- Run on a separate `Thread`/`EventQueue` +- Or, in the baremetal (RTOS-less) case, the preparations should be broken up into shorter operations (eg: erase a single sector of the external SPI flash) + +If the preparations block for a long period of time, the BLE connection could be terminated due to timeout. Therefore, preprations should periodically allow BLE events to be processed to ensure the connection does not timeout. + +![fota-delayed-start.png](img/fota-delayed-start.png) + +### False Start + +If the FOTA client attempts to write the BSC before starting a FOTA session, the FOTA client will issue a status notification with the status code: `NO_FOTA_SESSION`: + +![fota-false-start.png](img/fota-false-start.png) + +This is referred to as a "FOTA False Start." + +### Not Ready + +If the FOTA client is in the process of performing a critical function it may reject a FOTA start call with the `AUTH_CALLBACK_REPLY_ATTERR_APP_BUSY` write response. + +![fota-start-not-ready.png](img/fota-start-not-ready.png) + +## FOTA Session + +During a FOTA session, the FOTA client may write firmware binary information to the BSC with a packet format outlined in the previous "Binary Stream Characteristic" section. + +Each of the following sequence diagrams assumes the following preconditions: A FOTA session **has** been started + +### Normal FOTA + +During a normal FOTA session without any packet loss, the following sequence diagrams apply. + +Start of FOTA session: + +![fota-session-normal-start.png](img/fota-session-normal-start.png) + +After a number of packets, the fragment ID will roll over: + +![fota-session-rollover.png](img/fota-session-rollover.png) + +### Flow Control + +Depending on the application, processing the BSC data may take longer than the time between received packets. In this case, the FOTA target may choose to buffer the packets. If the packet buffer overflows, data may be lost. To prevent this condition, the FOTA service implements software flow control through the Status characteristic, as described previously. Flow control during a FOTA session is described by the below sequence diagram: + +![fota-flow-control.png](img/fota-flow-control.png) + +As mentioned above, writes to the BSC after an XOFF status has been set will be ignored and an XOFF Status Notification shall be issued each time the BSC is written in this state: + +![fota-flow-ignore.png](img/fota-flow-ignore.png) + +It is recommended that the FOTA client periodically attempt to write the next packet to the BSC and listen for a negative `XOFF` status notification. This is to handle the case where the FOTA client missed a previous `XON` status notification. + +The FOTA client may also read the Status characteristic to detect the `XON` state in case the `XON` notification was missed. Also note that it is possible for the Status characteristic to change from `XON/XOFF` to any other status (eg: `MEMORY ERROR`) even while flow control is active, so it is recommended that the FOTA client cache the flow control state. The FOTA target also caches the flow control state and will renotify the FOTA client during a subsequent BSC write (if flow is paused) as described above. + +### Sync Lost Event + +If a packet is lost during a FOTA session, the fragment ID expected by the FOTA target will not match the fragment ID of the next packet received from the FOTA client. As described earlier, the FOTA target will notify the `SYNC_LOST` state with the expected fragment ID as an additional parameter. The FOTA client must return to the packet matching the expected fragment ID and begin retransmission from there: + +![fota-sync-lost.png](img/fota-sync-lost.png) + +## Ending a FOTA Session + +### FOTA Commit + +Once the firmware binary has been fully transferred, the FOTA client shall write the `FOTA Commit` op-code to the Control characteristic.. This command initiates validation and installation of the transferred firmware binary on the FOTA target. + +If the FOTA client attempts to issue a `FOTA Commit` command while the FOTA target is in an out-of-sync state, the FOTA target will respond with the ATT error code `AUTH_CALLBACK_REPLY_ATTERR_OUT_OF_SYNC` and issue another `SYNC_LOST` notification on the FOTA Status Characteristic. + +The details of the FOTA Commit operation are not defined by the FOTA Service specification. Common operations performed during a FOTA Commit operation may include: + +- Validating the transferred binary using a digital signature scheme +- Gracefully shutting down application subsystems in preparation for a device reset +- Initiating a BLE disconnection + +### Communicating Update Success: Deferred Validation + +In some cases, digital signature verification and binary installation are performed by a bootloader *and not* the application. Therefore, the success of the update may not be available during the same BLE connection that a FOTA session took place. ie: the FOTA target may have to reset itself so the bootloader can perform verification and installation of the update. This is referred to as **deferred update validation**. + +A deferred update validation may follow a process similar to the following: + +![fota-deferred-validation.png](img/fota-deferred-validation.png) + +The sequence diagram is similar for the case where a firmware update candidate fails to be validated. + +### Communicating Update Success: Immediate Validation + +If the update success status *is* available during the same BLE connection that a FOTA session took place, this is referred to as **immediate update validation**. + +![fota-immediate-validation.png](img/fota-immediate-validation.png) + +The sequence diagram is similar for the case where a firmware update candidate fails to be validated. + +Obviously, this scheme simplifies the FOTA client logic, but it also introduces a depedency that the application has the means to validate firmware updates itself (ie: access to signing keys and other sensitive information). + +### FOTA Abort + +The FOTA Stop command is used to immediately terminate (ie: abort) a FOTA session. It is application-specific whether this removes the incomplete binary from memory. This command will reset the internal state of the FOTA service. The transferred firmware binary will not be installed or validated. + +# Documentation Tools + +Tools used to generate this documentation include PlantUML, LaTeX, and [tablesgenerator.com](https://www.tablesgenerator.com/markdown_tables#). + +You can edit the tables more easily by copying them into the above Markdown tables generator. diff --git a/services/FOTA/docs/img/fota-bsc-packet.png b/services/FOTA/docs/img/fota-bsc-packet.png new file mode 100644 index 0000000000000000000000000000000000000000..70808f69f8926092a326a3a68fc54a1cff00784c GIT binary patch literal 22941 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

=v2U%x%WaVqY~ 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 Q9A{wgboFyt=akR{0CZjnX#fBK literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-control-packet.png b/services/FOTA/docs/img/fota-control-packet.png new file mode 100644 index 0000000000000000000000000000000000000000..121bab215bec58168230c97589b2f0d1bae93437 GIT binary patch literal 25556 zcmeFZ2UJttwkRAB0TsaxC`uC*rT0)(K0%S9AcE3MKuQQC^w4ZzL9o!Ist8CIkx)ZW z6qFXFMF=ElfCwQ3h!8>uyuI-|=Y02n=iT?;ckdhTjsHK4;YhO9Tyw28_v~|S?_RJp z-M)4IRtN;L{oL6tRO!yvUna72!U){jJ#wYZ0!~%6^KN5`S`=6f+GT9 zQm}9zF9;-jxIDur?EqBx);e5X+*K+4=F-jhL@j$8Al-KkIy5jvQjjSLx^B{jQZUN{t*vxNX0(<&&NPgE@%CE?|rU{rKLmIbN*-mQ8dzS|C(b?Wl-~)q+x(XnS71{ z)G%-5Ds0K=zY5=H-}WIa*Y~oy7m~m6cJUCQ0a1(8_|%L9aHDc0AMYC}02v+b8{bWs24z432mUOe$T4`G%y)GjVX?Xb2j}vDw86#3u z=#@A29_NnkEKBK?p~YBy{&@BTy7xYAqA=H#bcN>~@A0RlQ=~cP`})iz?`FAyg3Y>1o68XXXWoNZoZQr2;Qr zw-1qdSZ7Cl4M)kW%zM4dgR}Z&lfR;0#HvFV^GjeA*YE13FQ@htOS&W<+3u1XZNO$r zG)5Y*^;uB4(n2qUY|~I$$;=^>kYUFfLCQp4MS-u(1T6c_voD288X?Jt=~}<`OqBXc z7rW`a;Lgrl@tY0%|B7ab#Ra_S%Is_|@8*vgRA^sPu;;7aL_Qf{oST#>joq}xDYxz$ zA=k55-{ElCkk=wJxUboN@=$#Bw#Rr?^{uz|4k7QK*}QMBfd%#? (pHAO$-o1Pb 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 literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-deferred-validation.png b/services/FOTA/docs/img/fota-deferred-validation.png new file mode 100644 index 0000000000000000000000000000000000000000..693d70a1caefe52380f6aea39898a81d82b41c39 GIT binary patch literal 56666 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�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 EKQg>=r~m)} literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-false-start.png b/services/FOTA/docs/img/fota-false-start.png new file mode 100644 index 0000000000000000000000000000000000000000..c99346ba05661bf34804660ca29ad9a7071c05cb GIT binary patch literal 10223 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 T#d-l(@9s&6$Osn;>UjSz65$UF literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-fc-packet.png b/services/FOTA/docs/img/fota-fc-packet.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5af4437fbff1d846b98efe6403b026e2f1bc59 GIT binary patch literal 6884 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 literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-flow-ignore.png b/services/FOTA/docs/img/fota-flow-ignore.png new file mode 100644 index 0000000000000000000000000000000000000000..ac6d5ec29410bb508533a789840cb87c26fd8217 GIT binary patch literal 41160 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

J)pIaUOX2-ia`|^sGmXHIRTelh;8a%5h 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�H#5ezV+XpKtG2d|=pJDM|At=G#6>v( z%A`dCUzu+rTiF<9E#uk{+-dUEu!AxiQrOHEi-4>n>z_Aq%f`jE%lFtYfFr!27SMnc#EIN(hfOU!Z*}9lQ`dE%fuMNk+ z9;iC1dFLp)?P2EQ^F7RFVnk{83H&y2C_IpAx-9jEx-?JSXyJ!;@>pl|v5{`k97%VQ z#@0_fVFxQK9(ONwP1}CH%O}A3;-%wMb1QqH9B}UOZP7JD^E~<^_7sxazlrvmzv{k9 zeuLp141Rw4lR5mFCG3yH*f8a$tA)PjkX#@Qn0k1B7@%lPzgoSmVSCUZLwHKx_nXE(q{B4lrvAj3`9IS{pNzEh(6?{4fa$=QJS7{v znLXa-4uyNIhxFD5LRVPlUWZjao_AvHoNCgNm;Zz;ffu_s@6}mh%8nWB|^l{lTE1xp&*Ds0LqlVVz zZ06QTEeuhI6szpRZ;FEwmyh^Gd__arCc()nsm$`qsyRI4*QIfQ7S(_#8;gesKl!wF0 zJ@@eX@vhg|I;VmLRxQ{~p>|fV?@J8az0lk7aaT;gPM`Dv$|F2Vdobw(;yK@2xt%5> zf^C;vJAW^fM@#GZi~vQoEhaXRc*ABTvwPI8{XSOz;t^Y_zJ!1(OTxA9h4N3_siC{f z(AX-FmbIG8O?Q7M&~wYdrbqTKH`CCtO{!Rx944$(*ZkHvu1Krhlv2QZW1#<%lJWwD zI-C7!-_pcznR3TXRe`?o8w^(jZQPUWCM~sM?NU=y%R@?jlB>)-oqI}GDV5(P`pd?L9b3y=n)fDBjBggEFNa{$ZL7<=7Nk_%5sy!3o5>%W zo*erUAo?O*xPq3mbrE?cZ6kEzNy8h^2rT+@w_oN^EC zpZ|`yh84Y{$kbG%25Zhyuhe`+}a zc`s2U1dsDR?*IHpx2?bbp%_^(O>a{DZJwwEe!z`1S(3=NABLpx-K6 z{$|gyA6S`{5X`cHf%PyhMXjb=6L|B~ZbWzN-Me>gJYTdXEHyQ?yW4PHr(F-s9yv{6 zr(m*n*~q+X`SK^SXif-s^qJ{5bIo1l3ZnMot+#JA79X6t^Jy4vr)P~YVN&l_H>ppT zGkmi_Ie6ERRT-@F`1*iOj0VsVpOYMn!OJHC0pRw75Q*vsqyen52rw(gc}%MT{h)a* zq~+vBMn_rWkQODAg-9s?^R>@(ZyTQY0`S_f1}#*w#$}CrBBPu6bhF?SF{z5*@~F+> zcHP={QcDBp36%`@8ZMCk9Q^!M<>e`0TKgu7z^kg=1f~u{sye41!f~e2sK#H^)^3I1 z7IX@(5xLTTnNXb1zT8=Ol-?#1O*8LXG<~cJ!E_row0!<702}O9feS8d+s!v}egK^m zz;7xu-`GuptvOJVNgbdK%|z-+NkhYKG)VGWkv`E;(7iL*x^1mxH!`*dnzOT2_*+G@ zZk1jD@}d#{HOK^kI2C1Gx2{Rfr!ZX0a*_Lp3ZZE?Br&|Y!*g=9e;2=Ud!9!Ys9XdG z0ln$j@P%M#c$9Hs>g`91^%wnU(kP(#-T052J34@1T%f?REO1fuN5|pz$#L}%U4mBj zECgZe=>$E~jaY%rz!~0{VWz988C-G@zVSLp`AGPTfgl7M$Zy3jn~B-_OVw_`UFi63 z8G|HlcAT@1GkN>1fnL|!OVlgbhB4G@33D!4IdTrpAm?E7?SRY`S)L&w3R^K|#DfkQ z(IK3@MZIJF_4)KP&ql#KX^%hvi2xsuJuN`1Rqf5po@Hfa?de0$gIuPX^d(=~PPyN{ zeH3>PR8K8qub_UR51K#an-Ghm>K*SKYR@BBgntf_erfLu+Ds@d{3XaO)f^)SQfBrDzeUA7&cKq7Ye? zps~w=X-6tIg!qjpHR*9Kk?vpb`Zysq!N%G;sUNZkT=w8!?SRw!lzT|=%p`^4ILmQF71kO^&&Tbm5 zwqaIeq+VN&>&A^%iO@b&=I5V-uo3#pl&aUPa|9v#tw>;O^{aez4)W{oJ#U`Rm>t|cRj;sD!R{vt=~Gt3I!DQnlQi`3jEY>vLEix4?Dme@l6QrdzThsTQI zuVN&}>&5w)CF;$U`rKcFyHm9|vnGk0&n%M@1!qqqjJ3JMr>#)Yz|Awzs^sJM9Hvvy z$n7zopN!crb$#42DhCbaNhFBltYI`QT?6$M|HAkwrmn7zL7`^M(3?%cZ@SltneeRs zy~5CLGiS59;3fZFWpC+;>nYb3pZo7#^ztat$@XQGb*SG{8JDNd0$%m4UaV;oJ6(=ARf3YOk7d%Hryoeqi!fF5xpR#VtTrNbcrgD1->Bhoe}520Og1ZgySJr8 zmA|);i>MM1sFF~V^F4Zuw{q3Zo(uMiI)q5B){PZ;{KcjwGkpPdb1Q?FpYf?YQOEx; z_iA;DoIGdQ+7~-n1B`F}HD7ao7ID?%Q%8Dp_Pcv857DfT^ zzNB2vQ9SfMx2J8PzA3a0yvqs>@YCxUlzK==CMgzf?mA#)6wt_+ENm-b2WIx?9~Yh0 z0Iet@59I3#BSz-euU$+-_)sX_y&fbK=8_#*^%bd3c}p#N5G`}yj|YeN<`sp1Yqk{q z&`z%zke6Rx8uVc(A7Fcjq*i-gc@0IymVp66 z)ZMdmTar)oUO{eXFfd%expk3*5AJ03IQfP#tTtcs+i;_H6)rUEoFFf;_$gVHz80Xg&`PVtlcQD{P?L zb^XvEPjlGggav^Jn6!-K$jBU>XKNG$L8u+`#f$^yYL~th6d$k^APM9{pmf=bnsxA{ zA-C^t9Y7R*_=N0)!*+OxnZ6g0nxv+tF53baX`$gk+RYQQUb3zHYi_GQzpy*F48CWm z=b)23d>a%KDzAaBMzvPM)${8T1h;6X!%M+SIbsiypvA!r>KT``p>pSV0JXLwW>BZA zv;?$9$(MRJE;qLAA?2>38v%kE;I4nQv3wR@=hv=ZPY*XRhFxGmaiaDq3%W;|)9Z;Z93zg>m_W8XCcY{(;c3v%8IWaJwClRhVOM6exeRDGD-B2wm_P zq3CU-We-+24P4dJoIOVrq$y0!LPA0(Yb{31&PR!4awxKHoxLx)v^S&`)SQd#j?_Di z-Cr7Y4xPTI-Wvi=P7z1&f?Cqq>ls5ptB5r}aeZgj<;tXl9uG=bj#7AxNJcdyhDGCE z0;0FGJ78-X^Q)N|nCN@TI?Bi31#M&&#MGhv2sne-V^73(BT3hW;^IN9>WGPrEi5QN z_^3`1*O`nYh%pNbWq3$1WSB`wy>BdU7H?aQ1T`v3N)~G`NJh}1H)ohdfJi=-s0q{~ zz0e@WFqowtZO4I!zUcVAyt0Zk*YvmEkV{+@k%WpRHVv5;?&*mdSyj(;kCLq4pK9~X z0LB{R5;P{v#JvIn2d`8wu*j3OFE+dR8XQ{a`f%iC!SCX+WgjaqZw2u2=4MB9O>YHc z&`zJ@ZUD0BWXa*bdi84P%*e^L5FK@vlBMYVQuE#lS4sCfcMzf_bl%U)>rfWFh}7;; zz@_W7`qj>BNkv~-8~whxINDWd45<^skG{60k5?FXNxzgc&<9eZSK7T3XGqPI^3?>{ z11@cPymx%+?%6;&r8on2o28 zdb-W;P7C4sc#SRa(|V?L%l#S9^LQQ?>QUTO%wQ>+0>)ooI4p)WK%^2fdyM&8)~9f2rj1WbkO51_Nna)@pSzw} zu}A5cC-!1T_9b%c4&AQ zeq@{wn^iQkEKOnDMn3~S&6`y&)2w~f`5;fv5~PZ{=a!-PL-pq&vy|UE8yf;Ja(o>f zeOy{&vSZ)5EZ$-i;}XTby{B;!?#Mdn`=TK66fX$QOA^5E5qr1);0k7DDMNR>GZsfdRn_e*Yx_0E>X1n~j>4fkm4Jd-ntQqsIF!4I+# zE2}YBUDC5qia}J?VF*577FmGRc+inJ<+%|bq9gjGxh%hjPhA5`HK|GX&!76M^;C4f zlXE4ek^wNVCGs?C2B190MHcV+KJ3|y41!HD#ADnm? z7`Q8e@;C-ztAPf1*aLk})>3c?^VwGR09HDoh5d59fPG{0rJfYY?OrcN#wW2<(eV$w zPF=5Jozu&MF#RKv5B48+PR_o{xN4l=YBTV_Fi=pui+9DgvahZ0@;$a%f%`rGbZz~M zD{Q7`5M{@YPBtzs4l6s_kqDY5v)6=`K!A4b(v5a#_YjB)?m~kx2Jsyzn^I|v_un^j zpttO(CQVg>3w~tvVvI576+^Va_KuMbA;~+NTj3nouwf4dd^n9xI->N|;X; z6ePrYw?a5skeQ~a51Iff9FMclRIy~P=ymS#c*=JMZ)c5RvpbJ4gSX8~E;PNw1|fMM zjl6Gxnpn_s{F_Gz%=wbSg%|d}{&CT)w|Ks22z@X3T#9YQvGrAyoBuecE?v+Ivb6*j zaQrOY;$QH)7hYxqwbwVEmAh{C$9eTxGVjH?)solvR{l8v1x-27RYkS7o{_ljOokVr zL4Di&u~jMdCKDH6b?N*{O!UUv&*J>KwjU}LoK<`qlAu|6vkeLsyufrvJAKPO>TgAD zi&~8=UtH`!OBD$QwOlffv39P6no-k1*I!fc3jDONFuZPS7yYzcG8?_ZEAC~Qvx6gk zv*w1cIyu_U_^9;sz3KaxD>2i?cnY{J#aqgqGud}lMKRv^`_-}Yv>jE9 zH(584hB27xOWB6M0+#)WQQxq+e9}vP%>%l4jz2+Zv)&o>Tr&GGql=jI`N=a|NgmT| z9{v>Z#6oVeD_+(sebpQ4$F}X89>DML3kc_N0*+5E{~)k~W=dmx*Vfabq}({{3|7p8 zABAF0t53|2`;I(T<(fti(k$UZ8Bbb!$A|eWdCdK7!&O4~JI#g1MrggbV=eZ`F0uM? zRBC4;xYr%Qz4O=L^VxbH3jfs=|2Iti=fwVBLHfV755V((m)*aCIE4~ISHH)A6_${= z^&KB|$*DG=Aauk~LXlpXRvLKI8M$F1_`(yc|2vG*a#1kEm;ct#1F3lV$bw zQvd>4ZOs9YW@HE=r5~xJrw5DJ*x3zp-KgTtnD;6hBYy!B(M25yFB1hV?Ih$M<&r8Y zRBA!M^9gbIwyRhS3E#-YSLfCvd1c}~^F0{&rwPWi5e9uQbz3#l5QXqS{qL2Tsh&}| za+`dR;2{md$eF;&!Qn-ohL~lHCHHTJg~5{S8xq2Ok#$H#hXPG9 zuO$ZHo+G~o;D9{*RCZ&-ZKvEvnzk6RnsZq`^T?4hVkfzFb=hJdg_mg`qMy6gu7_ps zZYyMV2yn`t9wx0M;^h&*US->L7U}PRGvP|UVeci%KnsB?Cb%bCgklffTvZe#bX+iJ z`}2)-bO+EggE;Q$>|8rC9ENiDHh2=skTS)evowYG&skd9n{h0UmJa38yyHW;{_Xn`>Gty)|)43Bg{rv%9?nJH${f5zZ( z6)kAa;@tzhc5-o9T3Hppe}6U$&)T^Q;>-9R@aW5+cX@L0$dMdqN}uw`vSjE$4Nh?oV>S6Ts78!wWo+8NUdD z_%!$=g9P_7wS9_}b|#GZjbQ6b5PUice(S-0FWv|twD0zC4e=5yVBuD&>cfF$-b>8R z;=g9+xNmt|FG9xi8Sh9{-Kj2g*izeS!@z$Kp|?;D%v3f3A>cTOxcsz2rhVX-014q* zmMoDcf}d7M79IkQuQWh2=eB8rF;)m}gnE^I%BjfHFdvm@y1zp#Hopwg^IZKFMjsx@1D6YF*0v=A#Z8TRq8_ZOeBqs=7bv=d2gs&J;S9O#018Nt_S(K9gR|QZWC8f1{d15ANai z?dEH_>mS}m&*31pa`8zv(DYOh|D8#WAG34AJiL{dhsg#yCdK}SB#$s&tiKMt`@yZc zN$%o{#sYd%5!?oL$+QZQy(@kZ-oI+;g$M5HgSC!R5xNxitLTIFJSR5BE?;yNkT|T8 zcGe z%xGeD<51ucH0=0+|Nl$%=TV_QXjfBI)Q?EvvMTcMl!tOP#8djSwu{z$JxCi3qw^&z zD{Rp7{C;h{YGL{2AR2^9A&Gz>=WYey&^q|NL>#ZWeii^i5V+rlhKwp>D=~u*gIsUF z3)Q~?!lOF=2?&>bM`su`iK1nE+oWv|vjp~k6#h#$kP3*J*ejAf8^Cnwk9MHnZT`po z0nrI#pG;>9VG7-akQGj9(n{M(B3~{RgufBm434a+i3uFJ*mj}SbgWG@XYD~~DG{?+ z@fwL~kX*Huuib65!dU$Ep|a=Lf&Qs`VGjc+L7Y1t$1m0-9TLQr+4Dm_pv(!v7xR@c z$|;ry?TzcpoNcQ*t$QiAU`>kLv15^8F@wZbkUS~7>&93+o`g}B@*~{pgiZgjh{rdC zpt{kj=U3{aQSI6n{x3ANk1N!v;MxHY@c63 z!s@4}Z)C*r;(6B1rkiPz1vp@)pjf3Ci!v47X5){B4C|@sMXr8)xbLW8sI_sLDJ_xG zx@huO)vvD1f9gBhLhH>KaRqu_$e@sCi^AeRvLj29TCRU4HXtD2T(FI^-!-lv8=e~m zQW5$F25zS>)TJU8?!ED@lLklr#wI&w;>^QFk21iLGIfwP6>5F_^BoxaO%^3J`AoHm>^{E7D=X zd1gDZbIB5VN$DepP8haB?`5U%WQE45D+1(klPz`L1*o(mXubfSbJV97U}<&C#lweh zD2g|^8^4cpRaYaYKhQleaG~;!Z^kRvk`2-4i2>^erxkWo1F=u^LYMW>Z#?B;BPxW1 zq~zq()D)Iz*xHtt!feC$j7a^Ya zLNny3Wd`KqEnX%F%Sql#(N2^^8c}|6vBFpFMV$bp?v4u=nZCP}M}f8dd6JYoNtoyK z8*Es-gM+y&SM_<7VWU*-sT0T)(0O>e?2gIOerg(;l*Xs0pUZ4IU=e~%DQC}yD!$tg zc$3KSH!RhGfFwS#gRunpz_sGr3!YFFd0PjHc-^;)i}{x6bf|(=H^eL4`@Si1MXijc zd{1dIMyP3M6s@=DDbq)ePg@>fBvYT%pfCc z^G37J!NpC+I$Ga0qFqcS)^XK+`t*q&TVFmj+&A!PgtHLY05>5qTvXX1)&XC`67h8? zpW(KXQ-jEi2#cg1)*~VQ=!TGshsQQ_xM*YnqYEsz;UEXR1MMY^% zwnt??Tez-P3c6!2+3O+D)LkB3j9X(kg{vp*NG(a?=tW0IM>W%oEBouR>jJ^mVK2+4 zV3G5_k7PIfdDyEpN*SfDQ; zhT2~Wym^tD{)&&XPtQ|Jv_>VT8~G3@`C{VuuT7gt+~O$jNlji1zi85QH<-qW-dXGT)!9?);+F%gfbFfBDr*k?Q1Q)o^#glo(yEv*AD`0x@@f?w z-JIso?CRNjw-;#Xzah!vhq;V3QVcIE0nOO-Q~pNO*}F;2UiU?B@a+G^MZbK*9oW1& z77m*dsb6Z0|9_f;RhQxX;O2&2m856sxqaXpQKU(Ju;sk4_n!#c#8JG4#YQd4+KIau<$ zllb8bi0Tk+Lnw)WLYG8I@2^jw6Jt3C_6hl(%#aN-=?ap zY}N3t&-1?>b29>eaGA#+^iI;-_U)CaG_e9PSQNmAAfv42zl^DZ+*Ha*Vi*SwOCtA0 z)AoDmQKP_5*r7K&Jpu6}#<>a;q@2aeqS!otE`S|+(H!T>*CE)Ok#=M~HktLp(Z8b) zb>N8E1+A=Gvc^HTB)_vrx}{<97e>SJi;h$Eo}QlAJYvMqn6wuXHKZaiCU|Y;$Sp*O z3r0qJcmRgQi7EQ2S4Q5;`Tnd#c0mAm;b~F1p8h5Zijc(uz!6P(jTe_YVPq&n(IQp^ zS|UP#liI!hRlY1v+Q)uqV*(G@Tox0%hCEOZ$WRCnFa^tiHjH~Hkx?Fm9$*IHhV+IS zvcQ?!+S(%1$gz@BeDp>TLw#eC_RT%dF)z7)ZmuYLME3^zXVep!**jfA#uYKJT~rO> zuV7om-phIXsB@Z3v31T)r+sdH4H($*ROO zJdS>+G!GsQ_VVUTix1V+WBytWVFB=yj5RwpU*$G~?jRkikC!jcFc;xDyoz}2iaVUS zp@(i_K<1#+amhM^^%)3i)vxvExr#Ur9FW+o2Lz-av+|QyMXUE<_OG}@OUl2ps)IW| z0Ty`1Wo-01BcrCVQ3QE{{TIMJ1rMsx__d%I9Tq1-e?F{N%EuBG^S&A{+9OAf1Rb;w z*m;jZR6a}Z1^s4;Rkoo!F0cwHo6HW2^*6n$*LhYVi9U;uq6_!!ssWAa*u1I$rAENZ zC_-aYQLcY@MIiU`9!jSafffOHBqijE#X4Wow@!~~4&K*5xb{Fj{XFjk7 zkwT`m$x$pRZduq`pb*Hvo1gz=!yEM}$!`k^g-_{EW^l~0n6h;LGL+0WXXPwCJUxcU z6-9=kp|~~n>)qto%u&!u%73^QV9L6TnExsHP4kxM=upK%5H#@tgZA46_Q z)cD>DopbeRY%`}`r2iUGI)x)ebh4WntAIw`HboU6ZIiIo$(Hcv>jvGtIwLnKr$&A*c7pn@555G%uO;D|wZX>p--+udeb#UE7^{H^e=h zubIsD%_u}7;tPU|9KK~E8>5deY8_+lWn%5y2u$zTUhUpbEZbv6+*&2O`qH|h!otgO z_5r!QuFx_e>gMj2WW4mxQnX!eGcoML8~#JP$)w*#V1Aa;(gmRXn3)DNm2gttyH^Yn z4hX2hQ+tMKBD@ZIsR45J4~Qal$`(j9rhS3~u}U6Nk+W}>{6&2LYyUcw;6Yi? zlBzCTs7mK>W#)$nwot=JY}-R@8*#8;oEp91Z!gugfYfXsqH+x^@SwDqM#@y9F+-#4 zwx&eKne%BO_hat~K7uHE(fEg77Pk3y=E5d%HX)qqY!=qWj=izTKoC*nez0z#r+!tk z{L;>2;C}a7sXLVJRD54*Q$B;#dog|2XAeWbzFUXwB-#uvGk1<|kLO`yW81#{8r|2M zri021X2L7~lt{A8Z2REs6x>{06*7zj=pxN`tNCqEZVIeq&dV+6(WWQ|MPFa+4*ba$ zowqZLeu)c68mz-Oh#atkx_Rr2NK4i%?AH0bu|iaI()f6NbG+F-)#_MBvv?`v7C_EHJIx zwn`azcs~+Nf0#hMDL&EI&r7sXE$ZwT?V}IPHP@^KvB90}{l|f}8$W)wN<{Z5 z<~t{rbDB(KOREO^`2j{9BP|8$Fd5|VAlcmxEVhle-bH|4rDb!`&&zLjz) z$u(&G?Wt}F3TH-7 zdp1hEG@+upJv?lA@)U!YK#E$<#4+}fEsD>&wPy32ovmxiqy(?9sx>7CODHWLp1Ps4 zFAKo}%ul>OI?PR(^(mgLN|*L_PBWsYfo?kbMcBjcm}?kuLg$H$vqpHVy^uVCZcrmP-y-#eu}tvVRW89om>x;{~Z zk1gW2UvDaoo>hB5B_g0Y|H*ryf?Y%I_z}MM?>#INN>e0>4H4&tdbPfDJL-yyA22bJ zeFG7{5hqHYiG{774>nA2qd{UvT z|7)SE<|A)!rOeHa*$lfH(Mxu;hSM(T*^BfEaF)7smW~oYjd;B=Vpg* zfevjG6(f03C%-qG9f^Auw&lrIf%TIUHWwQwYg_*EavXnmWQdVEWAOE9TB^zj3HL6f zF?OXCcUAPnOo!>Hs7y{zWY76KPEgf;E-48eYYxe)a~#TD%@U6(EzP(SOyNbR%FDJJ zCR)tjO(xC-93DGJ3zgye5B}L~58nwib0W1ffp?ff!D;4ONWohrv(oHo4>Gc$7<-wy zVgI?u#pyLlucn7n-Z_iprgQ8rvHGZnh5DnQTA)=(`Q68J4;K80!691@<{X^J8$E$?Rv>3+Xx6 z?{2GqJu|9jV>QvJ)&JVxFa1WHRz{LanI^mNsX43ct#P9qC09f%1id1EKD`#Hg_6`J z-ij>G_uEh>D4p`p+g8?ph=omGBAa$=fS3BSwqlsJ9v6SBOC!B;b7t2rN6Pij9?X8p zPH#>%Vw~vK|1c}%-1Dutx!Uo>Yp08^_z-|#RT)cOa1cXEwa-^4qsYi<29?K;xdyBH zwb+i0lg0TzFrR2CkIt4VuX-SEZmy6i6fET3@cbgUJhmD}>7RG4kuTv)t$2u7YyE~y zeNR5M6oaMM05~-WC26Fdw|B}-PQgZ*CVMM4Yu?=4WAu+hmXejB~*`}lfyrnI%4u(GmJUn$*AE;@a0{kFrMjhzM3 z{jZOb9%U{Ubi3#CJ#n@+C9vY)%BusnY1!^m(op)A9}f=8xO=kpz1~%p{vFE;Q<9uB zc?Ue*#T|<`BG)iLZ`DgN`=z6Temsw{Lz`CJ7iVWGehot zYM!;M?vC;8=$IQBPTn(@5VKqRP28z5uV}xI*IAe@q@S;zd!~`;&SzS8WN0?VaboLM z+BWUhDBn#aGwsgX;Jy!S(Kwkf&7h@~I6TZySXjpCM-5k4)SkD^a|gM%zfm|4(57Q# zC}ub6w>$7dU?qEjw1eOM`!hbHIfoJ3@cgaeji&EsmZ|L>s?A-=b38(xhdJ8zYl}>5 zB=2^kV=u1v?%KItI`e}{m|1g#W4w3I(CBDibz(Kc>>jUavbe-Ay}KMpocw6V#QQ0v z-ALUEdpL>}&m4_2W|m#$qo-|Z@uZRQmiTawtGfdqKRdI;oQZK+&Q0pT{`;ghqqT;u z?4&`Ld=RT1qEu8AICgP$9d69{J8~;(%?1hfsj)fJlF&8D_2zRrTfFSE;xnw@UOOgT zcLgKf#xbVB9YPjz8h+W&!WikPi*blCQ9Zl=@Wrid;rE1}GTZAI1yb_a3}31X^}8Tb zb$j+1*PX{1snPMae19{Ci2tRD;pc5OZm1QKkMty;TclBj z?-Md=9*gl*PdAzPuHYDO(E1X~OoS+-_DPR}OWjXt4IST}T9LtE93rLs`#4hBs>Tz_ zLV7+b=Cz3#iqkXGFMAk-zh94ZEQyS4m>45F z9dAE1%i5r?`Xn~<+sMm29S*Lb>Au7J0x#bWxrGG<2GWVb8aG}NC$Wk_pDdX=v$XCb zEq}x2F_zAoy^!ttXHn{9hqH&z*(o>?*AdEYcGT+4$j zU&>4ELOJWDrk4-d6cQ+85;ZlPXz0~ih$k#~Gp{OjrC+b=w^6sx}MAJb71(r_~~>z8Ka&=$49cH+o#on zf^nJgPxyqPBaJ&%Op|@a1`ke08i$2OMiQUUgd=nmyE*A+u6U&PXdYM1kWJ1s8MDf^ z-OIvq_FLEfE1@YLwD?a|I7QCa{QzqxYZ-@GF>B>lc+b5u-@c`PtWTBs5$9U!q@G=E zeFn>N*Yl^&a0b$PnwNTd=cyTd++3e&vEB8d{L#ZC>qk%ZMa?bThQ}W}lx9AQdM{r- zBYDSV0=2d$Wv>6ZY_K)cv2pLq(pE#!np3ZzJI*yjZ(r@|I+U8h%h?kq>wotxgJh+} z2$kqc{=wUIf1GXSjU83551e>g%s?lU+e0p=lcw7{h=Op}iso0 zA$0B;m9rzdMX$D(S?cKt@UZ)MQga3EPOZ3tI`F+XIU{3BB{{<>S!JqqP&w!_+C zVTbf`SCP4eX1S^=U?1UNx99EKw*$*UUVEQ&9Bbs@rJS0$iFy))2Zly6RzAk{s7v&U z)?y#SupX_}6IZ6k)y)#Kr#rK4zgxo>Y@n&>=i+kV?NuXgzw}id8WkOpW`2c*49(WM z2O0-)D1N_pz#~Mo#AfaAvWHK!j~lot6@6^rF>Bi}X+>#2y5D@wBjPl?M<>- z_Nt*_5c=3}-4TzvgYz8r4~foQ39_yce)_sCTC8|RvHi&XpFMST>CXBcbKiU8BBT!J zy?B4()z`P>Jw0(bs0o)mGKr$VC-b8!=ti1Qld07lFir?3j&e)))e@R0LEHCbx&Jsj zLsdNR!tGJcyc-ZV|BN)Y9rD5e@efVBPeMf3PU1z?-i?GuZm#WSECNqcs_ME{3w ze*RK7kmuvRFMU|6@#C;u_SBei#@NZr_}ct2x1Ij(KV1Pa{~SMjK!e3iC#T;XL z^WiGbhxQqFW6tcHpMjj^h|gEL!%HOcJXG4kq`$rgBFO*vJ%kWA?{9`ioqJw~!5AJo zWW*v7uyU!jr|?!H2^56hf(v9x(t;au$&&r^{=p?nlDy~0H?s+m%7kPX5??4SA%7&{ I@Yx&x16d#QKmY&$ literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-immediate-start.png b/services/FOTA/docs/img/fota-immediate-start.png new file mode 100644 index 0000000000000000000000000000000000000000..c7442df81c2d369137fa6776f36c9bd59984df48 GIT binary patch literal 19561 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 literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-immediate-validation.png b/services/FOTA/docs/img/fota-immediate-validation.png new file mode 100644 index 0000000000000000000000000000000000000000..cee46c6d5833b0580549d97ba1bcc65b2aab9347 GIT binary patch literal 31299 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 i1&#D0qEg9V}hZkXJ;$01azB0gXnFIbY4 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 OVP!@2vqkdexBmxMslVg^ literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-service.png b/services/FOTA/docs/img/fota-service.png new file mode 100644 index 0000000000000000000000000000000000000000..6b193b9fba560a2a8cec3226cd5719ccbe03c147 GIT binary patch literal 63871 zcmdqJbyQVd+b(X=($Xa*ok}RBw16PpUDDm9(%oIsu<6(!-7VcMQc{}^$useJJn!>< z=R4mxzca=e<9E&RKVr{N#Y42cR z&a7``fyw%k7(B(oL_x*=&*%5lvX~>_}D&u{xVdyhgx6b|=S{i$LHS`U_ z)`U@I=79Nl_a{}eaV9(AdBP^q$!haObRy}@Wd1((@ z$X8lg-)e^XW7Keq&#emNV_vc#*u%2dN}E>7X}qy1jiK8eLm+$jp|3 zp%cO@{@NPxIZXhYlpUftd(aP)P963n*+9OO3a>(OE18${0y{+Y_u)K7ObFO%J-O@M z$LevKuo-qUbxj^>MH3lZC%s75Qo(rYh1L<0Ty~lEyvK4WUDa`s2!3XBHco#o@SD8( zk$HbvUiXo(+k=}vC*frLRkc0&)1pXA@mj*KyNcmzc#fUb%n&%`+ph|rEw-a~#tXw7 z;JiIiaA6d5?pxL5m<7j}52~lo{s3j34Nh^C(^?I2~*Ybq>Lyp^etdpPN2o2nOi?)KX5GC{)%b z8cca{dA>b zH5?|j7v$vk;p3vBK5ycQW>^U$l6NHauV_(A#6+wzi%*bwU5zw(xS70%C=|>>&GZL9 zP3$HP zYoaiZDTeg5py21~`L4!X>C~XZHeVF4(;4Gh+qJgsDQz#!2~iP|jBL3aiG*(V%iWr! zwVMZB-m_(8Wl0=n>;3WQr9@noJ14FzT0z8$a45J%iiMLgbn=THXPR^|!O;R&`ww>z ztd`jzjf8ZJVz0iX@^HNpyO$=}I#;AHQl=~PO)Q>8yUB5PHkHTe@CP|CTHiqRX`MB# zSJ@I+Tt=i2w)2xI?VN%0gB9o+Crq){)-Xn3zvZFxLiSti2H13Y7KDVubbQI|M7GX; z6O&T(>gs4H-*vmV=KX{Axn?hcMbG_Kgi+BORTZu7jt=*;1t&ZY?U7}x35cTX`T0ut z$_W_p0pX%wZH#H@e4$7%E@^rmDX;T;iP6zfcFh7k*nBN*3Y$JW3n`Xh0E*On8$81q z`}LyayxIQuR>*2v~;r@<5Y%o<yI>P&JTR|B^#R7;?(!mu8qs9lwmjo1c5cz7bo)l$fpd7 z#Qg5~Xj8Rz#=k8M@8?1rDfsn9TUu?K&dyE~ldt8EVEB)|*XlHpTFMMN*2b@>HK}PwBsD5P$nNl3vrz?W{tr zAWjWxs#v5FiHD9v-T~)YQ`XILCg)_)(cLZCd$7{oIhvW3l{ybS=x1rBtsj-GG&a)O;n-?eyM9du6?tA~^DIF7tJoU^P)UF!_S>s~S|ZB&Zg zp6!nndb~QEAtZOW>`$ik%{)i#&hR$zIMIGjar2|$#t5iY^R?se&HBn=3x6*`IiYT9 zG)FSWda20+V%-^pBS)*v*tByBQ5&yEQnABa+`>y*{h^S)X(UEQiZ{y6p9* z2X{_MK357jCDz{Ino8?Zqk*K1Y>ism*|xDf8Gm2j4ELT0a%Ud>t`OjSVrgX`Fn_ki z?^^ARo}d&TOyj!*hNTQqKr-_W9xqh3I{rEGb2-yt6}V3Zg?tQ%prBwF@ypD<(A~8# z7yP_=wxv1;GrAhp0yJmR2kXDLX}s6A*6I?g?W#EU($%jcmxBll!K=@(*w~$=X0o|T ztEHyj@9z2LtWQq@IHo*llE0kM7dJyT;4vPfps1JW-2XkJc0aXLzm;g#^EPQyE#E!e z25o^MxYl}E(B9tO8y;25bu*`f2M`cYQRp9MA1^hXl@M%XA+q zv4U7(VEb#j+JcCauDbY!7sRp>wAFYxr$>X0j{9ybAf&|;vBfJEDgp0z3^oY3q4(I! z|ECuCW(7W5{I8>pyqp}5n_nCIWm30J0l(v3Fs5B1aCE1;bMo@?x;lwBdl(DBAWGs= zuCqJtOm}n$*&u`uj~jqyH6lDd%dZ3gq(~!Ec4F9B+$Z)jL5FSJ2@_kox4wJ+^QTL{jir7y!eOXBya zJJMdIOcXrJqzytY>S*i=CEB>c`z4+`+(;Xg`GCQOrP(tw+yMEnJLF(%yhBk^8E&#q zMBtR{OJBeK>%N~_pFYAwWS`)uj5I#D|JQdj-QXV7;fcs9=!l#lKeA`B>m510KC>by z%>Od^8BV`Ho`nDl>+`i)QS9~2N;prbqACMv#3>JRaxe@B@$*Du(>Xld-yF&H*k?yW*pbrOW19x1%=S>n@0tq0|d{npuTS+?c7S$|V}IvcI;cO4&?C zTb>&`5-A(Us3}E8?E5I>KCP2jpg}_ zap39NaI_46kPjAa+(z9teW@moI#Ih}Df`w+xc2UJxl4v1+~I1kW{$*5hkMhHZ}*p( z#Jz_2dDeR(i>I5r_*1`5^+xkZ#0DK0%!f07{&aEHeAGo$+U+-BpVLLz9cX@X#SgDn4+S*0_t%iB&j^2Loam@`%)D zx6hW&2vKeuLjpzDgp=tPJ|7a23A!sCB(~C!1!mc&!+@HXF%A zn$~lUjH)P-&6+)5%_3$94d`*(Yjo1l%(qxQ z^L$^a*ix->{q2t7@k65at{B@1tc#^v&Q>>A^R09NJB&LytJBCSq0dxEHP+2Shy!PV z0pn4Q8~JYLz?8NXt5Tqj5%+SN3Ep62cj)$QH`!&jMi_YtuO7YkY^!%Y*u;fu`RX;3 zyK`KMOw_7Zzc%>YvFH`)Lq#NFXkXd8Hw-GsUW&azIAgG{S&1cy zHi**jXu5+j49X>T8#gxgn3I{BrB+VY-q#~~l{``c{l6`1Dvwz~9_-*Z@9XdetF1c( z4myN#qw_!x__UvrWkmrq{q%56GK^qM8M2BG(Y#bU4wvS?y>f8>KA{LlWs_YNuYFT$ zN|)XkN$G~itbtKUmeQS*Tk<-$Ogr+x&P{b5rR^;cR4*Aoc&GU1%F zhjL4uy@|tiG3x$BytW+1?fJpk?WsC_^+VhHxz(I&=i>S}Zf7M5jk=Y>B5UZvv9kCa zgzY9eR3js@U%5 zrAeG#tDz@eyJX7JeX5m~K)zXa6h7Jt$zi$8X1}a6m_}l^!cbl(pPS!CN1uJ6(pbIp zr0GbFtWI?KW49|hiR-)A7Asa<&F3o^DUav3d5C(_1s>#PGFVNQ;a2Cl7S7pliUnW8 zSg#q?EocjEQ|&X7B&z+iUE&NR-q*!XIjtk+wc3QQz;6t4W8@GcXf(Mm&oU4(C`)(0 zVJuz4Z`;tG0HH*Ke+wh*{4*To+J&EljPc-(Xp&0B>fVbCgG!35()^+7cd?dl^d%8R zgWG^BY~SW{i=(`snA;#Dpy@B{{=J1h1zkG*<|*+-FAdoQ=ZA$l@@mq$t@+xVV|Wt2 z3(?e9ib6s{)$-R6ez+j$l8`926C!GhstgKD z)cJ z(sZ^cNxH<9FX3|J=i-jnJ6UISf8`G;E%7vW$>N!i(nZquRORT79JjGHi z%-)e)jZuFoZQ)mBbs>t*#S4R`yXw`vS%gC=zr-Uc)_*DUxNBm)fX$;4trx)8#p*Rt zD90)aR5)oMWEn_Z*C`fqcD<)ghb=Z{iv$x5KSwiqiM9q$Hs)b$_cN*F!W&(wyHio@ zVYcTt5z%ni3LCLc7x_;EVr~ktZ|{;PIn)H3J#Sly@wy5mq!#**Ka|gqbS)Gc)Mc3W z#fD@g1>J?s>Bg!yW1$j(p2VpVP072xS-d*xGlI3>8yM6VZa1{jU9&bwQfD!DB$rm; zHdFL-w?&!mJmm`l_>P}22G)Q&llQb2$c^nNaIcd5+uZy?L z8AzHyK|*RZ;ifvXSm{h)^U(aqeAwL6Z+!qq;dW*j-r@0c*i15BI&QJ(G<6`utj=@< z1kVny-}9bJ{9xSQc8?BJYB6qw56g^#oLy1{2c-c=J-G@e?b%s_7lH z!l8-@zY2O~lq5e>`a0#OJ>;<11bmjI>mOH`G*JvnQqQXo)Kmo1`AI-c%kBgdcYii< z;xsY3W$HZ;6h`8P-TJ|bF^&KFjSWdMy_FH{q;Rh!^o=)6i5l&s0~=jc6YsMdIh=ld z?-UUNdP(#l)XbRj&C1m*M5BpQY#&kxTbTQ>*Zeg^Q8dFQk-dCNp?&*Obl5axc6mGM zi^fZ^?IEVTdcsx~4~v^FOt1aPN^qI9ct=*A-`jZ)+>&9^g(8tfewOG0gEHD$j5q;N zF5zhML{sHU`{y|PPeCE|{>ULm%Kr-q_p8mxVuw(|Sm~7WOD&gTqajki=k&V-X;Z_^ z19z^yi2pCw&h&v0QUKDlr?d-ZXE18b`o+_&!b)q`0QB996T8UCxoQhWDE70*EvyOjRE{uFA<<*!&f<b9bLGsI(=LKpnL9OReJT0UX0Lc)k=g5)uX8&y!kXjd%> zJ`dc@c4%A5L!*!FCyi%Xbw`8h^h%65jdlyBh@21i=4vP(2uV7O)z%e0U}5c&PF4G< z$NDGx@Qf?wj8UxZq5l(3r$(}@c=ua0_wS{=UCu9lpYcQ*9vc4?mk}S#1_yU>Sjac0 zc2qB~v63+IRJUa*j18N#kh2C;^~}~P6QRC%mOx@zh{CtkUT=0y%+Ca@U*x5vUbthT zfi(BEgILA8*pWuwrdy@1ycf(RuMUG9Lvr;oLrLb)=N_rU&*do<)1R{z?tI*V#|sJQ z35HUlhLSFbd0aPHX$wX_b66#NetVR@zQtfuXj{r6q>HG6IheH^Jd4ll7AxDMEiU&# zquShN=P8F(H9->_(#@&*R#x~atsE8dCiGphXyPJU>8@D)f##zXj(J2_`3(+|>Pj5b zP>;Y+Tju&Vf(%n#qn^tBN?az(*P^Eygm+W>3QX-hoIf9$Cvg=k>8{Aj(i04G_!8~c zm91P>H`@;=rD+}5@SReoPCt~-k|?Dc7NQy|!k}mq3ZUq~i1}S>2>-_lBPcV!<<1NK z)OsQ!`{^$6`@4t%9^lLWPRa5=J`mJcLE&U!*YEBsEFYhBt2FAwsCRc|pe?@Vnral? z%wVH*I)AEr;O1CfI1v|&4IrhSX>PDuA0Ho31A>b8_}Jb9M(G)~J1>cn`BqA*<3>vq zk^Bvs903;LsG6GE>`0c_$*-{Ux7CiN#0 z!0b$rmiuihqZ<#o&!d;(hTML!f@ggng?T_p-aM#}ghZd2nR#)xS1OQ;)SI#M#mxk%b(Ey>#Fk-zn6Vrcl## z+x<2f0@7C-n11bvttz7n++Nu^J39jh7#$U*qXS^ugFtMWKR4-wD2@7K;NmJZx&OM{ zYrX~llu-%K6S%C>=xg;-00j0efenX2=^KDP7aLpv*z)n)3BckC;jyaQ=bbvm#l=62 zWQqXT1E6}6F|;F~kOzRT<~O4etvH>lSDaE)Kb6tH04M?!x}CUwp8!&zbK&bPyc7^Y ze1C!AVb=%hyr;bsfeHn3B8wDaSCvvN+)l8RCR)ln+}ODqRsIb_0Mu0{FaVM4TFO@aZ7}fMb;! zoNc6dhTno5JWnd|u$#>5Lp%w$wa!o)A0-8aD2Pie+WaxRXY+QW_bx?e%@-R8tWciN zew<3E|8RNxBbcSC(PSj95E@{Y!sq4)Kr8l8A!mROU2Nv1E2JlOU48dP*J}VEZ%Alp zDu)^FdhYc5pTt%xD=RtFEw8h$128Gay`JqZHEa7(Dx&ip4^xKo%H_Y$@T%N2cz+uF zF`WM*UoxKg0|p^sP_0ffrv>=ENZaIMssa1^;u)_v`LFid@6bXqI3?vGm2!aYH=j(Z z&vrsT^h4u}a4M}2SKr3eSS@)1{4c>XCpQ-W#=Ql=mVj9#^Lql+5sYz}=`h~p;R)_c zu|aQC&-+71kb21_CnVrwVaXN9<$V3ho#^Q7uC85guA+i({sq8y;!ux^<2P>s=9&ZC z``A7%-z@-voP&7-YCyD`UGlsvu9DTMpe5<+z!a~wVWMpSZYf)SE$1?cGnV#=8U6#BkQ7$E2oXnRMa-Ad(Jz5`dQ{~jm4SrhLFTQMn&ynQ9 z?BX|(TR9_<`+M*@>CPxlZytVI!JLzq;WKO&)kNoHV<6--4`^l9ZgSt9h4MJTRy&2F zX~vrrxQk5K^b z)Ft$ZLgzn!J=@dV^ePZ=0)6;<%Gw?|9)*4a4qFN)A#Ve_x!%ZvW$cPK8#AmE55{HU zZ9+*vKqrlfs;YW1q4H|n^3`Rr0pZ6IY-gfH$Gt_(MG8)HHWv$XbF~j-m8?!MjjF`o z=z3HN>R%hoqldr-443-;awl-xP*i&u_3ewGC(o?>(aD&hV&SBXXNzu;uWewAilj@u zUma&aJt4D*Y^!whGb`Nl`ebVKwITDz#}fckt@WXucbL+IC`m|RXF4(gU!)LhmdI`M zL&TWvjzz%ZSc$Dki0M)1a8KlVO!(sG9*(gvp?23h<7ROK1FFT-?J1f106{`CuGDL# zsHwVp+3y`}yGfkHk)FjTbhRe1CD)k#9*6b$zOITnz;^*qyK4SZi-1+MP?Bsb`C7n3+~%kDbTKV7sx(Kn{QlQ3fnzZo7=1_0vfULd8(Eqx=y=5;W@;j)$moh zR7-`Pit3Rf*OGgsqW+lRWdaV=bONGMPI2c-{+eKi&6Vr3rT8fDN{O6hUdc2vqzz!c z8MFYewg;+>X!zVvU*K$T=;R))Mb)OctP?150HA-DSE?i=qntkSW%tMX4;6YvDxp0b zY~e=V|B3exCG0Li>N%}j3hFrlfl}pUp~AGSj4zEFS!g{nG6Epvs3>%StM^Q1^Y*9e zy)W)*l7|RiV~B>6^6@t9i7D!@5V8=umW8Xb0sE3_{;{%hH={bgXOv-6sDya3Kwhkb zn1Ta@?+-*OYZ?o4U`sc2x;TM12bSIu$6HN@A42?64${`%9y*nzr>{Rzyg|CO>jk-Q z^b%C2S09F3eu&kd}e$nCup zvpi2(SNmca3L(L`$%94=iSS<-I=1uk^Y3`XxDe@m+|@T7WUD5Zc0bfQc%_%hXQ!1z{ARONbc|)r2S3DT5_sP}9P0`KtEW;A0{9;DLA!{Jt%Ud(|A=cLmsE>P|`rGJhF%FnE-X+0o)yfBE)CrUKG2# zA#m1*3u)SHbImwPB^oaMOf@ZyfvF3Cil%-@_ty5z1yECp zv73MSpP$HVrC3AliybZHTOc8tn6?k?vb4~fe4yWc&=TxVg&=g+_xd#Cv}VauC{0iY zFn;4xn0oN*+hsKXn?L&73rC=4?SgD6^_2q#j&#niqva0r%d@?1wy_#3ZNN>u#Hmw; zuh6XmOTcxqH4*Lgi=u;^S~9M~1^rK$YsFzA=X^}e&C1AV-uf91FdVj2_N9*>DOdSS zmzhm5hwpi{-5;F zcY!;FdPjWEGwhFBUS1aRM@wbZ6?Av!HQx#4S{&x0prXu^P8~JwGVevJi^n~W^9THd z-e+pfu|{@4Ys3FeehdUZr(4WbFY9#4UZ1_?Ag})Z0V&hI5oAl$Uo)wFBKiZUTK=8D z7`!zE+{|lh5lKLAV7~nbcBqV`q&Id;d&QBL>fb4nV2`0N)^`wezCS7`C}8#8xzfh{ zd%zgB1d)%p|6(!{?i=aM{Ay%KQ*he(xu>AgF? zrcayh%r>q2oy~u^Gt=#5NE{63^<5eCi=i&Q{a+9LU%K?B7!IW?jzyatxOJWp6$ZNX zZZapr!U`p<>9eI~!=gF~gXWcr=AT+>W ze>D3OKrT5;25F&16y(cD1rjn#&PM|_AeBPlMj zIe%VNJ$YB(ld)wwoowNhXIMWvg)NZI$@e+zzA-T1FJND=;Y5gZscGMKhNso3)%8225>lX0}Nvl-3C^Ett2yCop+&|`PDeX4U6z4iLasK8_o*VHNRR_lMpX+e&;xnO> zYMc#lC9@gCh{q1>M@QpjZ26N#g_4-YL$w|9q?samsxC(~S+%^n%y@0tWADa~f_FMq ztj@t)asl8%>&)nw7d3jFa(fMx3LIsiP;XI()|m_>(b(MkLN<-hnHy6WH+*|jgS2RO zd+j6(BO^&nk1V>zgBJD9`Gbz zRsoxZM&yY847W!f5Hy+qM!SYAUxyM+EmrTk?9$J}Wtr($%1x|?a;4R8<|ZW|$1tfA zZ>mo;o&U&IgFwyoGhOPP1BJ4V+~)$M^~ja3liQVWkFHojP~joRwP`C> z=yg`{z&_-f8QlTYLJ7~;`eL`|YrTjyeV`wvw&yf&b-bR=?1Ty2&ig|oVkPvyQ%gKa zs~7oKChBh1xi(4=zeRI&6+^ zO{x=pKVfOkj$zTZy*j`2x@5vJ^3xd3eMgyW>z-X6)aa%RS&Vp{m3dfSGTN7b?9i4! za!>jpWnfqsM5(x~NL46uq$)TW?RG-hI0HFv)OIo?%Aa%#7aRNfV%yFdzEP)DWjbL1 z(hL|?=K~6D&sr^j)*xiXY&t6vNi|WA`=WHWw&Sv-(L(#<-hIl@OZ(K06}_3pH|JV> zM)E?p?OqDf@;uxa9XCZ%D8bm&S2ra zDux?5Et10jOHxC+H{JbE*1~(Tm`D%uspOTDC0*kivG69@Jn4zyVT=@%l~uJ=wB)#c z6FP`Ox_S-&_DD+kg?f%egHgfzJf|hiF!+R5RL{D+4tv$IZ4Fx9M#D=K59~YerSmru zLB+2j8_Vr(s>OtrRq&`K?R5%&!S}zX$|7I9L$NSP14*OC(h>NA-l^P6w6`y{o2+*y zngQQRIYLzbIpS-7Okm^n>9dL{)|6RjsY6A7%Hyl?0!I8_8D-gsrjO1(aUFvnUjgJ}Y8mvIT%J+Udk9(TXE|31qn87lclDDYO)!g5^vc)`vyoTn?i41 zy%USc$Pf7A5UEryEBwCSYz3%=SX|tl2xxmL60{QjKl2uMqy7hP@vqU2H!gZ!ioEzJ zl#iA8d^yWdJ}1nI=nS9?A9|xYtEi=YWZ3K42x`hfbwN;T=by$`FV?hp{xge1t_iru z6vmb3CW_4Qmiq-tnw!k%V98_Ia6E5*ZA(DN^bgrdvK-HIVJ8DzUP}&}13$IuVmZx} zSU`x&TaK8o3B}XzI(8rlk;`3Cv>iEq-5yK0%5C{*!#A%(c9ytONHR$TfL zTvm(uz=c5->3NCHMp22eXTnI5rwWx($Fwyi?XfT;o#wyZ%nEAWg2*udE3;*}Lo-Wo zU!eZWN#w#DcBYd-y*s+7!s~J2{o@s<;^MdYZRI6RB5(MGVhQ4{KpN7DI_5`bg2bTrpSylR6>Hrs!oDjiFVxqJEG8{m#VRG{3LXPN(GH-H3!?zVuB1PX zrae{p5AvZ<(d%U50$o6ZNv**-v)lOIbjF{h=Ny;Kf&pN`Rw6qDRUUP7z;sDB%(r(E z@W~-&y$aS}FHX$zf7Qw53Js$Xr`m5%)`^Bn&`4i-lr|_;8l$%p#GXDLGW+?Li7P3i z{YJyphF>T!j5HF9-lb59b$C8UeWnxiz;fF*x9S`!50)eAlXnV3VANd1D?WsrS@rsh z>uxNoEGY>qRLA`+Q!7$ntL@Xt!%I#SmJZ%&0AeU-sGoJkGblfB>DaChkiN>P(WmX}+A=2XJ2=NTjL$Qq064W~rVy-~`?-mq*eb)B&`s4jnJ-tjDQ+WS`7baioC}(o}erk~} zc`>ZW6XGe8{1S0X6p4QgCFH5r_C?Owcj-zrDpph6*HxOiKZDAQj~R()CPqleR~LRU z2;70svv*rP0!B9*0s|AuKa|$AwEfyJ$|zFA+VP-lUkjti%|<4-e6D<{d_4gU$q!Tx z4ogV``=M|5YnJ55JgUSZDP+Y4yXC6>c-<}l>yh>_8BFa;BW zYvjj^B47sGjDf*W4*B#>J;*;Ni(F81(*SpD`E_}(URKJtRTl_ktW+Q%Vdbs*V&JvnY)Ymwf@!wsI&5t{VK<$q${!Yqq7W#Gn zm0ABUTzc8t7;-jfh=59H@6;VO5W4mRr{Pb2o$@ulZi(axvql+^l1QhSW4%vYv~$0? za+|%auGQFDsBd)L@tty-V^g|rdFWIS1%k)M0FmR>Ip<2nFuDL$e<`kuhXC(1Wa3>H zXS_)CGt}{}!~)COoTiHhe$5an=90S2qlggoETF2=?>>EAeRcNA!4yxL zanZx6w!BZm7a1pk(*p6-1X!%F?{4CzK02L*@R=<>(*nasZYLH85m>D94G|$BMRUY6 zMItVK&1TO~UKd*$>H(2H0E{-}NOrFu@F6I9zJ4W?UdExUTzYr?!CwAT9hOHzH0>R*};cYNhL8 z4?5jTXKRvm-vD7ajbb&p(meud&AO_fu&}oAV$J$yuXBw&5Vz&SowmmEyf;Qm7gPBg zdAx2AAFDzz4Cbms*G_2Ci!7F!OaQY8hb*jzIhIb_0U4RNx%RrPCcWrT-`!(U?erT6 zZ~)LXV20nH=kOA5yDfS1YPp)2_Q!Fp_v3{PBq!jP)>Q-{5MfIet8)<@$uj!ti_YY2 zs+nhImX!US1Y_XAPG-$y3dHu`D(=osWg<{fRuR1T2?L=#nZM>Op*r70?>gPPE+{^k zMNaS-q^7ia@#FVA883|MY#^GU>N0e=7kQiAG`>H?=)= zYgm{NWHEQjt90Cs-b))8&~v$we)$EYi2>AFA7eL+qM=Fe}ANo>tthVQb4zpS%F& zi~l%eYa@NBJRAW5E3R%W?t;gO*^fzA5>okS3_2|=qN)35lik$e-RSArtb|UP6~-W> zyn>=Uf4pFqJpQmJr+iaBbtio^TRoV5MDwMB&Ft~BW<^tX`=SAKCT3N3%)rI%=SWgc zcZq`(BSg7004rNo3e<~g6ij(i1dmHcZ+5sOSY4u~64)v73QN~mm+^sfGp+TwJldio zRdd*NodZ;6OYp(U-rhpJ2k?cCds?5R%NF7^E_{^~3V1!+QKwMxhu<=Vxv1CLQim+) z^;6mwVGpTa~WrTSViZ%Nx$?Yq(Gs>vI=cXiNwEQYg+ z&0SFQ=mmY8xo1RF+Hj~{DAr>JwOr6{?m}&E33=CaPiQfQH#jht-8LVHCGWyNb1+tH zePq#uyxCeNL5dJj#-@H1Jlf8D>5>(fpwAxFOU{b7llx^xVz+o6^0qxIR zoiXn2+2+}6SZhV7@7tczazl>GLK!+QdWKkuD%Fh3OzhOpbaHTdI+v^yHk#2su;t&? z9k%N)=n|^KdN#ovrVCLkX2p(8r}8fo)4|!dbxAfcx2BY;Hl1vMe=b`aqM9X2eX^D^ z#ntZvxCwJInYBK{^+A#X$ZU<(#eVxOZ;^0KoD>*g_Mh#(0W-WvjVReV-dyNn@ZSpD z8=XEbkUj-&555ej4q{paq>^XOa(&!)*?5s>Xk9d38A&TbV&sQ-g?l>!(VyNz$gY6m z*ojqSOsga&DkjG8uv#u>bgO1a+rvT0`CR+g!q-=+H|YfMYEYWmIm%XM+p z^WT5Uk)+Xg0J$_hm#|_Gi1iJs$Nd;Av)nj5Z!WO(|#c2P^$nU%=l*No@mc z?IcyByF++ohsgMtrGa(PdCCuL(}wCh2MMabNKj#I)<~&wcc#*Pu|XDSWQ3Oa z&Z-y`=|!6YDt;|Wrdb6O*MYK>?xm-Da?A%~wS6Y%*m=koCRrpr`5I7xk-V(HF?$mM zT(l#okb&w*NB-%d7};({$os;Lbh6-H1iff((54bn)96+cKg*_n0l7SAXetc&={Q~H z#<~T92Y~ZC83)eMtqYZhgmwB98k)ueesl(lOD0dV5&!{u!L)t4M_j;5vLq7z25L~z zG9pig(Xl*}I$QFh5v5-@#SS+oK1sJu7}JmLJF1eJ(!<7aSQGg>25LB-we_;g(QCYc zB~0;~{N>Kgu4A69s5LYZQ2@0l;SV=RqsjBJMgCs~7DwwRkqDTiZ68e%nG12g!7G*- z#KMMB=e(mRL^7+6s*Tf0vS2c7OrO-Vuo-D(Vip_S-hwLn`_lB21T|gDJWVAeX>XD7 zweD`x`XM{Ie##a7A2~2rJd359tCK0^uAe|7f`l@~&#R1-`kh!%{ct@QMWIG(d%7#U zS)25Q?>ivG>t1#{0nltCer*` z*8KWY57?i5Dk5t-e_X!uD3F);5&X%Q{tKwGqS@_WuA-lohG?uQ)Pu<(_KzWgBu<%8 zw>PNB^R{<-QS170$pu7^jUh7K9r<4SP&Dd(Tw08R>-zyR{Hogrbt6#DtD1qK(Eczz(x zyA9_ZZTv7I2!v`pj^<6aYxc2FK7!sV2AT>dxG|1dUY)V&=c2`)1lPb1>g#28gH@{$ z)qmXe&eS|>49Mk2YEQ)u>K)7$nmptiK6*?7*)LJv`-}&mdrL7@JbgCL)pW|NIc7pg z*dbD#j@t=^E%P+{3=sXZ317j)n|4&R#(?q zJd1C(OIBv0ft$Prt5=tpw45sG1NS}TjOS)Q_PWEZMqX^KZ0d*D4 zlKI>8t~^)5>&34z*WM4BYCIm%#;*LwUk@W&%H6%+^;Bk&o&N`e{29Arj)gwu7{7(- zE}5(m_(eeJ7)!*5b$(&xYGdq}&QlC*hCy9VzJU&c)n}0al_v(IECgtk%B{Lvr&IB+z#uUu(_L2Ak1wBW< zocIAGJ(MUtj^5&VGBmlmJkrBWzZm7LEdq4Kc!HI)elo@%N(~y8C?o(Rlqmr~v%TIO zUHt%ZdU}Ce?tNRS*EJTGX8b{xC{F@F2<6LtC^N!+pGwtTRWs?4SgVDpg)yMZzRnDmv2FOM*x%qwB?)QQZ7 z7k4Xv`p=aI)x;H_wN5OST;2rs(+P^)xFcYg`#A+aH~`b!I{(kBlz9z137c zU2=Pyf`S(&mkRbuS)?LjwxdQUq=n+tHoGCWAp+#O3b0@5H174z*J0FAH}25>lZTG?S9}bIt>k zAC5l0D=wO}Jf_zVoZ{*wV*P?`j%BG(q7euH$E};Cmg(n@ygQ0epa5|WqW5XlLEKLO zNmUEdC$;!;GK;`#IVE(=i4zltd+%SW|LvwgiI1G0D@_tIZ^77{Vz-8b*`0!(zn4PM&-ny#KT^o|$a)L#^*#X;%R)K9fOzX9vJ3|DgEd zw08>G2N(!wYKybw4z(%pqVrl{u#SBHBnSIX{u}S+>+es(b9#ne-fv}q_-Q|cVNa_| zyCH|RPvOsa?arbSCqXNKn}+}^83~DDiW|^}4i~95f-t^1NP=8gs0O_PJAYgVGv@$+ zH1Oz6JoNNl%WZHD0t2l2UG0Et5}g3c<)7Vnlm^Y`Uve=vN#+bi#-acCfkBB8v~f0W z$@Yxees38Bbq(lr;V~We0HHDKF1-}@231ou=Tkkg9wcg&~4!vdQl(zOuu%qsJO-X9Sv~iJ8`sK@X3_x9? zx&7-;HfoBD?UoJF^tT<_Q7hq^6-0#pHXou|8F1 zKtKcS&eWd3Auj2&fz^w=1|^wZtlk%}5ivLSlL=Ro{azX~C@N@5`(Bh&p zd|ZN>>gM7Ro)tsiu@8#vnn(f()PAgd@KOxV|cfZ9mX8R}4$w3fnF$o$Oy} zg4Jy+Y2t{;YSqQB+|kD!fo_@>ue@&fzD<;=a+)U?7v<3Y+4C80o8wtxbFUn3>SUYL zpvdm_C?bjfxVU=YQ4a*<9KYfL`5p3S`TmQP@Bi#2;RgW#RcVjB6kqsWNqEa1T(@6is z4tn@ULotQ(!0o}td+;lBNaR${BN!ssBDh!&UfHdO@Mmzh{7D`($*oU)vRL`}uI>Ky zFqJ7FlsQ4_yw7~~6vYOU>9

HnL5SPVLqzO-B4dFm5U_&A&2>-s6m%$u`OiV-Zq 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%0A;=>+m&Y7Nw?y#r*Tote=2Bth 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 literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-sync-lost-packet.png b/services/FOTA/docs/img/fota-sync-lost-packet.png new file mode 100644 index 0000000000000000000000000000000000000000..97009345e40a80a57f2504bffe86e0b1522e6588 GIT binary patch literal 6000 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 literal 0 HcmV?d00001 diff --git a/services/FOTA/docs/img/fota-sync-lost.png b/services/FOTA/docs/img/fota-sync-lost.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d256f368265da8cacacfcb3e1441f6ae7774c7 GIT binary patch literal 43624 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.tex` + +Then open the `.dvi` file in the appropriate document viewer. diff --git a/services/FOTA/docs/latex/fota-bsc-packet.tex b/services/FOTA/docs/latex/fota-bsc-packet.tex new file mode 100644 index 00000000..6006c9c7 --- /dev/null +++ b/services/FOTA/docs/latex/fota-bsc-packet.tex @@ -0,0 +1,20 @@ +\documentclass[11pt]{article} +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage[bitheight=6ex]{bytefield} +\begin{document} +\begin{figure}[htbp] + \centering + \begin{bytefield}{8} + \begin{rightwordgroup}{Total length up to MTU} + \bitheader{0,7} \\ + \wordbox{1}{Sequential Fragment ID} \\ + \wordbox{1}{Data Byte 1} \\ + \wordbox[]{1}{$\vdots$} \\[1ex] + \wordbox{1}{Data Byte N} \\ + \end{rightwordgroup} \\ + \end{bytefield} + \label{fig:packet-format} +\end{figure} + +\end{document} diff --git a/services/FOTA/docs/latex/fota-control-packet.tex b/services/FOTA/docs/latex/fota-control-packet.tex new file mode 100644 index 00000000..611782bf --- /dev/null +++ b/services/FOTA/docs/latex/fota-control-packet.tex @@ -0,0 +1,20 @@ +\documentclass[11pt]{article} +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage[bitheight=6ex]{bytefield} +\begin{document} +\begin{figure}[htbp] + \centering + \begin{bytefield}{8} + \bitheader{0,7} \\ + \wordbox{1}{Op-Code Byte} \\ + \begin{rightwordgroup}{Optional parameter bytes to extend FOTA service} + \wordbox{1}{Parameter Byte 1} \\ + \wordbox[]{1}{$\vdots$} \\[1ex] + \wordbox{1}{Parameter Byte N} \\ + \end{rightwordgroup} \\ + \end{bytefield} + \label{fig:packet-format} +\end{figure} + +\end{document} diff --git a/services/FOTA/docs/latex/fota-fc-packet.tex b/services/FOTA/docs/latex/fota-fc-packet.tex new file mode 100644 index 00000000..2248cb70 --- /dev/null +++ b/services/FOTA/docs/latex/fota-fc-packet.tex @@ -0,0 +1,16 @@ +\documentclass[11pt]{article} +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage[bitheight=6ex]{bytefield} +\newcommand{\code}{\texttt} +\begin{document} +\begin{figure}[htbp] + \centering + \begin{bytefield}{8} + \bitheader{0,7} \\ + \wordbox{1}{\code{XON/XOFF}} \\ + \wordbox{1}{Last Received Fragment ID}\\ + \end{bytefield} + \label{fig:packet-format} +\end{figure} +\end{document} diff --git a/services/FOTA/docs/latex/fota-status-packet.tex b/services/FOTA/docs/latex/fota-status-packet.tex new file mode 100644 index 00000000..5be724f6 --- /dev/null +++ b/services/FOTA/docs/latex/fota-status-packet.tex @@ -0,0 +1,20 @@ +\documentclass[11pt]{article} +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage[bitheight=6ex]{bytefield} +\begin{document} +\begin{figure}[htbp] + \centering + \begin{bytefield}{8} + \bitheader{0,7} \\ + \wordbox{1}{Status Code} \\ + \begin{rightwordgroup}{Optional parameter bytes to extend FOTA service} + \wordbox{1}{Parameter Byte 1} \\ + \wordbox[]{1}{$\vdots$} \\[1ex] + \wordbox{1}{Parameter Byte N} \\ + \end{rightwordgroup} \\ + \end{bytefield} + \label{fig:packet-format} +\end{figure} + +\end{document} diff --git a/services/FOTA/docs/latex/fota-sync-lost-packet.tex b/services/FOTA/docs/latex/fota-sync-lost-packet.tex new file mode 100644 index 00000000..cfc386cb --- /dev/null +++ b/services/FOTA/docs/latex/fota-sync-lost-packet.tex @@ -0,0 +1,16 @@ +\documentclass[11pt]{article} +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage[bitheight=6ex]{bytefield} +\newcommand{\code}{\texttt} +\begin{document} +\begin{figure}[htbp] + \centering + \begin{bytefield}{8} + \bitheader{0,7} \\ + \wordbox{1}{\code{SYNC LOST}} \\ + \wordbox{1}{Expected Fragment ID}\\ + \end{bytefield} + \label{fig:packet-format} +\end{figure} +\end{document} diff --git a/services/FOTA/docs/plantuml/fota-deferred-validation.puml b/services/FOTA/docs/plantuml/fota-deferred-validation.puml new file mode 100644 index 00000000..24535b9c --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-deferred-validation.puml @@ -0,0 +1,31 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant Bootloader as bl +participant Application as app +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write BSC (fragment ID = N+1) +fotasvc -> fotasvc: check fragment ID = N+1 +fotasvc -> eh: on_bsc_written(data) +fotaclient -> fotaclient : Firmware transfer complete +fotaclient -> fotasvc: Write Control: FOTA Commit +fotasvc -> eh: on_fota_commit() +eh -> app: Start shutdown +app -> app: Disconnect BLE\n(reason: POWER OFF, 0x15) +app -> app: Close files,\nshutdown subsystems, etc. +app -> app: Device reset +bl -> bl: Validate FW update candidate\nSUCCESS +bl -> bl: Install new application +bl -> app: Start new application +app -> app: Start BLE +app -> fotasvc: Write FOTA Status:\nUPDATE_SUCCESS +fotaclient -> fotasvc: Reconnect +fotaclient -> fotasvc: Read firmware version\nCheck for increment +fotaclient -> fotasvc: Read FOTA Status\nSUCCESS +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-delayed-start.puml b/services/FOTA/docs/plantuml/fota-delayed-start.puml new file mode 100644 index 00000000..d72f522e --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-delayed-start.puml @@ -0,0 +1,21 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant Application as app +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write Control: FOTA Start +fotasvc -> eh : on_control_written(FOTA Start) +eh -> app : Start preparing for FOTA +eh -> fotasvc : return Status XOFF +fotasvc -> fotaclient : Status Notification: XOFF +app -> app: Prepare for FOTA\n eg:erase update memory +app -> fotasvc : Write Status: XON +fotasvc -> fotaclient : Status Notification: XON +fotaclient -> fotaclient: Proceed with FOTA session +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-false-start.puml b/services/FOTA/docs/plantuml/fota-false-start.puml new file mode 100644 index 00000000..fbe46d39 --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-false-start.puml @@ -0,0 +1,12 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write BSC +fotasvc -> fotaclient : Status Notification: NO_FOTA_SESSION +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-flow-control.puml b/services/FOTA/docs/plantuml/fota-flow-control.puml new file mode 100644 index 00000000..44b293ab --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-flow-control.puml @@ -0,0 +1,24 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant Application as app +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write BSC (fragment ID = N) +fotasvc -> fotasvc: check fragment ID = N +fotasvc -> eh: on_bsc_written(data) +eh -> app : Buffer data +app -> eh: Buffer threshold reached +eh -> fotasvc: return Status XOFF +fotasvc -> fotaclient : Status Notification: XOFF +app -> app : Process buffer +app -> app : Process buffer +app -> fotasvc : Write Status: XON +fotasvc -> fotaclient: Status Notification: XON +fotaclient -> fotasvc: Write BSC (fragment ID = N+1) +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-flow-ignore.puml b/services/FOTA/docs/plantuml/fota-flow-ignore.puml new file mode 100644 index 00000000..918e08bc --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-flow-ignore.puml @@ -0,0 +1,27 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant Application as app +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write BSC (fragment ID = N) +fotasvc -> fotasvc: check fragment ID = N +fotasvc -> eh: on_bsc_written(data) +eh -> app : Buffer data +app -> eh: Buffer threshold reached +eh -> fotasvc: return Status XOFF +fotasvc -> fotaclient : Status Notification: XOFF +app -> app : Process buffer +fotaclient -> fotasvc: Write BSC (fragment ID = N+1) +fotasvc -> fotasvc : Ignore BSC Write +fotasvc -> fotaclient: Status Notification: XOFF +app -> app : Process buffer +app -> fotasvc : Write Status: XON +fotasvc -> fotaclient: Status Notification: XON +fotaclient -> fotasvc: Write BSC (fragment ID = N+1) +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-immediate-start.puml b/services/FOTA/docs/plantuml/fota-immediate-start.puml new file mode 100644 index 00000000..3b340248 --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-immediate-start.puml @@ -0,0 +1,16 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write Control: FOTA Start +fotasvc -> eh : on_control_written(FOTA Start) +eh -> fotasvc : return Status OK (or XON) +fotasvc -> fotaclient : Status Notification: OK +fotaclient -> fotaclient : Proceed with FOTA session +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-immediate-validation.puml b/services/FOTA/docs/plantuml/fota-immediate-validation.puml new file mode 100644 index 00000000..6a450210 --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-immediate-validation.puml @@ -0,0 +1,21 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant Application as app +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write BSC (fragment ID = N+1) +fotasvc -> fotasvc: check fragment ID = N+1 +fotasvc -> eh: on_bsc_written(data) +fotaclient -> fotaclient : Firmware transfer complete +fotaclient -> fotasvc: Write Control: FOTA Commit +fotasvc -> eh: on_fota_commit() +eh -> app: Validate FW update candidate +app -> fotasvc: Write FOTA Status:\nUPDATE_SUCCESS +fotaclient -> fotasvc: Read FOTA Status\nSUCCESS +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-service.puml b/services/FOTA/docs/plantuml/fota-service.puml new file mode 100644 index 00000000..1e342082 --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-service.puml @@ -0,0 +1,53 @@ +@startuml +skinparam componentStyle rectangle +package "FOTAService" { + component ServiceUUID [ + ServiceUUID: 53880000-65fd-4651-ba8e-91527f06c887 + ] + package "BinaryStreamCharacteristic" { + component BSC_PROPS [ + UUID: 53880001-65fd-4651-ba8e-91527f06c887 + Properties: //Write w/o Response// + Length: 1 to MTU, variable + **Mandatory** + ] + } + package "FOTAControlCharacteristic" { + component FOTACC_PROPS [ + UUID: 53880002-65fd-4651-ba8e-91527f06c887 + Properties: //Write// + Length: 1 to 16, variable + **Mandatory** + ] + } + package "FOTAStatusCharacteristic" { + component FOTASC_PROPS [ + UUID: 53880003-65fd-4651-ba8e-91527f06c887 + Properties: //Read, Notify// + Length: 1 to 16, variable + **Mandatory** + ] + } + package "FOTAVersionStringCharacteristic" { + component FOTAVSC_PROPS [ + UUID: 53880004-65fd-4651-ba8e-91527f06c887 + Properties: //Read// + Length: variable (depends on length of version string) + **Mandatory** + ] + } + package "FirmwareRevisionStringCharacteristic" { + component FRSC_PROPS [ + UUID: 0x2A26 (standard) + Properties: //Read// + Length: variable (depends on length of revision string) + **Optional*** + ] +} + +ServiceUUID -[hidden]down- BinaryStreamCharacteristic +BinaryStreamCharacteristic -[hidden]down- FOTAControlCharacteristic +FOTAControlCharacteristic -[hidden]down- FOTAStatusCharacteristic +FOTAStatusCharacteristic -[hidden]down- FOTAVersionStringCharacteristic +FOTAVersionStringCharacteristic -[hidden]down- FirmwareRevisionStringCharacteristic +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-session-normal-start.puml b/services/FOTA/docs/plantuml/fota-session-normal-start.puml new file mode 100644 index 00000000..99003b87 --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-session-normal-start.puml @@ -0,0 +1,19 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write BSC (fragment ID = 0) +fotasvc -> fotasvc: check fragment ID = 0 +fotasvc -> eh: on_bsc_written(data) +eh -> eh : Program BSC data into NV memory +fotaclient -> fotasvc: Write BSC (fragment ID = 1) +fotasvc -> fotasvc: check fragment ID = 1 +fotasvc -> eh: on_bsc_written(data) +eh -> eh : Program BSC data into NV memory +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-session-rollover.puml b/services/FOTA/docs/plantuml/fota-session-rollover.puml new file mode 100644 index 00000000..b85eecd8 --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-session-rollover.puml @@ -0,0 +1,19 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write BSC (fragment ID = 255) +fotasvc -> fotasvc: check fragment ID = 255 +fotasvc -> eh: on_bsc_written(data) +eh -> eh : Program BSC data into NV memory +fotaclient -> fotasvc: Write BSC (fragment ID = 0) +fotasvc -> fotasvc: check fragment ID = 0 +fotasvc -> eh: on_bsc_written(data) +eh -> eh : Program BSC data into NV memory +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-start-not-ready.puml b/services/FOTA/docs/plantuml/fota-start-not-ready.puml new file mode 100644 index 00000000..8b8b8dcc --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-start-not-ready.puml @@ -0,0 +1,18 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant Application as app +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write Control: FOTA Start +fotasvc -> eh: on_control_written(FOTA Start) +eh -> app: Ready for FOTA? +app -> eh: Not ready +eh -> fotasvc: return AUTH_CALLBACK_REPLY_ATTERR_APP_BUSY +fotasvc -> fotaclient : ATT Write Error: AUTH_CALLBACK_REPLY_ATTERR_APP_BUSY +@enduml \ No newline at end of file diff --git a/services/FOTA/docs/plantuml/fota-sync-lost.puml b/services/FOTA/docs/plantuml/fota-sync-lost.puml new file mode 100644 index 00000000..d3757087 --- /dev/null +++ b/services/FOTA/docs/plantuml/fota-sync-lost.puml @@ -0,0 +1,25 @@ +@startuml +skinparam ParticipantPadding 40 +skinparam BoxPadding 10 + +box "FOTA Target" #White +participant EventHandler as eh +participant FOTAService as fotasvc +end box +participant FOTAClient as fotaclient + +fotaclient -> fotasvc : Write BSC (fragment ID = N) +fotasvc -> fotasvc: check fragment ID = N +fotasvc -> eh: on_bsc_written(data) +fotaclient -> fotaclient : Missed packet!\nWrite BSC (fragment ID = N+1) +fotaclient -> fotasvc : Write BSC (fragment ID = N+2) +fotasvc -> fotasvc: check fragment ID = N+1 +fotasvc -> fotaclient : Missed packet!\nStatus Notification: SYNC_LOST, N+1 +fotaclient -> fotasvc : Write BSC (fragment ID = N+3) +fotasvc -> fotasvc: check fragment ID = N+1 +fotasvc -> fotaclient : Status Notification: SYNC_LOST, N+1 +fotaclient -> fotaclient : Return to packet N+1 +fotaclient -> fotasvc : Write BSC (fragment ID = N+1) +fotasvc -> fotasvc: check fragment ID = N+1 +fotasvc -> eh: on_bsc_written(data) +@enduml \ No newline at end of file From 9f3d3a3cdc99f9a86823f2b2c9f8a39bcbede143 Mon Sep 17 00:00:00 2001 From: Paul Szczepanek Date: Fri, 26 Mar 2021 12:28:01 +0000 Subject: [PATCH 2/8] Add FOTA service and dependencies Co-Authored-By: George Beckstein --- common/inc/BaseService.h | 40 +++ common/inc/ConnectionThingy.h | 61 ++++ common/inc/GattPresentationFormatDescriptor.h | 70 ++++ ...aracteristicPresentationFormatDescriptor.h | 94 ++++++ .../CharacteristicUserDescriptionDescriptor.h | 59 ++++ .../include/ble-service-fota/FOTAService.h | 316 ++++++++++++++++++ services/FOTA/mbed_lib.json | 17 + services/FOTA/source/FOTAService.cpp | 234 +++++++++++++ 8 files changed, 891 insertions(+) create mode 100644 common/inc/BaseService.h create mode 100644 common/inc/ConnectionThingy.h create mode 100644 common/inc/GattPresentationFormatDescriptor.h create mode 100644 descriptors/CharacteristicPresentationFormatDescriptor.h create mode 100644 descriptors/CharacteristicUserDescriptionDescriptor.h create mode 100644 services/FOTA/include/ble-service-fota/FOTAService.h create mode 100644 services/FOTA/mbed_lib.json create mode 100644 services/FOTA/source/FOTAService.cpp diff --git a/common/inc/BaseService.h b/common/inc/BaseService.h new file mode 100644 index 00000000..12ad0b0a --- /dev/null +++ b/common/inc/BaseService.h @@ -0,0 +1,40 @@ +/* + * Mbed-OS Microcontroller Library + * Copyright (c) 2020 Embedded Planet + * Copyright (c) 2020 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +#ifndef MBED_OS_EXPERIMENTAL_BLE_SERVICES_INC_BASESERVICE_H_ +#define MBED_OS_EXPERIMENTAL_BLE_SERVICES_INC_BASESERVICE_H_ + +/* TODO implement as decorator: + * - Way to add security requirements to characteristics (return list of characteristics?) + * + */ + +//class BaseService +//{ +//public: +// +// BaseService(); +// +// +// +// +//}; + + +#endif /* MBED_OS_EXPERIMENTAL_BLE_SERVICES_INC_BASESERVICE_H_ */ diff --git a/common/inc/ConnectionThingy.h b/common/inc/ConnectionThingy.h new file mode 100644 index 00000000..dc67d00d --- /dev/null +++ b/common/inc/ConnectionThingy.h @@ -0,0 +1,61 @@ +/* + * Mbed-OS Microcontroller Library + * Copyright (c) 2020 Embedded Planet + * Copyright (c) 2020 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +#ifndef MBED_OS_EXPERIMENTAL_BLE_SERVICES_COMMON_INC_CONNECTIONTHINGY_H_ +#define MBED_OS_EXPERIMENTAL_BLE_SERVICES_COMMON_INC_CONNECTIONTHINGY_H_ + +/** + * Connection... Thingy? + * A common problem encountered when developing BLE applications is: + * + * Characteristic read/write/notify/indicate events are handled in batch. + * + * This creates a lot of boilerplate code where a service must filter out by comparing + * which handle was written to the callback's parameters, figure out which connection, + * and then perform the appropriate action. + * + * "Global (modify this jargon?)" services are those that do not change behavior (ie: don't care) + * about what connection handle is interacting with the characteristic. The data going in and out + * is treated the same as if each connection handle was the same. + * + * The proposed API introduces a "ConnectionOrientedGattCharacteristic" (working name) that encapsulates + * the logic required to create gatt characteristic event handlers that are instantiated with an associated + * connection handle and share a lifetime with that connection. When a connection is terminated, these event handlers + * are not invalidated or nullified. Doing so would burden application code with the responsibility of keeping track of + * connection/disconnection events so as not to access a "ConnectionOrientedGattCharacteristic" with an invalid connection handle. + * Instead, the "ConnectionOrientedGattCharacteristic" handles are provided to the application as "SharedPtr" instances. This allows + * the "ConnectionOrientedGattCharacteristic" instance to remain valid, lets the service with the characteristic remove its reference, + * and prevents the application from encountering unexpected null pointers when attempting to use a "ConnectionOrientedGattCharacteristic" + * that has been disconnected. + * + * In addition, the logic required to create Characteristic-specific read/write handlers should be added to the BLE API or as an extension. + * Proposed APIs: + * GattCharacteristic::EventHandler::onWritten + * GattCharacteristic::EventHandler::onRead + * GattCharacteristic::... and so on + * + * Maybe connection oriented service? Service logic + * + * + */ + + + + +#endif /* MBED_OS_EXPERIMENTAL_BLE_SERVICES_COMMON_INC_CONNECTIONTHINGY_H_ */ diff --git a/common/inc/GattPresentationFormatDescriptor.h b/common/inc/GattPresentationFormatDescriptor.h new file mode 100644 index 00000000..90388f84 --- /dev/null +++ b/common/inc/GattPresentationFormatDescriptor.h @@ -0,0 +1,70 @@ +/** + * ep-oc-mcu + * Embedded Planet Open Core for Microcontrollers + * + * Built with ARM Mbed-OS + * + * Copyright (c) 2019 Embedded Planet, Inc. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef EP_CORE_FEATURES_FEATURE_BLE_GATTPRESENTATIONFORMATDESCRIPTOR_H_ +#define EP_CORE_FEATURES_FEATURE_BLE_GATTPRESENTATIONFORMATDESCRIPTOR_H_ + +#include "GattCharacteristic.h" +#include "GattAttribute.h" + +/** Length of a presentation format descriptor struct */ +#define PRESENTATION_DESC_LEN 7 + +/** + * Class encapsulating a GATT Presentation Format Descriptor + */ +class GattPresentationFormatDescriptor : public GattAttribute +{ + public: + + GattPresentationFormatDescriptor(uint8_t format_type, uint16_t unit = GattCharacteristic::BLE_GATT_UNIT_NONE, + int8_t exponent = 1, uint8_t namespace_id = 0x01, uint16_t namespace_description = 0x0000) : + GattAttribute((const UUID&) UUID(BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT), + (uint8_t*) format, PRESENTATION_DESC_LEN, PRESENTATION_DESC_LEN, false) + { + + /** Populate the format struct */ +// format.gatt_format = format_type; +// format.exponent = exponent; +// format.gatt_unit = unit; +// format.gatt_namespace = namespace_id; +// format.gatt_nsdesc = namespace_description; + + format[0] = format_type; + format[1] = exponent; + memcpy(&format[2], &unit, sizeof(unit)); + format[4] = namespace_id; + memcpy(&format[5], &namespace_description, sizeof(namespace_description)); + + } + + private: + + // Wouldn't it be nice if packing structs was more consistently supported by compilers? + //struct GattCharacteristic::PresentationFormat_t format; + + // In lieu of using the struct above, packing issues makes us have to use a raw buffer + uint8_t format[7]; +}; + +#endif /* EP_CORE_FEATURES_FEATURE_BLE_GATTPRESENTATIONFORMATDESCRIPTOR_H_ */ diff --git a/descriptors/CharacteristicPresentationFormatDescriptor.h b/descriptors/CharacteristicPresentationFormatDescriptor.h new file mode 100644 index 00000000..4d42bf35 --- /dev/null +++ b/descriptors/CharacteristicPresentationFormatDescriptor.h @@ -0,0 +1,94 @@ +/* + * Mbed-OS Microcontroller Library + * Copyright (c) 2020 Embedded Planet + * Copyright (c) 2020 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +#ifndef MBED_OS_EXPERIMENTAL_BLE_SERVICES_DESCRIPTORS_CHARACTERISTICPRESENTATIONFORMATDESCRIPTOR_H_ +#define MBED_OS_EXPERIMENTAL_BLE_SERVICES_DESCRIPTORS_CHARACTERISTICPRESENTATIONFORMATDESCRIPTOR_H_ + +#include "GattCharacteristic.h" +#include "GattAttribute.h" + +/** Length of a presentation format descriptor struct */ +#define PRESENTATION_DESC_LEN 7 + +/** + * Class encapsulating a GATT Presentation Format Descriptor + * + * See Bluetooth Core Specification 5.2, Volume 3, Part G, Section 3.3.3.5 + * + */ +class GattPresentationFormatDescriptor : public GattAttribute +{ + public: + + GattPresentationFormatDescriptor(uint8_t format_type, uint16_t unit = GattCharacteristic::BLE_GATT_UNIT_NONE, + int8_t exponent = 1, uint8_t namespace_id = 0x01, uint16_t namespace_description = 0x0000) : + GattAttribute((const UUID&) UUID(BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT), + (uint8_t*) format, PRESENTATION_DESC_LEN, PRESENTATION_DESC_LEN, false) + { + + /** Populate the format struct */ +// format.gatt_format = format_type; +// format.exponent = exponent; +// format.gatt_unit = unit; +// format.gatt_namespace = namespace_id; +// format.gatt_nsdesc = namespace_description; + + format[0] = format_type; + format[1] = exponent; + memcpy(&format[2], &unit, sizeof(unit)); + format[4] = namespace_id; + memcpy(&format[5], &namespace_description, sizeof(namespace_description)); + + } + + uint8_t get_format() const { + return format[0]; + } + + uint8_t get_exponent() const { + return format[1]; + } + + uint16_t get_unit_type() const { + // TODO do we need to do this? information is encoded in little endian but could be unaligned + uint16_t retval; + memcpy(&retval, &format[2], sizeof(uint16_t)); + return retval; + } + + uint8_t get_namespace_id() const { + return format[4]; + } + + uint16_t get__description() const { + uint16_t retval; + memcpy(&retval, &format[5], sizeof(uint16_t)); + return retval; + } + + private: + + // Wouldn't it be nice if packing structs was more consistently supported by compilers? + //struct GattCharacteristic::PresentationFormat_t format; + + // In lieu of using the struct above, packing issues makes us have to use a raw buffer + uint8_t format[7]; +}; + +#endif /* MBED_OS_EXPERIMENTAL_BLE_SERVICES_DESCRIPTORS_CHARACTERISTICPRESENTATIONFORMATDESCRIPTOR_H_ */ diff --git a/descriptors/CharacteristicUserDescriptionDescriptor.h b/descriptors/CharacteristicUserDescriptionDescriptor.h new file mode 100644 index 00000000..c14c13ae --- /dev/null +++ b/descriptors/CharacteristicUserDescriptionDescriptor.h @@ -0,0 +1,59 @@ +/* + * Mbed-OS Microcontroller Library + * Copyright (c) 2020 Embedded Planet + * Copyright (c) 2020 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +#ifndef MBED_OS_EXPERIMENTAL_BLE_SERVICES_DESCRIPTORS_CHARACTERISTICUSERDESCRIPTIONDESCRIPTOR_H_ +#define MBED_OS_EXPERIMENTAL_BLE_SERVICES_DESCRIPTORS_CHARACTERISTICUSERDESCRIPTIONDESCRIPTOR_H_ + +#include "ble/gatt/GattCharacteristic.h" +#include "ble/gatt/GattAttribute.h" + +/** + * Class encapsulating a Characteristic User Description Descriptor (CUDD) + * + * See Bluetooth Core Specification 5.2, Volume 3, Part G, Section 3.3.3.2 + * + * TODO extend this in the future to support client-writable CUDD (set Writable Auxiliary bit) + */ +class CharacteristicUserDescriptionDescriptor : public GattAttribute +{ +public: + + CharacteristicUserDescriptionDescriptor(const char* user_description) : + GattAttribute((const UUID&) UUID(BLE_UUID_DESCRIPTOR_CHAR_USER_DESC), + (uint8_t*) user_description, + (user_description != nullptr) ? strlen(user_description) : 0, + (user_description != nullptr) ? strlen(user_description) : 0, + false), + _user_description(user_description) + { + this->allowWrite(false); + } + + const char* get_user_description() const { + return _user_description; + } + +private: + + const char* _user_description; + + +}; + +#endif /* MBED_OS_EXPERIMENTAL_BLE_SERVICES_DESCRIPTORS_CHARACTERISTICUSERDESCRIPTIONDESCRIPTOR_H_ */ diff --git a/services/FOTA/include/ble-service-fota/FOTAService.h b/services/FOTA/include/ble-service-fota/FOTAService.h new file mode 100644 index 00000000..c4cbab66 --- /dev/null +++ b/services/FOTA/include/ble-service-fota/FOTAService.h @@ -0,0 +1,316 @@ +/* + * Mbed-OS Microcontroller Library + * Copyright (c) 2020-2021 Embedded Planet + * Copyright (c) 2020-2021 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +#ifndef FOTA_SERVICE_H +#define FOTA_SERVICE_H + +#include "ble/BLE.h" + +#if BLE_FEATURE_GATT_SERVER + +#include "ble/common/UUID.h" +#include "ble/GattServer.h" +#include "ble/Gap.h" + +#include "ChainableGapEventHandler.h" +#include "ChainableGattServerEventHandler.h" + +#include "platform/Callback.h" +#include "platform/Span.h" +#include "platform/PlatformMutex.h" + +#include "events/EventQueue.h" + +#include "descriptors/CharacteristicUserDescriptionDescriptor.h" + +/** + * Maximum length of data (in bytes) that the FOTA service + * can receive at one time. + * + * Typically MTU - 3 bytes for overhead + */ +#if defined(MBED_CONF_BLE_SERVICE_FOTA_BSC_BUFFER_SIZE) +#define BLE_FOTA_SERVICE_MAX_DATA_LEN MBED_CONF_BLE_SERVICE_FOTA_BSC_BUFFER_SIZE +#else +#define BLE_FOTA_SERVICE_MAX_DATA_LEN (MBED_CONF_CORDIO_DESIRED_ATT_MTU - 3) +#endif + +/** + * UUIDs + */ +namespace uuids { +namespace FOTAService { + + extern const char BaseUUID[]; + extern const char BinaryStreamUUID[]; + extern const char ControlUUID[]; + extern const char StatusUUID[]; + extern const char VersionUUID[]; + +}} + +class FOTAService : private ble::GattServer::EventHandler, + private ble::Gap::EventHandler, + private mbed::NonCopyable { + +public: + + + /** + * As per Bluetooth Core specification V5.2, Vol 3, Part F, Table 3.4 (Error Codes) + * ATT Error Codes between 0x80 and 0x9F are reserved for use by the application + * + * These error codes are valid for the FOTAService application layer in addition to those + * defined in the GattAuthCallbackReply_t enum. + */ + enum ApplicationError_t { + AUTH_CALLBACK_REPLY_ATTERR_APP_BUSY = 0x0190, /** Application is busy */ + AUTH_CALLBACK_REPLY_ATTERR_UNSUPPORTED_OPCODE = 0x0191, /** Received unsupported control op code*/ + AUTH_CALLBACK_REPLY_ATTERR_HW_INHIBIT = 0x0192, /** Hardware inhibited processing the op code */ + AUTH_CALLBACK_REPLY_ATTERR_LOW_BATTERY = 0x0193, /** Low battery inhibited processing the op code */ + AUTH_CALLBACK_REPLY_ATTERR_OUT_OF_SYNC = 0x0194, /** Transfer is out of sync, cannot process op code in this state */ + /* 0x0195 through 0x019F are reserved for future use by base FOTA service */ + }; + + /** + * FOTA standard op codes + */ + enum OpCode_t { + FOTA_NO_OP = 0x00, /** No operation */ + FOTA_START = 0x01, /** Initiate a FOTA update session */ + FOTA_STOP = 0x02, /** Abort a FOTA update session */ + FOTA_COMMIT = 0x03, /** End a FOTA update session and commit the update */ + /* Op Codes 0x04 through 0x40 are reserved for future use by the base FOTA service */ + }; + + /** + * FOTA-specific status codes + */ + enum StatusCode_t{ + FOTA_STATUS_OK = 0x00, /** Neutral state */ + FOTA_STATUS_UPDATE_SUCCESSFUL = 0x01, /** Used to communicate successful update */ + FOTA_STATUS_XOFF = 0x02, /** Flow control - pause flow */ + FOTA_STATUS_XON = 0x03, /** Flow control - resume flow */ + FOTA_STATUS_SYNC_LOST = 0x04, /** Unexpected fragment ID received */ + FOTA_STATUS_UNSPECIFIED_ERROR = 0x05, /** Unspecified error occurred */ + FOTA_STATUS_VALIDATION_FAILURE = 0x06, /** Validation/verification of the update candidate failed */ + FOTA_STATUS_INSTALLATION_FAILURE = 0x07, /** Failed to install firmware update candidate */ + FOTA_STATUS_OUT_OF_MEMORY = 0x08, /** Underlying update candidate memory is full */ + FOTA_STATUS_MEMORY_ERROR = 0x09, /** Error occurred in underlying memory device */ + FOTA_STATUS_HARDWARE_ERROR = 0x0A, /** Hardware failure */ + FOTA_STATUS_NO_FOTA_SESSION = 0x0B, /** No FOTA session started */ + /* Status codes 0x0B through 0x40 are reserved for future use by the base FOTA service */ + }; + + /** Standard packet types */ + + /** + * Binary Stream Packet + */ + class BinaryStreamPacket { + + public: + + /** + * Construct a binary stream packet from a given buffer + * @param[in] buffer Span of bytes to construct packet from + */ + BinaryStreamPacket(mbed::Span buffer) : _buffer(buffer) { + } + + /** + * Get the fragment ID of this packet + */ + uint8_t get_fragment_id() { + return _buffer[0]; + } + + /** + * Get a Span to the firmware binary data + */ + mbed::Span get_data() { + return _buffer.subspan(1); + } + + private: + /* Buffer */ + mbed::Span _buffer; + }; + + struct EventHandler { + + virtual ~EventHandler() { } + + virtual StatusCode_t on_binary_stream_written(FOTAService &svc, mbed::Span buffer) { + return FOTA_STATUS_OK; + } + + virtual GattAuthCallbackReply_t on_control_written(FOTAService &svc, mbed::Span buffer) { + return AUTH_CALLBACK_REPLY_SUCCESS; + } + + }; + +public: + + /** + * Instantiate a FOTAService instance + * @param[in] ble BLE instance to host the FOTA service + * @param[in] queue EventQueue to process events on + * @param[in] chainable_gap_event_handler ChainableGapEventHandler object to register multiple Gap events + * @param[in] chainable_gatt_server_event_handler ChainableGattServerEventHandler object to register multiple GattServer events + * @param[in] protocol_version String describing FOTA protocol version + * @param[in] fw_rev Optional, Current firmware revision string + * @param[in] dev_desc Optional, Description of the device that this firmware is executed on + * + * @note The optional parameters MUST be supplied if your GattServer has multiple FOTAService + * instances available. They are optional if your GattServer has only one FOTAService instance. + * Each FOTAService must implement a firmware revision characteristic with an + * associated characteristic user description descriptor that uniquely identifies + * the device that executes the firmware targeted by the FOTAService. + */ + FOTAService(BLE &ble, events::EventQueue &event_queue, + ChainableGapEventHandler &chainable_gap_eh, + ChainableGattServerEventHandler &chainable_gatt_server_eh, + const char *protocol_version, const char *fw_rev = nullptr, + const char *dev_desc = nullptr); + + virtual ~FOTAService(); + + /** + * Initializer + * + * Register event handlers and add service to given BLE instance. + * + * @return BLE_ERROR_NONE if initialization was successful + */ + ble_error_t init(); + + /** + * Set event handler + * + * @param handler EventHandler object to handle events raised by the FOTA service + */ + void set_event_handler(EventHandler* handler); + + /** + * Get the service's event queue + * @note this may be used by the FOTAService::EventHandler to queue events for + * deferred processing. + */ + events::EventQueue& get_event_queue() { + return _event_queue; + } + + /** + * Pause flow control + * @param[in] fragment_id + */ + void set_xoff(); + + /** + * Resume flow control + */ + void set_xon(); + + /** + * Notify sync lost + */ + void notify_sync_lost(); + + /** + * Notify status + * @param[in] buf Span to status buffer to notify the FOTA client with + */ + void notify_status(mbed::Span buf); + + /** + * Start/enter a FOTA session + */ + void start_fota_session(void); + + /** + * Stop/exit a FOTA session + */ + void stop_fota_session(void); + +protected: + + void reset(void); + + void on_control_write_request(GattWriteAuthCallbackParams *write_request); + + /** + * Internal handler for BSC writes + */ + void on_bsc_written(mbed::Span data); + + /** GAP EventHandler overrides */ + void onDisconnectionComplete(const ble::DisconnectionCompleteEvent &event) override; + + /** Gatt Server EventHandler overrides */ + void onDataWritten(const GattWriteCallbackParams ¶ms) override; + +protected: + + BLE &_ble; + events::EventQueue &_event_queue; + ChainableGapEventHandler &_chainable_gap_eh; + ChainableGattServerEventHandler &_chainable_gatt_server_eh; + + /** RX Buffer for binary serial */ + uint8_t _rxbuf[BLE_FOTA_SERVICE_MAX_DATA_LEN] = { 0 }; + + /** FOTA control */ + uint8_t _control[MBED_CONF_BLE_SERVICE_FOTA_CONTROL_BUFFER_SIZE] = { 0 }; + + /** Update status */ + uint8_t _status[MBED_CONF_BLE_SERVICE_FOTA_STATUS_BUFFER_SIZE] = { 0 }; + + /** FOTA protocol version string */ + const char *_protocol_version_str; + + /** Optional firmware revision and description strings */ + const char *_fw_rev_str; + + /** Optional firmware characteristic user description descriptor */ + CharacteristicUserDescriptionDescriptor _fw_cudd; + + /** GattCharacteristic constructor requires a list of pointers to descriptors... */ + GattAttribute *_fw_descs[1] = { (GattAttribute *) &_fw_cudd }; + + /** Gatt Characteristics */ + GattCharacteristic _binary_stream_char; + GattCharacteristic _ctrl_char; + GattCharacteristic _status_char; + GattCharacteristic _protocol_version_char; + GattCharacteristic _firmware_rev_char; + + EventHandler *_eh = nullptr; + + bool _fota_in_session = false; + uint8_t _fragment_id = 0; + bool _flow_paused = false; + bool _sync_lost = false; +}; + +#endif /* BLE_FEATURE_GATT_SERVER */ + + +#endif /* FOTA_SERVICE_H */ diff --git a/services/FOTA/mbed_lib.json b/services/FOTA/mbed_lib.json new file mode 100644 index 00000000..19d80fe7 --- /dev/null +++ b/services/FOTA/mbed_lib.json @@ -0,0 +1,17 @@ +{ + "name": "ble-service-fota", + "config": { + "bsc-buffer-size": { + "help": "Maximum length of binary stream characteristic in bytes", + "value": null + }, + "control-buffer-size": { + "help": "Maximum length of control characteristic in bytes", + "value": 8 + }, + "status-buffer-size": { + "help": "Maximum length of status characteristic in bytes", + "value": 8 + } + } +} diff --git a/services/FOTA/source/FOTAService.cpp b/services/FOTA/source/FOTAService.cpp new file mode 100644 index 00000000..5f075bc6 --- /dev/null +++ b/services/FOTA/source/FOTAService.cpp @@ -0,0 +1,234 @@ +/* + * Mbed-OS Microcontroller Library + * Copyright (c) 2020-2021 Embedded Planet + * Copyright (c) 2020-2021 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +#if BLE_FEATURE_GATT_SERVER + +#include "ble-service-fota/FOTAService.h" + +#include "ble/gatt/GattCharacteristic.h" + +#include "mbed-trace/mbed_trace.h" + +#include "platform/mbed_assert.h" +#include "platform/ScopedLock.h" + +#define TRACE_GROUP "FOTA" + +namespace uuids { +namespace FOTAService { + + const char BaseUUID[] = "53880000-65fd-4651-ba8e-91527f06c887"; + const char BinaryStreamUUID[] = "53880001-65fd-4651-ba8e-91527f06c887"; + const char ControlUUID[] = "53880002-65fd-4651-ba8e-91527f06c887"; + const char StatusUUID[] = "53880003-65fd-4651-ba8e-91527f06c887"; + const char VersionUUID[] = "53880004-65fd-4651-ba8e-91527f06c887"; + +}} + +FOTAService::FOTAService(BLE &ble, events::EventQueue &event_queue, ChainableGapEventHandler &chainable_gap_eh, + ChainableGattServerEventHandler &chainable_gatt_server_eh, const char *protocol_version, + const char *fw_rev, const char *dev_desc) : _ble(ble), _event_queue(event_queue), + _chainable_gap_eh(chainable_gap_eh), _chainable_gatt_server_eh(chainable_gatt_server_eh), + _protocol_version_str(protocol_version), _fw_rev_str(fw_rev), _fw_cudd(dev_desc), + _binary_stream_char(uuids::FOTAService::BinaryStreamUUID, (uint8_t*) _rxbuf, 2, BLE_FOTA_SERVICE_MAX_DATA_LEN, + (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE), + nullptr, 0, true), + _ctrl_char(uuids::FOTAService::ControlUUID, _control, 1, MBED_CONF_BLE_SERVICE_FOTA_CONTROL_BUFFER_SIZE, + (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE), + nullptr, 0, true), + _status_char(uuids::FOTAService::StatusUUID, _status, 1, MBED_CONF_BLE_SERVICE_FOTA_STATUS_BUFFER_SIZE, + (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY), + nullptr, 0, true), + _protocol_version_char(uuids::FOTAService::VersionUUID, (uint8_t*)_protocol_version_str, + strlen(_protocol_version_str), strlen(_protocol_version_str), + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ, + nullptr, 0, false), + /* FW Rev Char will be dropped by GattServer if val in nullptr, len is 0, and it's readable */ + _firmware_rev_char(GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR, + (uint8_t *) fw_rev, + (fw_rev != nullptr) ? strlen(fw_rev) : 0, /* Min length */ + (fw_rev != nullptr) ? strlen(fw_rev) : 0, /* Max length */ + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ, + _fw_descs, + (dev_desc != nullptr) ? 1 : 0, + true){ +} + +FOTAService::~FOTAService() { +} + +ble_error_t FOTAService::init() { + + GattCharacteristic *char_table[] = { + &_binary_stream_char, + &_ctrl_char, + &_status_char, + &_protocol_version_char, + /* Note: FW rev must always be at the end of the characteristics list since it is optional */ + &_firmware_rev_char + }; + + GattService fota_service(uuids::FOTAService::BaseUUID, char_table, + (_fw_rev_str != nullptr) ? + (sizeof(char_table) / sizeof(char_table[0])) : /** FW rev present */ + (sizeof(char_table) / sizeof(char_table[0])) - 1); /** FW rev absent */ + + + /** Setup write authorization callbacks */ + _ctrl_char.setWriteAuthorizationCallback(this, &FOTAService::on_control_write_request); + + /** Note: Characteristic authorization callbacks must be set BEFORE adding the service! */ + ble_error_t error = _ble.gattServer().addService(fota_service); + + if(error == BLE_ERROR_NONE) { + _chainable_gap_eh.addEventHandler(this); + _chainable_gatt_server_eh.addEventHandler(this); + } else { + tr_error("error occurred when registering FOTA Service: %d", error); + } + + return error; +} + +void FOTAService::set_event_handler(EventHandler *handler) { + _eh = handler; +} + +void FOTAService::set_xoff() { + _flow_paused = true; + const uint8_t status_update[2] = { FOTA_STATUS_XOFF, _fragment_id }; + notify_status(mbed::make_const_Span(status_update)); +} + +void FOTAService::set_xon() { + _flow_paused = false; + const uint8_t status_update[2] = { FOTA_STATUS_XON, _fragment_id }; + notify_status(mbed::make_const_Span(status_update)); +} + +void FOTAService::notify_status(mbed::Span buf) { + _ble.gattServer().write(_status_char.getValueHandle(), buf.data(), buf.size()); +} + +void FOTAService::reset(void) { + _fota_in_session = false; + _fragment_id = 0; + _flow_paused = false; + _sync_lost = false; +} + +void FOTAService::on_control_write_request( + GattWriteAuthCallbackParams *write_request) { + + /* Check if there's an ongoing FOTA session. Reject COMMIT and STOP if no session */ + if(!_fota_in_session) { + if((write_request->data[0] == FOTA_COMMIT) || (write_request->data[0] == FOTA_STOP)) { + write_request->authorizationReply = AUTH_CALLBACK_REPLY_ATTERR_WRITE_REQUEST_REJECTED; + return; + } + } + + /* Check if there's not an ongoing FOTA session. Reject START if in session */ + if(_fota_in_session) { + if(write_request->data[0] == FOTA_START) { + write_request->authorizationReply = AUTH_CALLBACK_REPLY_ATTERR_WRITE_REQUEST_REJECTED; + return; + } + } + + /* Check if we're in sync (unless it's a STOP command) */ + if(_sync_lost && (write_request->data[0] != FOTA_STOP)) { + write_request->authorizationReply = (GattAuthCallbackReply_t) AUTH_CALLBACK_REPLY_ATTERR_OUT_OF_SYNC; + notify_sync_lost(); + return; + } + + if(_eh) { + write_request->authorizationReply = _eh->on_control_written(*this, mbed::make_const_Span(write_request->data, write_request->len)); + } + +} + +void FOTAService::onDisconnectionComplete( + const ble::DisconnectionCompleteEvent &event) { + reset(); +} + +void FOTAService::onDataWritten(const GattWriteCallbackParams ¶ms) { + if(params.handle == _binary_stream_char.getValueHandle()) { + on_bsc_written(mbed::make_const_Span(params.data, params.len)); + } + + /* Writes to the Control characteristic are handled in the auth callback */ +} + +void FOTAService::on_bsc_written(mbed::Span data) { + + /* Check if there's a FOTA session in progress */ + if(!_fota_in_session) { + uint8_t status = FOTA_STATUS_NO_FOTA_SESSION; + notify_status(mbed::make_const_Span(&status, 1)); + return; + } + + /* Now check if flow is paused */ + if(_flow_paused) { + /* Resend the XOFF notification */ + set_xoff(); + return; + } + + /* Now check the fragment ID */ + if(data[0] != (_fragment_id)) { + /* Issue SYNC_LOST notification */ + _sync_lost = true; + notify_sync_lost(); + return; + } else { + _sync_lost = false; + } + + StatusCode_t result = FOTA_STATUS_OK; + + if(_eh) { + /* The EventHandler implementation may notify status as appropriate in this call */ + result = _eh->on_binary_stream_written(*this, data.subspan(1)); + } + + if(result == FOTA_STATUS_OK) { + _fragment_id++; + } +} + +void FOTAService::notify_sync_lost() { + uint8_t status[] = { FOTA_STATUS_SYNC_LOST, _fragment_id }; + notify_status(mbed::make_const_Span(status)); +} + +void FOTAService::start_fota_session(void) { + _fota_in_session = true; +} + +void FOTAService::stop_fota_session(void) { + _fota_in_session = false; +} + +#endif //BLE_FEATURE_GATT_SERVER + From 6072a67e3feda872e29e65a0e1f76950cc2cb065 Mon Sep 17 00:00:00 2001 From: Paul Szczepanek Date: Fri, 26 Mar 2021 12:34:34 +0000 Subject: [PATCH 3/8] Add FOTA unittests Co-Authored-By: George Beckstein --- tests/UNITTESTS/CMakeLists.txt | 1 + tests/UNITTESTS/FOTA/CMakeLists.txt | 48 ++++++++++ tests/UNITTESTS/FOTA/test_FOTA.cpp | 137 ++++++++++++++++++++++++++++ 3 files changed, 186 insertions(+) create mode 100644 tests/UNITTESTS/FOTA/CMakeLists.txt create mode 100644 tests/UNITTESTS/FOTA/test_FOTA.cpp diff --git a/tests/UNITTESTS/CMakeLists.txt b/tests/UNITTESTS/CMakeLists.txt index 38569c88..f7d2d9e6 100644 --- a/tests/UNITTESTS/CMakeLists.txt +++ b/tests/UNITTESTS/CMakeLists.txt @@ -13,3 +13,4 @@ add_subdirectory(${MBED_PATH}/UNITTESTS) add_subdirectory(Template) add_subdirectory(LinkLoss) +add_subdirectory(FOTA) diff --git a/tests/UNITTESTS/FOTA/CMakeLists.txt b/tests/UNITTESTS/FOTA/CMakeLists.txt new file mode 100644 index 00000000..daa64ad5 --- /dev/null +++ b/tests/UNITTESTS/FOTA/CMakeLists.txt @@ -0,0 +1,48 @@ +# Copyright (c) 2020 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +cmake_minimum_required(VERSION 3.0.2) + +# remember to change the name of the test +set(TEST_NAME ble-service-fota-unittest) + +add_executable(${TEST_NAME}) + +target_compile_definitions(${TEST_NAME} + PUBLIC MBED_CONF_BLE_SERVICE_FOTA_BSC_BUFFER_SIZE=128 + MBED_CONF_BLE_SERVICE_FOTA_CONTROL_BUFFER_SIZE=16 + MBED_CONF_BLE_SERVICE_FOTA_STATUS_BUFFER_SIZE=16 + BLE_FEATURE_GATT_SERVER=1 +) + +target_include_directories(${TEST_NAME} + PRIVATE + . + # Includes needed by your test, for example the service you're testing + ${SERVICES_PATH}/FOTA/include + ${SERVICES_PATH}/../ + ${MBED_PATH}/connectivity/FEATURE_BLE/include/ble/gap + ${MBED_PATH}/connectivity/FEATURE_BLE/include/ble/gatt + ${MBED_PATH}/platform/mbed-trace/include/mbed-trace +) + +target_sources(${TEST_NAME} + PRIVATE + test_FOTA.cpp + # add any source files here that need to be built for the test, for example the service you're testing + ${SERVICES_PATH}/FOTA/source/FOTAService.cpp +) + +target_link_libraries(${TEST_NAME} + PRIVATE + mbed-stubs + # add any stubs, mocks or fakes you need here + mbed-fakes-ble + mbed-fakes-event-queue + # these are libraries that provided include paths of real mbed-os headers + mbed-headers-base + mbed-headers-platform + # if you're using googletest this is required + gmock_main +) + +add_test(NAME "${TEST_NAME}" COMMAND ${TEST_NAME}) diff --git a/tests/UNITTESTS/FOTA/test_FOTA.cpp b/tests/UNITTESTS/FOTA/test_FOTA.cpp new file mode 100644 index 00000000..98a96089 --- /dev/null +++ b/tests/UNITTESTS/FOTA/test_FOTA.cpp @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2020, Arm Limited and affiliates. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +/* these are real mbed-os headers but the implementation will be provided by mocks */ +#include "ble/BLE.h" +#include "ble/Gap.h" +#include "ble/GattServer.h" +#include "ble/GattClient.h" +#include "ble/SecurityManager.h" + +#include "ble/gap/ChainableGapEventHandler.h" +#include "ble/gatt/ChainableGattServerEventHandler.h" + +#include "ble-service-fota/FOTAService.h" + +/* this provides all the ble mocks inside the fake BLE instance */ +#include "ble_mocks.h" +/* this is a fake event queue that avoids mbed-os dependencies and allows manual dispatch */ +#include "events/EventQueue.h" + +#include +#include +#include +#include +#include +#include + +using namespace ble; +using namespace events; +using namespace std::chrono_literals; + +struct EventHandlerMock : FOTAService::EventHandler { + MOCK_METHOD(FOTAService::StatusCode_t, on_binary_stream_written, (FOTAService&, mbed::Span), (override)); + MOCK_METHOD(GattAuthCallbackReply_t, on_control_written, (FOTAService&, mbed::Span), (override)); +}; + +/* This test does not test anything, you may use it as a template for your unit tests. + * It shows all the elements you need to use mocks for all the ble APIS. */ + +class TestFOTAService : public testing::Test { +protected: + + BLE* ble; + events::EventQueue event_queue; + ChainableGapEventHandler chainable_gap_eh; + ChainableGattServerEventHandler chainable_gatt_server_eh; + + std::unique_ptr fota_service; + + void SetUp() + { + /* this call uses ble::init_mocks() to initialises the mocks */ + ble = &BLE::Instance(); + GattServer &server = ble->gattServer(); + fota_service = std::make_unique(*ble, event_queue, chainable_gap_eh, chainable_gatt_server_eh, + "1.0.0", "1.0.0", "test"); + } + + void TearDown() + { + /* remember you must call this at the end of the test if you have any expectations set */ + ble::delete_mocks(); + } +}; + +struct comp { + + template + bool operator()(const T &lhs, const T &rhs) const { + return lhs == rhs; + } + +}; + +TEST_F(TestFOTAService, init) +{ + /* these are the user facing APIs */ + Gap &gap = ble->gap(); + GattServer &server = ble->gattServer(); + + // A service with the FOTAService UUID should be added to the gatt server + EXPECT_CALL(gatt_server_mock(), addService(testing::Property(&GattService::getUUID, uuids::FOTAService::BaseUUID))) + .Times(1); + + fota_service->init(); + + // Capture the link loss service registered in gatt server + auto service = gatt_server_mock().services[0]; + + // The link loss service should contain 5 characteristics + ASSERT_EQ(service.characteristics.size(), 5); + + std::vector uuids = { + UUID(uuids::FOTAService::BinaryStreamUUID), + UUID(uuids::FOTAService::ControlUUID), + UUID(uuids::FOTAService::StatusUUID), + UUID(uuids::FOTAService::VersionUUID), + UUID(GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR) + }; + + /* Make sure each UUID has been added to the service */ + for(auto characteristic : service.characteristics) { + auto result = std::find_if(uuids.begin(), uuids.end(), [&](UUID uuid) { + return uuid == characteristic.uuid; + }); + + ASSERT_NE(result, uuids.end()); + + if(result != uuids.end()) { + uuids.erase(result); + } + } + + std::map props_map { + { UUID(uuids::FOTAService::BinaryStreamUUID), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE }, + { UUID(uuids::FOTAService::ControlUUID), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE }, + { UUID(uuids::FOTAService::StatusUUID), (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) }, + { UUID(uuids::FOTAService::VersionUUID), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ }, + { UUID(GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ }, + }; +} From be56f99ede935f95d48c100aac7392ac5728d920 Mon Sep 17 00:00:00 2001 From: Paul Szczepanek Date: Fri, 26 Mar 2021 12:37:11 +0000 Subject: [PATCH 4/8] Add FOTA integration tests Co-Authored-By: George Beckstein --- tests/TESTS/FOTA/device/CMakeLists.txt | 40 ++++ tests/TESTS/FOTA/device/mbed_app.json | 28 +++ tests/TESTS/FOTA/device/source/main.cpp | 263 ++++++++++++++++++++++++ tests/TESTS/FOTA/host/__init__.py | 0 tests/TESTS/FOTA/host/test_fota.py | 261 +++++++++++++++++++++++ 5 files changed, 592 insertions(+) create mode 100644 tests/TESTS/FOTA/device/CMakeLists.txt create mode 100644 tests/TESTS/FOTA/device/mbed_app.json create mode 100644 tests/TESTS/FOTA/device/source/main.cpp create mode 100644 tests/TESTS/FOTA/host/__init__.py create mode 100644 tests/TESTS/FOTA/host/test_fota.py diff --git a/tests/TESTS/FOTA/device/CMakeLists.txt b/tests/TESTS/FOTA/device/CMakeLists.txt new file mode 100644 index 00000000..8cb9640a --- /dev/null +++ b/tests/TESTS/FOTA/device/CMakeLists.txt @@ -0,0 +1,40 @@ +# 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 device) + +include(${MBED_PATH}/tools/cmake/app.cmake) + +add_subdirectory(${MBED_PATH}) + +add_subdirectory(FOTA) + +add_executable(${APP_TARGET}) + +mbed_configure_app_target(${APP_TARGET}) + +project(${APP_TARGET}) + +target_sources(${APP_TARGET} + PRIVATE + source/main.cpp +) + +target_link_libraries(${APP_TARGET} + PRIVATE + mbed-os + mbed-events + mbed-ble + 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() diff --git a/tests/TESTS/FOTA/device/mbed_app.json b/tests/TESTS/FOTA/device/mbed_app.json new file mode 100644 index 00000000..fb86ecf5 --- /dev/null +++ b/tests/TESTS/FOTA/device/mbed_app.json @@ -0,0 +1,28 @@ +{ + "target_overrides": { + "*": { + "target.printf_lib": "std", + "platform.stdio-baud-rate": 115200, + "cordio.desired-att-mtu": 200, + "cordio-ll.max-acl-size": 204, + "cordio.rx-acl-buffer-size": 204 + }, + "K64F": { + "target.components_add": ["BlueNRG_MS"], + "target.features_add": ["BLE"], + "target.extra_labels_add": ["CORDIO"] + }, + "NUCLEO_F401RE": { + "target.components_add": ["BlueNRG_MS"], + "target.features_add": ["BLE"], + "target.extra_labels_add": ["CORDIO"] + }, + "NRF52840_DK": { + "target.features_add": ["BLE"], + "cordio-nordic-ll.wsf-pool-buffer-size": 8192 + }, + "NRF52_DK": { + "target.features_add": ["BLE"] + } + } +} diff --git a/tests/TESTS/FOTA/device/source/main.cpp b/tests/TESTS/FOTA/device/source/main.cpp new file mode 100644 index 00000000..5e046956 --- /dev/null +++ b/tests/TESTS/FOTA/device/source/main.cpp @@ -0,0 +1,263 @@ +/* mbed Microcontroller Library + * Copyright (c) 2020 ARM Limited + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ble/BLE.h" +#include "ble/Gap.h" +#include "ble-service-fota/FOTAService.h" + +using namespace std::literals::chrono_literals; + +const static char DEVICE_NAME[] = "FOTA"; + +static events::EventQueue event_queue(/* event count */ 10 * EVENTS_EVENT_SIZE); +static ChainableGapEventHandler chainable_gap_event_handler; +static ChainableGattServerEventHandler chainable_gatt_server_event_handler; + +class TestFOTAService : public FOTAService { + +public: + + TestFOTAService(BLE &ble, events::EventQueue &event_queue, + ChainableGapEventHandler &chainable_gap_eh, + ChainableGattServerEventHandler &chainable_gatt_server_eh, + const char *protocol_version, const char *fw_rev = nullptr, + const char *dev_desc = nullptr) : FOTAService(ble, event_queue, + chainable_gap_eh, chainable_gatt_server_eh, protocol_version, + fw_rev, dev_desc) { + } + + /* Allow the host test to remotely set the expected fragment ID */ + void set_fragment_id(uint8_t id) { + _fragment_id = id; + } + +}; + +class FOTAServiceDemo : ble::Gap::EventHandler, FOTAService::EventHandler { + +public: + + enum CustomOpCodes_t { + + OP_CODE_SET_XOFF = 0x41, + OP_CODE_SET_XON = 0x42, + OP_CODE_SET_FRAGMENT_ID = 0x43 + + }; + +public: + FOTAServiceDemo(BLE &ble, events::EventQueue &event_queue, ChainableGapEventHandler &chainable_gap_eh, + ChainableGattServerEventHandler &chainable_gatt_server_eh) : + _ble(ble), + _event_queue(event_queue), + _chainable_gap_eh(chainable_gap_eh), + _chainable_gatt_server_eh(chainable_gatt_server_eh), + _fota_service(_ble, _event_queue, _chainable_gap_eh, _chainable_gatt_server_eh, + "1.0.0", "1.0.0", "test"), + _adv_data_builder(_adv_buffer) + { + } + + void start() + { + _ble.init(this, &FOTAServiceDemo::on_init_complete); + + _event_queue.dispatch_forever(); + } + +private: + void on_init_complete(BLE::InitializationCompleteCallbackContext *params) + { + if (params->error != BLE_ERROR_NONE) { + printf("Ble initialization failed."); + return; + } + + /* The ChainableGapEventHandler allows us to dispatch events from GAP to more than a single event handler */ + _chainable_gap_eh.addEventHandler(this); + _ble.gap().setEventHandler(&_chainable_gap_eh); + _ble.gattServer().setEventHandler(&_chainable_gatt_server_eh); + + _fota_service.init(); + + _fota_service.set_event_handler(this); + + start_advertising(); + } + + void start_advertising() + { + ble::AdvertisingParameters adv_parameters( + ble::advertising_type_t::CONNECTABLE_UNDIRECTED, + ble::adv_interval_t(ble::millisecond_t(100)) + ); + + _adv_data_builder.setFlags(); + _adv_data_builder.setAppearance(ble::adv_data_appearance_t::UNKNOWN); + _adv_data_builder.setName(DEVICE_NAME); + + ble_error_t error = _ble.gap().setAdvertisingParameters( + ble::LEGACY_ADVERTISING_HANDLE, + adv_parameters + ); + + if (error) { + printf("_ble.gap().setAdvertisingParameters() failed\r\n"); + return; + } + + error = _ble.gap().setAdvertisingPayload( + ble::LEGACY_ADVERTISING_HANDLE, + _adv_data_builder.getAdvertisingData() + ); + + if (error) { + printf("_ble.gap().setAdvertisingPayload() failed\r\n"); + return; + } + + error = _ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE); + + if (error) { + printf("_ble.gap().startAdvertising() failed\r\n"); + return; + } + + printf("Device advertising, please connect\r\n"); + } + +private: + void onConnectionComplete(const ble::ConnectionCompleteEvent &event) override + { + if (event.getStatus() == ble_error_t::BLE_ERROR_NONE) { + printf("Client connected, you may now subscribe to updates\r\n"); + } + } + + void onDisconnectionComplete(const ble::DisconnectionCompleteEvent &event) override + { + printf("Client disconnected, restarting advertising\r\n"); + + ble_error_t error = _ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE); + + if (error) { + printf("_ble.gap().startAdvertising() failed\r\n"); + return; + } + } + + FOTAService::StatusCode_t on_binary_stream_written(FOTAService &svc, mbed::Span buffer) override { + /* Write data to the UART for the host test to check */ + printf("bsc written: "); + for(int i = 0; i < buffer.size(); i++) { + printf("%02X", buffer[i]); + } + printf("\r\n"); + return FOTAService::FOTA_STATUS_OK; + } + + GattAuthCallbackReply_t on_control_written(FOTAService &svc, mbed::Span buffer) override { + switch(buffer[0]) { + case FOTAService::FOTA_NO_OP: + { + break; + } + + case FOTAService::FOTA_START: + { + svc.start_fota_session(); + uint8_t status_code = FOTAService::FOTA_STATUS_OK; + svc.notify_status(mbed::make_const_Span(&status_code, 1)); + printf("fota started\r\n"); + break; + } + + case FOTAService::FOTA_STOP: + { + svc.stop_fota_session(); + break; + } + + case FOTAService::FOTA_COMMIT: + { + printf("fota commit\r\n"); + svc.stop_fota_session(); + break; + } + + /* Custom commands for test */ + case OP_CODE_SET_XOFF: + { + printf("setting xoff\r\n"); + svc.set_xoff(); + break; + } + + case OP_CODE_SET_XON: + { + printf("setting xon\r\n"); + svc.set_xon(); + break; + } + + case OP_CODE_SET_FRAGMENT_ID: + { + printf("setting fragment id: %d", buffer[1]); + // TODO is having the svc parameter provided to this handler necessary? + _fota_service.set_fragment_id(buffer[1]); + break; + } + + default: + { + return (GattAuthCallbackReply_t) FOTAService::AUTH_CALLBACK_REPLY_ATTERR_UNSUPPORTED_OPCODE; + break; + } + } + + return AUTH_CALLBACK_REPLY_SUCCESS; + + } + +private: + BLE &_ble; + events::EventQueue &_event_queue; + ChainableGapEventHandler &_chainable_gap_eh; + ChainableGattServerEventHandler &_chainable_gatt_server_eh; + + TestFOTAService _fota_service; + + uint8_t _adv_buffer[ble::LEGACY_ADVERTISING_MAX_SIZE]; + ble::AdvertisingDataBuilder _adv_data_builder; +}; + +void schedule_ble_events(BLE::OnEventsToProcessCallbackContext *context) +{ + event_queue.call(mbed::Callback(&context->ble, &BLE::processEvents)); +} + +int main() +{ + BLE &ble = BLE::Instance(); + ble.onEventsToProcess(schedule_ble_events); + + FOTAServiceDemo demo(ble, event_queue, chainable_gap_event_handler, + chainable_gatt_server_event_handler); + demo.start(); + + return 0; +} diff --git a/tests/TESTS/FOTA/host/__init__.py b/tests/TESTS/FOTA/host/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/TESTS/FOTA/host/test_fota.py b/tests/TESTS/FOTA/host/test_fota.py new file mode 100644 index 00000000..99f95466 --- /dev/null +++ b/tests/TESTS/FOTA/host/test_fota.py @@ -0,0 +1,261 @@ +# Copyright (c) 2009-2020 Arm Limited +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License + +import pytest +import platform +import asyncio +from common.fixtures import BoardAllocator, ClientAllocator +from common.device import Device +from os import urandom +from bleak.uuids import uuid16_dict +from bleak import BleakClient +from typing import List, Optional, Any, Mapping +import logging + +log = logging.getLogger(__name__) + +uuid16_dict = {v: k for k, v in uuid16_dict.items()} + +UUID_FOTA_SERVICE = "53880000-65fd-4651-ba8e-91527f06c887" +UUID_BINARY_STREAM_CHAR = "53880001-65fd-4651-ba8e-91527f06c887" +UUID_CONTROL_CHAR = "53880002-65fd-4651-ba8e-91527f06c887" +UUID_STATUS_CHAR = "53880003-65fd-4651-ba8e-91527f06c887" +UUID_VERSION_CHAR = "53880004-65fd-4651-ba8e-91527f06c887" +UUID_FIRMWARE_REVISION_STRING_CHAR = "0000{0:x}-0000-1000-8000-00805f9b34fb".format( + uuid16_dict.get("Firmware Revision String") +) + +FOTA_STATUS_OK = bytearray(b'\x00') +FOTA_STATUS_UPDATE_SUCCESSFUL = bytearray(b'\x01') +FOTA_STATUS_XOFF = bytearray(b'\x02') +FOTA_STATUS_XON = bytearray(b'\x03') +FOTA_STATUS_SYNC_LOST = bytearray(b'\x04') +FOTA_STATUS_UNSPECIFIED_ERROR = bytearray(b'\x05') +FOTA_STATUS_VALIDATION_FAILURE = bytearray(b'\x06') +FOTA_STATUS_INSTALLATION_FAILURE = bytearray(b'\x07') +FOTA_STATUS_OUT_OF_MEMORY = bytearray(b'\x08') +FOTA_STATUS_MEMORY_ERROR = bytearray(b'\x09') +FOTA_STATUS_HARDWARE_ERROR = bytearray(b'\x0a') +FOTA_STATUS_NO_FOTA_SESSION = bytearray(b'\x0b') + +FOTA_OP_CODE_START = bytearray(b'\x01') +FOTA_OP_CODE_STOP = bytearray(b'\x02') +FOTA_OP_CODE_COMMIT = bytearray(b'\x03') +FOTA_OP_CODE_SET_XOFF = bytearray(b'\x41') +FOTA_OP_CODE_SET_XON = bytearray(b'\x42') +FOTA_OP_CODE_SET_FRAGMENT_ID = bytearray(b'\x43') + +FRAGMENT_SIZE = 128 + + +class DataGenerator: + + def __init__(self, chunk_size): + self.chunk_size = chunk_size + self.chunks = [] + + def get_chunk_size(self): + return self.chunk_size + + def get_chunk_n(self, n: int) -> bytearray: + # See if we've already generated the requested chunk number + if n < len(self.chunks): + return self.chunks[n] + else: + # We must generate up to the requested chunk number + while len(self.chunks) < n+1: + self.chunks.append([]) + self.chunks[len(self.chunks)-1] = bytearray(urandom(self.chunk_size)) + return self.chunks[n] + + +class StatusNotificationHandler: + + def __init__(self): + self.status_val = bytearray() + self.new_status_event = asyncio.Event() + + def handle_status_notification(self, char_handle: int, data: bytearray): + log.info(f"Status notification: {''.join('{:02x}'.format(x) for x in data)}") + self.status_val = data + self.new_status_event.set() + + async def wait_for_status_notification(self): + await self.new_status_event.wait() + self.new_status_event.clear() + + +class FOTASession: + + def __init__(self, board: Device, client: BleakClient): + self.board = board + self.client = client + self.data_generator = DataGenerator(FRAGMENT_SIZE) + self.handler = StatusNotificationHandler() + self.fragment_id = 0 + self.rollover_counter = 0 + + async def start(self): + # Subscribe to notifications from the status characteristic + await self.client.start_notify(UUID_STATUS_CHAR, self.handler.handle_status_notification) + + # Start a FOTA session + await self.client.write_gatt_char(UUID_CONTROL_CHAR, FOTA_OP_CODE_START, True) + + # Wait for the client to write OK to the status characteristic + await self.handler.wait_for_status_notification() + assert self.handler.status_val == FOTA_STATUS_OK + # FOTA session started + + async def write_n_packets(self, n: int) -> Optional[bytearray]: + i = (self.rollover_counter * 0xFF) + self.fragment_id + limit = self.fragment_id + n + while i < limit: + # Check for status notification + if self.handler.new_status_event.is_set(): + self.handler.new_status_event.clear() + if self.handler.status_val[0] == FOTA_STATUS_SYNC_LOST[0]: + log.info(f'Retransmission requested from fragment ID: {self.handler.status_val[1]}') + return self.handler.status_val + + # Send the next packet + log.info(f'Writing packet {i}') + packet = bytearray([self.fragment_id]) + data_chunk = self.data_generator.get_chunk_n(i) + packet += data_chunk + await asyncio.wait_for(self.client.write_gatt_char(UUID_BINARY_STREAM_CHAR, packet), timeout=0.2) + + # Check the data received over serial + lines = self.board.wait_for_output("bsc written: ", timeout=1, assert_timeout=False) + for line in lines: + # Skip lines that don't begin with "bsc written: " + if "bsc written: " not in line: + continue + # Get the data + data_string = line.split("bsc written: ", 1)[1].strip() + data = bytearray.fromhex(data_string) + assert data == data_chunk + + # Roll over the packet ID + self.fragment_id += 1 + if self.fragment_id >= 256: + self.fragment_id = 0 + self.rollover_counter += 1 + + i = (self.rollover_counter * 0xFF) + self.fragment_id + + return None + + async def wait_for_status_notification(self): + await self.handler.new_status_event.wait() + self.handler.new_status_event.clear() + return self.handler.status_val + + # Sets the fragment ID using a custom op code on the FOTA target side + # This lets us simulate out-of-sync scenarios + async def set_remote_fragment_id(self, fragment_id: int): + command = FOTA_OP_CODE_SET_FRAGMENT_ID + bytearray([fragment_id]) + await self.client.write_gatt_char(UUID_CONTROL_CHAR, command, True) + +@pytest.fixture(scope="function") +def board(board_allocator: BoardAllocator): + board = board_allocator.allocate('FOTA') + yield board + board_allocator.release(board) + + +@pytest.fixture(scope="function") +async def client(client_allocator: ClientAllocator): + client = await client_allocator.allocate('FOTA') + yield client + await client_allocator.release(client) + +@pytest.mark.asyncio +async def test_false_start(board, client): + # Write a random array of bytes to the BSC to generate a false start conditino + # ie: no ongoing FOTA session + await client.write_gatt_char(UUID_BINARY_STREAM_CHAR, bytearray(urandom(2))) + assert await client.read_gatt_char(UUID_STATUS_CHAR) == FOTA_STATUS_NO_FOTA_SESSION + + +@pytest.mark.asyncio +async def test_data_correctness(board, client): + session = FOTASession(board, client) + await session.start() + await session.write_n_packets(10) + +@pytest.mark.asyncio +async def test_out_of_sync(board, client): + + packets_before_sync_lost = 2 + + session = FOTASession(board, client) + await session.start() + await session.write_n_packets(packets_before_sync_lost) + # Now simulate a sync lost condition + session.fragment_id = 50 + await session.write_n_packets(1) + actual = await session.wait_for_status_notification() + expected = (FOTA_STATUS_SYNC_LOST + bytearray([packets_before_sync_lost])) + # We expect a sync lost notification + assert actual == expected + # Continue sending out-of-sync packets + await session.write_n_packets(1) + actual = await session.wait_for_status_notification() + # Again, we expect a sync lost notification + assert actual == expected + # Resynchronize + session.fragment_id = packets_before_sync_lost + await session.write_n_packets(1) + # Now we expect no issue (timeout on the status notification) + try: + actual = await asyncio.wait_for(session.wait_for_status_notification(), timeout=1.0) + assert not actual + except asyncio.TimeoutError as e: + log.info("Status notification timed out as expected") + +@pytest.mark.asyncio +async def test_flow_control(board, client): + + packets_before_flow_control = 5 + session = FOTASession(board, client) + await session.start() + await session.write_n_packets(packets_before_flow_control) + # Now simulate a flow control on situation by writing the custom op code + await client.write_gatt_char(UUID_CONTROL_CHAR, FOTA_OP_CODE_SET_XOFF) + # We expect to get an XOFF notification now + status = await session.wait_for_status_notification() + expected = FOTA_STATUS_XOFF + bytearray([packets_before_flow_control]) + assert status == expected + # Now try sending a packet to the BSC + await session.write_n_packets(1) + status = await session.wait_for_status_notification() + assert status == expected + # Tell it to send XON now + await client.write_gatt_char(UUID_CONTROL_CHAR, FOTA_OP_CODE_SET_XON) + # We expect to get an XON notification now + status = await session.wait_for_status_notification() + expected = FOTA_STATUS_XON + bytearray([packets_before_flow_control]) + assert status == expected + # Set the session back to the specified fragment ID + session.fragment_id = status[1] + # Transfer a few more packets before success is reported + await session.write_n_packets(5) + +@pytest.mark.asyncio +async def test_fragment_id_rollover(board, client): + session = FOTASession(board, client) + await session.start() + await session.write_n_packets(500) \ No newline at end of file From 698eb06154b6adfc33eb561b739f740d1fa2b680 Mon Sep 17 00:00:00 2001 From: Paul Szczepanek Date: Fri, 26 Mar 2021 13:51:15 +0000 Subject: [PATCH 5/8] add FOTA integration test build to workflow Co-Authored-By: George Beckstein --- .github/workflows/run_tests.yml | 1 + scripts/bootstrap.sh | 43 ++++++++++++-------------- services/FOTA/CMakeLists.txt | 21 +++++++++++++ tests/TESTS/FOTA/device/.mbed | 1 + tests/TESTS/FOTA/device/.mbedignore | 2 ++ tests/TESTS/FOTA/device/CMakeLists.txt | 6 ++++ tests/TESTS/FOTA/device/mbed-os.lib | 1 + 7 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 services/FOTA/CMakeLists.txt create mode 100644 tests/TESTS/FOTA/device/.mbed create mode 100644 tests/TESTS/FOTA/device/.mbedignore create mode 100644 tests/TESTS/FOTA/device/mbed-os.lib diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml index d69d014e..96d36ee1 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests.yml @@ -56,3 +56,4 @@ jobs: ./tests/TESTS/build.sh -s DeviceInformation -t GCC_ARM -m NRF52840_DK ./tests/TESTS/build.sh -s LinkLoss -t GCC_ARM -m NRF52840_DK ./tests/TESTS/build.sh -s LinkLoss -t GCC_ARM -m DISCO_L496AG + ./tests/TESTS/build.sh -s FOTA -t GCC_ARM -m NRF52840_DK diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index 7b39b4b1..d9376590 100755 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -13,59 +13,56 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Enter repository root -cd "$( dirname "${BASH_SOURCE[0]}" )"/.. + +# Repository root +ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"/.. || exit # Load symlink script -source scripts/symlink.sh +source "$ROOT"/scripts/symlink.sh # Clone mbed-os -if [ -d "dependencies/mbed-os" ] +if [ -d "$ROOT/dependencies/mbed-os" ] then echo "Using existing mbed-os" else # git clone https://github.com/ARMmbed/mbed-os.git # Use feature branch until merged to master - git clone --depth 1 https://github.com/paul-szczepanek-arm/mbed-os.git -b unittest dependencies/mbed-os + git clone --depth 1 https://github.com/ARMmbed/mbed-os.git -b feature_unittest_refactor "$ROOT"/dependencies/mbed-os fi # Add symlinks -symlink dependencies/mbed-os tests/UNITTESTS/mbed-os - -symlink dependencies/mbed-os tests/TESTS/LinkLoss/device/mbed-os -symlink services/LinkLoss tests/TESTS/LinkLoss/device/LinkLoss +symlink "$ROOT"/dependencies/mbed-os "$ROOT"/tests/UNITTESTS/mbed-os -symlink dependencies/mbed-os tests/TESTS/DeviceInformation/device/mbed-os -symlink services/DeviceInformation tests/TESTS/DeviceInformation/device/DeviceInformation +symlink "$ROOT"/dependencies/mbed-os "$ROOT"/tests/TESTS/FOTA/device/mbed-os +symlink "$ROOT"/common "$ROOT"/tests/TESTS/FOTA/device/common +symlink "$ROOT"/descriptors "$ROOT"/tests/TESTS/FOTA/device/descriptors +symlink "$ROOT"/services/FOTA "$ROOT"/tests/TESTS/FOTA/device/FOTA -# Create mbed-os.lib for CMake builds -echo "https://github.com/ARMmbed/mbed-os" > tests/TESTS/LinkLoss/device/mbed-os.lib -echo "https://github.com/ARMmbed/mbed-os" > tests/TESTS/DeviceInformation/device/mbed-os.lib +symlink "$ROOT"/dependencies/mbed-os "$ROOT"/tests/TESTS/LinkLoss/device/mbed-os +symlink "$ROOT"/services/LinkLoss "$ROOT"/tests/TESTS/LinkLoss/device/LinkLoss # Create virtual environment -if [ -d "tests/TESTS/venv" ] +if [ -d "$ROOT/tests/TESTS/venv" ] then echo "Using existing virtual environment" else - mkdir tests/TESTS/venv + mkdir "$ROOT"/tests/TESTS/venv # On Windows, the Python 3 executable is called 'python' if windows; then - python -m virtualenv tests/TESTS/venv + python -m virtualenv "$ROOT"/tests/TESTS/venv else - python3 -m virtualenv tests/TESTS/venv + python3 -m virtualenv "$ROOT"/tests/TESTS/venv fi fi # Activate virtual environment -source scripts/activate.sh +source "$ROOT"/scripts/activate.sh # Install mbed-os requirements -pip install -r dependencies/mbed-os/requirements.txt +pip install -r "$ROOT"/dependencies/mbed-os/requirements.txt # Install testing requirements -pip install -r tests/TESTS/requirements.txt +pip install -r "$ROOT"/tests/TESTS/requirements.txt # Install cli and tools pip install --upgrade mbed-cli mbed-tools - -echo "Services repository bootstrap complete" diff --git a/services/FOTA/CMakeLists.txt b/services/FOTA/CMakeLists.txt new file mode 100644 index 00000000..b335f45b --- /dev/null +++ b/services/FOTA/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright (c) 2020 ARM Limited. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +add_library(ble-service-fota INTERFACE) + +target_include_directories(ble-service-fota + INTERFACE + . + include +) + +target_sources(ble-service-fota + INTERFACE + source/FOTAService.cpp +) + +target_link_libraries(ble-service-fota + INTERFACE + mbed-ble + mbed-events +) diff --git a/tests/TESTS/FOTA/device/.mbed b/tests/TESTS/FOTA/device/.mbed new file mode 100644 index 00000000..e87b56dc --- /dev/null +++ b/tests/TESTS/FOTA/device/.mbed @@ -0,0 +1 @@ +ROOT=. diff --git a/tests/TESTS/FOTA/device/.mbedignore b/tests/TESTS/FOTA/device/.mbedignore new file mode 100644 index 00000000..bef1c0ef --- /dev/null +++ b/tests/TESTS/FOTA/device/.mbedignore @@ -0,0 +1,2 @@ +cmake_build/* + diff --git a/tests/TESTS/FOTA/device/CMakeLists.txt b/tests/TESTS/FOTA/device/CMakeLists.txt index 8cb9640a..9e6fe6c6 100644 --- a/tests/TESTS/FOTA/device/CMakeLists.txt +++ b/tests/TESTS/FOTA/device/CMakeLists.txt @@ -19,6 +19,12 @@ mbed_configure_app_target(${APP_TARGET}) project(${APP_TARGET}) +target_include_directories(${APP_TARGET} + PRIVATE + . +) + + target_sources(${APP_TARGET} PRIVATE source/main.cpp diff --git a/tests/TESTS/FOTA/device/mbed-os.lib b/tests/TESTS/FOTA/device/mbed-os.lib new file mode 100644 index 00000000..364c76ce --- /dev/null +++ b/tests/TESTS/FOTA/device/mbed-os.lib @@ -0,0 +1 @@ +https://github.com/ARMmbed/mbed-os From 67795245c2aea44cb9d342edfbe345702d4e27da Mon Sep 17 00:00:00 2001 From: George Beckstein Date: Wed, 7 Apr 2021 12:26:34 -0400 Subject: [PATCH 6/8] Add extra utility functions --- .../FOTA/include/ble-service-fota/FOTAService.h | 13 +++++++++++++ services/FOTA/source/FOTAService.cpp | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/services/FOTA/include/ble-service-fota/FOTAService.h b/services/FOTA/include/ble-service-fota/FOTAService.h index c4cbab66..ccc9b4a2 100644 --- a/services/FOTA/include/ble-service-fota/FOTAService.h +++ b/services/FOTA/include/ble-service-fota/FOTAService.h @@ -240,6 +240,12 @@ class FOTAService : private ble::GattServer::EventHandler, */ void notify_status(mbed::Span buf); + /** + * Simplified Notify Status method, using only a single status code input + * @param[in] code Status code to notify the FOTA client with + */ + void notify_status(uint8_t code); + /** * Start/enter a FOTA session */ @@ -250,6 +256,13 @@ class FOTAService : private ble::GattServer::EventHandler, */ void stop_fota_session(void); + /** + * Get FOTA session status + */ + bool is_fota_in_session() const { + return _fota_in_session; + } + protected: void reset(void); diff --git a/services/FOTA/source/FOTAService.cpp b/services/FOTA/source/FOTAService.cpp index 5f075bc6..bc8bed71 100644 --- a/services/FOTA/source/FOTAService.cpp +++ b/services/FOTA/source/FOTAService.cpp @@ -127,6 +127,10 @@ void FOTAService::notify_status(mbed::Span buf) { _ble.gattServer().write(_status_char.getValueHandle(), buf.data(), buf.size()); } +void FOTAService::notify_status(uint8_t code) { + notify_status(mbed::make_const_Span(&code, 1)); +} + void FOTAService::reset(void) { _fota_in_session = false; _fragment_id = 0; From 7ec2fe65b73bd5c4c15405b0bd296ba00f3f475d Mon Sep 17 00:00:00 2001 From: George Beckstein Date: Fri, 9 Apr 2021 11:52:09 -0400 Subject: [PATCH 7/8] Add sync lost warning trace message --- services/FOTA/source/FOTAService.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/FOTA/source/FOTAService.cpp b/services/FOTA/source/FOTAService.cpp index bc8bed71..454a94fb 100644 --- a/services/FOTA/source/FOTAService.cpp +++ b/services/FOTA/source/FOTAService.cpp @@ -201,6 +201,7 @@ void FOTAService::on_bsc_written(mbed::Span data) { /* Now check the fragment ID */ if(data[0] != (_fragment_id)) { + tr_warn("received fragment id %d, expected %d", data[0], _fragment_id); /* Issue SYNC_LOST notification */ _sync_lost = true; notify_sync_lost(); From 3060a9808d3ae9efc198e2a30bbad91ef49931b5 Mon Sep 17 00:00:00 2001 From: George Beckstein Date: Thu, 6 May 2021 13:36:12 -0400 Subject: [PATCH 8/8] Make the control write request authorization callback virtual This allows an application to add its own logic for accepting writes to the FOTA update characteristic. --- services/FOTA/include/ble-service-fota/FOTAService.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/FOTA/include/ble-service-fota/FOTAService.h b/services/FOTA/include/ble-service-fota/FOTAService.h index ccc9b4a2..c690e657 100644 --- a/services/FOTA/include/ble-service-fota/FOTAService.h +++ b/services/FOTA/include/ble-service-fota/FOTAService.h @@ -267,7 +267,7 @@ class FOTAService : private ble::GattServer::EventHandler, void reset(void); - void on_control_write_request(GattWriteAuthCallbackParams *write_request); + virtual void on_control_write_request(GattWriteAuthCallbackParams *write_request); /** * Internal handler for BSC writes