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,
@@ -65,7 +65,7 @@ enum IO_PinUsage {
6565 pin_count
6666};
6767
68- enum IO_Boards {
68+ enum IO_BoardsEnum {
6969 board_none, //
7070 board_QuinLEDDigUnoV3,
7171 board_QuinLEDDigQuadV3,
@@ -112,8 +112,8 @@ class ModuleIO : public Module {
112112 addControlValue (control, " QuinLED Dig Quad v3" );
113113 addControlValue (control, " QuinLED Dig Octa v2" );
114114 addControlValue (control, " QuinLED Dig 2Go" );
115- addControlValue (control, " Serg Universal Shield v5 🚧 " );
116- addControlValue (control, " Serg Mini Shield 🚧 " );
115+ addControlValue (control, " Serg Universal Shield" );
116+ addControlValue (control, " Serg Mini Shield" );
117117 addControlValue (control, " Mathieu SE16 v1" );
118118 addControlValue (control, " MyHome-Control V43 controller" );
119119 addControlValue (control, " MyHome-Control P4 Nano Shield V1.0" );
@@ -281,8 +281,8 @@ class ModuleIO : public Module {
281281
282282 if (boardID == board_SE16V1) {
283283 object[" maxPower" ] = 500 ;
284- uint8_t ledPins[16 ] = {47 , 48 , 21 , 38 , 14 , 39 , 13 , 40 , 12 , 41 , 11 , 42 , 10 , 2 , 3 , 1 }; // LED_PINS
285- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
284+ uint8_t ledPins[] = {47 , 48 , 21 , 38 , 14 , 39 , 13 , 40 , 12 , 41 , 11 , 42 , 10 , 2 , 3 , 1 }; // LED_PINS
285+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
286286 pinAssigner.assignPin (0 , pin_ButtonPush);
287287 pinAssigner.assignPin (45 , pin_ButtonPush);
288288 pinAssigner.assignPin (46 , pin_Button_LightsOn);
@@ -317,8 +317,8 @@ class ModuleIO : public Module {
317317 // Dig-Quad-V3
318318 // esp32-d0 (4MB)
319319 object[" maxPower" ] = 150 ;
320- uint8_t ledPins[4 ] = {16 , 3 , 1 , 4 }; // LED_PINS
321- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
320+ uint8_t ledPins[] = {16 , 3 , 1 , 4 }; // LED_PINS
321+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
322322 pinAssigner.assignPin (0 , pin_ButtonPush);
323323
324324 pinAssigner.assignPin (15 , pin_Relay);
@@ -330,9 +330,9 @@ class ModuleIO : public Module {
330330 // pinAssigner.assignPin(32, pin_Exposed;
331331 } else if (boardID == board_QuinLEDDigOctaV2) {
332332 // Dig-Octa-32-8L
333- object[" maxPower" ] = 400 ; // 10A Fuse * 8 ... 400 W
334- uint8_t ledPins[8 ] = {0 , 1 , 2 , 3 , 4 , 5 , 12 , 13 }; // LED_PINS
335- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
333+ object[" maxPower" ] = 400 ; // 10A Fuse * 8 ... 400 W
334+ uint8_t ledPins[] = {0 , 1 , 2 , 3 , 4 , 5 , 12 , 13 }; // LED_PINS
335+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
336336 pinAssigner.assignPin (33 , pin_Relay);
337337 pinAssigner.assignPin (34 , pin_ButtonPush);
338338 } else if (boardID == board_QuinLEDDig2Go) {
@@ -351,8 +351,8 @@ class ModuleIO : public Module {
351351 pinAssigner.assignPin (25 , pin_Exposed);
352352 // pinAssigner.assignPin(xx, pin_I2S_MCLK);
353353 // } else if (boardID == board_QuinLEDPenta) {
354- // uint8_t ledPins[5 ] = {14, 13, 12, 4, 2}; // LED_PINS
355- // for (int i = 0; i < sizeof (ledPins); i++) pinAssigner.assignPin(ledPins[i], pin_LED);
354+ // uint8_t ledPins[] = {14, 13, 12, 4, 2}; // LED_PINS
355+ // for (int i = 0; i < std::size (ledPins); i++) pinAssigner.assignPin(ledPins[i], pin_LED);
356356 // pinAssigner.assignPin(34, pin_ButtonPush);
357357 // pinAssigner.assignPin(35, pin_ButtonPush);
358358 // pinAssigner.assignPin(39, pin_ButtonPush);
@@ -373,12 +373,31 @@ class ModuleIO : public Module {
373373 // pinAssigner.assignPin(5, pin_LED);
374374 } else if (boardID == board_SergMiniShield) {
375375 object[" maxPower" ] = 50 ; // 10A Fuse ...
376- pinAssigner.assignPin (1 , pin_LED);
377- pinAssigner.assignPin (3 , pin_LED);
376+ pinAssigner.assignPin (16 , pin_LED);
377+ // pinAssigner.assignPin(17, pin_LED); // e.g. apa102...
378+
379+ // pinAssigner.assignPin(??, pin_Button_LightsOn); // which pin ?
380+ pinAssigner.assignPin (19 , pin_Relay_LightsOn); // optional
381+
382+ // e.g. for mic
383+ pinAssigner.assignPin (32 , pin_I2S_SD);
384+ pinAssigner.assignPin (15 , pin_I2S_WS);
385+ pinAssigner.assignPin (14 , pin_I2S_SCK);
386+ // pinAssigner.assignPin(36, nc/ao...);
387+
388+ // e.g. for 4 line display
389+ pinAssigner.assignPin (21 , pin_I2C_SDA);
390+ pinAssigner.assignPin (22 , pin_I2C_SCL);
378391 } else if (boardID == board_SergUniShieldV5) {
379392 object[" maxPower" ] = 50 ; // 10A Fuse ...
380- pinAssigner.assignPin (1 , pin_LED);
381- pinAssigner.assignPin (3 , pin_LED);
393+
394+ pinAssigner.assignPin (16 , pin_LED); // first pin
395+ if (_state.data [" jumper1" ])
396+ pinAssigner.assignPin (1 , pin_LED);
397+ else // default
398+ pinAssigner.assignPin (3 , pin_LED);
399+
400+ pinAssigner.assignPin (17 , pin_Button_LightsOn);
382401 pinAssigner.assignPin (19 , pin_Relay_LightsOn);
383402 } else if (boardID == board_MHCV43) { // https://shop.myhome-control.de/ABC-WLED-Controller-Board-5-24V/HW10015
384403 object[" maxPower" ] = 75 ; // 15A Fuse @ 5V
@@ -407,6 +426,39 @@ class ModuleIO : public Module {
407426 } else { // off - default
408427 uint8_t ledPins[] = {21 , 20 , 25 , 5 , 7 , 23 , 8 , 27 , 3 , 22 , 24 , 4 , 46 , 47 , 2 , 48 }; // 16 LED_PINS in this order
409428 for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
429+ pinAssigner.assignPin (18 , pin_Infrared);
430+
431+ // e.g. for mic
432+ pinAssigner.assignPin (32 , pin_I2S_SD);
433+ pinAssigner.assignPin (15 , pin_I2S_WS);
434+ pinAssigner.assignPin (14 , pin_I2S_SCK);
435+ // pinAssigner.assignPin(36, nc/ao...);
436+
437+ // e.g. for 4 line display
438+ pinAssigner.assignPin (21 , pin_I2C_SDA);
439+ pinAssigner.assignPin (22 , pin_I2C_SCL);
440+
441+ // pinAssigner.assignPin(?, pin_Temperature); // todo: check temp pin
442+
443+ } else if (boardID == board_MHCD0) {
444+ pinAssigner.assignPin (3 , pin_Voltage);
445+ } else if (boardID == board_MHCP4Nano) { // https://shop.myhome-control.de/ABC-WLED-ESP32-P4-Shield/HW10027
446+ object[" maxPower" ] = 100 ; // Assuming decent LED power!!
447+ if (_state.data [" jumper1" ]) { // on
448+ uint8_t ledPins[] = {21 , 20 , 25 , 5 , 7 , 23 , 8 , 27 }; // 8 LED_PINS
449+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
450+ // per default used as LED Pins
451+ pinAssigner.assignPin (3 , pin_RS485);
452+ pinAssigner.assignPin (4 , pin_RS485);
453+ pinAssigner.assignPin (22 , pin_RS485);
454+ pinAssigner.assignPin (24 , pin_RS485);
455+ pinAssigner.assignPin (2 , pin_Exposed);
456+ pinAssigner.assignPin (46 , pin_Exposed);
457+ pinAssigner.assignPin (47 , pin_Exposed);
458+ pinAssigner.assignPin (48 , pin_Exposed);
459+ } else { // off - default
460+ uint8_t ledPins[] = {21 , 20 , 25 , 5 , 7 , 23 , 8 , 27 , 3 , 22 , 24 , 4 , 46 , 47 , 2 , 48 }; // 16 LED_PINS
461+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
410462 }
411463
412464 if (_state.data [" switch2" ]) {
@@ -426,9 +478,9 @@ class ModuleIO : public Module {
426478 } else if (boardID == board_YvesV48) {
427479 pinAssigner.assignPin (3 , pin_LED);
428480 } else if (boardID == board_TroyP4Nano) {
429- object[" maxPower" ] = 10 ; // USB compliant
430- uint8_t ledPins[16 ] = {2 , 3 , 4 , 5 , 6 , 20 , 21 , 22 , 23 , 26 , 27 , 32 , 33 , 36 , 47 , 48 }; // LED_PINS
431- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
481+ object[" maxPower" ] = 10 ; // USB compliant
482+ uint8_t ledPins[] = {2 , 3 , 4 , 5 , 6 , 20 , 21 , 22 , 23 , 26 , 27 , 32 , 33 , 36 , 47 , 48 }; // LED_PINS
483+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
432484 pinAssigner.assignPin (7 , pin_I2C_SDA);
433485 pinAssigner.assignPin (8 , pin_I2C_SCL);
434486 pinAssigner.assignPin (9 , pin_Reserved); // I2S Sound Output Pin
@@ -454,16 +506,20 @@ class ModuleIO : public Module {
454506 // 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.
455507 // 54 is "C4 EN pin" so I guess we shouldn't fuck with that.
456508 } else if (boardID == board_AtomS3) {
457- uint8_t ledPins[4 ] = {5 , 6 , 7 , 8 }; // LED_PINS
458- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
509+ uint8_t ledPins[] = {5 , 6 , 7 , 8 }; // LED_PINS
510+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
459511 } else if (boardID == board_Cube202010) {
460512 object[" maxPower" ] = 50 ;
461- uint8_t ledPins[10 ] = {22 , 21 , 14 , 18 , 5 , 4 , 2 , 15 , 13 , 12 }; // LED_PINS
462- // 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.
463- for (int i = 0 ; i < sizeof (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
513+ uint8_t ledPins[] = {22 , 21 , 14 , 18 , 5 , 4 , 2 , 15 , 13 , 12 }; // LED_PINS
514+ // 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.
515+ for (int i = 0 ; i < std::size (ledPins); i++) pinAssigner.assignPin (ledPins[i], pin_LED);
464516 } else { // default
465517 object[" maxPower" ] = 10 ; // USB compliant
518+ #ifdef CONFIG_IDF_TARGET_ESP32P4
519+ pinAssigner.assignPin (37 , pin_LED);
520+ #else
466521 pinAssigner.assignPin (16 , pin_LED);
522+ #endif
467523
468524 // trying to add more pins, but these pins not liked by esp32-d0-16MB ... 🚧
469525 // pinAssigner.assignPin(4, pin_LED_02;
0 commit comments