aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/nRF5_SDK_15.0.0_a53641a/examples/proprietary_rf/gzll/gzp_dynamic_pairing/host/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/examples/proprietary_rf/gzll/gzp_dynamic_pairing/host/main.c')
-rw-r--r--thirdparty/nRF5_SDK_15.0.0_a53641a/examples/proprietary_rf/gzll/gzp_dynamic_pairing/host/main.c195
1 files changed, 195 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/examples/proprietary_rf/gzll/gzp_dynamic_pairing/host/main.c b/thirdparty/nRF5_SDK_15.0.0_a53641a/examples/proprietary_rf/gzll/gzp_dynamic_pairing/host/main.c
new file mode 100644
index 0000000..a1d5953
--- /dev/null
+++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/examples/proprietary_rf/gzll/gzp_dynamic_pairing/host/main.c
@@ -0,0 +1,195 @@
+/**
+ * Copyright (c) 2012 - 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.
+ *
+ */
+/**
+ * This project requires a running counterpart project, which is either of the following:
+ *
+ * 1) nRF24Lxx device running the gzll_device_w_dynamic_pairing example from the
+ * compatible version of the nRFgo SDK
+ *
+ * 2) nRF5x device running the gzp_device_dynamic_pairing_example example.
+ *
+ * The application listens for packets continuously, monitoring for pairing
+ * requests, as well as normal user data.
+ *
+ * The Gazell pairing library uses pipe 0 and pipe 1 for encrypted communication.
+ * The application will grant any request for a host ID, thus granting pairing.
+ * Unencrypted packets can be received on pipe 2.
+ *
+ * When DATA is received, the contents of the first payload byte
+ * are output on GPIO Port LEDS.
+ *
+ */
+#include "nrf_gzll.h"
+#include "nrf_gzp.h"
+#include "nrf_ecb.h"
+#include "bsp.h"
+#include "app_error.h"
+#include "app_timer.h"
+#include "nrf_gzll_error.h"
+
+
+#include "nrf_log.h"
+#include "nrf_log_ctrl.h"
+#include "nrf_log_default_backends.h"
+
+/*****************************************************************************/
+/** @name Configuration */
+/*****************************************************************************/
+#define UNENCRYPTED_DATA_PIPE 2 ///< Pipes 0 and 1 are reserved for GZP pairing and data. See nrf_gzp.h.
+#define NRF_GZLLDE_RXPERIOD_DIV_2 504 ///< RXPERIOD/2 on LU1 = timeslot period on nRF5x.
+
+/**
+ * @brief Initialize the BSP modules.
+ */
+static void ui_init(void)
+{
+ uint32_t err_code;
+
+ // Initialize application timer.
+ err_code = app_timer_init();
+ APP_ERROR_CHECK(err_code);
+
+ err_code = bsp_init(BSP_INIT_LEDS, NULL);
+ APP_ERROR_CHECK(err_code);
+
+ // Set up logger
+ err_code = NRF_LOG_INIT(NULL);
+ APP_ERROR_CHECK(err_code);
+
+ NRF_LOG_DEFAULT_BACKENDS_INIT();
+
+ bsp_board_init(BSP_INIT_LEDS);
+}
+
+
+/**
+ * @brief Function to control LED outputs.
+ *
+ * @param[in] val Desirable state of the LEDs.
+ */
+static void output_present(uint8_t val)
+{
+ uint32_t i;
+
+ for (i = 0; i < LEDS_NUMBER; i++)
+ {
+ if (val & (1 << i))
+ {
+ bsp_board_led_on(i);
+ }
+ else
+ {
+ bsp_board_led_off(i);
+ }
+ }
+}
+
+
+/*****************************************************************************/
+/**
+ * @brief Main function.
+ *
+ * @return ANSI required int return type.
+ */
+/*****************************************************************************/
+int main(void)
+{
+ // Debug helper variables
+ uint32_t length;
+
+ // Data and acknowledgement payloads
+ uint8_t payload[NRF_GZLL_CONST_MAX_PAYLOAD_LENGTH];
+
+ // Set up the user interface (buttons and LEDs)
+ ui_init();
+
+ // Initialize the Gazell Link Layer
+ bool result_value = nrf_gzll_init(NRF_GZLL_MODE_HOST);
+ GAZELLE_ERROR_CODE_CHECK(result_value);
+
+ result_value = nrf_gzll_set_timeslot_period(NRF_GZLLDE_RXPERIOD_DIV_2); // Half RX period on an nRF24Lxx device
+ GAZELLE_ERROR_CODE_CHECK(result_value);
+
+ // Initialize the Gazell Pairing Library
+ gzp_init();
+ result_value = nrf_gzll_set_rx_pipes_enabled(nrf_gzll_get_rx_pipes_enabled() |
+ (1 << UNENCRYPTED_DATA_PIPE));
+ GAZELLE_ERROR_CODE_CHECK(result_value);
+
+ gzp_pairing_enable(true);
+
+ result_value = nrf_gzll_enable();
+ GAZELLE_ERROR_CODE_CHECK(result_value);
+
+ NRF_LOG_INFO("Gazell dynamic pairing example started. Host mode.");
+ NRF_LOG_FLUSH();
+
+
+ for (;;)
+ {
+ gzp_host_execute();
+
+ // If a Host ID request received
+ if (gzp_id_req_received())
+ {
+ // Always grant a request
+ gzp_id_req_grant();
+ }
+
+ length = NRF_GZLL_CONST_MAX_PAYLOAD_LENGTH;
+
+ if (nrf_gzll_get_rx_fifo_packet_count(UNENCRYPTED_DATA_PIPE))
+ {
+ if (nrf_gzll_fetch_packet_from_rx_fifo(UNENCRYPTED_DATA_PIPE, payload, &length))
+ {
+ output_present(payload[0]);
+ }
+ }
+ else if (gzp_crypt_user_data_received())
+ {
+ if (gzp_crypt_user_data_read(payload, (uint8_t *)&length))
+ {
+ output_present(payload[0]);
+ }
+ }
+ }
+}
+
+