added bit structs to lights

This commit is contained in:
din 2025-09-07 10:30:50 -05:00
parent 36ac9b4323
commit 421ae4c673
2 changed files with 98 additions and 9 deletions

View File

@ -17,6 +17,7 @@
#include "aciodrv/device.h"
#include "aciodrv/mdxf.h"
#include "p4io/bitinfo.h"
#include "p4iodrv/device.h"
#include <stdio.h>
@ -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);
}
}

79
src/main/p4io/bitinfo.h Normal file
View File

@ -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