aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/platforms/Win32
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2010-01-22 14:51:54 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2010-01-22 14:51:54 +0000
commit11215c3bcb0b0cbe5794cfc92d0c20de6c8696d9 (patch)
treeb8e85145673bfaee0bd0e3444e1d640b3a5be155 /os/hal/platforms/Win32
parent11a6a2bf6476beda7a3a6d8504aa74c03c3b9731 (diff)
downloadChibiOS-11215c3bcb0b0cbe5794cfc92d0c20de6c8696d9.tar.gz
ChibiOS-11215c3bcb0b0cbe5794cfc92d0c20de6c8696d9.tar.bz2
ChibiOS-11215c3bcb0b0cbe5794cfc92d0c20de6c8696d9.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1539 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/platforms/Win32')
-rw-r--r--os/hal/platforms/Win32/serial_lld.c82
-rw-r--r--os/hal/platforms/Win32/serial_lld.h75
2 files changed, 66 insertions, 91 deletions
diff --git a/os/hal/platforms/Win32/serial_lld.c b/os/hal/platforms/Win32/serial_lld.c
index e29b994de..b22dcbad3 100644
--- a/os/hal/platforms/Win32/serial_lld.c
+++ b/os/hal/platforms/Win32/serial_lld.c
@@ -61,18 +61,18 @@ static void init(SerialDriver *sdp, uint16_t port) {
struct protoent *prtp;
if ((prtp = getprotobyname("tcp")) == NULL) {
- printf("%s: Error mapping protocol name to protocol number\n", sdp->sd.com_name);
+ printf("%s: Error mapping protocol name to protocol number\n", sdp->com_name);
goto abort;
}
- sdp->sd.com_listen = socket(PF_INET, SOCK_STREAM, prtp->p_proto);
- if (sdp->sd.com_listen == INVALID_SOCKET) {
- printf("%s: Error creating simulator socket\n", sdp->sd.com_name);
+ sdp->com_listen = socket(PF_INET, SOCK_STREAM, prtp->p_proto);
+ if (sdp->com_listen == INVALID_SOCKET) {
+ printf("%s: Error creating simulator socket\n", sdp->com_name);
goto abort;
}
- if (ioctlsocket(sdp->sd.com_listen, FIONBIO, &nb) != 0) {
- printf("%s: Unable to setup non blocking mode on socket\n", sdp->sd.com_name);
+ if (ioctlsocket(sdp->com_listen, FIONBIO, &nb) != 0) {
+ printf("%s: Unable to setup non blocking mode on socket\n", sdp->com_name);
goto abort;
}
@@ -80,36 +80,36 @@ static void init(SerialDriver *sdp, uint16_t port) {
sad.sin_family = AF_INET;
sad.sin_addr.s_addr = INADDR_ANY;
sad.sin_port = htons(port);
- if (bind(sdp->sd.com_listen, (struct sockaddr *)&sad, sizeof(sad))) {
- printf("%s: Error binding socket\n", sdp->sd.com_name);
+ if (bind(sdp->com_listen, (struct sockaddr *)&sad, sizeof(sad))) {
+ printf("%s: Error binding socket\n", sdp->com_name);
goto abort;
}
- if (listen(sdp->sd.com_listen, 1) != 0) {
- printf("%s: Error listening socket\n", sdp->sd.com_name);
+ if (listen(sdp->com_listen, 1) != 0) {
+ printf("%s: Error listening socket\n", sdp->com_name);
goto abort;
}
- printf("Full Duplex Channel %s listening on port %d\n", sdp->sd.com_name, port);
+ printf("Full Duplex Channel %s listening on port %d\n", sdp->com_name, port);
return;
abort:
- if (sdp->sd.com_listen != INVALID_SOCKET)
- closesocket(sdp->sd.com_listen);
+ if (sdp->com_listen != INVALID_SOCKET)
+ closesocket(sdp->com_listen);
WSACleanup();
exit(1);
}
static bool_t connint(SerialDriver *sdp) {
- if (sdp->sd.com_data == INVALID_SOCKET) {
+ if (sdp->com_data == INVALID_SOCKET) {
struct sockaddr addr;
int addrlen = sizeof(addr);
- if ((sdp->sd.com_data = accept(sdp->sd.com_listen, &addr, &addrlen)) == INVALID_SOCKET)
+ if ((sdp->com_data = accept(sdp->com_listen, &addr, &addrlen)) == INVALID_SOCKET)
return FALSE;
- if (ioctlsocket(sdp->sd.com_data, FIONBIO, &nb) != 0) {
- printf("%s: Unable to setup non blocking mode on data socket\n", sdp->sd.com_name);
+ if (ioctlsocket(sdp->com_data, FIONBIO, &nb) != 0) {
+ printf("%s: Unable to setup non blocking mode on data socket\n", sdp->com_name);
goto abort;
}
sdAddFlagsI(sdp, SD_CONNECTED);
@@ -117,35 +117,35 @@ static bool_t connint(SerialDriver *sdp) {
}
return FALSE;
abort:
- if (sdp->sd.com_listen != INVALID_SOCKET)
- closesocket(sdp->sd.com_listen);
- if (sdp->sd.com_data != INVALID_SOCKET)
- closesocket(sdp->sd.com_data);
+ if (sdp->com_listen != INVALID_SOCKET)
+ closesocket(sdp->com_listen);
+ if (sdp->com_data != INVALID_SOCKET)
+ closesocket(sdp->com_data);
WSACleanup();
exit(1);
}
static bool_t inint(SerialDriver *sdp) {
- if (sdp->sd.com_data != INVALID_SOCKET) {
+ if (sdp->com_data != INVALID_SOCKET) {
int i;
uint8_t data[32];
/*
* Input.
*/
- int n = recv(sdp->sd.com_data, data, sizeof(data), 0);
+ int n = recv(sdp->com_data, data, sizeof(data), 0);
switch (n) {
case 0:
- closesocket(sdp->sd.com_data);
- sdp->sd.com_data = INVALID_SOCKET;
+ closesocket(sdp->com_data);
+ sdp->com_data = INVALID_SOCKET;
sdAddFlagsI(sdp, SD_DISCONNECTED);
return FALSE;
case SOCKET_ERROR:
if (WSAGetLastError() == WSAEWOULDBLOCK)
return FALSE;
- closesocket(sdp->sd.com_data);
- sdp->sd.com_data = INVALID_SOCKET;
+ closesocket(sdp->com_data);
+ sdp->com_data = INVALID_SOCKET;
return FALSE;
}
for (i = 0; i < n; i++)
@@ -157,7 +157,7 @@ static bool_t inint(SerialDriver *sdp) {
static bool_t outint(SerialDriver *sdp) {
- if (sdp->sd.com_data != INVALID_SOCKET) {
+ if (sdp->com_data != INVALID_SOCKET) {
int n;
uint8_t data[1];
@@ -168,18 +168,18 @@ static bool_t outint(SerialDriver *sdp) {
if (n < 0)
return FALSE;
data[0] = (uint8_t)n;
- n = send(sdp->sd.com_data, data, sizeof(data), 0);
+ n = send(sdp->com_data, data, sizeof(data), 0);
switch (n) {
case 0:
- closesocket(sdp->sd.com_data);
- sdp->sd.com_data = INVALID_SOCKET;
+ closesocket(sdp->com_data);
+ sdp->com_data = INVALID_SOCKET;
sdAddFlagsI(sdp, SD_DISCONNECTED);
return FALSE;
case SOCKET_ERROR:
if (WSAGetLastError() == WSAEWOULDBLOCK)
return FALSE;
- closesocket(sdp->sd.com_data);
- sdp->sd.com_data = INVALID_SOCKET;
+ closesocket(sdp->com_data);
+ sdp->com_data = INVALID_SOCKET;
return FALSE;
}
return TRUE;
@@ -202,16 +202,16 @@ void sd_lld_init(void) {
#if USE_WIN32_SERIAL1
sdObjectInit(&SD1, NULL, NULL);
- SD1.sd.com_listen = INVALID_SOCKET;
- SD1.sd.com_data = INVALID_SOCKET;
- SD1.sd.com_name = "SD1";
+ SD1.com_listen = INVALID_SOCKET;
+ SD1.com_data = INVALID_SOCKET;
+ SD1.com_name = "SD1";
#endif
#if USE_WIN32_SERIAL1
sdObjectInit(&SD2, NULL, NULL);
- SD2.sd.com_listen = INVALID_SOCKET;
- SD2.sd.com_data = INVALID_SOCKET;
- SD2.sd.com_name = "SD2";
+ SD2.com_listen = INVALID_SOCKET;
+ SD2.com_data = INVALID_SOCKET;
+ SD2.com_name = "SD2";
#endif
}
@@ -222,8 +222,8 @@ void sd_lld_init(void) {
*/
void sd_lld_start(SerialDriver *sdp) {
- if (sdp->sd.config == NULL)
- sdp->sd.config = &default_config;
+ if (sdp->config == NULL)
+ sdp->config = &default_config;
#if USE_WIN32_SERIAL1
if (sdp == &SD1)
diff --git a/os/hal/platforms/Win32/serial_lld.h b/os/hal/platforms/Win32/serial_lld.h
index ed70a880a..936ff2a7a 100644
--- a/os/hal/platforms/Win32/serial_lld.h
+++ b/os/hal/platforms/Win32/serial_lld.h
@@ -102,56 +102,31 @@ typedef struct {
/**
* @brief @p SerialDriver specific data.
*/
-struct _serial_driver_data {
- /**
- * @brief Driver state.
- */
- sdstate_t state;
- /**
- * @brief Current configuration data.
- */
- const SerialConfig *config;
- /**
- * @brief Input queue, incoming data can be read from this input queue by
- * using the queues APIs.
- */
- InputQueue iqueue;
- /**
- * @brief Output queue, outgoing data can be written to this output queue by
- * using the queues APIs.
- */
- OutputQueue oqueue;
- /**
- * @brief Status Change @p EventSource. This event is generated when one or
- * more condition flags change.
- */
- EventSource sevent;
- /**
- * @brief I/O driver status flags.
- */
- sdflags_t flags;
- /**
- * @brief Input circular buffer.
- */
- uint8_t ib[SERIAL_BUFFERS_SIZE];
- /**
- * @brief Output circular buffer.
- */
- uint8_t ob[SERIAL_BUFFERS_SIZE];
- /* End of the mandatory fields.*/
- /**
- * Listen socket for simulated serial port.
- */
- SOCKET com_listen;
- /**
- * Data socket for simulated serial port.
- */
- SOCKET com_data;
- /**
- * Port readable name.
- */
- const char *com_name;
-};
+#define _serial_driver_data \
+ _base_asynchronous_channel_data; \
+ /* Driver state.*/ \
+ sdstate_t state; \
+ /* Current configuration data.*/ \
+ const SerialConfig *config; \
+ /* Input queue.*/ \
+ InputQueue iqueue; \
+ /* Output queue.*/ \
+ OutputQueue oqueue; \
+ /* Status Change @p EventSource.*/ \
+ EventSource sevent; \
+ /* I/O driver status flags.*/ \
+ sdflags_t flags; \
+ /* Input circular buffer.*/ \
+ uint8_t ib[SERIAL_BUFFERS_SIZE]; \
+ /* Output circular buffer.*/ \
+ uint8_t ob[SERIAL_BUFFERS_SIZE]; \
+ /* End of the mandatory fields.*/ \
+ /* Listen socket for simulated serial port.*/ \
+ SOCKET com_listen; \
+ /* Data socket for simulated serial port.*/ \
+ SOCKET com_data; \
+ /* Port readable name.*/ \
+ const char *com_name
/*===========================================================================*/
/* External declarations. */