CMSIS Configuration With FOTA

How can I integrate FOTA with my existing BLE application for the RSL10 Sense GEVK? In the RSL10 FOTA Users Guide, I read that configuring the RTE to include FOTA requires deselecting both BLE Stack and Kernel. I then have to deselect a number of other components (HAL and ICS, for example) to resolve dependency errors. My project relies on these components, though, so it’s not an option.

In sense_ics_firmware_sleep_fota, one of the example projects, the components that apparently aren’t compatible with FOTA are instead present in the src/ and include/ directories. Why doesn’t the RTE configuration wizard allow them to coexist?

@matthew.s

This looks like an issue with how the CMSIS Pack dependencies where defined when this pack was created.

Given the Kernel/BLE Stack & FOTA components should contain identical functionality (only placed in different memory segments) there is no reason that they should now work together.

The two options to address this are as follows:

  • Import the RTE Component files manually into the project directory (these compatibility checks only happen at the CMSIS level)

  • Delete the CMSIS Pack on your local machine, change the CMSIS Pack dependencies manually within the PDSC file and reimport the Pack (more details can be provided if requested)

Either way, we will share this feedback with the team who manages the BDK Pack and it will likely be addressed during the next release.

Thank you for using our community forum!

@martin.bela

Thanks for looking into this.

I unarchived the pack file and found ONSemiconductor.RSL10.pdsc. Could you explain what dependencies need to change?

Hi @matthew.s,

Below, we have quickly outlined the steps necessary to add FOTA Stack OR BLE Stack support to the BDK CMSIS Pack. These changes will need to be made within the BDK PDSC file, not the RSL10 PDSC.

First, you will need to define two new <condition id> within the <conditions> section:

		<condition id="BLE_STACK">
			<description>Requirements for BDK HAL component</description>
			<require Cclass="Device" Cgroup="Bluetooth Core" Csub="Kernel" Cvariant="release"/>
			<require Cclass="Device" Cgroup="Bluetooth Core" Csub="BLE Stack" Cvariant="release"/>
			<deny Cclass="Device" Cgroup="Bluetooth Core" Csub="Fota" Cvariant="release_light-bdk"/>
			<deny Cclass="Device" Cgroup="Bluetooth Core" Csub="Fota" Cvariant="release"/>
		</condition>
		<condition id="FOTA_STACK">
			<description>Requirements for BDK HAL component</description>
			<deny Cclass="Device" Cgroup="Bluetooth Core" Csub="Kernel" Cvariant="release"/>
			<deny Cclass="Device" Cgroup="Bluetooth Core" Csub="BLE Stack" Cvariant="release"/>
			<accept Cclass="Device" Cgroup="Bluetooth Core" Csub="Fota" Cvariant="release"/>
			<accept Cclass="Device" Cgroup="Bluetooth Core" Csub="Fota" Cvariant="release_light-bdk"/>
		</condition>

Next, you will need to find the condition that is applied to the pack component that you wish to update to support FOTA. Below, we have shown how these changes within the ‘DEVICE_BDK_HAL’ condition belonging to the HAL component were made.

		<condition id="DEVICE_BDK_HAL">
			<description>Requirements for BDK HAL component</description>
			<require condition="RSL10"/>
			<require condition="GCC"/>
			<accept condition="BLE_STACK"/>
			<accept condition="FOTA_STACK"/>
			<require Cclass="Board Support" Cgroup="Pinmap"/>
		</condition>

Specifically, by using the <accept> functionality we can apply a logical OR, meaning either the BLE Stack or the FOTA Stack can be selected. To prevent double defines, we have also added the <deny> functionality to the first two <condition id> to ensure you can only select one of the two Stack types.

Please let us know if you run into any troubles when adding these changes and importing the new pack.

2 Likes

Hi @brandon.shannon

FOTA is now working. Thanks for your help!

1 Like