1616
1717 #include " MoonBase/Module.h"
1818
19- enum IO_PinUsage {
19+ enum IO_PinUsageEnum {
2020 pin_Unused, // 0
2121 pin_LED,
2222 pin_LED_CW,
@@ -63,7 +63,7 @@ enum IO_PinUsage {
6363 pin_count
6464};
6565
66- enum IO_Boards {
66+ enum IO_BoardsEnum {
6767 board_none, //
6868 board_QuinLEDDigUnoV3,
6969 board_QuinLEDDigQuadV3,
@@ -110,8 +110,8 @@ class ModuleIO : public Module {
110110 addControlValue (control, " QuinLED Dig Quad v3" );
111111 addControlValue (control, " QuinLED Dig Octa v2" );
112112 addControlValue (control, " QuinLED Dig 2Go" );
113- addControlValue (control, " Serg Universal Shield v5 🚧 " );
114- addControlValue (control, " Serg Mini Shield 🚧 " );
113+ addControlValue (control, " Serg Universal Shield" );
114+ addControlValue (control, " Serg Mini Shield" );
115115 addControlValue (control, " Mathieu SE16 v1" );
116116 addControlValue (control, " MHC D0 Shield 🚧" );
117117 addControlValue (control, " MHC P4 Nano Shield" );
@@ -274,8 +274,8 @@ class ModuleIO : public Module {
274274
275275 if (boardID == board_SE16V1) {
276276 object[" maxPower" ] = 500 ;
277- uint8_t ledPins[16 ] = {47 , 48 , 21 , 38 , 14 , 39 , 13 , 40 , 12 , 41 , 11 , 42 , 10 , 2 , 3 , 1 }; // LED_PINS
278- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
277+ uint8_t ledPins[] = {47 , 48 , 21 , 38 , 14 , 39 , 13 , 40 , 12 , 41 , 11 , 42 , 10 , 2 , 3 , 1 }; // LED_PINS
278+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
279279 pinAssigner.assignPin (0 , pin_ButtonPush);
280280 pinAssigner.assignPin (45 , pin_ButtonPush);
281281 pinAssigner.assignPin (46 , pin_Button_LightsOn);
@@ -310,8 +310,8 @@ class ModuleIO : public Module {
310310 // Dig-Quad-V3
311311 // esp32-d0 (4MB)
312312 object[" maxPower" ] = 150 ;
313- uint8_t ledPins[4 ] = {16 , 3 , 1 , 4 }; // LED_PINS
314- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
313+ uint8_t ledPins[] = {16 , 3 , 1 , 4 }; // LED_PINS
314+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
315315 pinAssigner.assignPin (0 , pin_ButtonPush);
316316
317317 pinAssigner.assignPin (15 , pin_Relay);
@@ -323,9 +323,9 @@ class ModuleIO : public Module {
323323 // pinAssigner.assignPin(32, pin_Exposed;
324324 } else if (boardID == board_QuinLEDDigOctaV2) {
325325 // Dig-Octa-32-8L
326- object[" maxPower" ] = 400 ; // 10A Fuse * 8 ... 400 W
327- uint8_t ledPins[8 ] = {0 , 1 , 2 , 3 , 4 , 5 , 12 , 13 }; // LED_PINS
328- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
326+ object[" maxPower" ] = 400 ; // 10A Fuse * 8 ... 400 W
327+ uint8_t ledPins[] = {0 , 1 , 2 , 3 , 4 , 5 , 12 , 13 }; // LED_PINS
328+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
329329 pinAssigner.assignPin (33 , pin_Relay);
330330 pinAssigner.assignPin (34 , pin_ButtonPush);
331331 } else if (boardID == board_QuinLEDDig2Go) {
@@ -344,8 +344,8 @@ class ModuleIO : public Module {
344344 pinAssigner.assignPin (25 , pin_Exposed);
345345 // pinAssigner.assignPin(xx, pin_I2S_MCLK);
346346 // } else if (boardID == board_QuinLEDPenta) {
347- // uint8_t ledPins[5 ] = {14, 13, 12, 4, 2}; // LED_PINS
348- // for (int i = 0; i < sizeof (ledPins); i++) pinAssigner.assignPin(ledPins[i], pin_LED);
347+ // uint8_t ledPins[] = {14, 13, 12, 4, 2}; // LED_PINS
348+ // for (int i = 0; i < std::size (ledPins); i++) pinAssigner.assignPin(ledPins[i], pin_LED);
349349 // pinAssigner.assignPin(34, pin_ButtonPush);
350350 // pinAssigner.assignPin(35, pin_ButtonPush);
351351 // pinAssigner.assignPin(39, pin_ButtonPush);
@@ -366,20 +366,53 @@ class ModuleIO : public Module {
366366 // pinAssigner.assignPin(5, pin_LED);
367367 } else if (boardID == board_SergMiniShield) {
368368 object[" maxPower" ] = 50 ; // 10A Fuse ...
369- pinAssigner.assignPin (1 , pin_LED);
370- pinAssigner.assignPin (3 , pin_LED);
369+ pinAssigner.assignPin (16 , pin_LED);
370+ // pinAssigner.assignPin(17, pin_LED); // e.g. apa102...
371+
372+ // pinAssigner.assignPin(??, pin_Button_LightsOn); // which pin ?
373+ pinAssigner.assignPin (19 , pin_Relay_LightsOn); // optional
374+
375+ // e.g. for mic
376+ pinAssigner.assignPin (32 , pin_I2S_SD);
377+ pinAssigner.assignPin (15 , pin_I2S_WS);
378+ pinAssigner.assignPin (14 , pin_I2S_SCK);
379+ // pinAssigner.assignPin(36, nc/ao...);
380+
381+ // e.g. for 4 line display
382+ pinAssigner.assignPin (21 , pin_I2C_SDA);
383+ pinAssigner.assignPin (22 , pin_I2C_SCL);
371384 } else if (boardID == board_SergUniShieldV5) {
372385 object[" maxPower" ] = 50 ; // 10A Fuse ...
373- pinAssigner.assignPin (1 , pin_LED);
374- pinAssigner.assignPin (3 , pin_LED);
386+
387+ pinAssigner.assignPin (16 , pin_LED); // first pin
388+ if (_state.data [" jumper1" ])
389+ pinAssigner.assignPin (1 , pin_LED);
390+ else // default
391+ pinAssigner.assignPin (3 , pin_LED);
392+
393+ pinAssigner.assignPin (17 , pin_Button_LightsOn);
375394 pinAssigner.assignPin (19 , pin_Relay_LightsOn);
395+ pinAssigner.assignPin (18 , pin_Infrared);
396+
397+ // e.g. for mic
398+ pinAssigner.assignPin (32 , pin_I2S_SD);
399+ pinAssigner.assignPin (15 , pin_I2S_WS);
400+ pinAssigner.assignPin (14 , pin_I2S_SCK);
401+ // pinAssigner.assignPin(36, nc/ao...);
402+
403+ // e.g. for 4 line display
404+ pinAssigner.assignPin (21 , pin_I2C_SDA);
405+ pinAssigner.assignPin (22 , pin_I2C_SCL);
406+
407+ // pinAssigner.assignPin(?, pin_Temperature); // todo: check temp pin
408+
376409 } else if (boardID == board_MHCD0) {
377410 pinAssigner.assignPin (3 , pin_Voltage);
378- } else if (boardID == board_MHCP4Nano) { // https://shop.myhome-control.de/ABC-WLED-ESP32-P4-Shield/HW10027
379- object[" maxPower" ] = 100 ; // Assuming decent LED power!!
380- if (_state.data [" jumper1" ]) { // on
381- uint8_t ledPins[8 ] = {21 , 20 , 25 , 5 , 7 , 23 , 8 , 27 }; // 8 LED_PINS
382- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
411+ } else if (boardID == board_MHCP4Nano) { // https://shop.myhome-control.de/ABC-WLED-ESP32-P4-Shield/HW10027
412+ object[" maxPower" ] = 100 ; // Assuming decent LED power!!
413+ if (_state.data [" jumper1" ]) { // on
414+ uint8_t ledPins[] = {21 , 20 , 25 , 5 , 7 , 23 , 8 , 27 }; // 8 LED_PINS
415+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
383416 // per default used as LED Pins
384417 pinAssigner.assignPin (3 , pin_RS485);
385418 pinAssigner.assignPin (4 , pin_RS485);
@@ -389,9 +422,9 @@ class ModuleIO : public Module {
389422 pinAssigner.assignPin (46 , pin_Exposed);
390423 pinAssigner.assignPin (47 , pin_Exposed);
391424 pinAssigner.assignPin (48 , pin_Exposed);
392- } else { // off - default
393- uint8_t ledPins[16 ] = {21 , 20 , 25 , 5 , 7 , 23 , 8 , 27 , 3 , 22 , 24 , 4 , 46 , 47 , 2 , 48 }; // 16 LED_PINS
394- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
425+ } else { // off - default
426+ uint8_t ledPins[] = {21 , 20 , 25 , 5 , 7 , 23 , 8 , 27 , 3 , 22 , 24 , 4 , 46 , 47 , 2 , 48 }; // 16 LED_PINS
427+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
395428 }
396429 pinAssigner.assignPin (33 , pin_I2S_SD);
397430 pinAssigner.assignPin (26 , pin_I2S_WS);
@@ -400,9 +433,9 @@ class ModuleIO : public Module {
400433 } else if (boardID == board_YvesV48) {
401434 pinAssigner.assignPin (3 , pin_LED);
402435 } else if (boardID == board_TroyP4Nano) {
403- object[" maxPower" ] = 10 ; // USB compliant
404- uint8_t ledPins[16 ] = {2 , 3 , 4 , 5 , 6 , 20 , 21 , 22 , 23 , 26 , 27 , 32 , 33 , 36 , 47 , 48 }; // LED_PINS
405- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
436+ object[" maxPower" ] = 10 ; // USB compliant
437+ uint8_t ledPins[] = {2 , 3 , 4 , 5 , 6 , 20 , 21 , 22 , 23 , 26 , 27 , 32 , 33 , 36 , 47 , 48 }; // LED_PINS
438+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
406439 pinAssigner.assignPin (7 , pin_I2C_SDA);
407440 pinAssigner.assignPin (8 , pin_I2C_SCL);
408441 pinAssigner.assignPin (9 , pin_Reserved); // I2S Sound Output Pin
@@ -428,16 +461,20 @@ class ModuleIO : public Module {
428461 // 53 is for PA enable but it's exposed on header and works for WLED pin output. Best to not use it but left available.
429462 // 54 is "C4 EN pin" so I guess we shouldn't fuck with that.
430463 } else if (boardID == board_AtomS3) {
431- uint8_t ledPins[4 ] = {5 , 6 , 7 , 8 }; // LED_PINS
432- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
464+ uint8_t ledPins[] = {5 , 6 , 7 , 8 }; // LED_PINS
465+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
433466 } else if (boardID == board_Cube202010) {
434467 object[" maxPower" ] = 50 ;
435- uint8_t ledPins[10 ] = {22 , 21 , 14 , 18 , 5 , 4 , 2 , 15 , 13 , 12 }; // LED_PINS
436- // char pins[80] = "2,3,4,16,17,18,19,21,22,23,25,26,27,32,33"; //(D0), more pins possible. to do: complete list.
437- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
468+ uint8_t ledPins[] = {22 , 21 , 14 , 18 , 5 , 4 , 2 , 15 , 13 , 12 }; // LED_PINS
469+ // char pins[80] = "2,3,4,16,17,18,19,21,22,23,25,26,27,32,33"; //(D0), more pins possible. to do: complete list.
470+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
438471 } else { // default
439472 object[" maxPower" ] = 10 ; // USB compliant
473+ #ifdef CONFIG_IDF_TARGET_ESP32P4
474+ pinAssigner.assignPin (37 , pin_LED);
475+ #else
440476 pinAssigner.assignPin (16 , pin_LED);
477+ #endif
441478
442479 // trying to add more pins, but these pins not liked by esp32-d0-16MB ... 🚧
443480 // pinAssigner.assignPin(4, pin_LED_02;
0 commit comments