Skip to content
This repository was archived by the owner on Nov 19, 2022. It is now read-only.

Commit 9e23502

Browse files
authored
Merge pull request #6 from soburi/bump_v2.1.0
Bump to v2.1.0 close #3
2 parents 2a90bbc + 8014f68 commit 9e23502

30 files changed

+7809
-441
lines changed

boards.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ nrf52840_pca10056.build.variant=nrf52840_pca10056
2323
nrf52840_pca10056.menu.network.802154=IEEE802.15.4
2424
nrf52840_pca10056.menu.network.802154.build.network_conf=-DOVERLAY_APPEND_NETWORK={runtime.platform.path}/variants/{build.variant}/overlay-802154.conf
2525
nrf52840_pca10056.menu.network.ot=OpenThread
26-
nrf52840_pca10056.menu.network.ot.build.network_conf=-DOVERLAY_APPEND_NETWORK={runtime.platform.path}/variants/{build.variant}/overlay-ot.conf -DDEPENDENCY_APPEND_OT=ot -DEXTERNAL_PROJECT_PATH_OPENTHREAD={build.system.path}/openthread
26+
nrf52840_pca10056.menu.network.ot.build.network_conf=-DOVERLAY_APPEND_NETWORK={runtime.platform.path}/variants/{build.variant}/overlay-ot.conf
2727
nrf52840_pca10056.menu.network.bt=Bluetooth
2828
nrf52840_pca10056.menu.network.bt.build.network_conf=-DOVERLAY_APPEND_NETWORK={runtime.platform.path}/variants/{build.variant}/overlay-bt.conf
2929
nrf52840_pca10056.menu.uartlog.enable=Enable

cores/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
add_subdirectory(scirocco)
1+
add_subdirectory(scirocco)

cores/scirocco/CMakeLists.txt

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
1-
# SPDX-License-Identifier: Apache-2.0
2-
zephyr_include_directories(.)
3-
zephyr_sources(main.cpp)
4-
zephyr_sources(wiring.c)
5-
zephyr_sources(wiring_private.c)
6-
7-
1+
# SPDX-License-Identifier: Apache-2.0
2+
zephyr_include_directories(.)
3+
4+
if(NOT DEFINED ARDUINO_BUILD_PATH)
5+
6+
zephyr_sources(HardwareSerial.cpp)
7+
zephyr_sources(IPAddress.cpp)
8+
zephyr_sources(itoa.c)
9+
zephyr_sources(main.cpp)
10+
zephyr_sources(Print.cpp)
11+
zephyr_sources(pulse.c)
12+
zephyr_sources(Stream.cpp)
13+
zephyr_sources(Tone.cpp)
14+
zephyr_sources(UartDevice.cpp)
15+
zephyr_sources(wiring.c)
16+
zephyr_sources(wiring_analog.c)
17+
zephyr_sources(wiring_digital.c)
18+
zephyr_sources(wiring_private.cpp)
19+
zephyr_sources(wiring_shift.c)
20+
zephyr_sources(WMath.cpp)
21+
zephyr_sources(WString.cpp)
22+
23+
endif()
24+

cores/scirocco/IPAddress.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#include "Print.h"
2020
#include "IPAddress.h"
2121

22+
#if defined(CONFIG_NET_IPV4) || defined(CONFIG_NET_IPV6)
23+
2224
#include <zephyr.h>
2325
#pragma GCC diagnostic ignored "-Wparentheses"
2426
#include <net/net_ip.h>
@@ -227,3 +229,5 @@ const IPAddress IN6ADDR::INKLOCAL_ALLROUTERS_INIT(0xff02,0,0,0, 0,0,0,2);
227229
const IPAddress IN6ADDR::INTERFACELOCAL_ALLNODES_INIT(0xff01,0,0,0, 0,0,0,1);
228230
const IPAddress IN6ADDR::INTERFACELOCAL_ALLROUTERS_INIT(0xff01,0,0,0, 0,0,0,2);
229231
const IPAddress IN6ADDR::SITELOCAL_ALLROUTERS_INIT(0xff05,0,0,0, 0,0,0,2);
232+
233+
#endif

cores/scirocco/IPAddress.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include "Printable.h"
2929
#include "WString.h"
3030

31+
#if defined(CONFIG_NET_IPV4) || defined(CONFIG_NET_IPV6)
32+
3133
struct z_in_addr {
3234
union {
3335
#if defined(CONFIG_NET_IPV6)
@@ -158,3 +160,5 @@ const IN6ADDR IN6ADDR;
158160
#endif
159161

160162
#endif
163+
164+
#endif

cores/scirocco/UartDevice.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "UartDevice.h"
2222
#include "Arduino.h"
2323

24+
#ifdef CONFIG_UART_INTERRUPT_DRIVEN
25+
2426
Uart::Uart(struct device *_s)
2527
{
2628
uart = _s;
@@ -202,3 +204,5 @@ size_t Uart::write(const uint8_t data)
202204
{
203205
return write(&data, 1);
204206
}
207+
208+
#endif

cores/scirocco/UartDevice.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#pragma once
2121

22+
#ifdef __cplusplus
23+
2224
#include <zephyr.h>
2325
#include <uart.h>
2426
#include "HardwareSerial.h"
@@ -72,3 +74,5 @@ class Uart : public HardwareSerial
7274
SercomParityMode extractParity(uint8_t config);
7375
#endif
7476
};
77+
78+
#endif

cores/scirocco/WInterrupts.h

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#define _WIRING_INTERRUPTS_
2121

2222
#include <stdint.h>
23-
#include "wiring_private.h"
2423

2524
#ifdef __cplusplus
2625
extern "C" {
@@ -41,21 +40,15 @@ typedef void (*voidFuncPtr)(void);
4140
* \brief Specifies a named Interrupt Service Routine (ISR) to call when an interrupt occurs.
4241
* Replaces any previous function that was attached to the interrupt.
4342
*/
44-
inline void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) { w_attach_interrupt(pin, callback, mode); }
43+
void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode);
4544

4645
/*
4746
* \brief Turns off the given interrupt.
4847
*/
49-
inline void detachInterrupt(uint32_t pin) { w_detach_interrupt(pin); }
48+
void detachInterrupt(uint32_t pin);
5049

5150
#ifdef __cplusplus
5251
}
53-
54-
inline void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode, uint32_t pinmode, uint32_t extraflag=0)
55-
{
56-
w_configure_gpio_interrupt(pin, callback, mode, pinmode, extraflag);
57-
}
58-
5952
#endif
6053

6154
#endif

cores/scirocco/main.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ void initVariant() { }
2727
// Initialize C library
2828
extern "C" void __libc_init_array(void);
2929

30+
#ifdef CONFIG_ARDUINO_MAIN_LOOP
31+
3032
/*
3133
* \brief Main entry point of Arduino application
3234
*/
@@ -57,3 +59,5 @@ int main( void )
5759

5860
return 0;
5961
}
62+
63+
#endif

cores/scirocco/wiring.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#include "Arduino.h"
2-
3-
void init()
1+
void __attribute__((__weak__)) init()
42
{
53
}

cores/scirocco/wiring_analog.c

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ extern "C" {
2727
#include <adc.h>
2828
#include <pwm.h>
2929

30-
static int pwm_resolution = 255;
30+
#ifdef CONFIG_ADC
3131

3232
void analogReference( eAnalogReference ulMode )
3333
{
@@ -58,9 +58,26 @@ void _analogReadResolution(int res)
5858
adc_channel_setup(NULL, &cfg);
5959
}
6060

61+
#endif
62+
63+
#ifdef CONFIG_PWM
64+
65+
struct pindev { int pin; char* name; };
66+
static struct pindev pwm_pinmap[] = W_PWM_PIN2DEV_MAP;
67+
68+
static char* pwm_dev_name(int pin)
69+
{
70+
for(int i=0; i<sizeof(pwm_pinmap)/sizeof(struct pindev); i++) {
71+
if(pwm_pinmap[i].pin == pin) return pwm_pinmap[i].name;
72+
}
73+
return NULL;
74+
}
75+
76+
static int pwm_resolution = 255;
77+
6178
void analogWrite( uint32_t ulPin, uint32_t ulValue )
6279
{
63-
struct device* dev = device_get_binding(W_PWM_DEV_NAME(ulPin));
80+
struct device* dev = device_get_binding(pwm_dev_name(ulPin));
6481
if(!dev) return;
6582

6683
pwm_pin_set_cycles(dev, ulPin, pwm_resolution, ulValue);
@@ -72,6 +89,7 @@ void analogWriteResolution(int res)
7289
}
7390

7491

92+
#endif
7593

7694

7795
#ifdef __cplusplus

cores/scirocco/wiring_private.c renamed to cores/scirocco/wiring_digital.c

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,39 @@
55
#include "wiring_private.h"
66
#include "WInterrupts.h"
77

8-
int w_pin_mode[W_GPIO_PIN_NUM] = { 0 };
9-
struct w_gpio_callbacks w_callbacks[W_GPIO_PIN_NUM] = { 0 };
8+
#ifndef W_GPIO_PINS_PER_PORT
9+
#define W_GPIO_PINS_PER_PORT 32
10+
#endif
11+
12+
#ifndef W_GPIO_PORT_NUM
13+
#define W_GPIO_PORT_NUM (sizeof(gpio_port_names)/sizeof(const char*))
14+
#endif
15+
16+
#ifndef W_PIN2PORT
17+
#define W_PIN2PORT(x) (gpio_port_names[x / W_GPIO_PINS_PER_PORT])
18+
#endif
19+
20+
#ifndef W_PIN2PORTPIN
21+
#define W_PIN2PORTPIN(x) (x % W_GPIO_PINS_PER_PORT)
22+
#endif
23+
24+
#ifndef W_GPIO_PIN_NUM
25+
#define W_GPIO_PIN_NUM (W_GPIO_PINS_PER_PORT * W_GPIO_PORT_NUM)
26+
#endif
27+
28+
29+
struct w_gpio_callbacks {
30+
struct gpio_callback z_callback;
31+
voidFuncPtr callback;
32+
};
33+
34+
static const char* gpio_port_names[] = W_GPIO_PORT_NAMES;
35+
static int w_pin_mode[W_GPIO_PIN_NUM] = { 0 };
36+
static struct w_gpio_callbacks w_callbacks[W_GPIO_PIN_NUM] = { 0 };
1037

1138
static void gpio_handler(struct device *port, struct gpio_callback *cb, u32_t pins)
1239
{
13-
for(int i=0; i<W_GPIO_PIN_NUM; i++)
40+
for(uint32_t i=0; i<W_GPIO_PIN_NUM; i++)
1441
{
1542
if( (&w_callbacks[i].z_callback) == cb) {
1643
w_callbacks[i].callback();
@@ -71,29 +98,40 @@ void w_configure_gpio_interrupt(uint32_t pin, voidFuncPtr callback, uint32_t int
7198
gpio_pin_enable_callback(device_get_binding(W_PIN2PORT(pin)), pin);
7299
}
73100
else {
74-
w_detach_interrupt(pin);
101+
detachInterrupt(pin);
75102
}
76103

77104
}
78105

79-
void w_attach_interrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode)
106+
void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode)
80107
{
81108
uint32_t pinmode = w_pin_mode[pin];
82109
w_configure_gpio_interrupt(pin, callback, mode, pinmode, 0);
83110
}
84-
85-
void w_detach_interrupt(uint32_t pin)
111+
/*
112+
void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode, uint32_t pinmode, uint32_t extraflag)
113+
{
114+
w_configure_gpio_interrupt(pin, callback, mode, pinmode, extraflag);
115+
}
116+
*/
117+
void detachInterrupt(uint32_t pin)
86118
{
87119
gpio_pin_disable_callback(device_get_binding(W_PIN2PORT(pin)), pin);
88120
gpio_remove_callback(device_get_binding(W_PIN2PORT(pin)), &w_callbacks[pin].z_callback);
89121
}
90122

91-
void w_digital_write( uint32_t ulPin, uint32_t ulVal )
123+
void pinMode( uint32_t dwPin, uint32_t dwMode )
124+
{
125+
w_configure_gpio_interrupt(dwPin, NULL, -1, dwMode, 0);
126+
}
127+
128+
129+
void digitalWrite( uint32_t ulPin, uint32_t ulVal )
92130
{
93131
gpio_pin_write(device_get_binding(W_PIN2PORT(ulPin)), W_PIN2PORTPIN(ulPin), ulVal ? 1 : 0);
94132
}
95133

96-
int w_digital_read( uint32_t ulPin )
134+
int digitalRead( uint32_t ulPin )
97135
{
98136
u32_t value;
99137
gpio_pin_read(device_get_binding(W_PIN2PORT(ulPin)), W_PIN2PORTPIN(ulPin), &value);

cores/scirocco/wiring_digital.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
#ifndef _WIRING_DIGITAL_
2020
#define _WIRING_DIGITAL_
2121

22-
#include "wiring_private.h"
23-
2422
#ifdef __cplusplus
2523
extern "C" {
2624
#endif
@@ -33,7 +31,7 @@
3331
* \param ulPin The number of the pin whose mode you wish to set
3432
* \param ulMode Can be INPUT, OUTPUT, INPUT_PULLUP or INPUT_PULLDOWN
3533
*/
36-
inline void pinMode( uint32_t dwPin, uint32_t dwMode ) { w_configure_gpio_interrupt(dwPin, NULL, -1, dwMode, 0); }
34+
extern void pinMode( uint32_t dwPin, uint32_t dwMode ) ;
3735

3836
/**
3937
* \brief Write a HIGH or a LOW value to a digital pin.
@@ -55,7 +53,7 @@ inline void pinMode( uint32_t dwPin, uint32_t dwMode ) { w_configure_gpio_interr
5553
* \param dwPin the pin number
5654
* \param dwVal HIGH or LOW
5755
*/
58-
inline void digitalWrite( uint32_t dwPin, uint32_t dwVal ) { w_digital_write(dwPin, dwVal); }
56+
extern void digitalWrite( uint32_t dwPin, uint32_t dwVal ) ;
5957

6058
/**
6159
* \brief Reads the value from a specified digital pin, either HIGH or LOW.
@@ -64,7 +62,7 @@ inline void digitalWrite( uint32_t dwPin, uint32_t dwVal ) { w_digital_write(dwP
6462
*
6563
* \return HIGH or LOW
6664
*/
67-
inline int digitalRead( uint32_t ulPin ) { return w_digital_read(ulPin); }
65+
extern int digitalRead( uint32_t ulPin ) ;
6866

6967
#ifdef __cplusplus
7068
}

0 commit comments

Comments
 (0)