<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Dynamic GATT vs Static in Wireless MCU</title>
    <link>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2057268#M19554</link>
    <description>&lt;P&gt;I have a custom project on a FRDM-KW38 and have it working with an self developed BT App using static GATT database.&amp;nbsp; For functionality reasons, the firmware needs to use dynamic GATT database.&amp;nbsp; Currently I have firmware conditionally compiled to use dynamic or static GATT database.&amp;nbsp; If static GATT, I receive&amp;nbsp; event type = gEvtAttributeWrittenWithoutResponse_c in BleApp_GattServerCallback() as expected, when I switch to dynamic GATT on same service I receive gEvtAttributeWritten_c event type.The static and dynamic implementations are listed below.&lt;/P&gt;&lt;P&gt;Using ble_5-0_AE_host_cm0p_gcc and ble_kw38a4_controller_gcc libraries from&amp;nbsp; SDK_2.x_FRDM-KW38 2.6.16 (575 2022-04-3.5.0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PRIMARY_SERVICE_UUID128(SERVICE_CAN_STREAM, uuid_service_CAN_stream)&lt;BR /&gt;CHARACTERISTIC_UUID128(char_CAN_rx_stream, uuid_service_CAN_rx_stream, (gGattCharPropRead_c | gGattCharPropNotify_c))&lt;BR /&gt;VALUE_UUID128_VARLEN(VALUE_CAN_RX_STREAM, uuid_service_CAN_rx_stream, (gPermissionFlagReadable_c), gAttMaxWriteDataSize_d(gAttMaxMtu_c)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if (gBleSuccess_c == (result = GattDbDynamic_AddCharacteristicDeclarationAndValue(&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gBleUuidType128_c,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void *) &amp;amp;uuid_service_CAN_rx_stream,(gattCharacteristicPropertiesBitFields_t) ((uint8_t)&amp;nbsp; (gGattCharPropRead_c | gGattCharPropNotify_c)),&lt;BR /&gt;gAttMaxWriteDataSize_d(gAttMaxMtu_c),&lt;BR /&gt;1,&lt;BR /&gt;can_rx_value,&lt;BR /&gt;(gattAttributePermissionsBitFields_t) ((uint8_t) gPermissionFlagReadable_c),&lt;BR /&gt;&amp;amp;handle)))&lt;BR /&gt;{&lt;BR /&gt;value_CAN_rx_stream = handle-1;&lt;/P&gt;&lt;P&gt;if (gBleSuccess_c != GattDbDynamic_AddCccd(&amp;amp;cccd_can_rx_notify))&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; panic(0,0,0,0);&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;The code handles the differences between ENUM based service handles and dynamic service handles.&amp;nbsp; Using BT test Apps, service properties and permissions are displayed for both static and dynamic GATT databases are the same.&lt;/P&gt;&lt;P&gt;Is there a defect in SDK_2.x_FRDM-KW38 2.6.16 (575 2022-04-3.5.0) ? to explain this behavior ?&lt;/P&gt;&lt;P&gt;Is there a newer version of SDK_2.x_FRDM-KW38 2.6.16 (575 2022-04-3.5.0) ?&lt;/P&gt;&lt;P&gt;&amp;gt;Darren&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 06 Mar 2025 17:58:11 GMT</pubDate>
    <dc:creator>Solarhacker</dc:creator>
    <dc:date>2025-03-06T17:58:11Z</dc:date>
    <item>
      <title>Dynamic GATT vs Static</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2057268#M19554</link>
      <description>&lt;P&gt;I have a custom project on a FRDM-KW38 and have it working with an self developed BT App using static GATT database.&amp;nbsp; For functionality reasons, the firmware needs to use dynamic GATT database.&amp;nbsp; Currently I have firmware conditionally compiled to use dynamic or static GATT database.&amp;nbsp; If static GATT, I receive&amp;nbsp; event type = gEvtAttributeWrittenWithoutResponse_c in BleApp_GattServerCallback() as expected, when I switch to dynamic GATT on same service I receive gEvtAttributeWritten_c event type.The static and dynamic implementations are listed below.&lt;/P&gt;&lt;P&gt;Using ble_5-0_AE_host_cm0p_gcc and ble_kw38a4_controller_gcc libraries from&amp;nbsp; SDK_2.x_FRDM-KW38 2.6.16 (575 2022-04-3.5.0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PRIMARY_SERVICE_UUID128(SERVICE_CAN_STREAM, uuid_service_CAN_stream)&lt;BR /&gt;CHARACTERISTIC_UUID128(char_CAN_rx_stream, uuid_service_CAN_rx_stream, (gGattCharPropRead_c | gGattCharPropNotify_c))&lt;BR /&gt;VALUE_UUID128_VARLEN(VALUE_CAN_RX_STREAM, uuid_service_CAN_rx_stream, (gPermissionFlagReadable_c), gAttMaxWriteDataSize_d(gAttMaxMtu_c)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if (gBleSuccess_c == (result = GattDbDynamic_AddCharacteristicDeclarationAndValue(&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gBleUuidType128_c,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void *) &amp;amp;uuid_service_CAN_rx_stream,(gattCharacteristicPropertiesBitFields_t) ((uint8_t)&amp;nbsp; (gGattCharPropRead_c | gGattCharPropNotify_c)),&lt;BR /&gt;gAttMaxWriteDataSize_d(gAttMaxMtu_c),&lt;BR /&gt;1,&lt;BR /&gt;can_rx_value,&lt;BR /&gt;(gattAttributePermissionsBitFields_t) ((uint8_t) gPermissionFlagReadable_c),&lt;BR /&gt;&amp;amp;handle)))&lt;BR /&gt;{&lt;BR /&gt;value_CAN_rx_stream = handle-1;&lt;/P&gt;&lt;P&gt;if (gBleSuccess_c != GattDbDynamic_AddCccd(&amp;amp;cccd_can_rx_notify))&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; panic(0,0,0,0);&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;The code handles the differences between ENUM based service handles and dynamic service handles.&amp;nbsp; Using BT test Apps, service properties and permissions are displayed for both static and dynamic GATT databases are the same.&lt;/P&gt;&lt;P&gt;Is there a defect in SDK_2.x_FRDM-KW38 2.6.16 (575 2022-04-3.5.0) ? to explain this behavior ?&lt;/P&gt;&lt;P&gt;Is there a newer version of SDK_2.x_FRDM-KW38 2.6.16 (575 2022-04-3.5.0) ?&lt;/P&gt;&lt;P&gt;&amp;gt;Darren&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 06 Mar 2025 17:58:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2057268#M19554</guid>
      <dc:creator>Solarhacker</dc:creator>
      <dc:date>2025-03-06T17:58:11Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamic GATT vs Static</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2058069#M19559</link>
      <description>Hello&lt;BR /&gt;&lt;BR /&gt;For this subject I send a private message.&lt;BR /&gt;&lt;BR /&gt;Best Regards</description>
      <pubDate>Fri, 07 Mar 2025 18:18:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2058069#M19559</guid>
      <dc:creator>luis_maravilla</dc:creator>
      <dc:date>2025-03-07T18:18:33Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamic GATT vs Static</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2058079#M19560</link>
      <description>&lt;P&gt;Sorry typo on SKD version should have been 2.6.15 for SDK_2_x_FRDM-KW38&lt;/P&gt;</description>
      <pubDate>Fri, 07 Mar 2025 18:58:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2058079#M19560</guid>
      <dc:creator>Solarhacker</dc:creator>
      <dc:date>2025-03-07T18:58:04Z</dc:date>
    </item>
    <item>
      <title>Re: Dynamic GATT vs Static</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2059874#M19565</link>
      <description>&lt;P&gt;Dear Darren&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sorry for the late response&lt;/P&gt;
&lt;P&gt;In the creation of a GATT database dynamically, We have to make a different Initialization for the Service Declaration and use the APIs provided by gatt_db_dynamic.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would recommend checking the Bluetooth Low Energy Application Developers&amp;nbsp; Guide Chapter 7.2 for Dynamic GATT Services and Chapter 12.3 for GATT Database configuration , Here is a link &lt;A href="https://mcuxpresso.nxp.com/mcuxsdk/latest/html/_static/wireless/Bluetooth/Bluetooth_Low_Energy_Application_Developer's_Guide.pdf" target="_blank"&gt;Bluetooth Low Energy Application Developer’s Guide&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also I would recommend checking this community post, for your interest about Dynamic GATT Database.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.nxp.com/t5/Wireless-Connectivity-Knowledge/Creating-a-GATT-database-on-the-BLE-Server-through-FSCI-commands/ta-p/1232990" target="_blank"&gt;Creating a GATT database on the BLE Server through FSCI commands - NXP Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And for the latest version of FRDM-KW38 SDK, is 2.6.15&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best Regards&lt;/P&gt;
&lt;P&gt;Luis&lt;/P&gt;</description>
      <pubDate>Tue, 11 Mar 2025 23:30:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/Dynamic-GATT-vs-Static/m-p/2059874#M19565</guid>
      <dc:creator>luis_maravilla</dc:creator>
      <dc:date>2025-03-11T23:30:15Z</dc:date>
    </item>
  </channel>
</rss>

