Skip to content

Commit c988c1c

Browse files
Add debug prints on error conditions to the core
1 parent 96e31c6 commit c988c1c

File tree

9 files changed

+79
-35
lines changed

9 files changed

+79
-35
lines changed

cores/rp2040/SerialUART.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@ bool SerialUART::setRX(pin_size_t rx) {
3535
constexpr uint32_t valid[2] = { __bitset({1, 13, 17, 29}) /* UART0 */,
3636
__bitset({5, 9, 21, 25}) /* UART1 */};
3737
if (_running) {
38+
DEBUGCORE("ERROR: SerialUART setRX while running\n");
3839
return false;
3940
} else if ((1 << rx) & valid[uart_get_index(_uart)]) {
4041
_rx = rx;
4142
return true;
4243
} else {
44+
DEBUGCORE("ERROR: SerialUART setRX illegal pin (%d)\n", rx);
4345
return false;
4446
}
4547
}
@@ -48,11 +50,13 @@ bool SerialUART::setTX(pin_size_t tx) {
4850
constexpr uint32_t valid[2] = { __bitset({0, 12, 16, 28}) /* UART0 */,
4951
__bitset({4, 8, 20, 24}) /* UART1 */};
5052
if (_running) {
53+
DEBUGCORE("ERROR: SerialUART setTX while running\n");
5154
return false;
5255
} else if ((1 << tx) & valid[uart_get_index(_uart)]) {
5356
_tx = tx;
5457
return true;
5558
} else {
59+
DEBUGCORE("ERROR: SerialUART setTX illegal pin (%d)\n", tx);
5660
return false;
5761
}
5862
}

cores/rp2040/Tone.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@ typedef struct {
3030
} Tone;
3131

3232
#include "tone.pio.h"
33-
PIOProgram _tonePgm(&tone_program);
33+
static PIOProgram _tonePgm(&tone_program);
3434

3535
static std::map<pin_size_t, Tone *> _toneMap;
3636

3737
void tone(uint8_t pin, unsigned int frequency, unsigned long duration) {
38-
DEBUGCORE("TONE: tone(%d, %d, %d)\n", pin, frequency, duration);
38+
if ((pin < 0) || (pin > 29)) {
39+
DEBUGCORE("ERROR: Illegal pin in tone (%d)\n", pin);
40+
return;
41+
}
3942
if (!frequency) {
4043
noTone(pin);
4144
return;
@@ -50,13 +53,13 @@ void tone(uint8_t pin, unsigned int frequency, unsigned long duration) {
5053
if (entry != _toneMap.end()) {
5154
noTone(pin);
5255
}
53-
DEBUGCORE("TONE: phaseUS=%d, phaseCnt=%d\n", us, phases);
56+
5457
auto newTone = new Tone();
5558
newTone->pin = pin;
5659
pinMode(pin, OUTPUT);
5760
int off;
5861
if (!_tonePgm.prepare(&newTone->pio, &newTone->sm, &off)) {
59-
DEBUGCORE("TONE: Unable to start, out of PIO resources\n");
62+
DEBUGCORE("ERROR: tone unable to start, out of PIO resources\n");
6063
// ERROR, no free slots
6164
delete newTone;
6265
return;
@@ -69,15 +72,16 @@ void tone(uint8_t pin, unsigned int frequency, unsigned long duration) {
6972
pio_sm_set_enabled(newTone->pio, newTone->sm, true);
7073
pio_sm_put_blocking(newTone->pio, newTone->sm, phases);
7174

72-
DEBUGCORE("TONE: Began on pio=%p, sm=%d\n", newTone->pio, newTone->sm);
7375
_toneMap.insert({pin, newTone});
7476
}
7577

7678
void noTone(uint8_t pin) {
77-
DEBUGCORE("NOTONE: noTone(%d)\n", pin);
79+
if ((pin < 0) || (pin > 29)) {
80+
DEBUGCORE("ERROR: Illegal pin in tone (%d)\n", pin);
81+
return;
82+
}
7883
auto entry = _toneMap.find(pin);
7984
if (entry != _toneMap.end()) {
80-
DEBUGCORE("NOTONE: Disabling PIO tone generator pio=%p, sm=%d\n", entry->second->pio, entry->second->sm);
8185
pio_sm_set_enabled(entry->second->pio, entry->second->sm, false);
8286
pio_sm_unclaim(entry->second->pio, entry->second->sm);
8387
_toneMap.erase(entry);

cores/rp2040/WMath.cpp

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,25 @@
1616
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1717
*/
1818

19-
extern "C" {
20-
#include "stdlib.h"
21-
#include "stdint.h"
22-
}
19+
#include "stdlib.h"
20+
#include "stdint.h"
2321

24-
void randomSeed( uint32_t dwSeed )
25-
{
26-
if ( dwSeed != 0 )
27-
{
22+
void randomSeed( uint32_t dwSeed ) {
23+
if ( dwSeed != 0 ) {
2824
srand( dwSeed ) ;
2925
}
3026
}
3127

32-
long random( long howbig )
33-
{
34-
if ( howbig == 0 )
35-
{
28+
long random( long howbig ) {
29+
if ( howbig == 0 ) {
3630
return 0 ;
3731
}
3832

3933
return rand() % howbig;
4034
}
4135

42-
long random( long howsmall, long howbig )
43-
{
44-
if (howsmall >= howbig)
45-
{
36+
long random( long howsmall, long howbig ) {
37+
if (howsmall >= howbig) {
4638
return howsmall;
4739
}
4840

cores/rp2040/delay.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,15 @@
2121
#include <pico.h>
2222
#include <pico/time.h>
2323

24-
extern "C" void delay( unsigned long ms )
25-
{
24+
extern "C" void delay( unsigned long ms ) {
2625
if (!ms) {
2726
return;
2827
}
2928

3029
sleep_ms(ms);
3130
}
3231

33-
extern "C" void delayMicroseconds( unsigned int usec )
34-
{
32+
extern "C" void delayMicroseconds( unsigned int usec ) {
3533
if (!usec) {
3634
return;
3735
}

cores/rp2040/wiring_analog.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,17 @@ static int32_t analogScale = 255;
2929
static uint32_t analogMap = 0;
3030
static uint16_t analogFreq = 1000;
3131
static bool pwmInitted = false;
32+
static bool adcInitted = false;
3233

3334
extern "C" void analogWriteFreq(uint32_t freq) {
3435
if (freq == analogFreq) {
3536
return;
3637
}
3738
if (freq < 100) {
39+
DEBUGCORE("ERROR: analogWriteFreq too low (%d)\n", freq);
3840
analogFreq = 100;
3941
} else if (freq > 60000) {
42+
DEBUGCORE("ERROR: analogWriteFreq too high (%d)\n", freq);
4043
analogFreq = 60000;
4144
} else {
4245
analogFreq = freq;
@@ -51,16 +54,24 @@ extern "C" void analogWriteRange(uint32_t range) {
5154
if ((range >= 15) && (range <= 65535)) {
5255
analogScale = range;
5356
pwmInitted = false;
54-
}
57+
} else {
58+
DEBUGCORE("ERROR: analogWriteRange out of range (%d)\n", range);
59+
}
5560
}
5661

5762
extern "C" void analogWriteResolution(int res) {
5863
if ((res >= 4) && (res <= 16)) {
5964
analogWriteRange((1 << res) - 1);
65+
} else {
66+
DEBUGCORE("ERROR: analogWriteResolution out of range (%d)\n", res);
6067
}
6168
}
6269

6370
extern "C" void analogWrite(pin_size_t pin, int val) {
71+
if ((pin < 0) || (pin > 29)) {
72+
DEBUGCORE("ERROR: Illegal analogWrite pin (%d)\n", pin);
73+
return;
74+
}
6475
if (!pwmInitted) {
6576
pwm_config c = pwm_get_default_config();
6677
pwm_config_set_clkdiv( &c, clock_get_hz(clk_sys) / (float) (analogScale * analogFreq) );
@@ -81,16 +92,16 @@ extern "C" void analogWrite(pin_size_t pin, int val) {
8192
pwm_set_gpio_level(pin, val);
8293
}
8394

84-
static bool adcInitted = false;
85-
extern "C" int analogRead(pin_size_t pinNumber) {
86-
if ((pinNumber < A0) || (pinNumber > A3)) {
95+
extern "C" int analogRead(pin_size_t pin) {
96+
if ((pin < A0) || (pin > A3)) {
97+
DEBUGCORE("ERROR: Illegal analogRead pin (%d)\n", pin);
8798
return 0;
8899
}
89100
if (!adcInitted) {
90101
adc_init();
91102
}
92-
adc_gpio_init(pinNumber);
93-
adc_select_input(pinNumber - A0);
103+
adc_gpio_init(pin);
104+
adc_select_input(pin - A0);
94105
return adc_read();
95106
}
96107

cores/rp2040/wiring_digital.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,23 @@ extern "C" void pinMode( pin_size_t ulPin, PinMode ulMode ) {
4646
gpio_set_dir(ulPin, true);
4747
break;
4848
default:
49+
DEBUGCORE("ERROR: Illegal pinMode mode (%d)\n", ulMode);
4950
// Error
5051
return;
5152
}
53+
54+
if ((ulPin < 0) || (ulPin > 29)) {
55+
DEBUGCORE("ERROR: Illegal pin in pinMode (%d)\n", ulPin);
56+
return;
57+
}
5258
_pm[ulPin] = ulMode;
5359
}
5460

5561
extern "C" void digitalWrite( pin_size_t ulPin, PinStatus ulVal ) {
62+
if ((ulPin < 0) || (ulPin > 29)) {
63+
DEBUGCORE("ERROR: Illegal pin in pinMode (%d)\n", ulPin);
64+
return;
65+
}
5666
if (_pm[ulPin] == INPUT_PULLDOWN) {
5767
if (ulVal == LOW) {
5868
gpio_set_dir(ulPin, false);
@@ -70,8 +80,11 @@ extern "C" void digitalWrite( pin_size_t ulPin, PinStatus ulVal ) {
7080
}
7181
}
7282

73-
extern "C" PinStatus digitalRead( pin_size_t ulPin )
74-
{
83+
extern "C" PinStatus digitalRead( pin_size_t ulPin ) {
84+
if ((ulPin < 0) || (ulPin > 29)) {
85+
DEBUGCORE("ERROR: Illegal pin in digitalRead (%d)\n", ulPin);
86+
return LOW;
87+
}
7588
return gpio_get(ulPin) ? HIGH : LOW;
7689
}
7790

cores/rp2040/wiring_pulse.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ extern "C" unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeo
2727
uint64_t start = time_us_64();
2828
uint64_t abort = start + timeout;
2929

30+
if ((pin < 0) || (pin > 29)) {
31+
DEBUGCORE("ERROR: Illegal pin in pulseIn (%d)\n", pin);
32+
return 0;
33+
}
34+
3035
// Wait for deassert, if needed
3136
while ((!!gpio_get(pin) != !state) && (time_us_64() < abort) );
3237
if (time_us_64() >= abort) return 0;

cores/rp2040/wiring_shift.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@
2424
extern "C" uint8_t shiftIn(pin_size_t dataPin, pin_size_t clockPin, BitOrder bitOrder) {
2525
uint8_t value = 0;
2626
uint8_t i;
27+
if ((dataPin < 0) || (dataPin > 29)) {
28+
DEBUGCORE("ERROR: Illegal dataPin in shiftIn (%d)\n", dataPin);
29+
return 0;
30+
}
31+
if ((clockPin < 0) || (clockPin > 29)) {
32+
DEBUGCORE("ERROR: Illegal clockPin in shiftIn (%d)\n", clockPin);
33+
return 0;
34+
}
2735
for (i = 0; i < 8; ++i) {
2836
digitalWrite(clockPin, HIGH);
2937
if (bitOrder == LSBFIRST)
@@ -37,6 +45,14 @@ extern "C" uint8_t shiftIn(pin_size_t dataPin, pin_size_t clockPin, BitOrder bit
3745

3846
extern "C" void shiftOut(pin_size_t dataPin, pin_size_t clockPin, BitOrder bitOrder, uint8_t val) {
3947
uint8_t i;
48+
if ((dataPin < 0) || (dataPin > 29)) {
49+
DEBUGCORE("ERROR: Illegal dataPin in shiftOut (%d)\n", dataPin);
50+
return;
51+
}
52+
if ((clockPin < 0) || (clockPin > 29)) {
53+
DEBUGCORE("ERROR: Illegal clockPin in shiftOut (%d)\n", clockPin);
54+
return;
55+
}
4056
for (i = 0; i < 8; i++) {
4157
if (bitOrder == LSBFIRST)
4258
digitalWrite(dataPin, !!(val & (1 << i)));

libraries/rp2040/keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
BOOTSEL KEYWORD1
2+
readAnalogTemp KEYWORD1

0 commit comments

Comments
 (0)