A few cleanups in serial passthrough
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
||||||
*
|
*
|
||||||
* Copyright 2021 Andreas J. Reichel.
|
* Copyright 2021 Andreas J. Reichel.
|
||||||
* Copyright 2021-2022 Jasmine Iwanek.
|
* Copyright 2021-2025 Jasmine Iwanek.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@@ -222,10 +222,15 @@ serial_passthrough_dev_init(const device_t *info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char *serpt_mode_names[SERPT_MODES_MAX] = {
|
const char *serpt_mode_names[SERPT_MODES_MAX] = {
|
||||||
[SERPT_MODE_VCON] = "vcon",
|
#ifdef _WIN32
|
||||||
[SERPT_MODE_TCPSRV] = "tcpsrv",
|
[SERPT_MODE_NPIPE_SRV] = "npipesrv",
|
||||||
[SERPT_MODE_TCPCLNT] = "tcpclnt",
|
[SERPT_MODE_NPIPE_CLNT] = "npipeclnt",
|
||||||
[SERPT_MODE_HOSTSER] = "hostser",
|
#else
|
||||||
|
[SERPT_MODE_VCON] = "vcon",
|
||||||
|
#endif
|
||||||
|
[SERPT_MODE_TCP_SRV] = "tcpsrv",
|
||||||
|
[SERPT_MODE_TCP_CLNT] = "tcpclnt",
|
||||||
|
[SERPT_MODE_HOSTSER] = "hostser",
|
||||||
};
|
};
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
@@ -240,19 +245,19 @@ static const device_config_t serial_passthrough_config[] = {
|
|||||||
.spinner = { 0 },
|
.spinner = { 0 },
|
||||||
.selection = {
|
.selection = {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
{ .description = "Named Pipe (Server)", .value = SERPT_MODE_VCON },
|
{ .description = "Named Pipe (Server)", .value = SERPT_MODE_NPIPE_SRV },
|
||||||
#if 0 /* TODO */
|
#if 0 /* TODO */
|
||||||
{ .description = "Named Pipe (Client)", .value = SERPT_MODE_VCON },
|
{ .description = "Named Pipe (Client)", .value = SERPT_MODE_NPIPE_CLNT },
|
||||||
#endif
|
#endif
|
||||||
#else /* _WIN32 */
|
#else /* _WIN32 */
|
||||||
{ .description = "Pseudo Terminal/Virtual Console", .value = SERPT_MODE_VCON },
|
{ .description = "Pseudo Terminal/Virtual Console", .value = SERPT_MODE_VCON },
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
#if 0 /* TODO */
|
#if 0 /* TODO */
|
||||||
{ .description = "TCP Server", .value = SERPT_MODE_TCPSRV },
|
{ .description = "TCP Server", .value = SERPT_MODE_TCP_SRV },
|
||||||
{ .description = "TCP Client", .value = SERPT_MODE_TCPCLNT },
|
{ .description = "TCP Client", .value = SERPT_MODE_TCP_CLNT },
|
||||||
#endif
|
#endif
|
||||||
{ .description = "Host Serial Passthrough", .value = SERPT_MODE_HOSTSER },
|
{ .description = "Host Serial Passthrough", .value = SERPT_MODE_HOSTSER },
|
||||||
{ .description = "" }
|
{ .description = "" }
|
||||||
},
|
},
|
||||||
.bios = { { 0 } }
|
.bios = { { 0 } }
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
||||||
*
|
*
|
||||||
* Copyright 2021 Andreas J. Reichel.
|
* Copyright 2021 Andreas J. Reichel.
|
||||||
* Copyright 2021-2022 Jasmine Iwanek.
|
* Copyright 2021-2025 Jasmine Iwanek.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SERIAL_PASSTHROUGH_H
|
#ifndef SERIAL_PASSTHROUGH_H
|
||||||
@@ -28,10 +28,15 @@
|
|||||||
#include <86box/serial.h>
|
#include <86box/serial.h>
|
||||||
|
|
||||||
enum serial_passthrough_mode {
|
enum serial_passthrough_mode {
|
||||||
SERPT_MODE_VCON, /*Named Pipe (Server) / Pseudo Terminal/Virtual Console */
|
#ifdef _WIN32
|
||||||
SERPT_MODE_TCPSRV, /* TCP Server (TODO) */
|
SERPT_MODE_NPIPE_SRV, /* Named Pipe (Server) */
|
||||||
SERPT_MODE_TCPCLNT, /* TCP Client (TODO) */
|
SERPT_MODE_NPIPE_CLNT, /* Named Pipe (Client) */
|
||||||
SERPT_MODE_HOSTSER, /* Host Serial Passthrough */
|
#else
|
||||||
|
SERPT_MODE_VCON, /* Pseudo Terminal/Virtual Console */
|
||||||
|
#endif
|
||||||
|
SERPT_MODE_TCP_SRV, /* TCP Server (TODO) */
|
||||||
|
SERPT_MODE_TCP_CLNT, /* TCP Client (TODO) */
|
||||||
|
SERPT_MODE_HOSTSER, /* Host Serial Passthrough */
|
||||||
SERPT_MODES_MAX,
|
SERPT_MODES_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
||||||
*
|
*
|
||||||
* Copyright 2021 Andreas J. Reichel
|
* Copyright 2021 Andreas J. Reichel
|
||||||
* Copyright 2021-2023 Jasmine Iwanek
|
* Copyright 2021-2025 Jasmine Iwanek
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _XOPEN_SOURCE 500
|
#define _XOPEN_SOURCE 500
|
||||||
@@ -46,9 +46,9 @@ plat_serpt_close(void *priv)
|
|||||||
fclose(dev->master_fd);
|
fclose(dev->master_fd);
|
||||||
#endif
|
#endif
|
||||||
FlushFileBuffers((HANDLE) dev->master_fd);
|
FlushFileBuffers((HANDLE) dev->master_fd);
|
||||||
if (dev->mode == SERPT_MODE_VCON)
|
if (dev->mode == SERPT_MODE_NPIPE_SRV)
|
||||||
DisconnectNamedPipe((HANDLE) dev->master_fd);
|
DisconnectNamedPipe((HANDLE) dev->master_fd);
|
||||||
if (dev->mode == SERPT_MODE_HOSTSER) {
|
else if (dev->mode == SERPT_MODE_HOSTSER) {
|
||||||
SetCommState((HANDLE) dev->master_fd, (DCB *) dev->backend_priv);
|
SetCommState((HANDLE) dev->master_fd, (DCB *) dev->backend_priv);
|
||||||
free(dev->backend_priv);
|
free(dev->backend_priv);
|
||||||
}
|
}
|
||||||
@@ -133,7 +133,8 @@ plat_serpt_write(void *priv, uint8_t data)
|
|||||||
serial_passthrough_t *dev = (serial_passthrough_t *) priv;
|
serial_passthrough_t *dev = (serial_passthrough_t *) priv;
|
||||||
|
|
||||||
switch (dev->mode) {
|
switch (dev->mode) {
|
||||||
case SERPT_MODE_VCON:
|
case SERPT_MODE_NPIPE_SRV:
|
||||||
|
case SERPT_MODE_NPIPE_CLNT:
|
||||||
case SERPT_MODE_HOSTSER:
|
case SERPT_MODE_HOSTSER:
|
||||||
plat_serpt_write_vcon(dev, data);
|
plat_serpt_write_vcon(dev, data);
|
||||||
break;
|
break;
|
||||||
@@ -157,7 +158,8 @@ plat_serpt_read(void *priv, uint8_t *data)
|
|||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
switch (dev->mode) {
|
switch (dev->mode) {
|
||||||
case SERPT_MODE_VCON:
|
case SERPT_MODE_NPIPE_SRV:
|
||||||
|
case SERPT_MODE_NPIPE_CLNT:
|
||||||
case SERPT_MODE_HOSTSER:
|
case SERPT_MODE_HOSTSER:
|
||||||
res = plat_serpt_read_vcon(dev, data);
|
res = plat_serpt_read_vcon(dev, data);
|
||||||
break;
|
break;
|
||||||
@@ -222,15 +224,14 @@ plat_serpt_open_device(void *priv)
|
|||||||
serial_passthrough_t *dev = (serial_passthrough_t *) priv;
|
serial_passthrough_t *dev = (serial_passthrough_t *) priv;
|
||||||
|
|
||||||
switch (dev->mode) {
|
switch (dev->mode) {
|
||||||
case SERPT_MODE_VCON:
|
case SERPT_MODE_NPIPE_SRV:
|
||||||
if (open_pseudo_terminal(dev)) {
|
if (open_pseudo_terminal(dev))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SERPT_MODE_HOSTSER:
|
case SERPT_MODE_HOSTSER:
|
||||||
if (open_host_serial_port(dev)) {
|
if (open_host_serial_port(dev))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
* Jasmine Iwanek <jasmine@iwanek.co.uk>
|
||||||
*
|
*
|
||||||
* Copyright 2021 Andreas J. Reichel.
|
* Copyright 2021 Andreas J. Reichel.
|
||||||
* Copyright 2021-2022 Jasmine Iwanek.
|
* Copyright 2021-2025 Jasmine Iwanek.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __APPLE__
|
#ifndef __APPLE__
|
||||||
@@ -310,14 +310,12 @@ plat_serpt_open_device(void *priv)
|
|||||||
|
|
||||||
switch (dev->mode) {
|
switch (dev->mode) {
|
||||||
case SERPT_MODE_VCON:
|
case SERPT_MODE_VCON:
|
||||||
if (!open_pseudo_terminal(dev)) {
|
if (!open_pseudo_terminal(dev))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SERPT_MODE_HOSTSER:
|
case SERPT_MODE_HOSTSER:
|
||||||
if (!open_host_serial_port(dev)) {
|
if (!open_host_serial_port(dev))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user