aboutsummaryrefslogtreecommitdiffstats
path: root/arduino/cores/nRF5/main.cpp
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2019-02-28 17:04:22 -0500
committerClyne Sullivan <tullivan99@gmail.com>2019-02-28 17:04:22 -0500
commitd6869d1ec4bd24cd2c3eafa534f0849b25ec5607 (patch)
tree79e54ed27b39c31864895535d11399708d5a45c0 /arduino/cores/nRF5/main.cpp
parent614ee97bf3a2270c413527a7f35c54cbecd9e601 (diff)
added basic code
Diffstat (limited to 'arduino/cores/nRF5/main.cpp')
-rwxr-xr-xarduino/cores/nRF5/main.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/arduino/cores/nRF5/main.cpp b/arduino/cores/nRF5/main.cpp
new file mode 100755
index 0000000..c836e43
--- /dev/null
+++ b/arduino/cores/nRF5/main.cpp
@@ -0,0 +1,124 @@
+/*
+ Copyright (c) 2015 Arduino LLC. All right reserved.
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#define ARDUINO_MAIN
+#include "Arduino.h"
+
+// DEBUG Level 1
+#if CFG_DEBUG
+// weak function to avoid compilation error with
+// non-Bluefruit library sketch such as ADC read test
+void Bluefruit_printInfo() __attribute__((weak));
+void Bluefruit_printInfo() {}
+#endif
+
+// DEBUG Level 3
+#if CFG_DEBUG >= 3
+#include "SEGGER_SYSVIEW.h"
+#endif
+
+static TaskHandle_t _loopHandle;
+
+
+// Weak empty variant initialization function.
+// May be redefined by variant files.
+void initVariant() __attribute__((weak));
+void initVariant() { }
+
+uint32_t _loopStacksize = 512*3;
+
+uint32_t setLoopStacksize(void) __attribute__ ((weak));
+
+static void loop_task(void* arg)
+{
+ (void) arg;
+
+ setup();
+
+#if CFG_DEBUG
+ // If Serial is not begin(), call it to avoid hard fault
+ if ( !Serial ) Serial.begin(115200);
+ dbgPrintVersion();
+ // dbgMemInfo();
+ Bluefruit_printInfo();
+#endif
+
+ while (1)
+ {
+ loop();
+
+#ifdef NRF52840_XXAA
+ tud_cdc_write_flush();
+#endif
+
+ // Serial events
+ if (serialEvent && serialEventRun) serialEventRun();
+ }
+}
+
+/*
+ * \brief Main entry point of Arduino application
+ */
+int main( void )
+{
+ init();
+ initVariant();
+
+ ledOn(PIN_LED2);
+
+ if (setLoopStacksize)
+ {
+ _loopStacksize = setLoopStacksize();
+ }
+
+#if CFG_DEBUG >= 3
+ SEGGER_SYSVIEW_Conf();
+#endif
+
+ // Create a task for loop()
+ xTaskCreate( loop_task, "loop", _loopStacksize, NULL, TASK_PRIO_LOW, &_loopHandle);
+
+ // Initialize callback task
+ ada_callback_init();
+
+ // Start FreeRTOS scheduler.
+ vTaskStartScheduler();
+
+ NVIC_SystemReset();
+
+ return 0;
+}
+
+void suspendLoop(void)
+{
+ vTaskSuspend(_loopHandle);
+}
+
+extern "C"
+{
+
+// nanolib printf() retarget
+int _write (int fd, const void *buf, size_t count)
+{
+ (void) fd;
+
+ if ( Serial )
+ {
+ Serial.write( (const uint8_t *) buf, count);
+ }
+}
+
+}
+