SerialPort.st
author Claus Gittinger <cg@exept.de>
Thu, 02 Feb 2006 17:46:12 +0100
changeset 1595 eb26b0dfa8f6
parent 1593 d6d284094d2d
child 1596 0296c521f18e
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
	      All Rights Reserved
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"{ Package: 'stx:libbasic2' }"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
NonPositionableExternalStream subclass:#SerialPort
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
    16
	instanceVariableNames:'portName baudRate stopBitsType parityType dataBits inFlowCtrlType
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
    17
		outFlowCtrlType xOnChar xOffChar'
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:'DefaultPortName'
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Streams-External'
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!SerialPort primitiveDefinitions!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
%{
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
#include "stxOSDefs.h"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
#ifdef WIN32
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
# undef __BEGIN_INTERRUPTABLE__
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
# undef __END_INTERRUPTABLE__
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
# define __BEGIN_INTERRUPTABLE__ ..
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
# define __END_INTERRUPTABLE__ ..
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
# define WRAP_STDIO
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
# define PORT_FROM_FD(fd)     (_get_osfhandle(fd))
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
# define closePort(port)      closeHandle(port)
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
# define SERIALPORT           HANDLE
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
#else /* not WIN32 */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
# define PORT_FROM_FD(fd)     (fd)
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
# define closePort(port)      close(port)
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
# define SERIALPORT           int
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
#endif /* WIN32 */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
# define PORT_FROM_FILE(f)             (PORT_FROM_FD(fileno(f)))
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
# define PORT_FROM_FILE_OBJECT(f)      (PORT_FROM_FILE(__FILEVal(f)))
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
#include <stdio.h>
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
#include <errno.h>
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
/*
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
 * on some systems errno is a macro ... check for it here
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
 */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
#ifndef errno
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
 extern errno;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
#endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
#ifdef USE_H_ERRNO
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
# ifndef h_errno
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
 extern h_errno;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
# endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
#endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
#ifdef DEBUG
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
# define DBGPRINTF(x)    { if (__debugging__) printf x; }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
# define DBGFPRINTF(x)   { if (__debugging__) fprintf x; }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
#else
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
# define DBGPRINTF(x)    /* as nothing */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
# define DBGFPRINTF(x)   /* as nothing */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
#endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
#ifndef TRUE
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
# define TRUE   1
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
#endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
#ifndef FALSE
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
# define FALSE  0
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
#endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
#ifndef WIN32
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
typedef int BOOL;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
#endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
%}
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
! !
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
!SerialPort primitiveVariables!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
%{
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
static int __debugging__ = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
%}
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
! !
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
!SerialPort class methodsFor:'documentation'!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
copyright
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
 COPYRIGHT (c) 2006 by eXept Software AG
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
	      All Rights Reserved
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
 This software is furnished under a license and may be used
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
 only in accordance with the terms of that license and with the
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
 inclusion of the above copyright notice.   This software may not
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
 be provided or otherwise made available to, or used by, any
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
 other person.  No title to or ownership of the software is
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
 hereby transferred.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
documentation
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    This class provides access to serial ports
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
examples
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    example (get help info from an nntp server):
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   121
                                                                        [exBegin]
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   122
    |serialPort|
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   123
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   124
    serialPort := SerialPort new setPortName:(SerialPort defaultPortName).
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   125
    serialPort open.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   126
    serialPort close.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   127
                                                                        [exEnd]
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
! !
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   131
!SerialPort class methodsFor:'instance creation'!
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   133
new
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   134
    "create a serial port"
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   136
    ^ super new buffered:false
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   137
!
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
portName:portName
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
   baudRate:baudRateOrNil stopBitsType:stopBitsTypeOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
   parityType:parityTypeOrNil dataBits:dataBitsOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
   inFlowCtrlType:inFlowCtrlTypeOrNil outFlowCtrlType:outFlowCtrlTypeOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
   xOnChar:xOnCharOrNil xOffChar:xOffCharOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    "arguments are self describing; nil values mean: leave setting as is"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
    ^ (self new
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
	setPortName:portName
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
	baudRate:baudRateOrNil stopBitsType:stopBitsTypeOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
	parityType:parityTypeOrNil dataBits:dataBitsOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
	inFlowCtrlType:inFlowCtrlTypeOrNil outFlowCtrlType:outFlowCtrlTypeOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
	xOnChar:xOnCharOrNil xOffChar:xOffCharOrNil) open
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
! !
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
!SerialPort class methodsFor:'debugging'!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
debug:aBoolean
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    "turn on/off internal debugprints.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
     This method is for ST/X debugging only and
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
     may  be removed in later versions"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
%{  /* NOCONTEXT */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    __debugging__ = (aBoolean == true);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
%}
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    "
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
     SerialPort debug:true
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
     SerialPort debug:false
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
    "
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
! !
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   172
!SerialPort class methodsFor:'defaults'!
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   173
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   174
defaultPortName
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   175
    DefaultPortName notNil ifTrue:[^ DefaultPortName ].
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   176
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   177
    OperatingSystem isMSDOSlike ifTrue:[
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   178
        ^ 'COM0'
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   179
    ].
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   180
    ^ '/dev/cua0'
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   181
! !
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   182
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
!SerialPort methodsFor:'accessing'!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   185
setBaudRate:baudRateOrNil
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   186
    baudRate := baudRateOrNil.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   187
!
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   188
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   189
setPortName:portNameArg
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   190
    portName := portNameArg.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   191
!
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   192
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
setPortName:portNameArg
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
	baudRate:baudRateOrNil stopBitsType:stopBitsTypeOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
	parityType:parityTypeOrNil dataBits:dataBitsOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
	inFlowCtrlType:inFlowCtrlTypeOrNil outFlowCtrlType:outFlowCtrlTypeOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
	xOnChar:xOnCharOrNil xOffChar:xOffCharOrNil
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
    portName := portNameArg.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    baudRate := baudRateOrNil.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
    stopBitsType := stopBitsTypeOrNil.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
    parityType := parityTypeOrNil.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    dataBits := dataBitsOrNil.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    inFlowCtrlType := inFlowCtrlTypeOrNil.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    outFlowCtrlType := outFlowCtrlTypeOrNil.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
    xOnChar := xOnCharOrNil.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    xOffChar := xOffCharOrNil.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
! !
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   210
!SerialPort methodsFor:'low level'!
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   211
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   212
baudRate:newRate
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   213
%{
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   214
    OBJ fp;
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   215
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   216
    fp = __INST(filePointer);
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   217
    if ((fp != nil) && __isSmallInteger(newRate)) {
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   218
	SERIALPORT port;
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   219
	int ret;
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   220
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   221
	port = PORT_FROM_FILE_OBJECT(fp);
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   222
#ifdef WIN32
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   223
	{
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   224
	    DCB dcb;
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   225
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   226
	    ZeroMemory(&dcb, sizeof(dcb));
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   227
	    dcb.DCBlength = sizeof(dcb);
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   228
	    GetCommState(port, &dcb);
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   229
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   230
	    dcb.BaudRate = __intVal(newRate);
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   231
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   232
	    if (! SetCommState(port, &dcb)) {
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   233
		RETURN(false);
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   234
	    }
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   235
	    RETURN(true);
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   236
	}
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   237
# else /* ! WIN32 */
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   238
	/* add code for unix ioctl here ... */
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   239
# endif /* WIN32 */
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   240
    }
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   241
%}.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   242
    self primitiveFailed.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   243
! !
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   244
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
!SerialPort protectedMethodsFor:'low level'!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
closeFile
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
    "low level close"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
%{
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
    OBJ t;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
    t = __INST(filePointer);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
    if (t != nil) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
	FILE *fp;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
	SERIALPORT port;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
	__INST(filePointer) = nil;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
	fp = __FILEVal(t);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
	port = PORT_FROM_FILE(fp);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
# ifdef xxDO_WRAP_CALLS
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
	{ int ret;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
	  do {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
	    __threadErrno = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
	    ret = STX_C_CALL1("fclose", fclose, fp);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
	  } while ((ret < 0) && (__threadErrno == EINTR));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
#  ifdef WIN32
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
	  do {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
	    __threadErrno = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
	    ret = STX_WSA_CALL1("CloseHandle", CloseHandle, port);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
	  } while ((ret < 0) && (__threadErrno == EINTR));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
	  CloseHandle(port);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
#  endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
	}
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
# else /* !DO_WRAP_CALLS */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
	fclose(fp);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
#  ifdef WIN32
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
	CloseHandle(port);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
#  endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
# endif /* !DO_WRAP_CALLS */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
%}
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
! !
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
!SerialPort methodsFor:'opening'!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
open
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
    |errorNumber|
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
    filePointer notNil ifTrue:[
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
	^ self errorAlreadyOpen
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
    ].
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
%{
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
    FILE *fp;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
    SERIALPORT port;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
    char *__portName;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
    int __setBaudRate = 1,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
	__setDataBits = 1,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
	__setXOnChar = 1,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
	__setXOffChar = 1,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
	__setInFlowCtrl = 1,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
	__setOutFlowCtrl = 1,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
	__setStopBits = 1,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
	__setParityType = 1;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
    int __baudRate, __dataBits;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
    int __xOnChar, __xOffChar;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
    int __inFlowCtrl, __outFlowCtrl;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    int __stopBits, __parityType;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
#ifdef WIN32
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
    COMMTIMEOUTS timeouts;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
    DCB dcb;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
#endif /* WIN32 */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
#   define XONOFF    1
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
#   define HARDWARE  2
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
#   define STOP1     1
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
#   define STOP2     2
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
#   define STOP1_5   3
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
#   define ODD       1
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
#   define EVEN      2
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
#   define NONE      3
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
    if (__isString(__INST(portName))) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
	__portName = __stringVal(__INST(portName));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    } else {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
    if (__isSmallInteger(__INST(baudRate))) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
	__baudRate = __intVal(__INST(baudRate));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
    } else if (__INST(baudRate) == nil) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
	__setBaudRate = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
    } else {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
    if (__isSmallInteger(__INST(dataBits))) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
	__dataBits = __intVal(__INST(dataBits));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
    } else if (__INST(dataBits == nil)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
	__setDataBits = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
    } else {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
    if (__isSmallInteger(__INST(xOnChar))) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
	__xOnChar = __intVal(__INST(xOnChar));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
    } else if (__isCharacter(__INST(xOnChar))) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
	__xOnChar = __intVal(_characterVal(__INST(xOnChar)));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
    } else if (__INST(xOnChar) == nil) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
	__setXOnChar = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
    } else {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
    if (__isSmallInteger(__INST(xOffChar))) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
	__xOffChar = __intVal(__INST(xOffChar));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
    } else if (__isCharacter(__INST(xOffChar))) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
	__xOffChar = __intVal(__characterVal(__INST(xOffChar)));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
    } else if (__INST(xOffChar) == nil) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
	__setXOffChar = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
    } else {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
    if (__INST(inFlowCtrlType) == @symbol(xOnOff)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
	__inFlowCtrl = XONOFF;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
    } else if (__INST(inFlowCtrlType) == @symbol(hardware)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
	__inFlowCtrl = HARDWARE;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
    } else if (__INST(inFlowCtrlType) == nil) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
	__setInFlowCtrl = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
    } else {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
    if (__INST(outFlowCtrlType) == @symbol(xOnOff)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
	__outFlowCtrl = XONOFF;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
    } else if (__INST(outFlowCtrlType) == @symbol(hardware)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
	__outFlowCtrl = HARDWARE;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
    } else if (__INST(outFlowCtrlType) == nil) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
	__setOutFlowCtrl = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
    } else {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
    if (__INST(stopBitsType) == @symbol(stop1)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
	__stopBits = STOP1;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
    } else if (__INST(stopBitsType) == @symbol(stop2)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
	__stopBits = STOP2;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
    } else if (__INST(stopBitsType) == @symbol(stop1_5)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
	__stopBits = STOP1_5;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
    } else if (__INST(stopBitsType) == nil) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
	__setStopBits = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
    } else {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
#ifdef WIN32
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
    port = CreateFile(__portName,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
	      GENERIC_READ | GENERIC_WRITE,
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
	      0,             /* comm devices must be opened with exclusive access */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
	      NULL,          /* no security attrs */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
	      OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
	      0,             /* no overlapped I/O */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
	      NULL           /* hTemplate must be NULL for comm devices */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
	   );
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
    if (port == INVALID_HANDLE_VALUE) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
	fprintf(stderr, "Win32OS [info]: serial port open failed\n");
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
	errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) );
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
	goto failure;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
    /* Flush the driver */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
    PurgeComm( port, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
    /* Set driver buffer sizes */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
    SetupComm( port, 4096 /*SERIAL_IN_QUEUE_SIZE*/, 4096 /*SERIAL_OUT_QUEUE_SIZE*/);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
    /* Reset timeout constants */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    timeouts.ReadIntervalTimeout= 0xFFFFFFFF;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
    timeouts.ReadTotalTimeoutMultiplier = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
    timeouts.ReadTotalTimeoutConstant = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
    timeouts.WriteTotalTimeoutMultiplier = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
    timeouts.WriteTotalTimeoutConstant = 0;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
    SetCommTimeouts( port, &timeouts );
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
    /* Set communication parameters */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
    ZeroMemory(&dcb, sizeof(dcb));
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
    dcb.DCBlength = sizeof(dcb);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
    GetCommState(port, &dcb);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
    if (__setBaudRate) dcb.BaudRate = __baudRate;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
    if (__setDataBits) dcb.ByteSize = __dataBits;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
    if (__setXOnChar)  dcb.XonChar = __xOnChar;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
    if (__setXOffChar) dcb.XoffChar = __xOffChar;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
    if (__setStopBits) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
	/* set stop bits */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
	switch(__stopBits) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
	    case STOP1_5: dcb.StopBits = 1; break; /* 1.5 stop bits */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
	    case STOP1: dcb.StopBits = 0; break; /* 1 stop bit */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
	    case STOP2: dcb.StopBits = 2; break; /* 2 stop bits */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
	    default: goto errExit;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
	}
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
    if (__setParityType) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
	/* set parity */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
	switch(__parityType) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
	    case NONE: dcb.Parity = NOPARITY; break;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
	    case ODD: dcb.Parity = ODDPARITY; break;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
	    case EVEN: dcb.Parity = EVENPARITY; break;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
	    default: goto errExit;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
	}
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
    if (__setInFlowCtrl) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
	/* set control flow */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
	dcb.fInX = FALSE;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
	dcb.fDtrControl = FALSE;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
	if (__inFlowCtrl == XONOFF) dcb.fInX = TRUE;  /* XOn/XOff handshaking */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
	if (__inFlowCtrl == HARDWARE) dcb.fDtrControl = TRUE;  /* hardware handshaking */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
    if (__setOutFlowCtrl) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
	dcb.fOutX = FALSE;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
	dcb.fOutxCtsFlow = FALSE;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
	if (__outFlowCtrl == XONOFF) dcb.fOutX = TRUE;  /* XOn/XOff handshaking */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
	if (__outFlowCtrl == HARDWARE) dcb.fOutxCtsFlow = TRUE;  /* hardware handshaking */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
    if (! SetCommState(port, &dcb)) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
	fprintf(stderr, "Win32OS [info]: serial port comm-setup failed\n");
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
	errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) );
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
	goto errExit;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
# endif /* WIN32 */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
    /*
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
     * make it a FILE *
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
     */
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
# ifdef WIN32
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
    {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
	int _fd = _open_osfhandle(port, 0);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
	fp = fdopen(_fd, "r+");
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
# else
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
    fp = fdopen(port, "r+");
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
# endif
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
    if (! fp) {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
	errorNumber = __MKSMALLINT(errno);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
	goto errExit;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
    {
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
	OBJ t;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
	t = __MKOBJ(fp);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
	__INST(filePointer) = t;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
	__STORE(self, t);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
    }
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
	RETURN( true );
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
errExit: ;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
    CloseHandle(port);
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
failure: ;
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
#   undef XONOFF
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
#   undef HARDWARE
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
#   undef STOP1
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
#   undef STOP2
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
#   undef STOP1_5
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
#   undef ODD
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
#   undef EVEN
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
#   undef NONE
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
%}.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
    "all ok?"
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
    filePointer notNil ifTrue:[
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
	Lobby register:self.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
    ] ifFalse:[
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
	errorNumber isNil ifTrue:[
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
	    self error:'invalid argument(s)'.
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
	] ifFalse:[
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
	    (OperatingSystem errorHolderForNumber:errorNumber) reportError
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
	].
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
    ].
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
! !
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   536
!SerialPort methodsFor:'printing & storing'!
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   537
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   538
printOn:aStream
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   539
    aStream nextPutAll:'SerialPort(baudRate='.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   540
    baudRate printOn:aStream.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   541
    aStream nextPutAll:')'.
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   542
! !
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   543
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   544
!SerialPort methodsFor:'queries'!
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   545
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   546
getName
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   547
    "return the name; here, we return the devices name"
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   548
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   549
    ^ portName
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   550
! !
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   551
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
!SerialPort class methodsFor:'documentation'!
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
version
1595
eb26b0dfa8f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1593
diff changeset
   555
    ^ '$Header: /cvs/stx/stx/libbasic2/SerialPort.st,v 1.2 2006-02-02 16:46:12 cg Exp $'
1593
d6d284094d2d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
! !