FastLED
3.9.15
Loading...
Searching...
No Matches
ObjectFLEDPinValidation.h
Go to the documentation of this file.
1
#ifndef OBJECTFLED_PIN_VALIDATION_H
2
#define OBJECTFLED_PIN_VALIDATION_H
3
4
#include "
fl/stl/stdint.h
"
5
6
namespace
objectfled
{
7
8
enum class
PinIssueType
{
9
NONE
,
10
OUT_OF_RANGE
,
11
INVALID_GPIO
,
12
GROUND_PIN
,
13
POWER_PIN
,
14
READ_ONLY
,
15
UART_PIN
,
16
SPI_PIN
,
17
I2C_PIN
,
18
STRAPPING_PIN
,
19
LED_PIN
20
};
21
22
struct
PinValidationResult
{
23
bool
valid
;
24
PinIssueType
issue_type
;
25
const
char
*
error_message
;
26
};
27
28
// Pin validation for Teensy 4.x (iMXRT1062)
29
// Based on _FL_DEFPIN definitions from fastpin_arm_mxrt1062.h
30
inline
PinValidationResult
validate_teensy4_pin
(uint8_t pin) {
31
// Teensy 4.0 supports pins 0-39
32
// Teensy 4.1 adds pins 40-54, but we'll be permissive and allow
33
// any pin that could theoretically exist on a Teensy 4.x variant
34
35
// First check: pin number range
36
// NUM_DIGITAL_PINS from Teensy core should handle board-specific limits
37
// But we can do basic range checking here
38
39
if
(pin >= NUM_DIGITAL_PINS) {
40
return
{
false
,
PinIssueType::OUT_OF_RANGE
,
"Pin number exceeds NUM_DIGITAL_PINS for this board - pin is out of valid range"
};
41
}
42
43
// Check if pin maps to a valid GPIO port (GPIO6-9)
44
// Use the same logic as ObjectFLED::begin() to verify pin is usable
45
uint8_t
offset
= ((uint32_t)portOutputRegister(pin) - (uint32_t)&GPIO6_DR) >> 14;
46
if
(
offset
> 3) {
47
return
{
false
,
PinIssueType::INVALID_GPIO
,
"Pin does not map to a valid GPIO port (GPIO6-9) - may be a ground/power/read-only pin"
};
48
}
49
50
// Warn about potentially problematic pins
51
// These are based on common Teensy 4.x pin usage patterns
52
53
// UART pins - noise/signal integrity issues
54
if
(pin == 0 || pin == 1) {
55
return
{
true
,
PinIssueType::UART_PIN
,
"WARNING: Pin is Serial1 UART (0=RX1, 1=TX1) - may cause noise/signal issues and affect serial debugging"
};
56
}
57
58
if
(pin == 7 || pin == 8) {
59
return
{
true
,
PinIssueType::UART_PIN
,
"WARNING: Pin is Serial2 UART (7=RX2, 8=TX2) - may cause noise/signal issues"
};
60
}
61
62
// SPI pins - may interfere with flash/SD card communication
63
if
(pin == 11 || pin == 12 || pin == 13) {
64
return
{
true
,
PinIssueType::SPI_PIN
,
"WARNING: Pin is SPI bus (11=MOSI, 12=MISO, 13=SCK) - may cause noise and conflict with flash/SD peripherals"
};
65
}
66
67
if
(pin == 26 || pin == 27) {
68
return
{
true
,
PinIssueType::SPI_PIN
,
"WARNING: Pin is SPI1 bus (26=MOSI1, 27=SCK1) - may cause noise and conflict with peripherals"
};
69
}
70
71
// I2C pins - may interfere with I2C devices
72
if
(pin == 18 || pin == 19) {
73
return
{
true
,
PinIssueType::I2C_PIN
,
"WARNING: Pin is I2C bus (18=SDA0, 19=SCL0) - may cause noise and conflict with I2C devices"
};
74
}
75
76
if
(pin == 16 || pin == 17) {
77
return
{
true
,
PinIssueType::I2C_PIN
,
"WARNING: Pin is I2C bus (16=SCL1, 17=SDA1) - may cause noise and conflict with I2C devices"
};
78
}
79
80
// LED pin on most Teensy boards
81
if
(pin == 13) {
82
return
{
true
,
PinIssueType::LED_PIN
,
"WARNING: Pin 13 is the onboard LED - may cause unexpected visual feedback"
};
83
}
84
85
// Pin is valid
86
return
{
true
,
PinIssueType::NONE
,
nullptr
};
87
}
88
89
// Check if a pin is valid (simple boolean check)
90
inline
bool
is_valid_teensy4_pin
(uint8_t pin) {
91
auto
result =
validate_teensy4_pin
(pin);
92
return
result.valid;
93
}
94
95
}
// namespace objectfled
96
97
#endif
// OBJECTFLED_PIN_VALIDATION_H
offset
fl::UISlider offset("Offset", 0.0f, 0.0f, 1.0f, 0.01f)
objectfled::PinIssueType
PinIssueType
Definition
ObjectFLEDPinValidation.h:8
objectfled::PinIssueType::UART_PIN
@ UART_PIN
Definition
ObjectFLEDPinValidation.h:15
objectfled::PinIssueType::SPI_PIN
@ SPI_PIN
Definition
ObjectFLEDPinValidation.h:16
objectfled::PinIssueType::POWER_PIN
@ POWER_PIN
Definition
ObjectFLEDPinValidation.h:13
objectfled::PinIssueType::READ_ONLY
@ READ_ONLY
Definition
ObjectFLEDPinValidation.h:14
objectfled::PinIssueType::GROUND_PIN
@ GROUND_PIN
Definition
ObjectFLEDPinValidation.h:12
objectfled::PinIssueType::STRAPPING_PIN
@ STRAPPING_PIN
Definition
ObjectFLEDPinValidation.h:18
objectfled::PinIssueType::OUT_OF_RANGE
@ OUT_OF_RANGE
Definition
ObjectFLEDPinValidation.h:10
objectfled::PinIssueType::INVALID_GPIO
@ INVALID_GPIO
Definition
ObjectFLEDPinValidation.h:11
objectfled::PinIssueType::NONE
@ NONE
Definition
ObjectFLEDPinValidation.h:9
objectfled::PinIssueType::I2C_PIN
@ I2C_PIN
Definition
ObjectFLEDPinValidation.h:17
objectfled::PinIssueType::LED_PIN
@ LED_PIN
Definition
ObjectFLEDPinValidation.h:19
objectfled::validate_teensy4_pin
PinValidationResult validate_teensy4_pin(uint8_t pin)
Definition
ObjectFLEDPinValidation.h:30
objectfled::is_valid_teensy4_pin
bool is_valid_teensy4_pin(uint8_t pin)
Definition
ObjectFLEDPinValidation.h:90
objectfled
Definition
ObjectFLEDPinValidation.h:6
objectfled::PinValidationResult::valid
bool valid
Definition
ObjectFLEDPinValidation.h:23
objectfled::PinValidationResult::error_message
const char * error_message
Definition
ObjectFLEDPinValidation.h:25
objectfled::PinValidationResult::issue_type
PinIssueType issue_type
Definition
ObjectFLEDPinValidation.h:24
objectfled::PinValidationResult
Definition
ObjectFLEDPinValidation.h:22
stdint.h
third_party
object_fled
src
ObjectFLEDPinValidation.h
Generated on Tue Jun 16 2026 00:07:00 for FastLED by
1.13.2