You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by GitBox <gi...@apache.org> on 2018/04/30 18:29:58 UTC

[GitHub] turon commented on a change in pull request #72: [RFC] Porting NimBLE

turon commented on a change in pull request #72: [RFC] Porting NimBLE
URL: https://github.com/apache/mynewt-nimble/pull/72#discussion_r185063653
 
 

 ##########
 File path: porting/examples/freertos_nrf5_sdk/main.c
 ##########
 @@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "nrf_drv_clock.h"
+
+#include "nimble/nimble_port.h"
+#include "host/ble_hs.h"
+#include "services/gap/ble_svc_gap.h"
+
+static const char gap_name[] = "FreeRTOS NimBLE";
+
+static TaskHandle_t nimble_host_task_h;
+static TaskHandle_t nimble_ctrl_task_h;
+
+static uint32_t radio_isr_addr;
+static uint32_t rng_isr_addr;
+static uint32_t rtc0_isr_addr;
+
+/* Some interrupt handlers required for NimBLE radio driver */
+
+void
+RADIO_IRQHandler(void)
+{
+    ((void (*)(void))radio_isr_addr)();
+}
+
+void
+RNG_IRQHandler(void)
+{
+    ((void (*)(void))rng_isr_addr)();
+}
+
+void
+RTC0_IRQHandler(void)
+{
+    ((void (*)(void))rtc0_isr_addr)();
+}
+
+/* This is called by NimBLE radio driver to set interrupt handlers */
+void
+npl_hw_set_isr(int irqn, uint32_t addr)
+{
+    switch (irqn) {
+    case RADIO_IRQn:
+        radio_isr_addr = addr;
+        break;
+    case RNG_IRQn:
+        rng_isr_addr = addr;
+        break;
+    case RTC0_IRQn:
+        rtc0_isr_addr = addr;
+        break;
+    }
+}
+
+static void
+nimble_host_task(void *param)
+{
+    extern void app_ble_sync_cb(void);
+
+    ble_hs_cfg.sync_cb = app_ble_sync_cb;
+
+    ble_svc_gap_device_name_set(gap_name);
+
+    while (1) {
+        os_eventq_run(os_eventq_dflt_get());
+    }
+}
+
+int
+main(void)
+{
+    ret_code_t err_code;
+
+    /* Initialize clock driver for better time accuracy in FREERTOS */
+    err_code = nrf_drv_clock_init();
+    APP_ERROR_CHECK(err_code);
+
+    /* Initialize NimBLE porting layer */
+    nimble_port_init();
+
+    /*
+     * Create task where NimBLE host will run. It is not strictly necessary to
+     * have separate task for NimBLE host, but since something needs to handle
+     * default queue it is just easier to make separate task which does this.
+     */
+    xTaskCreate(nimble_host_task, "nh", configMINIMAL_STACK_SIZE + 400,
 
 Review comment:
   Shouldn't the task creation be abstracted by os_task_create API, similar to os_mutex_create, etc?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services