aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2018-08-23 17:08:59 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2018-08-23 17:12:21 +0200
commit3061ecca3d0fdfb87dabbf5f63c9e06c2a30f53a (patch)
treeab49cc16ed0b853452c5c2ed2d3042416d628986 /thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common
downloadiot-sensors-3061ecca3d0fdfb87dabbf5f63c9e06c2a30f53a.tar.gz
iot-sensors-3061ecca3d0fdfb87dabbf5f63c9e06c2a30f53a.tar.bz2
iot-sensors-3061ecca3d0fdfb87dabbf5f63c9e06c2a30f53a.tar.xz
iot-sensors-3061ecca3d0fdfb87dabbf5f63c9e06c2a30f53a.zip
o Initial import.HEADmaster
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common')
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/ant_request_controller/ant_request_controller.c224
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/ant_request_controller/ant_request_controller.h157
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_70.c141
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_70.h135
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_80.c110
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_80.h120
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_81.c117
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_81.h111
8 files changed, 1115 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/ant_request_controller/ant_request_controller.c b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/ant_request_controller/ant_request_controller.c
new file mode 100644
index 0000000..c5cd45f
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/ant_request_controller/ant_request_controller.c
@@ -0,0 +1,224 @@
+/**
+ * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#include "sdk_common.h"
+#if NRF_MODULE_ENABLED(ANT_REQUEST_CONTROLLER)
+#include "ant_request_controller.h"
+#include "ant_interface.h"
+#include "ant_parameters.h"
+#include "app_error.h"
+#include "nrf_assert.h"
+#include "nrf.h"
+
+/**@brief Common message data layout structure. */
+typedef struct
+{
+ uint8_t page_number; ///< Page number.
+ uint8_t page_payload[7]; ///< Page payload.
+}ant_common_message_layout_t;
+
+
+void ant_request_controller_init(ant_request_controller_t * p_controller)
+{
+ ASSERT(p_controller != NULL);
+
+ p_controller->state = ANT_REQUEST_CONTROLLER_IDLE;
+ p_controller->page_70 = DEFAULT_ANT_COMMON_PAGE70();
+}
+
+
+uint32_t ant_request_controller_request(ant_request_controller_t * p_controller,
+ uint8_t channel_number,
+ ant_common_page70_data_t * p_page_70)
+{
+ ASSERT(p_controller != NULL);
+ ASSERT(p_page_70 != NULL);
+
+ ant_common_message_layout_t message;
+ message.page_number = ANT_COMMON_PAGE_70;
+
+ ant_common_page_70_encode(message.page_payload, p_page_70);
+
+ p_controller->state = ANT_REQUEST_CONTROLLER_SENDED;
+
+ return sd_ant_acknowledge_message_tx(channel_number, sizeof (message), (uint8_t *)&message);
+}
+
+
+bool ant_request_controller_pending_get(ant_request_controller_t * p_controller,
+ uint8_t * p_page_number)
+{
+ ASSERT(p_controller != NULL);
+ ASSERT(p_page_number != NULL);
+
+ if ((p_controller->state == ANT_REQUEST_CONTROLLER_ACK_UNTIL_SUCCESS_REQUESTED)
+ || (p_controller->state == ANT_REQUEST_CONTROLLER_ACK_REQUESTED)
+ || (p_controller->state == ANT_REQUEST_CONTROLLER_BROADCAST_REQUESTED))
+ {
+ *p_page_number = p_controller->page_70.page_number;
+ return true;
+ }
+ return false;
+}
+
+
+bool ant_request_controller_ack_needed(ant_request_controller_t * p_controller)
+{
+ ASSERT(p_controller != NULL);
+ return ((p_controller->state == ANT_REQUEST_CONTROLLER_ACK_UNTIL_SUCCESS_REQUESTED)
+ || (p_controller->state == ANT_REQUEST_CONTROLLER_ACK_REQUESTED));
+}
+
+
+ant_request_controller_evt_t ant_request_controller_disp_evt_handler(
+ ant_request_controller_t * p_controller,
+ ant_evt_t * p_ant_evt)
+{
+ ASSERT(p_controller != NULL);
+ ASSERT(p_ant_evt != NULL);
+
+ if ( p_controller->state == ANT_REQUEST_CONTROLLER_SENDED)
+ {
+ switch (p_ant_evt->event)
+ {
+ case EVENT_TRANSFER_TX_FAILED:
+ p_controller->state = ANT_REQUEST_CONTROLLER_IDLE;
+ return ANT_REQUEST_CONTROLLER_FAILED;
+
+ case EVENT_TRANSFER_TX_COMPLETED:
+ p_controller->state = ANT_REQUEST_CONTROLLER_IDLE;
+ return ANT_REQUEST_CONTROLLER_SUCCESS;
+
+ default:
+ break;
+ }
+ }
+
+ return ANT_REQUEST_CONTROLLER_NONE;
+}
+
+
+/**@brief Function for confirmation of page sending.
+ *
+ * @param[in] p_controller Pointer to the controller instance.
+ */
+__STATIC_INLINE void page_sended(ant_request_controller_t * p_controller)
+{
+ if (!((p_controller->page_70.transmission_response.items.transmit_count)--))
+ {
+ p_controller->state = ANT_REQUEST_CONTROLLER_IDLE;
+ }
+}
+
+
+/**@brief Function for handling page request.
+ *
+ * @param[in] p_controller Pointer to the controller instance.
+ * @param[in] p_message_payload Pointer to the message payload.
+ */
+__STATIC_INLINE void page_requested(ant_request_controller_t * p_controller,
+ ant_common_message_layout_t * p_message_payload)
+{
+ ant_common_page_70_decode(p_message_payload->page_payload, &(p_controller->page_70));
+
+ if ((p_controller->page_70.command_type == ANT_PAGE70_COMMAND_PAGE_DATA_REQUEST)
+ && (p_controller->page_70.transmission_response.specyfic != ANT_PAGE70_RESPONSE_INVALID))
+ {
+ if (p_controller->page_70.transmission_response.items.ack_resposne)
+ {
+ if (p_controller->page_70.transmission_response.specyfic ==
+ ANT_PAGE70_RESPONSE_TRANSMIT_UNTIL_SUCCESS)
+ {
+ p_controller->state = ANT_REQUEST_CONTROLLER_ACK_UNTIL_SUCCESS_REQUESTED;
+ }
+ else
+ {
+ p_controller->state = ANT_REQUEST_CONTROLLER_ACK_REQUESTED;
+ }
+ }
+ else
+ {
+ p_controller->state = ANT_REQUEST_CONTROLLER_BROADCAST_REQUESTED;
+ }
+ }
+}
+
+
+void ant_request_controller_sens_evt_handler(ant_request_controller_t * p_controller,
+ ant_evt_t * p_ant_evt)
+{
+ ASSERT(p_controller != NULL);
+ ASSERT(p_ant_evt != NULL);
+
+ ant_common_message_layout_t * p_message_payload =
+ (ant_common_message_layout_t *)p_ant_evt->message.ANT_MESSAGE_aucPayload;
+
+ switch (p_ant_evt->event)
+ {
+ case EVENT_RX:
+
+ if (p_message_payload->page_number == ANT_COMMON_PAGE_70)
+ {
+ page_requested(p_controller, p_message_payload);
+ }
+ break;
+
+ case EVENT_TRANSFER_TX_COMPLETED:
+
+ if (p_controller->state == ANT_REQUEST_CONTROLLER_ACK_UNTIL_SUCCESS_REQUESTED)
+ {
+ p_controller->state = ANT_REQUEST_CONTROLLER_IDLE;
+ }
+ /* fall through */
+
+ case EVENT_TX:
+
+ if (p_controller->state == ANT_REQUEST_CONTROLLER_BROADCAST_REQUESTED
+ || p_controller->state == ANT_REQUEST_CONTROLLER_ACK_REQUESTED)
+ {
+ page_sended(p_controller);
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+#endif // NRF_MODULE_ENABLED(ANT_REQUEST_CONTROLLER)
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/ant_request_controller/ant_request_controller.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/ant_request_controller/ant_request_controller.h
new file mode 100644
index 0000000..4c99b9c
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/ant_request_controller/ant_request_controller.h
@@ -0,0 +1,157 @@
+/**
+ * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+/** @file
+ *
+ * @defgroup ant_request_controller ANT request controller
+ * @{
+ * @ingroup ant_sdk_utils
+ *
+ * @brief Module for handling page requests related to page 70.
+ */
+
+#ifndef ANT_REQUEST_CONTROLLER_H__
+#define ANT_REQUEST_CONTROLLER_H__
+#include <stdbool.h>
+#include "ant_common_page_70.h"
+#include "nrf_sdh_ant.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**@brief Request controller events types. */
+typedef enum
+{
+ ANT_REQUEST_CONTROLLER_NONE, ///< No event.
+ ANT_REQUEST_CONTROLLER_SUCCESS, ///< Page request successful.
+ ANT_REQUEST_CONTROLLER_FAILED, ///< Page request failed.
+} ant_request_controller_evt_t;
+
+/**@brief Request controller states. */
+typedef enum
+{
+ ANT_REQUEST_CONTROLLER_IDLE, ///< Module is in idle state.
+ ANT_REQUEST_CONTROLLER_SENDED, ///< Module waits for acknowledgment of its request.
+ ANT_REQUEST_CONTROLLER_BROADCAST_REQUESTED, ///< Module is requested to send page n times using broadcast.
+ ANT_REQUEST_CONTROLLER_ACK_REQUESTED, ///< Module is requested to send page n times using acknowledgment.
+ ANT_REQUEST_CONTROLLER_ACK_UNTIL_SUCCESS_REQUESTED, ///< Module is requested to send page until success using acknowledgment.
+} ant_request_controller_state_t;
+
+/**@brief ANT request controller structure. */
+typedef struct
+{
+ ant_request_controller_state_t state; ///< Actual module state.
+ ant_common_page70_data_t page_70; ///< Page 70.
+} ant_request_controller_t;
+
+/**@brief Function for initializing the ANT request controller instance.
+ *
+ * @param[in] p_controller Pointer to the controller instance.
+ */
+void ant_request_controller_init(ant_request_controller_t * p_controller);
+
+/**@brief Function for sending a request.
+ *
+ * @param[in] p_controller Pointer to the controller instance.
+ * @param[in] channel_number Channel number.
+ * @param[in] p_page_70 Pointer to the prepared page 70.
+ *
+ * @return Error code returned by @ref sd_ant_acknowledge_message_tx().
+ */
+uint32_t ant_request_controller_request(ant_request_controller_t * p_controller,
+ uint8_t channel_number,
+ ant_common_page70_data_t * p_page_70);
+
+/**@brief Function for getting pending page number.
+ *
+ * @details This function checks whether a page number was requested.
+ *
+ * @param[in] p_controller Pointer to the controller instance.
+ * @param[out] p_page_number Pending page number (valid if true was returned).
+ *
+ * @retval TRUE If there was a pending page.
+ * @retval FALSE If no page was pending.
+ */
+bool ant_request_controller_pending_get(ant_request_controller_t * p_controller,
+ uint8_t * p_page_number);
+
+/**@brief Function for checking whether the next page must be sent with acknowledgment.
+ *
+ * @param[in] p_controller Pointer to the controller instance.
+ *
+ * @retval TRUE If the next transmission needs acknowledgment.
+ * @retval FALSE If the next transmission does not need acknowledgment.
+ */
+bool ant_request_controller_ack_needed(ant_request_controller_t * p_controller);
+
+/**
+ * @brief Function for handling ANT events on display side.
+ *
+ * @details All events from the ANT stack that are related to the appropriate channel number
+ * should be propagated.
+ *
+ * @param[in] p_controller Pointer to the controller instance.
+ * @param[in] p_ant_evt Event received from the ANT stack.
+ */
+ant_request_controller_evt_t ant_request_controller_disp_evt_handler(
+ ant_request_controller_t * p_controller,
+ ant_evt_t * p_ant_evt);
+
+/**
+ * @brief Function for handling ANT events on sensor side.
+ *
+ * @details All events from the ANT stack that are related to the appropriate channel number
+ * should be propagated.
+ *
+ * @param[in] p_controller Pointer to the controller instance.
+ * @param[in] p_ant_evt Event received from the ANT stack.
+ * @retval TRUE If there was a pending page.
+ */
+void ant_request_controller_sens_evt_handler(ant_request_controller_t * p_controller,
+ ant_evt_t * p_ant_evt);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ANT_REQUEST_CONTROLLER_H__
+/** @} */
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_70.c b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_70.c
new file mode 100644
index 0000000..0026fe5
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_70.c
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#include "sdk_common.h"
+#if NRF_MODULE_ENABLED(ANT_COMMON_PAGE_70)
+
+#include <string.h>
+#include "ant_common_page_70.h"
+
+#define NRF_LOG_MODULE_NAME ant_common_page_70
+#if ANT_COMMON_PAGE_70_LOG_ENABLED
+#define NRF_LOG_LEVEL ANT_COMMON_PAGE_70_LOG_LEVEL
+#define NRF_LOG_INFO_COLOR ANT_COMMON_PAGE_70_INFO_COLOR
+#else // ANT_COMMON_PAGE_70_LOG_ENABLED
+#define NRF_LOG_LEVEL 0
+#endif // ANT_COMMON_PAGE_70_LOG_ENABLED
+#include "nrf_log.h"
+NRF_LOG_MODULE_REGISTER();
+
+/**@brief ANT+ common page 70 data layout structure. */
+typedef struct
+{
+ uint8_t reserved[2];
+ uint8_t descriptor[2];
+ uint8_t req_trans_response;
+ uint8_t req_page_number;
+ uint8_t command_type;
+}ant_common_page70_data_layout_t;
+
+/**@brief Function for tracing page 70 data.
+ *
+ * @param[in] p_page_data Pointer to the page 70 data.
+ */
+static void page70_data_log(volatile ant_common_page70_data_t const * p_page_data)
+{
+ NRF_LOG_INFO("Page %d request", p_page_data->page_number);
+
+ switch (p_page_data->transmission_response.specyfic)
+ {
+ case ANT_PAGE70_RESPONSE_TRANSMIT_UNTIL_SUCCESS:
+ NRF_LOG_INFO("Try to send until ACK");
+ break;
+
+ case ANT_PAGE70_RESPONSE_INVALID:
+ NRF_LOG_INFO("Invalid requested transmission response");
+ break;
+
+ default:
+
+ if (p_page_data->transmission_response.items.ack_resposne)
+ {
+ NRF_LOG_INFO("Answer with acknowledged messages");
+ }
+ NRF_LOG_INFO("Requested number of transmissions: %d",
+ p_page_data->transmission_response.items.transmit_count);
+ }
+
+ switch (p_page_data->command_type)
+ {
+ case ANT_PAGE70_COMMAND_PAGE_DATA_REQUEST:
+ NRF_LOG_INFO("Request Data Page");
+ break;
+
+ case ANT_PAGE70_COMMAND_ANT_FS_SESSION_REQUEST:
+ NRF_LOG_INFO("Request ANT-FS Session");
+ break;
+
+ default:
+ NRF_LOG_INFO("Invalid request");
+ }
+ NRF_LOG_INFO("Descriptor %x\r\n\n", p_page_data->descriptor);
+}
+
+
+void ant_common_page_70_encode(uint8_t * p_page_buffer,
+ volatile ant_common_page70_data_t const * p_page_data)
+{
+ ant_common_page70_data_layout_t * p_outcoming_data =
+ (ant_common_page70_data_layout_t *)p_page_buffer;
+
+ memset(p_outcoming_data->reserved, UINT8_MAX, sizeof (p_outcoming_data->reserved));
+ UNUSED_PARAMETER(uint16_encode(p_page_data->descriptor, p_outcoming_data->descriptor));
+ p_outcoming_data->req_trans_response = p_page_data->transmission_response.byte;
+ p_outcoming_data->req_page_number = p_page_data->page_number;
+ p_outcoming_data->command_type = p_page_data->command_type;
+
+ page70_data_log(p_page_data);
+}
+
+
+void ant_common_page_70_decode(uint8_t const * p_page_buffer,
+ volatile ant_common_page70_data_t * p_page_data)
+{
+ ant_common_page70_data_layout_t const * p_incoming_data =
+ (ant_common_page70_data_layout_t *)p_page_buffer;
+
+ p_page_data->descriptor = uint16_decode(p_incoming_data->descriptor);
+ p_page_data->transmission_response.byte = p_incoming_data->req_trans_response;
+ p_page_data->page_number = p_incoming_data->req_page_number;
+ p_page_data->command_type = (ant_page70_command_t)p_incoming_data->command_type;
+
+ page70_data_log(p_page_data);
+}
+
+#endif // NRF_MODULE_ENABLED(ANT_COMMON_PAGE_70)
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_70.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_70.h
new file mode 100644
index 0000000..20e5351
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_70.h
@@ -0,0 +1,135 @@
+/**
+ * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#ifndef ANT_COMMON_PAGE_70_H__
+#define ANT_COMMON_PAGE_70_H__
+
+/** @file
+ *
+ * @defgroup ant_common_page_70 ANT+ common page 70
+ * @{
+ * @ingroup ant_sdk_common_pages
+ */
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ANT_COMMON_PAGE_70 (70) ///< @brief ID value of common page 70.
+#define ANT_PAGE70_INVALID_DESCRIPTOR UINT16_MAX ///< Invalid descriptor.
+
+/**@brief Command type.
+ */
+typedef enum
+{
+ ANT_PAGE70_COMMAND_PAGE_DATA_REQUEST = 0x01, ///< Page request.
+ ANT_PAGE70_COMMAND_ANT_FS_SESSION_REQUEST = 0x02, ///< ANT FS session request.
+} ant_page70_command_t;
+
+
+/**@brief Data structure for ANT+ common data page 70.
+ */
+typedef struct
+{
+ uint8_t page_number; ///< Requested page number.
+ uint16_t descriptor; ///< Descriptor.
+ ant_page70_command_t command_type; ///< Command type.
+ union
+ {
+ enum
+ {
+ ANT_PAGE70_RESPONSE_INVALID = 0x00, ///< Invalid response type.
+ ANT_PAGE70_RESPONSE_TRANSMIT_UNTIL_SUCCESS = 0x80, ///< Transmit until a successful acknowledge is received.
+ } specyfic;
+ struct
+ {
+ uint8_t transmit_count :7; ///< Number of re-transmissions.
+ uint8_t ack_resposne :1; ///< Acknowledge transmission is required.
+ } items;
+ uint8_t byte;
+ } transmission_response;
+} ant_common_page70_data_t;
+
+/**@brief Initialize page 70 with default values.
+ */
+#define DEFAULT_ANT_COMMON_PAGE70() \
+ (ant_common_page70_data_t) \
+ { \
+ .page_number = 0x00, \
+ .command_type = (ant_page70_command_t)0x00, \
+ .transmission_response.specyfic = ANT_PAGE70_RESPONSE_INVALID, \
+ .descriptor = ANT_PAGE70_INVALID_DESCRIPTOR, \
+ }
+
+/**@brief Initialize page 70 with the page request.
+ */
+#define ANT_COMMON_PAGE_DATA_REQUEST(PAGE_NUMBER) \
+ (ant_common_page70_data_t) \
+ { \
+ .page_number = (PAGE_NUMBER), \
+ .command_type = ANT_PAGE70_COMMAND_PAGE_DATA_REQUEST, \
+ .transmission_response.specyfic = ANT_PAGE70_RESPONSE_TRANSMIT_UNTIL_SUCCESS, \
+ .descriptor = ANT_PAGE70_INVALID_DESCRIPTOR, \
+ }
+
+/**@brief Function for encoding page 70.
+ *
+ * @param[in] p_page_data Pointer to the page data.
+ * @param[out] p_page_buffer Pointer to the data buffer.
+ */
+void ant_common_page_70_encode(uint8_t * p_page_buffer,
+ volatile ant_common_page70_data_t const * p_page_data);
+
+/**@brief Function for decoding page 70.
+ *
+ * @param[in] p_page_buffer Pointer to the data buffer.
+ * @param[out] p_page_data Pointer to the page data.
+ */
+void ant_common_page_70_decode(uint8_t const * p_page_buffer,
+ volatile ant_common_page70_data_t * p_page_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ANT_COMMON_PAGE_70_H__
+/** @} */
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_80.c b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_80.c
new file mode 100644
index 0000000..b60e859
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_80.c
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#include "sdk_common.h"
+#if NRF_MODULE_ENABLED(ANT_COMMON_PAGE_80)
+
+#include <string.h>
+#include "ant_common_page_80.h"
+
+#define NRF_LOG_MODULE_NAME ant_common_page_80
+#if ANT_COMMON_PAGE_80_LOG_ENABLED
+#define NRF_LOG_LEVEL ANT_COMMON_PAGE_80_LOG_LEVEL
+#define NRF_LOG_INFO_COLOR ANT_COMMON_PAGE_80_INFO_COLOR
+#else // ANT_COMMON_PAGE_80_LOG_ENABLED
+#define NRF_LOG_LEVEL 0
+#endif // ANT_COMMON_PAGE_80_LOG_ENABLED
+#include "nrf_log.h"
+NRF_LOG_MODULE_REGISTER();
+
+/**@brief ant+ common page 80 data layout structure. */
+typedef struct
+{
+ uint8_t reserved[2]; ///< unused, fill by 0xFF
+ uint8_t hw_revision;
+ uint8_t manufacturer_id[2];
+ uint8_t model_number[2];
+}ant_common_page80_data_layout_t;
+
+
+/**@brief Function for tracing page 80 data.
+ *
+ * @param[in] p_page_data Pointer to the page 80 data.
+ */
+static void page80_data_log(volatile ant_common_page80_data_t const * p_page_data)
+{
+ NRF_LOG_INFO("hw revision: %u", p_page_data->hw_revision);
+ NRF_LOG_INFO("manufacturer id: %u", p_page_data->manufacturer_id);
+ NRF_LOG_INFO("model number: %u\r\n\n", p_page_data->model_number);
+}
+
+
+void ant_common_page_80_encode(uint8_t * p_page_buffer,
+ volatile ant_common_page80_data_t const * p_page_data)
+{
+ ant_common_page80_data_layout_t * p_outcoming_data =
+ (ant_common_page80_data_layout_t *)p_page_buffer;
+
+ memset(p_page_buffer, UINT8_MAX, sizeof (p_outcoming_data->reserved));
+
+ p_outcoming_data->hw_revision = p_page_data->hw_revision;
+
+ UNUSED_PARAMETER(uint16_encode(p_page_data->manufacturer_id,
+ p_outcoming_data->manufacturer_id));
+ UNUSED_PARAMETER(uint16_encode(p_page_data->model_number, p_outcoming_data->model_number));
+
+ page80_data_log(p_page_data);
+}
+
+
+void ant_common_page_80_decode(uint8_t const * p_page_buffer,
+ volatile ant_common_page80_data_t * p_page_data)
+{
+ ant_common_page80_data_layout_t const * p_incoming_data =
+ (ant_common_page80_data_layout_t *)p_page_buffer;
+
+ p_page_data->hw_revision = p_incoming_data->hw_revision;
+
+ p_page_data->manufacturer_id = uint16_decode(p_incoming_data->manufacturer_id);
+ p_page_data->model_number = uint16_decode(p_incoming_data->model_number);
+
+ page80_data_log(p_page_data);
+}
+
+#endif // NRF_MODULE_ENABLED(ANT_COMMON_PAGE_80)
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_80.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_80.h
new file mode 100644
index 0000000..15a971c
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_80.h
@@ -0,0 +1,120 @@
+/**
+ * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#ifndef ANT_COMMON_PAGE_80_H__
+#define ANT_COMMON_PAGE_80_H__
+
+/** @file
+ *
+ * @defgroup ant_sdk_common_pages ANT+ common pages
+ * @{
+ * @ingroup ant_sdk_profiles
+ * @brief This module implements functions for the ANT+ common pages.
+ * @details ANT+ common data pages define common data formats that can be used by any device on any ANT network. The ability to send and receive these common pages is defined by the transmission type of the ANT channel parameter.
+ *
+ * Note that all unused pages in this section are not defined and therefore cannot be used.
+ * @}
+ *
+ * @defgroup ant_common_page_80 ANT+ common page 80
+ * @{
+ * @ingroup ant_sdk_common_pages
+ */
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ANT_COMMON_PAGE_80 (80) ///< @brief ID value of common page 80.
+
+/**@brief Data structure for ANT+ common data page 80.
+ *
+ * @note This structure implements only page 80 specific data.
+ */
+typedef struct
+{
+ uint8_t hw_revision; ///< Hardware revision.
+ uint16_t manufacturer_id; ///< Manufacturer ID.
+ uint16_t model_number; ///< Model number.
+} ant_common_page80_data_t;
+
+/**@brief Initialize page 80.
+ */
+#define DEFAULT_ANT_COMMON_page80() \
+ (ant_common_page80_data_t) \
+ { \
+ .hw_revision = 0x00, \
+ .manufacturer_id = UINT8_MAX, \
+ .model_number = 0x00, \
+ }
+
+/**@brief Initialize page 80.
+ */
+#define ANT_COMMON_page80(hw_rev, man_id, mod_num) \
+ (ant_common_page80_data_t) \
+ { \
+ .hw_revision = (hw_rev), \
+ .manufacturer_id = (man_id), \
+ .model_number = (mod_num), \
+ }
+
+/**@brief Function for encoding page 80.
+ *
+ * @param[in] p_page_data Pointer to the page data.
+ * @param[out] p_page_buffer Pointer to the data buffer.
+ */
+void ant_common_page_80_encode(uint8_t * p_page_buffer,
+ volatile ant_common_page80_data_t const * p_page_data);
+
+/**@brief Function for decoding page 80.
+ *
+ * @param[in] p_page_buffer Pointer to the data buffer.
+ * @param[out] p_page_data Pointer to the page data.
+ */
+void ant_common_page_80_decode(uint8_t const * p_page_buffer,
+ volatile ant_common_page80_data_t * p_page_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ANT_COMMON_PAGE_80_H__
+/** @} */
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_81.c b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_81.c
new file mode 100644
index 0000000..3e5582e
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_81.c
@@ -0,0 +1,117 @@
+/**
+ * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#include "sdk_common.h"
+#if NRF_MODULE_ENABLED(ANT_COMMON_PAGE_81)
+
+#include "ant_common_page_81.h"
+
+#define NRF_LOG_MODULE_NAME ant_common_page_81
+#if ANT_COMMON_PAGE_81_LOG_ENABLED
+#define NRF_LOG_LEVEL ANT_COMMON_PAGE_81_LOG_LEVEL
+#define NRF_LOG_INFO_COLOR ANT_COMMON_PAGE_81_INFO_COLOR
+#else // ANT_COMMON_PAGE_81_LOG_ENABLED
+#define NRF_LOG_LEVEL 0
+#endif // ANT_COMMON_PAGE_81_LOG_ENABLED
+#include "nrf_log.h"
+NRF_LOG_MODULE_REGISTER();
+
+/**@brief ant+ common page 81 data layout structure. */
+typedef struct
+{
+ uint8_t reserved; ///< unused, fill by 0xFF
+ uint8_t sw_revision_minor;
+ uint8_t sw_revision_major;
+ uint8_t serial_number[4];
+}ant_common_page81_data_layout_t;
+
+
+/**@brief Function for tracing page 80 data.
+ *
+ * @param[in] p_page_data Pointer to the page 80 data.
+ */
+static void page81_data_log(volatile ant_common_page81_data_t const * p_page_data)
+{
+ if (p_page_data->sw_revision_minor != UINT8_MAX)
+ {
+ NRF_LOG_INFO("sw revision: %u.%u",
+ ((ant_common_page81_data_t const *) p_page_data)->sw_revision_major,
+ ((ant_common_page81_data_t const *) p_page_data)->sw_revision_minor);
+ }
+ else
+ {
+ NRF_LOG_INFO("sw revision: %u", p_page_data->sw_revision_major);
+ }
+
+ NRF_LOG_INFO("serial number: %u\r\n\n", (unsigned int) p_page_data->serial_number);
+}
+
+
+void ant_common_page_81_encode(uint8_t * p_page_buffer,
+ volatile ant_common_page81_data_t const * p_page_data)
+{
+ ant_common_page81_data_layout_t * p_outcoming_data =
+ (ant_common_page81_data_layout_t *)p_page_buffer;
+
+ p_outcoming_data->reserved = UINT8_MAX;
+
+ p_outcoming_data->sw_revision_minor = p_page_data->sw_revision_minor;
+ p_outcoming_data->sw_revision_major = p_page_data->sw_revision_major;
+
+ UNUSED_PARAMETER(uint32_encode(p_page_data->serial_number, p_outcoming_data->serial_number));
+
+ page81_data_log(p_page_data);
+}
+
+
+void ant_common_page_81_decode(uint8_t const * p_page_buffer,
+ volatile ant_common_page81_data_t * p_page_data)
+{
+ ant_common_page81_data_layout_t const * p_incoming_data =
+ (ant_common_page81_data_layout_t *)p_page_buffer;
+
+ p_page_data->sw_revision_minor = p_incoming_data->sw_revision_minor;
+ p_page_data->sw_revision_major = p_incoming_data->sw_revision_major;
+
+ p_page_data->serial_number = uint32_decode(p_incoming_data->serial_number);
+
+ page81_data_log(p_page_data);
+}
+
+#endif // NRF_MODULE_ENABLED(ANT_COMMON_PAGE_81)
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_81.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_81.h
new file mode 100644
index 0000000..4299850
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/ant/ant_profiles/ant_common/pages/ant_common_page_81.h
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form, except as embedded into a Nordic
+ * Semiconductor ASA integrated circuit in a product or a software update for
+ * such product, must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ *
+ * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * 4. This software, with or without modification, must only be used with a
+ * Nordic Semiconductor ASA integrated circuit.
+ *
+ * 5. Any software provided in binary form under this license must not be reverse
+ * engineered, decompiled, modified and/or disassembled.
+ *
+ * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#ifndef ANT_COMMON_PAGE_81_H__
+#define ANT_COMMON_PAGE_81_H__
+
+/** @file
+ *
+ * @defgroup ant_common_page_81 ANT+ common page 81
+ * @{
+ * @ingroup ant_sdk_common_pages
+ */
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ANT_COMMON_PAGE_81 (81) ///< @brief ID value of common page 81.
+
+/**@brief Data structure for ANT+ common data page 81.
+ *
+ * @note This structure implements only page 81 specific data.
+ */
+typedef struct
+{
+ uint8_t sw_revision_minor; ///< Supplemental, fill by 0xFF if unused.
+ uint8_t sw_revision_major; ///< Main software version.
+ uint32_t serial_number; ///< Lowest 32 b of serial number, fill by 0xFFFFFFFFF if unused.
+} ant_common_page81_data_t;
+
+/**@brief Initialize page 81.
+ */
+#define DEFAULT_ANT_COMMON_page81() \
+ (ant_common_page81_data_t) \
+ { \
+ .sw_revision_minor = UINT8_MAX, \
+ .sw_revision_major = UINT8_MAX, \
+ .serial_number = UINT32_MAX, \
+ }
+
+/**@brief Initialize page 81.
+ */
+#define ANT_COMMON_page81(sw_major_rev, sw_minor_rev, seril_no) \
+ (ant_common_page81_data_t) \
+ { \
+ .sw_revision_minor = (sw_minor_rev), \
+ .sw_revision_major = (sw_major_rev), \
+ .serial_number = (seril_no), \
+ }
+
+/**@brief Function for encoding page 81.
+ *
+ * @param[in] p_page_data Pointer to the page data.
+ * @param[out] p_page_buffer Pointer to the data buffer.
+ */
+void ant_common_page_81_encode(uint8_t * p_page_buffer,
+ volatile ant_common_page81_data_t const * p_page_data);
+
+/**@brief Function for decoding page 81.
+ *
+ * @param[in] p_page_buffer Pointer to the data buffer.
+ * @param[out] p_page_data Pointer to the page data.
+ */
+void ant_common_page_81_decode(uint8_t const * p_page_buffer,
+ volatile ant_common_page81_data_t * p_page_data);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ANT_COMMON_PAGE_81_H__
+/** @} */