.. |OLD_STACK_VER| replace:: |DEVICE| SDK 7.10
.. |NEW_STACK_VER| replace:: |DEVICE| SDK 7.20

|OLD_STACK_VER| to |NEW_STACK_VER|
==================================

This section will describe how to port a project from |OLD_STACK_VER| to
a |NEW_STACK_VER| project.

.. _ble-porting-sdk-7-20:

Porting Bluetooth LE Projects
-----------------------------

The recommended method for porting an existing project from |OLD_STACK_VER|
to |NEW_STACK_VER| is to modify the ProjectSpec file to import the project as
a |NEW_STACK_VER| project.

Porting by modifying the CCS ProjectSpec file (``.projectspec``) can be done
when a ProjectSpec file has been updated and maintained throughout the
project's development. All example projects included in the SDK each come with
their own ProjectSpec file. During development, the included ProjectSpec file
should be updated to match any changes or additions made to the project. This
will make a project more easily packageable and ease migration efforts when
future SDK's are released. For example, the ProjectSpec file of the basic_ble
project is located in
``{SDK_INSTALL_DIR}/examples/rtos/{BOARD}/ble5stack/basic_ble/freertos/ticlang``

The following steps will detail the changes needed when porting a Basic BLE
project:

.. note::
   This porting method might be more complex for customer specific
   projects. The following steps are the minimum set of changes
   required to port a project from |OLD_STACK_VER| to |NEW_STACK_VER|.

#. Open the ProjectSpec file in a text editor and modify the product definition
   line to reflect the new SDK revision and the corresponding sysconfig
   revision.
   ``products="com.ti.SIMPLELINK_LOWPOWER_F3_SDK:x.xx.xx.xx;sysconfig:x.xx.x"``
   Also update line ``cgtVersion="TICLANG_x.x.x"`` if it exists in the file.
   Refer to the Dependencies section in the SDK release notes for the correct
   SysConfig (and compiler) version. The SDK release notes may be found in
   ``{SDK_INSTALL_DIR}/docs/simplelink_mcu_sdk/release_notes_coresdk_lpf3_x_xx_xx_xx.html``

#. Also in the ProjectSpec file, update the path to file ``rcl_settings_ble.c``
   from
   ``${COM_TI_SIMPLELINK_LOWPOWER_F3_SDK_INSTALL_DIR}/source/ti/ble5stack_flash/common/cc26xx/rcl_settings_ble.c``
   to
   ``${COM_TI_SIMPLELINK_LOWPOWER_F3_SDK_INSTALL_DIR}/source/ti/boards/cc23x0r5/rcl_settings_ble.c``.

#. In the file cc23x0_app_freertos.cmd, in folder ``./freertos/ticlang``, append
   ``|| defined(OAD_DUAL_IMAGE)`` to the end of any line beginning with
   ``#if defined(OAD_APP_OFFCHIP)``. Additionally, remove both instances of
   the line ``#define APP_BASE        (APP_HDR_BASE + MCU_HDR_SIZE)``;
   instead, this line should be placed directly under the line
   ``#define APP_HDR_BASE    APP_HDR_ADDR``. Also, add the following lines to
   the end of the Memory Sizes section, before the Memory Definitions section::
   
      #ifdef OAD_DUAL_IMAGE
      #define APP_SIZE        ((FLASH_SIZE - NVS_SIZE - MCUBOOT_SIZE)/2 - MCU_HDR_SIZE)
      #endif //OAD_DUAL_IMAGE

   Finally, replace any typos ``PESISTENT`` or ``PERSITENT`` with
   ``PERSISTENT``.
   
   Alternatively, replace cc23x0_app_freertos.cmd with the file provided by the new
   SDK.

#. In the file basic_ble.syscfg, in folder ``./freertos``, add
   the line ``ble.basicBLE = true;`` under the definition
   ``var ble = scripting.addModule("/ti/ble5stack/ble");`` in the BLE section.
   
   Alternatively, replace basic_ble.syscfg with the file provided by
   the new SDK.

#. Afterwards, the project may be re-imported using the new ProjectSpec file.
   The newly imported project is now configured to use |NEW_STACK_VER| instead
   of |OLD_STACK_VER|.

To learn more information about ProjectSpec files, please
reference `ProjectSpec Documentation <https://software-dl.ti.com/ccs/esd/documents/ccs_projectspecs.html>`_.

If necessary, additional details are provided in
:ref:`noteworthy-ble-migration-sdk-7-20`.

Legacy Porting
--------------

.. warning::
   The following section covers a legacy porting method. Current SDK porting
   does not require this process and should instead see
   :ref:`ble-porting-sdk-7-20`.

For this guide, a peripheral project from |OLD_STACK_VER| will be
ported over to |NEW_STACK_VER|. The recommended approach is to start with the
Basic BLE project on |NEW_STACK_VER| and modify the base configuration to
match the peripheral configuration used in the |OLD_STACK_VER| project.
Afterwards, the custom application code should be transferred to the new
project.

#. Import a |NEW_STACK_VER| Basic BLE project.

#. Change the default Basic BLE project configuration options in the BLE Module
   present in SysConfig to match the configuration used in the |OLD_STACK_VER| project.

#. Transfer all custom application logic from the |OLD_STACK_VER| into the
   |NEW_STACK_VER| Basic BLE project.

#. Move any profiles and services that the application is using to the
   |NEW_STACK_VER| project.

#. Transfer the SysConfig settings either visually through the GUI or open both
   the old and the new project ``.syscfg`` files and copy-paste the desired
   settings.

#. If necessary, update the project to use the newer TI drivers that are
   supplied with the |SDK|. Additional details are provided
   in :ref:`noteworthy-ble-migration-sdk-7-20`.

#. Refer to the Core SDK release notes for additional information and the
   FreeRTOS examples included with |SDK|. The Core SDK release notes may be
   found in
   ``{SDK_INSTALL_DIR}/docs/simplelink_mcu_sdk/release_notes_coresdk_lpf3_x_xx_xx_xx.html``

   For additional information on how |NEW_STACK_VER| uses FreeRTOS see
   :ref:`sec-freertos-overview`.

   For any utilized TI Drivers, review |TI_DRIVERS_API|.

.. _noteworthy-ble-migration-sdk-7-20:

A Few Noteworthy Changes from |OLD_STACK_VER| to |NEW_STACK_VER|
----------------------------------------------------------------

You can follow the guide above without addressing these updates; they are listed
for your information only. All fine grained details might not be mentioned.
Please refer to the specific example you need to port and do a compare between
the old and new project files. Please refer to the |STACK| Release Notes for
all the details.

*  Bug fixes