Skip to content

Commit

Permalink
Merge pull request #141 from lf-lang/arduino-cli-support
Browse files Browse the repository at this point in the history
Preliminary multi-board support for Arduino
  • Loading branch information
lhstrh authored Jan 25, 2023
2 parents ee464fd + 085f9c4 commit c8455ba
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 56 deletions.
30 changes: 18 additions & 12 deletions core/platform/lf_arduino_support.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,14 +133,17 @@ int lf_clock_gettime(instant_t* t) {
* nested critical sections.
*/
int lf_critical_section_enter() {
_lf_num_nested_critical_sections++;
// if (_lf_num_nested_critical_sections++ == 0) {
// // First nested entry into a critical section.
// // If interrupts are not initially enabled, then increment again to prevent
// // TODO: Do we need to check whether the interrupts were enabled to
// // begin with? AFAIK there is no Arduino API for that
// noInterrupts();
// }
if (_lf_num_nested_critical_sections++ == 0) {
// First nested entry into a critical section.
// If interrupts are not initially enabled, then increment again to prevent
// TODO: Do we need to check whether the interrupts were enabled to
// begin with? AFAIK there is no Arduino API for that
#if BOARD==MBED
core_util_critical_section_enter(); //MBED Boards use an RTOS, so we use a specific call to enter a critical section.
#else
noInterrupts();
#endif
}
return 0;
}

Expand All @@ -158,10 +161,13 @@ int lf_critical_section_exit() {
if (_lf_num_nested_critical_sections <= 0) {
return 1;
}
// if (--_lf_num_nested_critical_sections == 0) {
// interrupts();
// }
--_lf_num_nested_critical_sections;
if (--_lf_num_nested_critical_sections == 0) {
#if BOARD==MBED
core_util_critical_section_exit(); //MBED Boards use an RTOS, so we use a specific call to exit a critical section.
#else
interrupts();
#endif
}
return 0;
}

Expand Down
96 changes: 52 additions & 44 deletions include/core/platform/lf_arduino_support.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,57 +36,65 @@ THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <time.h> // For CLOCK_MONOTONIC
#include <stdbool.h>

#define AVR 0
#define megaAVR 1
#define SAMD 2
#define SAM 3
#define MBED 4

#ifndef BOARD
#if defined(ARDUINO_AVR_ADK)
#define BOARD "Mega Adk"
#if defined(ARDUINO_AVR_ADK)
#define BOARD AVR
#elif defined(ARDUINO_AVR_BT) // Bluetooth
#define BOARD "Bt"
#elif defined(ARDUINO_AVR_DUEMILANOVE)
#define BOARD "Duemilanove"
#elif defined(ARDUINO_AVR_ESPLORA)
#define BOARD "Esplora"
#elif defined(ARDUINO_AVR_ETHERNET)
#define BOARD "Ethernet"
#elif defined(ARDUINO_AVR_FIO)
#define BOARD "Fio"
#define BOARD AVR
#elif defined(ARDUINO_AVR_DUEMILANOVE)
#define BOARD AVR
#elif defined(ARDUINO_AVR_ESPLORA)
#define BOARD AVR
#elif defined(ARDUINO_AVR_ETHERNET)
#define BOARD AVR
#elif defined(ARDUINO_AVR_FIO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_GEMMA)
#define BOARD "Gemma"
#elif defined(ARDUINO_AVR_LEONARDO)
#define BOARD "Leonardo"
#define BOARD AVR
#elif defined(ARDUINO_AVR_LEONARDO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_LILYPAD)
#define BOARD "Lilypad"
#define BOARD AVR
#elif defined(ARDUINO_AVR_LILYPAD_USB)
#define BOARD "Lilypad Usb"
#elif defined(ARDUINO_AVR_MEGA)
#define BOARD "Mega"
#elif defined(ARDUINO_AVR_MEGA2560)
#define BOARD "Mega 2560"
#elif defined(ARDUINO_AVR_MICRO)
#define BOARD "Micro"
#elif defined(ARDUINO_AVR_MINI)
#define BOARD "Mini"
#elif defined(ARDUINO_AVR_NANO)
#define BOARD "Nano"
#elif defined(ARDUINO_AVR_NG)
#define BOARD "NG"
#elif defined(ARDUINO_AVR_PRO)
#define BOARD "Pro"
#elif defined(ARDUINO_AVR_ROBOT_CONTROL)
#define BOARD "Robot Ctrl"
#elif defined(ARDUINO_AVR_ROBOT_MOTOR)
#define BOARD "Robot Motor"
#elif defined(ARDUINO_AVR_UNO) || defined(__AVR_ATmega4809__)
#define BOARD "Uno"
#elif defined(ARDUINO_AVR_YUN)
#define BOARD "Yun"
#define BOARD AVR
#elif defined(ARDUINO_AVR_MEGA)
#define BOARD AVR
#elif defined(ARDUINO_AVR_MEGA2560)
#define BOARD AVR
#elif defined(ARDUINO_AVR_MICRO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_MINI)
#define BOARD AVR
#elif defined(ARDUINO_AVR_NANO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_NG)
#define BOARD AVR
#elif defined(ARDUINO_AVR_PRO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_ROBOT_CONTROL)
#define BOARD AVR
#elif defined(ARDUINO_AVR_ROBOT_MOTOR)
#define BOARD AVR
#elif defined(ARDUINO_AVR_UNO) || defined(__AVR_ATmega4809__)
#define BOARD AVR
#elif defined(ARDUINO_AVR_YUN)
#define BOARD AVR

// These boards must be installed separately:
#elif defined(ARDUINO_SAM_DUE)
#define BOARD "Due"
#elif defined(ARDUINO_SAMD_ZERO)
#define BOARD "Zero"
#elif defined(ARDUINO_ARC32_TOOLS)
#define BOARD "101"
#elif defined(ARDUINO_SAM_DUE)
#define BOARD SAM
#elif defined(ARDUINO_SAMD_ZERO)
#define BOARD SAMD
#elif defined(ARDUINO_ARC32_TOOLS)
#define BOARD SAM
#elif defined(ARDUINO_ARDUINO_NANO33BLE)
#define BOARD MBED
#endif
#endif

Expand Down

0 comments on commit c8455ba

Please sign in to comment.