Add serial_put() and serial_init()

This commit is contained in:
Laurent Vivier
2004-06-22 22:05:24 +00:00
parent 6f2e5fe02a
commit a20db820ef
2 changed files with 68 additions and 9 deletions

View File

@@ -9,6 +9,14 @@
#include "misc.h" #include "misc.h"
#include "glue.h" #include "glue.h"
#include "head.h"
#define BUFFER_LEN 80
static short refnum0;
static short refnum1;
static char buffer[256];
static int buff_len;
/* /*
* Technical Note TN1119 "Serial Port Apocrypha" * Technical Note TN1119 "Serial Port Apocrypha"
@@ -25,15 +33,6 @@
* *
*/ */
/*
*
* ".AOut" Serial port A (modem) output
* ".AIn" Serial port A (modem) input
* ".BOut" Serial port B (printer) output
* ".BIn" Serial port B (printer) input
*
*/
OSErr OpenDriver(ConstStr255Param name, short *drvrRefNum) OSErr OpenDriver(ConstStr255Param name, short *drvrRefNum)
{ {
OSErr err; OSErr err;
@@ -69,6 +68,15 @@ OSErr CloseDriver(short refNum)
return param.ioResult; return param.ioResult;
} }
/*
*
* ".AOut" Serial port A (modem) output
* ".AIn" Serial port A (modem) input
* ".BOut" Serial port B (printer) output
* ".BIn" Serial port B (printer) input
*
*/
int setserial(short refNum, unsigned int bitrate, unsigned int datasize, int setserial(short refNum, unsigned int bitrate, unsigned int datasize,
int parity, int stopbits) int parity, int stopbits)
{ {
@@ -224,3 +232,48 @@ ssize_t write(int fd, const void *buf, size_t count)
return param.ioActCount; return param.ioActCount;
} }
void serial_put(char c)
{
buffer[buff_len++] = c;
if ( c == '\n' )
{
/* add '\r' and flush buffer */
buffer[buff_len++] = '\r';
goto flush;
}
/* if buffer is full (BUFFER_LEN - 1), flush it
* we take BUFFER_LEN - 1 to have enough room
* if we need to add '\r' on '\n'
*/
if (buff_len == BUFFER_LEN - 1)
goto flush;
return;
flush:
write(refnum0, buffer, buff_len);
buff_len = 0;
}
void serial_init(emile_l2_header_t* info)
{
int res;
res = OpenDriver(c2pstring(".AOut"), &refnum0);
res = setserial(refnum0, info->serial0_bitrate,
info->serial0_datasize,
info->serial0_parity,
info->serial0_stopbits);
res = OpenDriver(c2pstring(".BOut"), &refnum1);
res = setserial(refnum0, info->serial1_bitrate,
info->serial1_datasize,
info->serial1_parity,
info->serial1_stopbits);
buff_len = 0;
}

View File

@@ -4,8 +4,14 @@
* *
*/ */
#include "glue.h"
#include "head.h"
OSErr OpenDriver(ConstStr255Param name, short *drvrRefNum); OSErr OpenDriver(ConstStr255Param name, short *drvrRefNum);
OSErr CloseDriver(short refNum); OSErr CloseDriver(short refNum);
extern int setserial(short refNum, unsigned int bitrate, unsigned int datasize, extern int setserial(short refNum, unsigned int bitrate, unsigned int datasize,
int parity, int stopbits); int parity, int stopbits);
extern void serial_put(char c);
extern void serial_init(emile_l2_header_t* info);