Skip to content

Rebase namespace_api on master #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 40 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
d8f6636
[ArduinoAPI] initial porting
facchinm Nov 16, 2017
e74e383
Add proper guards to UART and CDC
facchinm Jan 4, 2019
d6e174d
UART: adapt to namespaced ArduinoAPI
facchinm Jan 4, 2019
9adee56
SPI: converto to ArduinoAPI
facchinm Jan 4, 2019
0b85886
File update to use ArduinoCore-API
giulcioffi Apr 9, 2020
9954559
Rename HardwareSerial classes with UART
giulcioffi Apr 10, 2020
7756db3
Remove common functions already implemented in API
giulcioffi Apr 10, 2020
3ef2b46
Port USB to API
giulcioffi Apr 10, 2020
505541e
Port SPI into API
giulcioffi Apr 10, 2020
26c204d
Port Wire into API
giulcioffi Apr 10, 2020
f847573
Adapt digital* APIs to new signatures
giulcioffi Apr 10, 2020
9c4860b
Add API folder to compile recipe
giulcioffi Apr 10, 2020
117e1e9
Merge branch 'namespaced_api' of github.com:giulcioffi/ArduinoCore-av…
giulcioffi May 28, 2020
a8e69b6
Revert "Merge branch 'namespaced_api' of github.com:giulcioffi/Arduin…
giulcioffi Jun 1, 2020
e3998f8
Add workflow for CI
giulcioffi May 21, 2020
dcab1c2
Add MFRC522
giulcioffi May 21, 2020
a5e1f58
Add shared examples
giulcioffi May 22, 2020
82bc00a
Arduino Mega
giulcioffi May 22, 2020
ac7e0a4
Add libraries for Basic examples
giulcioffi May 22, 2020
53f9b29
Different examples for different boards
giulcioffi May 22, 2020
26fbb76
Move out MultiSerial and USB examples
giulcioffi May 22, 2020
97e6543
4 boards
giulcioffi May 22, 2020
6dc6bef
Delete SerialPassthrough
giulcioffi May 22, 2020
1a03846
Add boards
giulcioffi May 25, 2020
fd4a42d
Create 2 jobs
giulcioffi May 25, 2020
85cdd3a
3 jobs
giulcioffi May 25, 2020
7edcd69
Add SerialPassthrough
giulcioffi May 25, 2020
6f5a2ea
Add boards to main job
giulcioffi May 25, 2020
2d61432
Move Blink out for Arduino robot Control & Motor
giulcioffi May 25, 2020
547dd39
Use GitHub action matrix.include feature
giulcioffi May 25, 2020
85df4e9
Add global libraries
giulcioffi May 25, 2020
c8af622
Add examples from main general libraries
giulcioffi May 25, 2020
51645f3
Add report size deltas
giulcioffi May 26, 2020
8a10121
Add tests for size deltas
giulcioffi May 26, 2020
34537e6
Add examples from external libraries
giulcioffi May 26, 2020
1aeae42
Remove steps for libraries installation
giulcioffi May 26, 2020
8964fce
Compile Wire library from PR issue 42
giulcioffi May 28, 2020
adf3066
Workflow for namespaced_api
giulcioffi Jun 1, 2020
a34f975
Elaborate size delta reports for all compilations
giulcioffi Jun 1, 2020
1780431
Add API compilation with current platform
giulcioffi Jun 3, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
152 changes: 152 additions & 0 deletions .github/workflows/compile-examples.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
name: Compile Examples

on: [pull_request, push]

jobs:
compile-test:
runs-on: ubuntu-latest

env:
# libraries to install for all boards
UNIVERSAL_LIBRARIES: '"MFRC522" "Keyboard" "Mouse" "Servo" "LiquidCrystal" "CapacitiveSensor"'
# sketch paths to compile (recursive) for all boards
UNIVERSAL_SKETCH_PATHS: '"/github/home/Arduino/libraries/MFRC522/examples" "extras/shared/examples"' # "extras/shared/examples/01.Basics/AnalogReadSerial"'

strategy:
fail-fast: false

matrix:
board: [
{"fqbn": "arduino:avr:yun", "type": "usb"},
{"fqbn": "arduino:avr:uno", "type": "normal"},
{"fqbn": "arduino:avr:diecimila", "type": "normal"},
{"fqbn": "arduino:avr:nano", "type": "normal"},
{"fqbn": "arduino:avr:mega", "type": "MultiSerial"}, #:cpu=atmega2560
{"fqbn": "arduino:avr:megaADK", "type": "MultiSerial"},
{"fqbn": "arduino:avr:leonardo", "type": "usb"},
{"fqbn": "arduino:avr:leonardoeth", "type": "usb"},
{"fqbn": "arduino:avr:micro", "type": "usb"},
{"fqbn": "arduino:avr:esplora", "type": "usb"},
{"fqbn": "arduino:avr:mini", "type": "normal"},
{"fqbn": "arduino:avr:ethernet", "type": "normal"},
{"fqbn": "arduino:avr:fio", "type": "normal"},
{"fqbn": "arduino:avr:bt", "type": "normal"},
{"fqbn": "arduino:avr:LilyPadUSB", "type": "usb"},
{"fqbn": "arduino:avr:lilypad", "type": "normal"},
{"fqbn": "arduino:avr:pro", "type": "normal"},
#"arduino:avr:atmegang",
{"fqbn": "arduino:avr:robotControl", "type": "control"},
{"fqbn": "arduino:avr:robotMotor", "type": "control"},
#"arduino:avr:gemma",
{"fqbn": "arduino:avr:circuitplay32u4cat", "type": "usb"},
{"fqbn": "arduino:avr:yunmini", "type": "usb"},
{"fqbn": "arduino:avr:chiwawa", "type": "usb"},
{"fqbn": "arduino:avr:one", "type": "usb"},
{"fqbn": "arduino:avr:unowifi", "type": "normal"}
]

# make board type-specific customizations to the matrix jobs
include:
# normal boards
- board:
type: "normal"
additional-sketch-paths: '"libraries" "extras/shared/Blink" "extras/shared/BlinkWithoutDelay" "~/Arduino/libraries/Servo/examples" "~/Arduino/libraries/LiquidCrystal/examples" "~/Arduino/libraries/Ethernet/examples" "~/Arduino/libraries/SD/examples" "~/Arduino/libraries/WiFi/examples" "~/Arduino/libraries/SD/examples" "~/Arduino/libraries/WiFi/examples" ~/Arduino/libraries/Firmata/examples/StandardFirmataPlus" "~/Arduino/libraries/Firmata/examples/StandardFirmataEthernet" "~/Arduino/libraries/Firmata/examples/StandardFirmata" "~/Arduino/libraries/Firmata/examples/SimpleDigitalFirmata" "~/Arduino/libraries/Firmata/examples/SimpleAnalogFirmata" "~/Arduino/libraries/Firmata/examples/ServoFirmata" "~/Arduino/libraries/Firmata/examples/OldStandardFirmata" "~/Arduino/libraries/Firmata/examples/EchoString" "~/Arduino/libraries/Firmata/examples/AnalogFirmata" "~/Arduino/libraries/Firmata/examples/AllInputsFirmata" "~/Arduino/libraries/Arduino_LSM9DS1/examples" "~/Arduino/libraries/Arduino_JSON/examples"'
# MultiSerial boards
- board:
type: "MultiSerial"
additional-sketch-paths: '"libraries" "extras/shared/Blink" "extras/shared/BlinkWithoutDelay" "extras/shared/MultiSerial" "extras/shared/SerialPassthrough" "~/Arduino/libraries/Servo/examples" "~/Arduino/libraries/LiquidCrystal/examples" "~/Arduino/libraries/Ethernet/examples" "~/Arduino/libraries/SD/examples" "~/Arduino/libraries/WiFi/examples" "~/Arduino/libraries/SD/examples" "~/Arduino/libraries/WiFi/examples" ~/Arduino/libraries/Firmata/examples/StandardFirmataPlus" "~/Arduino/libraries/Firmata/examples/StandardFirmataEthernet" "~/Arduino/libraries/Firmata/examples/StandardFirmata" "~/Arduino/libraries/Firmata/examples/SimpleDigitalFirmata" "~/Arduino/libraries/Firmata/examples/SimpleAnalogFirmata" "~/Arduino/libraries/Firmata/examples/ServoFirmata" "~/Arduino/libraries/Firmata/examples/OldStandardFirmata" "~/Arduino/libraries/Firmata/examples/EchoString" "~/Arduino/libraries/Firmata/examples/AnalogFirmata" "~/Arduino/libraries/Firmata/examples/AllInputsFirmata" "~/Arduino/libraries/Arduino_LSM9DS1/examples" "~/Arduino/libraries/Arduino_JSON/examples"'
# USB boards
- board:
type: "usb"
additional-sketch-paths: '"libraries" "extras/shared/Blink" "extras/shared/BlinkWithoutDelay" "extras/shared/MultiSerial" "extras/shared/SerialPassthrough" "extras/shared/09.USB" "~/Arduino/libraries/Keyboard/examples/Serial" "~/Arduino/libraries/Servo/examples" "~/Arduino/libraries/LiquidCrystal/examples" "~/Arduino/libraries/Ethernet/examples" "~/Arduino/libraries/SD/examples" "~/Arduino/libraries/WiFi/examples" "~/Arduino/libraries/SD/examples" "~/Arduino/libraries/WiFi/examples" ~/Arduino/libraries/Firmata/examples/StandardFirmataPlus" "~/Arduino/libraries/Firmata/examples/StandardFirmataEthernet" "~/Arduino/libraries/Firmata/examples/StandardFirmata" "~/Arduino/libraries/Firmata/examples/SimpleDigitalFirmata" "~/Arduino/libraries/Firmata/examples/SimpleAnalogFirmata" "~/Arduino/libraries/Firmata/examples/ServoFirmata" "~/Arduino/libraries/Firmata/examples/OldStandardFirmata" "~/Arduino/libraries/Firmata/examples/EchoString" "~/Arduino/libraries/Firmata/examples/AnalogFirmata" "~/Arduino/libraries/Firmata/examples/AllInputsFirmata" "~/Arduino/libraries/Arduino_LSM9DS1/examples" "~/Arduino/libraries/Arduino_JSON/examples"'
# RobotMotorControl boards
- board:
type: "control"
additional-sketch-paths: '"libraries/Wire" "libraries/SPI" "libraries/EEPROM" "extras/shared/MultiSerial" "extras/shared/SerialPassthrough" "extras/shared/09.USB"'

steps:
- name: Checkout repository
uses: actions/checkout@v2

# The source files are in a subfolder of the ArduinoCore-API repository, so it's not possible to clone it directly to the final destination in the core
- name: Checkout ArduinoCore-API
uses: actions/checkout@v2
with:
repository: arduino/ArduinoCore-API
path: extras/ArduinoCore-API

- name: Install ArduinoCore-API
run: mv "$GITHUB_WORKSPACE/extras/ArduinoCore-API/api" "$GITHUB_WORKSPACE/cores/arduino"

- name: Checkout Adafruit WiFiNINA
uses: actions/checkout@v2
with:
repository: adafruit/WiFiNINA
path: adafruit/WiFiNINA

- name: Compile examples
uses: per1234/actions/libraries/compile-examples@08aa4fea12ce229a1def6da8c6ca09e27a4e3dfb
with:
fqbn: ${{ matrix.board.fqbn }}
libraries: |
- name: MFRC522
- source-url: https://github.com/arduino-libraries/Keyboard.git
- name: Mouse
- name: Servo
- name: LiquidCrystal
- name: CapacitiveSensor
- name: Ethernet
- name: ArduinoBearSSL
- name: Arduino_APDS9960
- name: Servo
- name: Arduino_LSM9DS1
- name: ArduinoHttpClient
- name: NTPClient
- name: TFT
- name: ArduinoMqttClient
- name: Arduino_CRC32
- name: Arduino_LSM6DS3
- name: Stepper
- name: SD
- name: WiFi101
- name: Arduino_JSON
- name: Arduino_HTS221
- name: Firmata
- name: ArduinoMotorCarrier
- name: ArduinoCloudThing
- name: Arduino_DebugUtils
- name: WiFi Link
- name: 9 Axes Motion
- name: Arduino_LPS22HB
- name: CTC GO MOTIONS
- name: ArduinoModbus
- name: ArduinoIoTCloudBearSSL
- name: ArduinoDMX
- name: ArduinoRS485
- name: Arduino_OAuth
- name: CTC GO CORE
- name: WiFi
- name: ArduinoMDNS
- name: Bridge
- name: Temboo
- name: ArduinoCloud
- name: Madgwick
#- source-url: https://github.com/giulcioffi/ArduinoCore-avr.git
# version: namespaced_api
# source-path: cores/arduino
platforms: |
# Use Board Manager to install the latest release of Arduino megaAVR Boards to get the toolchain
- name: "arduino:avr"
# Overwrite the Board Manager installation with the local platform
- source-path: "./"
name: "arduino:avr"
sketch-paths: "${{ env.UNIVERSAL_SKETCH_PATHS }} ${{ matrix.additional-sketch-paths }}"
enable-size-deltas-report: 'true'
verbose: 'true'

- name: Save memory usage change report as artifact
if: github.event_name == 'pull_request'
uses: actions/upload-artifact@v1
with:
name: 'size-deltas-reports'
path: 'size-deltas-reports'
13 changes: 13 additions & 0 deletions .github/workflows/report-size-deltas.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: Report PR Size Deltas

on:
schedule:
- cron: '*/5 * * * *'

jobs:
report:
runs-on: ubuntu-latest

steps:
- name: Comment size deltas reports to PRs
uses: per1234/actions/libraries/report-size-deltas@08aa4fea12ce229a1def6da8c6ca09e27a4e3dfb
117 changes: 6 additions & 111 deletions cores/arduino/Arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,47 +20,16 @@
#ifndef Arduino_h
#define Arduino_h

#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>

#include "api/ArduinoAPI.h"
#include "api/Common.h"
#include <avr/pgmspace.h>
#include <avr/io.h>
#include <avr/interrupt.h>

#include "binary.h"

#ifdef __cplusplus
extern "C"{
#endif

void yield(void);

#define HIGH 0x1
#define LOW 0x0

#define INPUT 0x0
#define OUTPUT 0x1
#define INPUT_PULLUP 0x2

#define PI 3.1415926535897932384626433832795
#define HALF_PI 1.5707963267948966192313216916398
#define TWO_PI 6.283185307179586476925286766559
#define DEG_TO_RAD 0.017453292519943295769236907684886
#define RAD_TO_DEG 57.295779513082320876798154814105
#define EULER 2.718281828459045235360287471352

#define SERIAL 0x0
#define DISPLAY 0x1

#define LSBFIRST 0
#define MSBFIRST 1

#define CHANGE 1
#define FALLING 2
#define RISING 3

#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
#define DEFAULT 0
#define EXTERNAL 1
Expand All @@ -84,75 +53,18 @@ void yield(void);
#define EXTERNAL 0
#endif

// undefine stdlib's abs if encountered
#ifdef abs
#undef abs
#endif

#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(x) ((x)>0?(x):-(x))
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
#define radians(deg) ((deg)*DEG_TO_RAD)
#define degrees(rad) ((rad)*RAD_TO_DEG)
#define sq(x) ((x)*(x))

#define interrupts() sei()
#define noInterrupts() cli()

#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )
#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() )

#define lowByte(w) ((uint8_t) ((w) & 0xff))
#define highByte(w) ((uint8_t) ((w) >> 8))

#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
#define bitToggle(value, bit) ((value) ^= (1UL << (bit)))
#define bitWrite(value, bit, bitvalue) ((bitvalue) ? bitSet(value, bit) : bitClear(value, bit))

// avr-libc defines _NOP() since 1.6.2
#ifndef _NOP
#define _NOP() do { __asm__ volatile ("nop"); } while (0)
#endif

typedef unsigned int word;

#define bit(b) (1UL << (b))

typedef bool boolean;
typedef uint8_t byte;

void init(void);
void initVariant(void);

int atexit(void (*func)()) __attribute__((weak));

void pinMode(uint8_t pin, uint8_t mode);
void digitalWrite(uint8_t pin, uint8_t val);
int digitalRead(uint8_t pin);
int analogRead(uint8_t pin);
void analogReference(uint8_t mode);
void analogWrite(uint8_t pin, int val);

unsigned long millis(void);
unsigned long micros(void);
void delay(unsigned long ms);
void delayMicroseconds(unsigned int us);
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout);

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);

void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
void detachInterrupt(uint8_t interruptNum);

void setup(void);
void loop(void);

// Get the bit location within the hardware port of the given virtual pin.
// This comes from the pins_*.c file for the active board configuration.
Expand Down Expand Up @@ -228,31 +140,14 @@ extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
#endif

#ifdef __cplusplus
#include "WCharacter.h"
#include "WString.h"
#include "HardwareSerial.h"
#include "USBAPI.h"
#include "UART.h"
#include "USBCore.h"
#include "CDC.h"
#include "MSC.h"
#if defined(HAVE_HWSERIAL0) && defined(HAVE_CDCSERIAL)
#error "Targets with both UART0 and CDC serial not supported"
#endif

uint16_t makeWord(uint16_t w);
uint16_t makeWord(byte h, byte l);

#define word(...) makeWord(__VA_ARGS__)

unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);

void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
void noTone(uint8_t _pin);

// WMath prototypes
long random(long);
long random(long, long);
void randomSeed(unsigned long);
long map(long, long, long, long, long);

#endif

#include "pins_arduino.h"
Expand Down
28 changes: 16 additions & 12 deletions cores/arduino/CDC.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@


/* Copyright (c) 2011, Peter Barrett
**
** Permission to use, copy, modify, and/or distribute this software for
Expand All @@ -16,25 +14,31 @@
** SOFTWARE.
*/

#include "USBAPI.h"
#define RINGBUFFER_FORCE_SMALL_SIZE

#include <avr/wdt.h>
#include <util/atomic.h>
#include <avr/pgmspace.h>
#include "CDC.h"
#include "api/USBAPI.h"
#include "USBCore.h"
#include "api/Common.h"

#if defined(USBCON)

typedef struct
{
u32 dwDTERate;
u8 bCharFormat;
u8 bParityType;
u8 bDataBits;
u8 lineState;
uint32_t dwDTERate;
uint8_t bCharFormat;
uint8_t bParityType;
uint8_t bDataBits;
uint8_t lineState;
} LineInfo;

static volatile LineInfo _usbLineInfo = { 57600, 0x00, 0x00, 0x00, 0x00 };
static volatile int32_t breakValue = -1;

static u8 wdtcsr_save;
static uint8_t wdtcsr_save;

#define WEAK __attribute__ ((weak))

Expand Down Expand Up @@ -62,16 +66,16 @@ bool isLUFAbootloader()
return pgm_read_word(FLASHEND - 1) == NEW_LUFA_SIGNATURE;
}

int CDC_GetInterface(u8* interfaceNum)
int CDC_GetInterface(uint8_t* interfaceNum)
{
interfaceNum[0] += 2; // uses 2
return USB_SendControl(TRANSFER_PGM,&_cdcInterface,sizeof(_cdcInterface));
}

bool CDC_Setup(USBSetup& setup)
{
u8 r = setup.bRequest;
u8 requestType = setup.bmRequestType;
uint8_t r = setup.bRequest;
uint8_t requestType = setup.bmRequestType;

if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType)
{
Expand Down
Loading