Skip to content
3 changes: 3 additions & 0 deletions Module.mk
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ include src/main/ddrhook1/Module.mk
include src/main/ddrhook2/Module.mk
include src/main/ddrio-async/Module.mk
include src/main/ddrio-p3io/Module.mk
include src/main/ddrio-p4io/Module.mk
include src/main/ddrio-mm/Module.mk
include src/main/ddrio-smx/Module.mk
include src/main/ddriotest/Module.mk
Expand Down Expand Up @@ -760,6 +761,7 @@ $(zipdir)/ddr-16-to-18-x64.zip: \
$(zipdir)/ddr-hwio-x86.zip: \
build/bin/indep-32/ddrio-async.dll \
build/bin/indep-32/ddrio-p3io.dll \
build/bin/indep-32/ddrio-p4io.dll \
build/bin/indep-32/ddrio-mm.dll \
build/bin/indep-32/ddrio-smx.dll \
build/bin/indep-32/extiotest.exe \
Expand All @@ -772,6 +774,7 @@ $(zipdir)/ddr-hwio-x86.zip: \
$(zipdir)/ddr-hwio-x64.zip: \
build/bin/indep-64/ddrio-async.dll \
build/bin/indep-64/ddrio-p3io.dll \
build/bin/indep-64/ddrio-p4io.dll \
build/bin/indep-64/ddrio-mm.dll \
build/bin/indep-64/ddrio-smx.dll \
build/bin/indep-64/extiotest.exe \
Expand Down
2 changes: 1 addition & 1 deletion src/main/aciodrv/Module.mk
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ src_aciodrv := \
panb.c \
rvol.c \
port.c \

mdxf.c \
63 changes: 63 additions & 0 deletions src/main/aciodrv/mdxf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#include "mdxf.h"

#define LOG_MODULE "aciodrv-mdxf"

#include <stdio.h>
#include <string.h>

#include "aciodrv/device.h"

#include "util/log.h"

bool aciodrv_mdxf_init(struct aciodrv_device_ctx *device, uint8_t node_id)
{
log_assert(device);

return true;

/*
struct ac_io_message msg = {0};

log_info("starting autopoll mdxf node %d", node_id);

msg.addr = node_id + 1;
msg.cmd.code = ac_io_u16(AC_IO_CMD_MDXF_AUTO_GET_START);
msg.cmd.nbytes = 2;

msg.cmd.raw[0] = 0x80;
msg.cmd.raw[1] = 0x02;

if (aciodrv_send_and_recv(
device,
&msg,
offsetof(struct ac_io_message, cmd.raw) + msg.cmd.nbytes + 1)) {
return true;
}

return false;
*/
}

bool aciodrv_mdxf_poll(
struct aciodrv_device_ctx *device,
uint8_t node_id,
const struct ac_io_mdxf_poll_in *pin)
{
struct ac_io_message msg = {0};

msg.addr = node_id + 1;
msg.cmd.code = ac_io_u16(AC_IO_CMD_MDXF_POLL);
msg.cmd.nbytes = 0;

aciodrv_send_and_recv(
device,
&msg,
offsetof(struct ac_io_message, cmd.raw) +
sizeof(struct ac_io_mdxf_poll_in) + 1);

if (pin != NULL) {
memcpy(pin, &msg.cmd.mdxf_poll_in, sizeof(*pin));
}

return true;
}
14 changes: 14 additions & 0 deletions src/main/aciodrv/mdxf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef ACIODRV_MDXF_H
#define ACIODRV_MDXF_H

#include "acio/mdxf.h"
#include "aciodrv/device.h"

bool aciodrv_mdxf_init(struct aciodrv_device_ctx *device, uint8_t node_id);

bool aciodrv_mdxf_poll(
struct aciodrv_device_ctx *device,
uint8_t node_id,
const struct ac_io_mdxf_poll_in *pout);

#endif
1 change: 1 addition & 0 deletions src/main/aciotest/Module.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ src_aciotest := \
rvol.c \
bi2a-iidx.c \
bi2a-sdvx.c \
mdxf.c \
main.c \
8 changes: 8 additions & 0 deletions src/main/aciotest/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "aciotest/handler.h"
#include "aciotest/icca.h"
#include "aciotest/kfca.h"
#include "aciotest/mdxf.h"
#include "aciotest/panb.h"
#include "aciotest/rvol.h"

Expand Down Expand Up @@ -40,6 +41,13 @@ static bool aciotest_assign_handler(
return true;
}

if (product_type == AC_IO_NODE_TYPE_MDXF) {
handler->init = aciotest_mdxf_handler_init;
handler->update = aciotest_mdxf_handler_update;

return true;
}

if (product_type == AC_IO_NODE_TYPE_PANB) {
handler->init = aciotest_panb_handler_init;
handler->update = aciotest_panb_handler_update;
Expand Down
47 changes: 47 additions & 0 deletions src/main/aciotest/mdxf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#include "aciotest/mdxf.h"

#include "acio/acio.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "aciodrv/mdxf.h"

#define MDXF_PANEL_FLAGS(var) \
((var) & 0b1000 ? 'U' : '-'), ((var) & 0b0100 ? 'D' : '-'), \
((var) & 0b0010 ? 'L' : '-'), ((var) & 0b0001 ? 'R' : '-')

bool aciotest_mdxf_handler_init(
struct aciodrv_device_ctx *device, uint8_t node_id, void **ctx)
{
*ctx = malloc(sizeof(uint32_t));
*((uint32_t *) *ctx) = 0;

return aciodrv_mdxf_init(device, node_id);
}

bool aciotest_mdxf_handler_update(
struct aciodrv_device_ctx *device, uint8_t node_id, void *ctx)
{
struct ac_io_mdxf_poll_in pin;

if (!aciodrv_mdxf_poll(device, node_id, &pin)) {
return false;
}

printf(
">>> MDXF (DDR) P%d:\n"
"Foot Up %c%c%c%c\n"
"Foot Down %c%c%c%c\n"
"Foot Left %c%c%c%c\n"
"Foot Right %c%c%c%c\n"
"\n",
node_id + 1,
MDXF_PANEL_FLAGS(pin.panel.up),
MDXF_PANEL_FLAGS(pin.panel.down),
MDXF_PANEL_FLAGS(pin.panel.left),
MDXF_PANEL_FLAGS(pin.panel.right));

return true;
}
14 changes: 14 additions & 0 deletions src/main/aciotest/mdxf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef ACIOTEST_MDXF_H
#define ACIOTEST_MDXF_H

#include <stdbool.h>
#include <stdint.h>

#include "aciodrv/device.h"

bool aciotest_mdxf_handler_init(
struct aciodrv_device_ctx *device, uint8_t node_id, void **ctx);
bool aciotest_mdxf_handler_update(
struct aciodrv_device_ctx *device, uint8_t node_id, void *ctx);

#endif
17 changes: 17 additions & 0 deletions src/main/ddrio-p4io/Module.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
dlls += ddrio-p4io

deplibs_ddrio-p4io := \

ldflags_ddrio-p4io := \
-lsetupapi \

libs_ddrio-p4io := \
p4iodrv \
aciodrv \
cconfig \
util \

src_ddrio-p4io := \
ddrio.c \
config.c \

55 changes: 55 additions & 0 deletions src/main/ddrio-p4io/config.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#include "cconfig/cconfig-util.h"

#include "config.h"

#include "util/log.h"

#define DDRIO_CONFIG_P4IO_MDXF_PORT_KEY "mdxf.port"
#define DDRIO_CONFIG_P4IO_MDXF_BAUD_KEY "mdxf.baud"

#define DDRIO_CONFIG_P4IO_MDXF_DEFAULT_PORT_VALUE "COM2"
#define DDRIO_CONFIG_P4IO_MDXF_DEFAULT_BAUD_VALUE 115200

void ddrio_config_p4io_mdxf_init(struct cconfig *config)
{
cconfig_util_set_str(
config,
DDRIO_CONFIG_P4IO_MDXF_PORT_KEY,
DDRIO_CONFIG_P4IO_MDXF_DEFAULT_PORT_VALUE,
"MDXF serial port");

cconfig_util_set_int(
config,
DDRIO_CONFIG_P4IO_MDXF_BAUD_KEY,
DDRIO_CONFIG_P4IO_MDXF_DEFAULT_BAUD_VALUE,
"MDXF bus baudrate (115200 is high speed, but will respond at 57600)");
}

void ddrio_config_p4io_mdxf_get(
struct p4io_mdxf_config *config_p4io_mdxf, struct cconfig *config)
{
if (!cconfig_util_get_str(
config,
DDRIO_CONFIG_P4IO_MDXF_PORT_KEY,
config_p4io_mdxf->port,
sizeof(config_p4io_mdxf->port) - 1,
DDRIO_CONFIG_P4IO_MDXF_DEFAULT_PORT_VALUE)) {
log_warning(
"Invalid value for key '%s' specified, fallback "
"to default '%s'",
DDRIO_CONFIG_P4IO_MDXF_PORT_KEY,
DDRIO_CONFIG_P4IO_MDXF_DEFAULT_PORT_VALUE);
}

if (!cconfig_util_get_int(
config,
DDRIO_CONFIG_P4IO_MDXF_BAUD_KEY,
&config_p4io_mdxf->baud,
DDRIO_CONFIG_P4IO_MDXF_DEFAULT_BAUD_VALUE)) {
log_warning(
"Invalid value for key '%s' specified, fallback "
"to default '%d'",
DDRIO_CONFIG_P4IO_MDXF_BAUD_KEY,
DDRIO_CONFIG_P4IO_MDXF_DEFAULT_BAUD_VALUE);
}
}
18 changes: 18 additions & 0 deletions src/main/ddrio-p4io/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#ifndef DDRIO_CONFIG_P4IO_MDXF_M
#define DDRIO_CONFIG_P4IO_MDXF_M

#include <windows.h>

#include "cconfig/cconfig.h"

struct p4io_mdxf_config {
char port[64];
int32_t baud;
};

void ddrio_config_p4io_mdxf_init(struct cconfig *config);

void ddrio_config_p4io_mdxf_get(
struct p4io_mdxf_config *config_p4io_mdxf, struct cconfig *config);

#endif
11 changes: 11 additions & 0 deletions src/main/ddrio-p4io/ddrio-p4io.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
LIBRARY ddrio-p4io

EXPORTS
ddr_io_set_loggers
ddr_io_fini
ddr_io_init
ddr_io_read_pad
ddr_io_set_lights_extio
ddr_io_set_lights_p3io
ddr_io_set_lights_hdxs_panel
ddr_io_set_lights_hdxs_rgb
Loading