From 81507dcbe7336d523b42afeeb422bd9c983dbf6f Mon Sep 17 00:00:00 2001 From: gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> Date: Sat, 2 May 2009 16:05:13 +0000 Subject: Now the serial driver subsystem is a descendant class of a BaseChannel. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@936 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- src/chserial.c | 28 ++++++++++++++-------------- src/include/channels.h | 12 ++++++------ src/include/serial.h | 33 +++------------------------------ test/test.c | 18 +++++++++--------- 4 files changed, 32 insertions(+), 59 deletions(-) diff --git a/src/chserial.c b/src/chserial.c index bb2d7b7d7..b93a9973a 100644 --- a/src/chserial.c +++ b/src/chserial.c @@ -51,12 +51,12 @@ void chFDDInit(FullDuplexDriver *sd, chDbgCheck((sd != NULL) && (ib != NULL) && (ob != NULL) && (isize > 0) && (osize > 0), "chFDDInit"); - chIQInit(&sd->sd_iqueue, ib, isize, inotify); - chEvtInit(&sd->sd_ievent); - chOQInit(&sd->sd_oqueue, ob, osize, onotify); - chEvtInit(&sd->sd_oevent); - chEvtInit(&sd->sd_sevent); - sd->sd_flags = SD_NO_ERROR; + chEvtInit(&sd->d1.ievent); + chEvtInit(&sd->d1.oevent); + chEvtInit(&sd->d2.sevent); + sd->d2.flags = SD_NO_ERROR; + chIQInit(&sd->d3.iqueue, ib, isize, inotify); + chOQInit(&sd->d3.oqueue, ob, osize, onotify); } /** @@ -69,10 +69,10 @@ void chFDDInit(FullDuplexDriver *sd, */ void chFDDIncomingDataI(FullDuplexDriver *sd, uint8_t b) { - if (chIQPutI(&sd->sd_iqueue, b) < Q_OK) + if (chIQPutI(&sd->d3.iqueue, b) < Q_OK) chFDDAddFlagsI(sd, SD_OVERRUN_ERROR); else - chEvtBroadcastI(&sd->sd_ievent); + chEvtBroadcastI(&sd->d1.ievent); } /** @@ -87,9 +87,9 @@ void chFDDIncomingDataI(FullDuplexDriver *sd, uint8_t b) { */ msg_t chFDDRequestDataI(FullDuplexDriver *sd) { - msg_t b = chOQGetI(&sd->sd_oqueue); + msg_t b = chOQGetI(&sd->d3.oqueue); if (b < Q_OK) - chEvtBroadcastI(&sd->sd_oevent); + chEvtBroadcastI(&sd->d1.oevent); return b; } @@ -103,8 +103,8 @@ msg_t chFDDRequestDataI(FullDuplexDriver *sd) { */ void chFDDAddFlagsI(FullDuplexDriver *sd, dflags_t mask) { - sd->sd_flags |= mask; - chEvtBroadcastI(&sd->sd_sevent); + sd->d2.flags |= mask; + chEvtBroadcastI(&sd->d2.sevent); } /** @@ -117,8 +117,8 @@ void chFDDAddFlagsI(FullDuplexDriver *sd, dflags_t mask) { dflags_t chFDDGetAndClearFlags(FullDuplexDriver *sd) { dflags_t mask; - mask = sd->sd_flags; - sd->sd_flags = SD_NO_ERROR; + mask = sd->d2.flags; + sd->d2.flags = SD_NO_ERROR; return mask; } #endif /* CH_USE_SERIAL_FULLDUPLEX */ diff --git a/src/include/channels.h b/src/include/channels.h index dd2cd3301..57eb55c4a 100644 --- a/src/include/channels.h +++ b/src/include/channels.h @@ -78,7 +78,7 @@ typedef struct { * @retval Q_OK if the operation succeeded. * @retval Q_RESET if the channel associated queue (if any) was reset. */ -#define chIOPut(ip, b) ((ip)->vmt.m0->put(ip, b, TIME_INFINITE)) +#define chIOPut(ip, b) ((ip)->vmt->m0.put(ip, b, TIME_INFINITE)) /** * @brief Channel blocking byte write with timeout. @@ -97,7 +97,7 @@ typedef struct { * @retval Q_TIMEOUT if the specified time expired. * @retval Q_RESET if the channel associated queue (if any) was reset. */ -#define chIOPutTimeout(ip, b, timeout) ((ip)->vmt.m0->put(ip, b, timeout)) +#define chIOPutTimeout(ip, b, timeout) ((ip)->vmt->m0.put(ip, b, timeout)) /** * @brief Channel blocking byte read. @@ -108,7 +108,7 @@ typedef struct { * @return A byte value from the queue or: * @retval Q_RESET if the channel associated queue (if any) was reset. */ -#define chIOGet(ip) ((ip)->vmt.m0->put(ip, TIME_INFINITE)) +#define chIOGet(ip) ((ip)->vmt->m0.put(ip, TIME_INFINITE)) /** * @brief Channel blocking byte read with timeout. @@ -125,7 +125,7 @@ typedef struct { * @retval Q_TIMEOUT if the specified time expired. * @retval Q_RESET if the channel associated queue (if any) was reset. */ -#define chIOGetTimeout(ip, timeout) ((ip)->vmt.m0->put(ip, timeout)) +#define chIOGetTimeout(ip, timeout) ((ip)->vmt->m0.put(ip, timeout)) #if CH_USE_EVENTS /** @@ -192,7 +192,7 @@ typedef struct { * @param[in] n the maximum amount of data to be transferred * @return The number of bytes transferred. */ -#define chIOWrite(ip, bp, n) ((ip)->vmt.m1->write(ip, bp, n)) +#define chIOWrite(ip, bp, n) ((ip)->vmt->m1.write(ip, bp, n)) /** * @brief Channel non-blocking read. @@ -205,7 +205,7 @@ typedef struct { * @param[in] n the maximum amount of data to be transferred * @return The number of bytes transferred. */ -#define chIORead(ip, bp, n) ((ip)->vmt.m1->read(ip, bp, n)) +#define chIORead(ip, bp, n) ((ip)->vmt->m1.read(ip, bp, n)) #endif /* CH_USE_EVENTS */ diff --git a/src/include/serial.h b/src/include/serial.h index 27ded730e..845c4bf9c 100644 --- a/src/include/serial.h +++ b/src/include/serial.h @@ -128,12 +128,12 @@ struct _full_duplex_driver_data { * Input queue, incoming data can be read from this input queue by * using the queues APIs. */ - InputQueue sd_iqueue; + InputQueue iqueue; /** * Output queue, outgoing data can be written to this output queue by * using the queues APIs. */ - OutputQueue sd_oqueue; + OutputQueue oqueue; }; /** @@ -169,7 +169,7 @@ typedef struct { /** * Virtual Methods Table. */ - struct _generic_serial_driver_vmt *vmt; + struct _full_duplex_driver_vmt *vmt; /** * @p BaseChannel class inherited data. */ @@ -186,33 +186,6 @@ typedef struct { * @p FullDuplexDriver specific data. */ struct _full_duplex_driver_data d3; -} FullDuplexDriver_; - -/** - * @brief Full Duplex Serial Driver main structure. - */ -typedef struct { - - /** Input queue. Incoming data can be read from this queue by using the - * queues APIs.*/ - InputQueue sd_iqueue; - /** Data Available @p EventSource. This event is generated when some incoming - * data is inserted in the Input @p Queue.*/ - EventSource sd_ievent; - - /** Output queue. Outgoing data can be written to this Output @p Queue by - * using the queues APIs.*/ - OutputQueue sd_oqueue; - /** Data Transmitted @p EventSource. This event is generated when the - * Output @p Queue is empty.*/ - EventSource sd_oevent; - - /** I/O driver status flags. This field should not be read directly but - * the @p chFDDGetAndClearFlags() funtion should be used instead.*/ - dflags_t sd_flags; - /** Status Change @p EventSource. This event is generated when a - * condition flag was changed.*/ - EventSource sd_sevent; } FullDuplexDriver; #ifdef __cplusplus diff --git a/test/test.c b/test/test.c index 3beb3e59a..79b2202ac 100644 --- a/test/test.c +++ b/test/test.c @@ -70,27 +70,27 @@ void test_printn(uint32_t n) { char buf[16], *p; if (!n) - chFDDPut(comp, '0'); + chIOPut(comp, '0'); else { p = buf; while (n) *p++ = (n % 10) + '0', n /= 10; while (p > buf) - chFDDPut(comp, *--p); + chIOPut(comp, *--p); } } void test_print(char *msgp) { while (*msgp) - chFDDPut(comp, *msgp++); + chIOPut(comp, *msgp++); } void test_println(char *msgp) { test_print(msgp); - chFDDPut(comp, '\r'); - chFDDPut(comp, '\n'); + chIOPut(comp, '\r'); + chIOPut(comp, '\n'); } /* @@ -105,7 +105,7 @@ static void print_tokens(void) { char *cp = tokens_buffer; while (cp < tokp) - chFDDPut(comp, *cp++); + chIOPut(comp, *cp++); } void test_emit_token(char token) { @@ -232,9 +232,9 @@ static void print_line(void) { unsigned i; for (i = 0; i < 76; i++) - chFDDPut(comp, '-'); - chFDDPut(comp, '\r'); - chFDDPut(comp, '\n'); + chIOPut(comp, '-'); + chIOPut(comp, '\r'); + chIOPut(comp, '\n'); } msg_t TestThread(void *p) { -- cgit v1.2.3