From 421ae4c673b61d1b4a9595b7e17b04e1bb8ae362 Mon Sep 17 00:00:00 2001 From: din Date: Sun, 7 Sep 2025 10:30:50 -0500 Subject: [PATCH] added bit structs to lights --- src/main/ddrio-p4io/ddrio.c | 28 ++++++++----- src/main/p4io/bitinfo.h | 79 +++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 src/main/p4io/bitinfo.h diff --git a/src/main/ddrio-p4io/ddrio.c b/src/main/ddrio-p4io/ddrio.c index f09063b..f4e945e 100644 --- a/src/main/ddrio-p4io/ddrio.c +++ b/src/main/ddrio-p4io/ddrio.c @@ -17,6 +17,7 @@ #include "aciodrv/device.h" #include "aciodrv/mdxf.h" +#include "p4io/bitinfo.h" #include "p4iodrv/device.h" #include @@ -24,10 +25,6 @@ static struct p4iodrv_ctx *p4io_ctx; static struct aciodrv_device_ctx *mdxf_device; -uint8_t light_buff[16] = {0}; -uint8_t coin_buff[4] = {0}; -uint32_t jamma[4] = {0}; - struct p4io_bittrans { uint32_t p4io; uint32_t ddrio; @@ -52,6 +49,10 @@ static const struct p4io_bittrans input_map[] = { }; +p4io_lights_t light_buff = {0}; +p4io_coin_lights_t coin_buff = {0}; +uint32_t jamma[4] = {0}; + void ddr_io_set_loggers( log_formatter_t misc, log_formatter_t info, @@ -182,7 +183,7 @@ void ddr_io_set_lights_extio(uint32_t lights) // TODO: pull the NEON light out and map to the bass lights. if (p4io_ctx) { - p4iodrv_cmd_portout(p4io_ctx, (uint8_t *) &light_buff); + p4iodrv_cmd_portout(p4io_ctx, (uint8_t *) &light_buff.raw); } } @@ -191,17 +192,26 @@ void ddr_io_set_lights_p3io(uint32_t lights) // TODO: map the marquee lights to the RGB of the p4io. if (p4io_ctx) { - p4iodrv_cmd_portout(p4io_ctx, (uint8_t *) &light_buff); + p4iodrv_cmd_portout(p4io_ctx, (uint8_t *) &light_buff.raw); } } void ddr_io_set_lights_hdxs_panel(uint32_t lights) { - // TODO: Map the player button lights to the p4io menu lights. + light_buff.ddr.p1_start = (lights & (1 << LIGHT_HD_P1_START)) ? 0xFF : 0x00; + light_buff.ddr.p1_updown = + (lights & (1 << LIGHT_HD_P1_UP_DOWN)) ? 0xFF : 0x00; + light_buff.ddr.p1_leftright = + (lights & (1 << LIGHT_HD_P1_LEFT_RIGHT)) ? 0xFF : 0x00; + + // p2's lights are on the coinstock endpoint. + coin_buff.ddr.p2_start = (lights & (1 << LIGHT_HD_P2_START)); + coin_buff.ddr.p2_leftright = (lights & (1 << LIGHT_HD_P2_LEFT_RIGHT)); + coin_buff.ddr.p2_updown = (lights & (1 << LIGHT_HD_P2_UP_DOWN)); if (p4io_ctx) { - p4iodrv_cmd_coinstock(p4io_ctx, (uint8_t *) &coin_buff); - p4iodrv_cmd_portout(p4io_ctx, (uint8_t *) &light_buff); + p4iodrv_cmd_coinstock(p4io_ctx, (uint8_t *) &coin_buff.raw); + p4iodrv_cmd_portout(p4io_ctx, (uint8_t *) &light_buff.raw); } } diff --git a/src/main/p4io/bitinfo.h b/src/main/p4io/bitinfo.h new file mode 100644 index 0000000..b86bd4a --- /dev/null +++ b/src/main/p4io/bitinfo.h @@ -0,0 +1,79 @@ +#ifndef P4IO_BITINFO_H +#define P4IO_BITINFO_H + +#pragma pack(push, 1) + +typedef union { + struct { + bool coin0_0 : 1; + bool coin0_1 : 1; + bool p2_leftright : 1; + bool p2_updown : 1; + bool p2_start : 1; + bool coin0_5 : 1; + bool coin0_6 : 1; + bool coin0_7 : 1; + + bool coin1_0 : 1; + bool coin1_1 : 1; + bool coin1_2 : 1; + bool coin1_3 : 1; + bool coin1_4 : 1; + bool coin1_5 : 1; + bool coin1_6 : 1; + bool coin1_7 : 1; + + bool coin2_0 : 1; + bool coin2_1 : 1; + bool coin2_2 : 1; + bool coin2_3 : 1; + bool coin2_4 : 1; + bool coin2_5 : 1; + bool coin2_6 : 1; + bool coin2_7 : 1; + + bool coin3_0 : 1; + bool coin3_1 : 1; + bool coin3_2 : 1; + bool coin3_3 : 1; + bool coin3_4 : 1; + bool coin3_5 : 1; + bool coin3_6 : 1; + bool coin3_7 : 1; + } ddr; + uint8_t raw[4]; +} p4io_coin_lights_t; +_Static_assert( + sizeof(p4io_coin_lights_t) == 4, "p4io_coin_lights_t is the wrong size"); + +typedef union { + struct { + uint8_t header_up_g; + uint8_t header_up_r; + uint8_t header_up_b; + + uint8_t header_down_g; + uint8_t header_down_r; + uint8_t header_down_b; + + uint8_t bass_g; + uint8_t bass_r; + uint8_t bass_b; + + uint8_t p1_start; + uint8_t p1_updown; + uint8_t p1_leftright; + + uint8_t light12; + uint8_t light13; + uint8_t light14; + uint8_t light15; + } ddr; + uint8_t raw[16]; +} p4io_lights_t; + +_Static_assert(sizeof(p4io_lights_t) == 16, "p4io_lights_t is the wrong size"); + +#pragma pack(pop) + +#endif \ No newline at end of file