/* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */

#include "compiler.h"
#include "libmctp.h"
#include "libmctp-serial.h"

#include <assert.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/poll.h>
#include <sys/socket.h>

static void rx_message(uint8_t eid __unused, bool tag_owner __unused,
		       uint8_t msg_tag __unused, void *data __unused, void *msg,
		       size_t len)
{
	ssize_t rc;

	rc = write(STDOUT_FILENO, msg, len);
	if (rc < 0)
		warn("Write failed");
	else if ((size_t)rc < len)
		warnx("Short write of length %zd, requested %zd", rc, len);
}

int main(void)
{
	struct mctp_binding_serial *serial;
	struct mctp *mctp;
	int rc;

	mctp = mctp_init();
	assert(mctp);

	serial = mctp_serial_init();
	assert(serial);

	mctp_serial_open_fd(serial, STDIN_FILENO);

	mctp_register_bus(mctp, mctp_binding_serial_core(serial), 8);

	mctp_set_rx_all(mctp, rx_message, NULL);

	for (;;) {
		rc = mctp_serial_read(serial);
		if (rc)
			break;
	}

	return EXIT_SUCCESS;
}