Skip to content

Commit ddc757e

Browse files
Release 3.0.0
Changes: - Updated the Core to SiSDK 2024.12.1 and Matter 2.5.1 - Matter standard has been updated to Matter 1.4 - Expect more robust reconnections and increased stability - Enabled new clusters/devices in the SDK (no Matter library support yet): - Oven - Laundry washer/dryer - Refrigerator - Dishwasher - Energy EVSE - Water heater - Power source - RVC - CO/smoke alarm - CO measurement - CO2 measurement - Water heater - Basic Video Player - Binding - Implemented Matter Air Purifier support - Implemented simultaneous Matter and BLE support along with examples - Refactored the Matter Air Quality Sensor example - Added 'Arduino Matter Provision' support for the XIAO MG24 - Added 8 new Matter provisioning binaries for the Nano Matter - Switched the Nano Matter to the OpenThread Certification libraries - Added Matter.decommission() to the readme - Exposed the mode setting API to the users in MatterFan - Fixed the occupancy attribute initialization in the Matter DeviceOccupancySensor - Fixed Matter provisioning binaries '1' and '2' for the Nano Matter - Implemented AI/ML support for all compatible boards (Nano Matter, XIAO MG24, xG24 Dev/Explorer Kit) - alongside with the option to use AI/ML with radio variants. All supported boards can run the Magic Wand example now. - Added BLE SPP (Serial Port Profile) example - Added the Silicon Labs fork of the OneWire library - Added hardware info sketch - Implemented additional APIs for getting heap memory info - Added getters for board and radio stack type - Added OpenThread RCP firmware for the XIAO MG24 - Added OpenThread RCP firmware for the SparkFun Thing Plus Matter - Added basic HIL smoke test for the Matter library - Switched the language standard to C18 and GNU++17 for all variants - Limited 'chip' namespace usage in the Matter library headers - Renamed the core folder from 'silabs' to 'gecko' - Made the board/variant specific macros more consistent - Added missing string conversion functions (itoa, ltoa, utoa, ultoa) - Changed the deep sleep escape pin on the XIAO MG24 to PC1 (D1) - Replaced sent bytes with received bytes in 'SPI.transfer(buf, count)' return value - Remapped Serial1/SPI1 to the correct MikroBUS pins on the xG24 ExpKit and Lyra24P20 - Fixed Matter pairing code printing corner cases - Added initialization guard to WatchdogTimer - Made the GPIO interrupt handler thread safe - Fixed Serial init in the BLE blinky example - Made the usage of the -Wno-unused-parameter flag consistent across boards and variants - Solved CI/CD issue with LFS artifact publishing - And a bunch of other minor fixes & improvements
1 parent c51e6c0 commit ddc757e

File tree

26,266 files changed

+3806699
-2683840
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

26,266 files changed

+3806699
-2683840
lines changed

boards.txt

Lines changed: 165 additions & 156 deletions
Large diffs are not rendered by default.

cores/silabs/Arduino.h renamed to cores/gecko/Arduino.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* The MIT License (MIT)
55
*
6-
* Copyright 2024 Silicon Laboratories Inc. www.silabs.com
6+
* Copyright 2025 Silicon Laboratories Inc. www.silabs.com
77
*
88
* Permission is hereby granted, free of charge, to any person obtaining a copy
99
* of this software and associated documentation files (the "Software"), to deal
@@ -120,5 +120,6 @@ void analogReadDMA(pin_size_t pin, uint32_t *buffer, uint32_t size, void (*user_
120120
bool get_system_init_finished();
121121
uint32_t get_system_reset_cause();
122122
void escape_hatch();
123+
void gpio_interrupt_handler_init();
123124

124125
#endif // ARDUINO_H

cores/silabs/Interrupt.cpp renamed to cores/gecko/Interrupt.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* The MIT License (MIT)
55
*
6-
* Copyright 2024 Silicon Laboratories Inc. www.silabs.com
6+
* Copyright 2025 Silicon Laboratories Inc. www.silabs.com
77
*
88
* Permission is hereby granted, free of charge, to any person obtaining a copy
99
* of this software and associated documentation files (the "Software"), to deal
@@ -29,6 +29,8 @@
2929

3030
#include <list>
3131
#include "gpiointerrupt.h"
32+
#include "FreeRTOS.h"
33+
#include "semphr.h"
3234

3335
typedef struct {
3436
PinName pin_name;
@@ -38,20 +40,35 @@ typedef struct {
3840

3941
static std::list<gpio_interrupt_handler_t> gpio_interrupt_handlers;
4042

43+
SemaphoreHandle_t gpio_isr_mutex;
44+
StaticSemaphore_t gpio_isr_mutex_buf;
45+
4146
static void gpio_irq_handler(uint8_t interrupt_num, void *ctx)
4247
{
4348
(void)ctx;
49+
UBaseType_t uxSavedInterruptStatus;
50+
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
51+
4452
// Go through all the interrupt handler entries
4553
for (auto& entry : gpio_interrupt_handlers) {
4654
// If the entry matches the triggered interrupt number - call the registered callback
4755
if (entry.interrupt_num == interrupt_num && entry.callback) {
4856
entry.callback();
4957
}
5058
}
59+
60+
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
61+
}
62+
63+
void gpio_interrupt_handler_init()
64+
{
65+
gpio_isr_mutex = xSemaphoreCreateMutexStatic(&gpio_isr_mutex_buf);
66+
configASSERT(gpio_isr_mutex);
5167
}
5268

5369
void detachInterrupt(PinName interruptNumber)
5470
{
71+
xSemaphoreTake(gpio_isr_mutex, portMAX_DELAY);
5572
bool entry_found = false;
5673
uint8_t interrupt_num;
5774
// Find the handler entry for the requested pin
@@ -68,13 +85,15 @@ void detachInterrupt(PinName interruptNumber)
6885

6986
// Return if the entry for the pin was not found
7087
if (!entry_found) {
88+
xSemaphoreGive(gpio_isr_mutex);
7189
return;
7290
}
7391

7492
// Deregister the external interrupt as well
7593
GPIO_Port_TypeDef sl_port = getSilabsPortFromArduinoPin(interruptNumber);
7694
uint32_t sl_pin = getSilabsPinFromArduinoPin(interruptNumber);
7795
GPIO_ExtIntConfig(sl_port, sl_pin, interrupt_num, false, false, false);
96+
xSemaphoreGive(gpio_isr_mutex);
7897
}
7998

8099
void detachInterrupt(pin_size_t interruptNumber)
@@ -100,6 +119,7 @@ void attachInterrupt(PinName interruptNumber, voidFuncPtr callback, PinStatus mo
100119
return;
101120
}
102121

122+
xSemaphoreTake(gpio_isr_mutex, portMAX_DELAY);
103123
GPIO_Port_TypeDef sl_port = getSilabsPortFromArduinoPin(interruptNumber);
104124
uint32_t sl_pin = getSilabsPinFromArduinoPin(interruptNumber);
105125

@@ -127,6 +147,7 @@ void attachInterrupt(PinName interruptNumber, voidFuncPtr callback, PinStatus mo
127147
// Allocate an interrupt number for the pin
128148
uint32_t interrupt_num = GPIOINT_CallbackRegisterExt(sl_pin, &gpio_irq_handler, nullptr);
129149
if (interrupt_num == INTERRUPT_UNAVAILABLE) {
150+
xSemaphoreGive(gpio_isr_mutex);
130151
return;
131152
}
132153

@@ -139,6 +160,7 @@ void attachInterrupt(PinName interruptNumber, voidFuncPtr callback, PinStatus mo
139160
inthandler_entry.callback = callback;
140161
inthandler_entry.interrupt_num = interrupt_num;
141162
gpio_interrupt_handlers.push_back(inthandler_entry);
163+
xSemaphoreGive(gpio_isr_mutex);
142164
}
143165

144166
void attachInterruptParam(pin_size_t interruptNumber, voidFuncPtrParam callback, PinStatus mode, void* param)

cores/silabs/Serial.cpp renamed to cores/gecko/Serial.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include <cstdarg>
3030
#include "em_usart.h"
3131
#include "sl_iostream.h"
32-
#include "sl_iostream_init_usart_instances.h"
3332

3433
using namespace arduino;
3534

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)