SerialPort.st
changeset 2321 6f4cc7b644db
parent 2020 f47ac2710db3
child 2419 8ea9b41e7b4b
--- a/SerialPort.st	Tue Oct 27 13:19:01 2009 +0100
+++ b/SerialPort.st	Wed Oct 28 21:59:16 2009 +0100
@@ -228,18 +228,18 @@
 
 setPortName:portNameArg
     (portNameArg startsWith:'C') ifTrue:[
-        "/ add special port name to support COM ports > 9
-        portName := '\\.\', portNameArg.
-        ^ self
+	"/ add special port name to support COM ports > 9
+	portName := '\\.\', portNameArg.
+	^ self
     ].
     portName := portNameArg.
 !
 
 setPortName:portNameArg
-        baudRate:baudRateOrNil stopBitsType:stopBitsTypeOrNil
-        parityType:parityTypeOrNil dataBits:dataBitsOrNil
-        inFlowCtrlType:inFlowCtrlTypeOrNil outFlowCtrlType:outFlowCtrlTypeOrNil
-        xOnChar:xOnCharOrNil xOffChar:xOffCharOrNil
+	baudRate:baudRateOrNil stopBitsType:stopBitsTypeOrNil
+	parityType:parityTypeOrNil dataBits:dataBitsOrNil
+	inFlowCtrlType:inFlowCtrlTypeOrNil outFlowCtrlType:outFlowCtrlTypeOrNil
+	xOnChar:xOnCharOrNil xOffChar:xOffCharOrNil
 
     self setPortName:portNameArg.
     baudRate := baudRateOrNil.
@@ -259,7 +259,7 @@
 !SerialPort methodsFor:'low level'!
 
 baudRate:newRate
-    filePointer isNil ifTrue:[
+    handle isNil ifTrue:[
 	"not open"
 	baudRate := newRate.
 	^ self
@@ -267,7 +267,7 @@
 %{
     OBJ fp;
 
-    fp = __INST(filePointer);
+    fp = __INST(handle);
     if (__isSmallInteger(newRate)) {
 	SERIALPORT port;
 	int ret;
@@ -305,12 +305,12 @@
 %{
     OBJ t;
 
-    t = __INST(filePointer);
+    t = __INST(handle);
     if (t != nil) {
 	FILE *fp;
 	SERIALPORT port;
 
-	__INST(filePointer) = nil;
+	__INST(handle) = nil;
 	fp = __FILEVal(t);
 	port = PORT_FROM_FILE(fp);
 
@@ -347,21 +347,21 @@
 open
     |errorSymbol errorNumber|
 
-    filePointer notNil ifTrue:[
-        ^ self errorAlreadyOpen
+    handle notNil ifTrue:[
+	^ self errorAlreadyOpen
     ].
 %{
     FILE *fp;
     SERIALPORT port;
     char *__portName;
     int __setBaudRate = 1,
-        __setDataBits = 1,
-        __setXOnChar = 1,
-        __setXOffChar = 1,
-        __setInFlowCtrl = 1,
-        __setOutFlowCtrl = 1,
-        __setStopBits = 1,
-        __setParityType = 1;
+	__setDataBits = 1,
+	__setXOnChar = 1,
+	__setXOffChar = 1,
+	__setInFlowCtrl = 1,
+	__setOutFlowCtrl = 1,
+	__setStopBits = 1,
+	__setParityType = 1;
     int __baudRate, __dataBits;
     int __xOnChar, __xOffChar;
     int __inFlowCtrl, __outFlowCtrl;
@@ -382,119 +382,119 @@
 #   define PARITY_NONE    3
 
     if (__isString(__INST(portName))) {
-        __portName = __stringVal(__INST(portName));
+	__portName = __stringVal(__INST(portName));
     } else {
-        errorSymbol = @symbol(portName);
-        goto getOutOfhere;
+	errorSymbol = @symbol(portName);
+	goto getOutOfhere;
     }
 
     if (__isSmallInteger(__INST(baudRate))) {
-        __baudRate = __intVal(__INST(baudRate));
+	__baudRate = __intVal(__INST(baudRate));
     } else if (__INST(baudRate) == nil) {
-        __setBaudRate = 0;
+	__setBaudRate = 0;
     } else {
-        errorSymbol = @symbol(baudRate);
-        goto getOutOfhere;
+	errorSymbol = @symbol(baudRate);
+	goto getOutOfhere;
     }
 
     if (__isSmallInteger(__INST(dataBits))) {
-        __dataBits = __intVal(__INST(dataBits));
+	__dataBits = __intVal(__INST(dataBits));
     } else if (__INST(dataBits) == nil) {
-        __setDataBits = 0;
+	__setDataBits = 0;
     } else {
-        errorSymbol = @symbol(dataBits);
-        goto getOutOfhere;
+	errorSymbol = @symbol(dataBits);
+	goto getOutOfhere;
     }
 
     if (__isSmallInteger(__INST(xOnChar))) {
-        __xOnChar = __intVal(__INST(xOnChar));
+	__xOnChar = __intVal(__INST(xOnChar));
     } else if (__isCharacter(__INST(xOnChar))) {
-        __xOnChar = __intVal(_characterVal(__INST(xOnChar)));
+	__xOnChar = __intVal(_characterVal(__INST(xOnChar)));
     } else if (__INST(xOnChar) == nil) {
-        __setXOnChar = 0;
+	__setXOnChar = 0;
     } else {
-        errorSymbol = @symbol(xOnChar);
-        goto getOutOfhere;
+	errorSymbol = @symbol(xOnChar);
+	goto getOutOfhere;
     }
 
     if (__isSmallInteger(__INST(xOffChar))) {
-        __xOffChar = __intVal(__INST(xOffChar));
+	__xOffChar = __intVal(__INST(xOffChar));
     } else if (__isCharacter(__INST(xOffChar))) {
-        __xOffChar = __intVal(__characterVal(__INST(xOffChar)));
+	__xOffChar = __intVal(__characterVal(__INST(xOffChar)));
     } else if (__INST(xOffChar) == nil) {
-        __setXOffChar = 0;
+	__setXOffChar = 0;
     } else {
-        errorSymbol = @symbol(xOffChar);
-        goto getOutOfhere;
+	errorSymbol = @symbol(xOffChar);
+	goto getOutOfhere;
     }
 
     if (__INST(inFlowCtrlType) == @symbol(xOnOff)) {
-        __inFlowCtrl = FLOW_XONOFF;
+	__inFlowCtrl = FLOW_XONOFF;
     } else if (__INST(inFlowCtrlType) == @symbol(hardware)) {
-        __inFlowCtrl = FLOW_HARDWARE;
+	__inFlowCtrl = FLOW_HARDWARE;
     } else if (__INST(inFlowCtrlType) == @symbol(none)) {
-        __inFlowCtrl = FLOW_NONE;
+	__inFlowCtrl = FLOW_NONE;
     } else if (__INST(inFlowCtrlType) == nil) {
-        __setInFlowCtrl = 0;
+	__setInFlowCtrl = 0;
     } else {
-        errorSymbol = @symbol(inFlowCtrlType);
-        goto getOutOfhere;
+	errorSymbol = @symbol(inFlowCtrlType);
+	goto getOutOfhere;
     }
 
     if (__INST(outFlowCtrlType) == @symbol(xOnOff)) {
-        __outFlowCtrl = FLOW_XONOFF;
+	__outFlowCtrl = FLOW_XONOFF;
     } else if (__INST(outFlowCtrlType) == @symbol(hardware)) {
-        __outFlowCtrl = FLOW_HARDWARE;
+	__outFlowCtrl = FLOW_HARDWARE;
     } else if (__INST(outFlowCtrlType) == @symbol(none)) {
-        __outFlowCtrl = FLOW_NONE;
+	__outFlowCtrl = FLOW_NONE;
     } else if (__INST(outFlowCtrlType) == nil) {
-        __setOutFlowCtrl = 0;
+	__setOutFlowCtrl = 0;
     } else {
-        errorSymbol = @symbol(outFlowCtrlType);
-        goto getOutOfhere;
+	errorSymbol = @symbol(outFlowCtrlType);
+	goto getOutOfhere;
     }
 
     if (__INST(stopBitsType) == @symbol(stop1)) {
-        __stopBits = STOP_1;
+	__stopBits = STOP_1;
     } else if (__INST(stopBitsType) == @symbol(stop2)) {
-        __stopBits = STOP_2;
+	__stopBits = STOP_2;
     } else if (__INST(stopBitsType) == @symbol(stop1_5)) {
-        __stopBits = STOP_1_5;
+	__stopBits = STOP_1_5;
     } else if (__INST(stopBitsType) == nil) {
-        __setStopBits = 0;
+	__setStopBits = 0;
     } else {
-        errorSymbol = @symbol(stopBitsType);
-        goto getOutOfhere;
+	errorSymbol = @symbol(stopBitsType);
+	goto getOutOfhere;
     }
 
     if (__INST(parityType) == @symbol(odd)) {
-        __parityType = PARITY_ODD;
+	__parityType = PARITY_ODD;
     } else if (__INST(parityType) == @symbol(even)) {
-        __parityType = PARITY_EVEN;
+	__parityType = PARITY_EVEN;
     } else if (__INST(parityType) == @symbol(none)) {
-        __parityType = PARITY_NONE;
+	__parityType = PARITY_NONE;
     } else if (__INST(parityType) == nil) {
-        __setParityType = 0;
+	__setParityType = 0;
     } else {
-        errorSymbol = @symbol(parityType);
-        goto getOutOfhere;
+	errorSymbol = @symbol(parityType);
+	goto getOutOfhere;
     }
 
 #ifdef WIN32
     port = CreateFile(__portName,
-              GENERIC_READ | GENERIC_WRITE,
-              0,             /* comm devices must be opened with exclusive access */
-              NULL,          /* no security attrs */
-              OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
-              0,             /* no overlapped I/O */
-              NULL           /* hTemplate must be NULL for comm devices */
-           );
+	      GENERIC_READ | GENERIC_WRITE,
+	      0,             /* comm devices must be opened with exclusive access */
+	      NULL,          /* no security attrs */
+	      OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
+	      0,             /* no overlapped I/O */
+	      NULL           /* hTemplate must be NULL for comm devices */
+	   );
 
     if (port == INVALID_HANDLE_VALUE) {
-        console_fprintf(stderr, "Win32OS [info]: serial port open failed\n");
-        errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) );
-        errorSymbol = @symbol(openFailed);
-        goto getOutOfhere;
+	console_fprintf(stderr, "Win32OS [info]: serial port open failed\n");
+	errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) );
+	errorSymbol = @symbol(openFailed);
+	goto getOutOfhere;
     }
 
     /* Flush the driver */
@@ -522,48 +522,48 @@
     if (__setXOffChar) dcb.XoffChar = __xOffChar;
 
     if (__setStopBits) {
-        /* set stop bits */
-        switch(__stopBits) {
-            case STOP_1_5: dcb.StopBits = 1; break; /* 1.5 stop bits */
-            case STOP_1: dcb.StopBits = 0; break; /* 1 stop bit */
-            case STOP_2: dcb.StopBits = 2; break; /* 2 stop bits */
-            default:
-                errorSymbol = @symbol(stopBits);
-                goto errExit;
-        }
+	/* set stop bits */
+	switch(__stopBits) {
+	    case STOP_1_5: dcb.StopBits = 1; break; /* 1.5 stop bits */
+	    case STOP_1: dcb.StopBits = 0; break; /* 1 stop bit */
+	    case STOP_2: dcb.StopBits = 2; break; /* 2 stop bits */
+	    default:
+		errorSymbol = @symbol(stopBits);
+		goto errExit;
+	}
     }
 
     if (__setParityType) {
-        /* set parity */
-        switch(__parityType) {
-            case PARITY_NONE: dcb.Parity = NOPARITY; break;
-            case PARITY_ODD: dcb.Parity = ODDPARITY; break;
-            case PARITY_EVEN: dcb.Parity = EVENPARITY; break;
-            default:
-                errorSymbol = @symbol(parityType);
-                goto errExit;
-        }
+	/* set parity */
+	switch(__parityType) {
+	    case PARITY_NONE: dcb.Parity = NOPARITY; break;
+	    case PARITY_ODD: dcb.Parity = ODDPARITY; break;
+	    case PARITY_EVEN: dcb.Parity = EVENPARITY; break;
+	    default:
+		errorSymbol = @symbol(parityType);
+		goto errExit;
+	}
     }
 
     if (__setInFlowCtrl) {
-        /* set control flow */
-        dcb.fInX = FALSE;
-        dcb.fDtrControl = FALSE;
-        if (__inFlowCtrl == FLOW_XONOFF) dcb.fInX = TRUE;  /* XOn/XOff handshaking */
-        if (__inFlowCtrl == FLOW_HARDWARE) dcb.fDtrControl = TRUE;  /* hardware handshaking */
+	/* set control flow */
+	dcb.fInX = FALSE;
+	dcb.fDtrControl = FALSE;
+	if (__inFlowCtrl == FLOW_XONOFF) dcb.fInX = TRUE;  /* XOn/XOff handshaking */
+	if (__inFlowCtrl == FLOW_HARDWARE) dcb.fDtrControl = TRUE;  /* hardware handshaking */
     }
     if (__setOutFlowCtrl) {
-        dcb.fOutX = FALSE;
-        dcb.fOutxCtsFlow = FALSE;
+	dcb.fOutX = FALSE;
+	dcb.fOutxCtsFlow = FALSE;
 
-        if (__outFlowCtrl == FLOW_XONOFF) dcb.fOutX = TRUE;  /* XOn/XOff handshaking */
-        if (__outFlowCtrl == FLOW_HARDWARE) dcb.fOutxCtsFlow = TRUE;  /* hardware handshaking */
+	if (__outFlowCtrl == FLOW_XONOFF) dcb.fOutX = TRUE;  /* XOn/XOff handshaking */
+	if (__outFlowCtrl == FLOW_HARDWARE) dcb.fOutxCtsFlow = TRUE;  /* hardware handshaking */
     }
 
     if (! SetCommState(port, &dcb)) {
-        console_fprintf(stderr, "Win32OS [info]: serial port comm-setup failed\n");
-        errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) );
-        goto errExit;
+	console_fprintf(stderr, "Win32OS [info]: serial port comm-setup failed\n");
+	errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) );
+	goto errExit;
     }
 # endif /* WIN32 */
 
@@ -572,26 +572,26 @@
      */
 # ifdef WIN32
     {
-        int _fd = _open_osfhandle(port, 0);
-        fp = fdopen(_fd, "r+");
+	int _fd = _open_osfhandle(port, 0);
+	fp = fdopen(_fd, "r+");
     }
 # else
     fp = fdopen(port, "r+");
 # endif
     if (! fp) {
-        console_fprintf(stderr, "Win32OS [info]: fdopen failed\n");
-        errorNumber = __MKSMALLINT(errno);
+	console_fprintf(stderr, "Win32OS [info]: fdopen failed\n");
+	errorNumber = __MKSMALLINT(errno);
     errExit: ;
-        CloseHandle(port);
-        goto getOutOfhere;
+	CloseHandle(port);
+	goto getOutOfhere;
     }
 
     {
-        OBJ t;
+	OBJ t;
 
-        t = __MKOBJ(fp);
-        __INST(filePointer) = t;
-        __STORE(self, t);
+	t = __MKOBJ(fp);
+	__INST(handle) = t;
+	__STORE(self, t);
     }
 
 getOutOfhere: ;
@@ -607,14 +607,14 @@
 
 %}.
     "all ok?"
-    filePointer notNil ifTrue:[
-        Lobby register:self.
+    handle notNil ifTrue:[
+	Lobby register:self.
     ] ifFalse:[
-        errorNumber isNil ifTrue:[
-            self error:'invalid argument(s)'.
-        ] ifFalse:[
-            ((OperatingSystem errorHolderForNumber:errorNumber) parameter:portName) reportError
-        ].
+	errorNumber isNil ifTrue:[
+	    self error:'invalid argument(s)'.
+	] ifFalse:[
+	    ((OperatingSystem errorHolderForNumber:errorNumber) parameter:portName) reportError
+	].
     ].
 
     "Modified: / 12-02-2007 / 12:29:57 / cg"
@@ -641,5 +641,5 @@
 !SerialPort class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic2/SerialPort.st,v 1.10 2008-07-04 15:32:26 ab Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic2/SerialPort.st,v 1.11 2009-10-28 20:59:16 cg Exp $'
 ! !