This is LGDSerialPort.rtf in view mode; [Download] [Up]
Library Documentation, Copyright © 1993 Looking Glass Design, Inc.
LGDCommunicationKit Release 1.0 (prerelease)
Project Manager: Paul Girone
Written by: Mike Gobbi, June 22/1993 (5:09 pm)
$Revision: 1.3 $
LGDSerialPort
Inherits From: Object
Conforms To: LGDBasicPortProtocol
Declared In: LGDSerialPort.h
Class Description
The LGDSerialPort provides a convenient way to access the serial ports through NeXTStep. This object does not depend on the AppKit, and may be used in programs which do not have a GUI or an instance of the Application object.
Basic Operations
For most uses of the serial port, all that will be necessary to do will be to open it, read and write to it, and then close it. The eight methods commonly used are
- openAndLockDevice:mode:timeout:
- unlockAndClose
- sendString:
- getString:max:
- sendBlock:size:all:
- getBlock:size:all:
- status
- statusString
Example:
{
id port = [[LGDSerialPort alloc] init];
char buffer[20];
if ([port openAndLockDevice:"cufa"
mode:LGD_SP_COOKED] timout:1) {
[port sendString:"atdt123-4567"];
while (0>=[port getString:buffer max:20]) {
if (!strcmp(buffer, "login:"))
break;
else
[port sendString:""];
}
[port sendString:"myUsername"];
while (0==[port getString:buffer max:20]);
[port sendString:"myPassword"];
...
[port sendString:"exit"];
}
if ([port status]) {
NXRunAlertPanel("Port error", "%s",
NULL, NULL, NULL,
[port statusString]);
}
[port unlockAndClose];
[port free];
}
Serial Devices
Unix has several standard serial devices, all of which eventually pass through one of two serial ports (ports A and B). Even if a device is free, it may be unable to be opened because another device is using the serial port. The standard serial devices in the NeXTstep environment are summarized below:
ttya ttyb Used for incoming connections from directly connected terminals without flow control.
ttyfa ttyfb Used for incoming connections from directly connected terminals with flow control.
ttyda ttydb Used for incoming connections from modems.
ttydfa ttydfb Used by systems whose hardware supports RTS/CTS flow control (68040 and later) for incoming connections from modems.
cua cub Used for outgoing connections to modems.
cufa cufb Used by systems whose hardware supports RTS/CTS flow control (68040 and later) for outgoing connections to modems.
Common misunderstandings
It is important to realize that all port settings must be understood from the perspective of the entity sending data in through the port. In particular, setting full duplex (echo) mode will often cause a feedback loop as you send a character, the modem automatically echos it, the device echos it back to the modem, which echos it, ad infinitum.
The word flush has a slightly different meaning with serial ports than with display devices. To flush a window server is to block until the server has finished executing all the instructions in its queue, but to flush a serial device is to discard all the information in the queue. The end result (an empty queue) is the same, but the mechanism is quite different.
Permissions
The serial devices are generally protected against unauthorized write operations. In order for your application to use these devices, it will be necessary to have write permission added to the devices, or to set up the application to run as setuid (usually user uucp group wheel). Both of these tasks will have to be performed by the system administrator. See IntroLGDCommunicationKit.rtf for a further discussion of file permissions.
Instance Variables
int status;
NXAtom device;
int descriptor;
int discipline;
struct sgttyb sgttyb;
struct tchars tchars;
unsigned short lmode;
struct ltchars ltchars;
struct winsize winsize;
struct __spFlags1 {
unsigned autoSet:1;
unsigned autoGet:1;
} spFlags1;
struct __spFlags2 {
unsigned locked:1;
unsigned open:1;
} spFlags2;
status Current error status.
device Current device.
descriptor File descriptor for current device (if open).
discipline Unix flag.
sgttyb Unix flags.
tchars Unix flags.
lmode Unix flags.
ltchars Unix flags.
winsize Unix flags.
spFlags1.autoSet Whether to change port settings whenever a set¼ method is invoked.
spFlags1.autoGet Whether to query port settings whenever a get¼ method is invoked.
spFlags2.locked Whether the current device is locked.
spFlags2.open Whether the current device is open.
Adopted Protocols
LGDBasicPortProtocol - baudRate
- continue
- CRMassage
- dataAvailable
- discipline
- flushInput
- flushOutput
- getBlock:size:all:
- isDeviceAvailable:
- isOpen
- lowerBreak
- lowerDTR
- mode
- openAndLockDevice:mode:timeout:
- parity
- pause
- raiseBreak
- raiseDTR
- sendBlock:size:all:
- setBaudRate:
- setCRMassage:
- setDiscipline:
- setDuplex:
- setMode:
- setParity:
- unlockAndClose
Method Types
Factory methods - init
- copyFromZone:
- free
Device information + getLockFile:forDevice:
+ writeLockFileContents:forDevice:
+ getDeviceFile:forDevice:
Connecting - isDeviceAvailable:
- setDevice:
- device
- lock
- unlock
- open
- openWithTimeout:
- close
- openAndLockDevice:mode:timeout:
- unlockAndClose
- isOpen
- isLocked
- _fileDescriptor
Communication - sendCharacter:
- sendString:
- sendString:withTrailer:
- sendBlock:size:all:
- getCharacter:
- getString:max:
- getString:max:termChars:
- getBlock:size:all:
Signals - raiseBreak
- lowerBreak
- sendBreak
- raiseDTR
- lowerDTR
- sendDisconnect
- pause
- continue
Data buffers - dataAvailable
- flushInput
- flushOutput
- flush
Error status - clearStatus
- status
- statusString
Modifying states en masse - applySgttyb:
- applyTchars:
- applyLmode:
- applyLtchars:
- applyWinsize:
- fetchSgttyb:
- fetchTchars:
- fetchLmode:
- fetchLtchars:
- fetchWinsize:
- applySettings
- fetchSettings
- applySettings::::::
- fetchSettings::::::
Automating state changes - setAutoSetEnabled:
- setAutoGetEnabled:
- autoSetEnabled
- autoGetEnabled
Modifying states individually - setDiscipline:
- setBaudRate:
- setNumericBaudRate:
- setParity:
- setCRMassage:
- setDuplex:
- setMode:
- discipline
- baudRate
- numericBaudRate
- parity
- CRMassage
- mode
Archiving - write:
- read:
Class Methods
getDeviceFile:forDevice:
+ (const char *)getDeviceFile:(char *)buffer
forDevice:(const char *)device
Stores the full pathname of device in buffer, which is assumed to have room for at least MAXPATHLEN+1 characters. Returns buffer.
By default, this method prepends ª/dev/º onto device to get the path, but this method may be overridden by subclasses to provide different behaviour.
See also: - openWithTimout:, - openAndLockDevice:mode:timeout:
getLockFile:forDevice:
+ (const char *)getLockFile:(char *)buffer forDevice:(const char *)device
Stores the full pathname of the lock file for device in buffer, which is assumed to have room for at least MAXPATHLEN+1 characters. Returns buffer.
By default, this method prepends ª/usr/spool/uucp/LCK/LCK..º onto device to get the path, but this method may be overridden by subclasses to provide different behaviour.
See also: - lock, - openAndLockDevice:mode:timeout:
writeLockFileContents:forDevice:
+ (int)writeLockFileContents:(int)fileDescriptor
forDevice:(const char *)device
Writes the lock file contents to the file identified by fileDescriptor and returns fileDescriptor.
By default, this method prepends writes the process id (in ASCII) into the file and appends a newline, but this method may be overridden by subclasses to provide different behaviour.
See also: - lock, - openAndLockDevice:mode:timeout:
Instance Methods
CRMassage
- (BOOL)CRMassage
Returns whether or not input carriage returns will be turned into newlines and output and echoed newlines will be turned a carriage return followed by a linefeed (this may differ from the actual stat if autoGet is disabled and the port has been modified directly using UNIX calls). This flag is ignored in RAW mode, and no massaging occurs.
See also: - setCRMassage:, - setAutoGetEnabled:
applyLmode:
- applyLmode:(const unsigned short *)arg
Takes the bitflags pointed at by arg and applies them to the serial port before making them the current settings. If arg is NULL, then the current lmode settings will be applied to the port (meaningful only if autoSet has been disabled). Returns self if the operation was a success and nil otherwise.
See also: - fetchLmode:, - setAutoSetEnabled:
applyLtchars:
- applyLtchars:(const struct ltchars *)arg
Takes the settings in the structure pointed at by arg and applies them to the serial port before making them the current settings. If arg is NULL, then the current ltchars settings will be applied to the port (meaningful only if autoSet has been disabled). Returns self if the operation was a success and nil otherwise.
See also: - fetchLtchars:, - setAutoSetEnabled:
applySettings::::::
- applySettings:(const int *)ldisc
:(const struct sgttyb *)arg1
:(const struct tchars *)arg2
:(const unsigned short *)lmode
:(const struct ltchars *)arg4
:(const struct winsize *)arg5
Takes the settings in the structures pointed at by the arguments and applies them to the serial port before making them the current settings. If any argument is NULL, then the current settings for that structure will be applied to the port (meaningful only if autoSet has been disabled). Returns self if the operation was a success and nil otherwise.
See also: - fetchSettings::::::, - setAutoSetEnabled:
applySettings
- applySettings
Equivalent to applySettings:::::: with all arguments NULL. This call is meaningless if autoSet is enabled.
See also: - fetchSettings, - applySettings::::::, - setAutoSetEnabled:
applySgttyb:
- applySgttyb:(const struct sgttyb *)arg
Takes the settings in the structure pointed at by arg and applies them to the serial port before making them the current settings. If arg is NULL, then the current sgttyb settings will be applied to the port (meaningful only if autoSet has been disabled). Returns self if the operation was a success and nil otherwise.
See also: - fetchSgttyb:, - setAutoSetEnabled:
applyTchars:
- applyTchars:(const struct tchars *)arg
Takes the settings in the structure pointed at by arg and applies them to the serial port before making them the current settings. If arg is NULL, then the current tchars settings will be applied to the port (meaningful only if autoSet has been disabled). Returns self if the operation was a success and nil otherwise.
See also: - fetchTchars:, - setAutoSetEnabled:
applyWinsize:
- applyWinsize:(const struct winsize *)arg
Takes the settings in the structure pointed at by arg and applies them to the serial port before making them the current settings. If arg is NULL, then the current winsize settings will be applied to the port (meaningful only if autoSet has been disabled). Returns self if the operation was a success and nil otherwise.
See also: - fetchWinsize:, - setAutoSetEnabled:
autoGetEnabled
- (BOOL)autoGetEnabled
Returns whether current port settings are automatically reloaded from the port when they are queried (default YES). Doing this ensures that, even if the port has been altered using direct UNIX calls, the query will return the true state of the port. Changing this flag to NO provides a slight speed improvement, but this is not recommended.
See also: - setAutoGetEnabled:
autoSetEnabled
- (BOOL)autoSetEnabled
Returns whether current port settings are applied to the serial port when they are changed (default YES). Setting this flag to NO allows you to configure baud rate, parity, etc. individually before applying all your changes to the port using applySettings.
Note that if autoSet is enabled, then the port settings will be fetched before they are modified whether or not autoGet is enabled.
See also: - setAutoSetEnabled:
baudRate
- (int)baudRate
Returns the current baud rate (this is an enumerated type, not the baud rate itself). This may differ from the actual baud rate if autoGet is disabled and the port has been modified directly using UNIX calls.
See also: - numericBaudRate, - autoGetEnabled, - setBaudRate:
clearStatus
- clearStatus
Resets the status to LGD_SP_OK and sets the unix errno to 0. Returns self.
See also: - status, - statusString
close
- close
Closes the serial device, which must have been previously set using setDevice: and opened using openWithTimeout:. Returns self if successful, and nil otherwise.
This call is seldom invoked directly, as the method unlockAndClose provides a more convenient way to stop using a device.
See also: - openWithTimeout:, - unlockAndClose
continue
- continue
Sends a ªcontinueº signal to the serial port. This is used to restart data transmission after it was stopped using the ªpauseº signal. Returns self if successful, and nil otherwise.
See also: - pause
copyFromZone:
- copyFromZone:(NXZone *)aZone
Allocates and returns a copy of the reciever. The copy will be unlocked and closed and will have device NULL regardless of the current state of the reciever.
dataAvailable
- (BOOL)dataAvailable
Returns whether or not data is available to be read from the serial port. If there is an error (the most common of which is that no port has been opened), then this method returns NO as well as setting the error flags.
See also: - readBlock:size:all:
device
- (const char *)device
Returns the current serial device, or NULL if there is no current device.
See also: - setDevice:, - openAndLockDevice:mode:timeout:
discipline
- (int)discipline
Returns the current line discipline (LGD_SP_OLD or LGD_SP_NEW).
See also: - setDiscipline:, - fetchSettings
fetchLmode:
- fetchLmode:(unsigned short *)arg
Queries the serial device for its lmode settings and make them the current settings, then copies those settings into the bitflags pointed to by arg. If arg is NULL, then the current settings will be fetched but not returned. Returns self if the operation was a success and nil otherwise.
See also: - applyLmode:
fetchLtchars:
- fetchLtchars:(struct ltchars *)arg
Queries the serial device for its ltchars settings and make them the current settings, then copies those settings into the structure pointed to by arg. If arg is NULL, then the current settings will be fetched but not returned. Returns self if the operation was a success and nil otherwise.
See also: - applyLtchars:
fetchSettings
- fetchSettings
Equivalent to fetchSettings:::::: with all arguments set to NULL. Returns self if successful, and nil otherwise. If autoGet has been enabled (which is strongly reccommended) then the settings will be automatically brought up to date whenever a particular setting is requested, and this method need never be invoked.
See also: - fetchSettings::::::, - applySettings
fetchSettings::::::
- fetchSettings:(int *)ldisc
:(struct sgttyb *)arg1
:(struct tchars *)arg2
:(unsigned short *)lmod
:(struct ltchars *)arg4
:(struct winsize *)arg5
Queries the serial device for its current settings, then copies those settings into the structures pointed at by arg1 ¼ arg5. If any argument is NULL, then the current settings for that structure will be fetched, but not passed back. Returns self if the operation was a success and nil otherwise.
See also: - applySettings::::::
fetchSgttyb:
- fetchSgttyb:(struct sgttyb *)arg
Queries the serial device for its sgttyb settings and make them the current settings, then copies those settings into the structure pointed to by arg. If arg is NULL, then the current settings will be fetched but not returned. Returns self if the operation was a success and nil otherwise.
See also: - applySgttyb:
fetchTchars:
- fetchTchars:(struct tchars *)arg
Queries the serial device for its tchars settings and make them the current settings, then copies those settings into the structure pointed to by arg. If arg is NULL, then the current settings will be fetched but not returned. Returns self if the operation was a success and nil otherwise.
See also: - applyTchars:
fetchWinsize:
- fetchWinsize:(struct winsize *)arg
Queries the serial device for its winsize settings and make them the current settings, then copies those settings into the structure pointed to by arg. If arg is NULL, then the current settings will be fetched but not returned. Returns self if the operation was a success and nil otherwise.
See also: - applyWinsize:
_fileDescriptor
- (int)_fileDescriptor
Returns the file descriptor associated with the currently opened device, or -1 if there is no open device. Directly manipulating this file descriptor is not reccommended, and unexpected behaviour may result from such tamperings.
flush
- flush
Discards all characters waiting to be read from the device as well as those waiting to be written to the device. Returns self if successful, and nil otherwise.
See also: - flushInput, - flushOutput
flushInput
- flushInput
Discards all characters waiting to be read from the device. Returns self if successful, and nil otherwise.
See also: - flushOutput, - flush
flushOutput
- flushOutput
Discards all characters waiting to be written to the device. Returns self if successful, and nil otherwise.
See also: - flushInput, - flush
free
- free
Frees the reciever and any resources it was consuming. If the device was open it is closed, and if locked the lock is removed.
See also: - close, - unlock
getBlock:size:all:
- (int)getBlock:(char *)buffer size:(int)bufSize all:(BOOL)yn
Reads at most bufSize characters from the serial device and stores them in buffer. Returns the number of characters read, or -1 if there was an error which prevented any characters from being read.
If the all flag is YES, then the call will not return until bufSize characters have been read or there has been an error.
Since a return value of less than bufSize can have two meanings (there was an error, or there were no more characters to read and the all flag was NO), it is strongly recommended that status be checked after invoking this method.
See also: - sendBlock:size:all:
getCharacter:
- (int)getCharacter:(int *)aCharacter
Reads a single character from the port and stores it in aCharacter (stores EOF if unable to read a characters). Returns 1 if a character was successfully read, 0 if there was no data waiting at the port, and -1 if there was an error.
See also: - getBlock:size:all:
getString:max:
- (int)getString:(char *)buffer max:(int)bufSize
Equivalent to getString:max:termChars: with terminating characters `\n' and `\r'.
See also: - getString:max:termChars:
getString:max:termChars:
- (int)getString:(char *)buffer max:(int)bufSize termChars:(const char *)set
Reads characters from the device until one of the characters in the null-terminated set (the `\0' character is always included in the set) has been encountered or there are no more characters available to be read. The first bufSize-1 characters (including the terminating character) will be stored in buffer, followed by a `\0' character.
Returns the number of characters read, or -1 if there was an error. Note that the return value may exceed bufSize-1, but the excess characters will have been discarded.
See also: - getBlock:size:all:
init
- init
Initializes and returns the reciever, a newly-allocated LGDSerialPort instance. The reciever initially has no device set, and is closed and unlocked.
See also: - openAndLockDevice:mode:timeout:
isDeviceAvailable:
- (BOOL)isDeviceAvailable:(const char *)device
Returns whether there is a lock on device. Even if there is no explicit lock set, an attempt to open the device may still fail if the device has been opened without being locked, or if another device which uses the same serial port is open. See openAndLockDevice:mode:timeout: for a list of available devices.
Note that this call checks for the existence of lock files. If the device was locked by the creation of a lock directory, then this call will falsely return that the device is available. This situation should never arise, since directories are not valid device locks.
See also: - lock, + getLockFile:forDevice:
isLocked
- (BOOL)isLocked
Returns whether the reciever has a lock on its device.
See also: + getLockFile:forDevice:, - lock, - unlock, - unlockAndClose
isOpen
- (BOOL)isOpen
Returns whether the reciever has opened its device.
See also: - openWithTimeout:, - close, - openAndLockDevice:mode:timeout:
lock
- lock
Attempts to lock the current device. Returns self if successful, and nil otherwise. It is strongly reccommended that devices be locked before they are opened to prevent multiple tasks from competing for the bytes as they arrive.
This call is seldom invoked directly, as the method openAndLockDevice:mode:timeout: provides a more convenient way to start using a device.
See also: - unlock, + getLockFile:forDevice:, + writeLockFileContents:forDevice:, - openAndLockDevice:mode:timeout:
lowerBreak
- lowerBreak
Lowers the BREAK line of the serial port. Returns self if successful, and nil otherwise.
See also: - raiseBreak
lowerDTR
- lowerDTR
Lowers the DTR (data terminal ready) line of the serial port. Returns self if successful, and nil otherwise.
See also: - raiseDTR
numericBaudRate
- (int)numericBaudRate
Returns the current baud rate as an integer value (1200, 9600, etc.). This may differ from the actual baud rate if autoGet is disabled and the port has been modified directly using UNIX calls.
See also: - autoGetEnabled, - baudRate
mode
- (int)mode
Returns the current mode of the reciever (this may differ from the actual baud rate if autoGet is disabled and the port has been modified directly using UNIX calls). This mode will be one of
LGD_SP_RAW
LGD_SP_CBREAK
LGD_SP_COOKED
Raw mode is used when binary data is to be transmitted, and cooked mode when performing interactive ASCII operations. Cbreak mode is seldom used.
See also: - setMode, - setAutoGetEnabled:
open
- open
Attempts to open the current device for reading and writing. The method will not return until either the device has become available and been opened or there is an error. Returns self if successful, and nil otherwise.
This call is seldom invoked directly, as the method openAndLockDevice:mode:timeout: provides a more convenient way to start using a device.
See also: - openWithTimeout:, - setDevice:, + getDeviceFile:forDevice:, - openAndLockDevice:mode:timeout:
openAndLockDevice:mode:timeout:
- openAndLockDevice:(const char *)device
mode:(int)mode
timeout:(long)seconds
This is the standard way to prepare a serial device for use. Device is made the current device (or the current device is unchanged if device is NULL), the port is opened and locked, and has its mode set to one of LGD_SP_RAW, LGD_SP_CBREAK, or LGD_SP_COOKED. Finally, a disconnect signal is sent to ensure that a clean connection is formed. A negative timeout value indicates that the open attempt should never time out. Returns self if successful, and nil otherwise. If nil is returned, the status flag will be LGD_SP_OK if the call timed out, and set to an appropriate error value otherwise.
The commonly used devices are
ttya ttyb Used for incoming connections from directly connected terminals without flow control.
ttyfa ttyfb Used for incoming connections from directly connected terminals with flow control.
ttyda ttydb Used for incoming connections from modems.
ttydfa ttydfb Used by systems whose hardware supports RTS/CTS flow control (68040 and later) for incoming connections from modems.
cua cub Used for outgoing connections to modems.
cufa cufb Used by systems whose hardware supports RTS/CTS flow control (68040 and later) for outgoing connections to modems.
See also: - unlockAndClose, - setDevice:, - lock, - openWithTimeout:, - setMode:, - sendDisconnect
openWithTimeout:
- openWithTimeout:(long)seconds
Attempts to open the current device for reading and writing. The open will fail if the device is not obtained within the time interval specified by seconds (a negative value indicates that the open attempt should not time out). Returns self if successful, and nil otherwise. If the open fails, it is important to check the status flag. The flag will be LGD_SP_OK if the open failed due to timeout and LGD_SP_ALREADYOPEN or LGD_SP_ERRNO otherwise.
This call is seldom invoked directly, as the method openAndLockDevice:mode:timeout: provides a more convenient way to start using a device.
See also: - setDevice:, + getDeviceFile:forDevice:, - openAndLockDevice:mode:timeout:
parity
- (int)parity
Returns the current parity used to communicate with the device (this may differ from the actual baud rate if autoGet is disabled and the port has been modified directly using UNIX calls). The parity will be one of
LGD_SP_EVENPARITY
LGD_SP_ODDPARITY
LGD_SP_ZEROPARITY
LGD_SP_NOPARITY
See also: - setParity:, - setAutoGetEnabled:
pause
- pause
Sends a ªstopº signal to the device, signalling the hardware on the other end of the serial line to stop sending data until a ªstartº signal is sent. Returns self if successful, and nil otherwise.
See also: - continue
raiseBreak
- raiseBreak
Raises the BREAK line on the serial device. Returns self if successful, nil if unsuccessful.
See also: - lowerBreak
raiseDTR
- raiseDTR
Raises the DTR (data terminal ready) line of the serial device. Returns self if successful, and nil if unsuccessful.
See also: - lowerDTR
read:
- read:(NXTypedStream *)stream
Unarchives the reciever from stream. The reciever will have the device that was set when it was archived, but will be unlocked and closed.
See also: - write:
sendBlock:size:all:
- (int)sendBlock:(const char *)buffer size:(int)size all:(BOOL)yn
Attempts to write bufSize characters from buffer to the serial device. Returns the number of characters written, or -1 if there was an error which prevented any characters from being written.
If the all flag is YES, then the call will not return until bufSize characters have been written or there has been an error.
Since a return value of less than bufSize can have two meanings (there was an error, or the device signalled that it could accept no more characters and the all flag was NO), it is strongly recommended that status be checked after invoking this method.
See also: - getBlock:size:all:
sendBreak
- sendBreak
Sends a BREAK signal to the connected machine. Returns self if successful, and nil if unsuccessful.
See also: - raiseBreak, - lowerBreak
sendCharacter:
- (int)sendCharacter:(int)aCharacter
Attempts to send aCharacter to the serial device. Returns 1 if successful, 0 if the device is not accepting data, and -1 if there was an error.
See also: - sendBlock:size:all:
sendDisconnect
- sendDisconnect
Sends a disconnect signal to the connected machine, causing a hangup. Returns self if successful, and nil if unsuccessful.
See also: - lowerDTR, - raiseDTR
sendString:
- (int)sendString:(const char *)aString
Equivalent to sendString:withTrailer: with trailing string ª\rº.
See also: - sendString:withTrailer:
sendString:withTrailer:
- (int)sendString:(const char *)aString withTrailer:(const char *)trailer
Attempts to send aString to the serial device, and if successful, attempts to send trailer. Returns the number of bytes written if successful (which will equal strlen(aString)+strlen(trailer) ); returns -1 otherwise.
See also: - sendBlock:size:all:
setAutoGetEnabled:
- setAutoGetEnabled:(BOOL)yn
Determines whether current port settings are automatically reloaded from the port when they are queried (default YES). Doing this ensures that, even if the port has been altered using direct UNIX calls, the query will return the true state of the port. Changing this flag to NO provides a slight speed improvement, but this is not recommended. Returns self.
See also: - autoGetEnabled:
setAutoSetEnabled:
- setAutoSetEnabled:(BOOL)yn
Determines whether current port settings are applied to the serial port when they are changed (default YES). Setting this flag to NO allows you to configure baud rate, parity, etc. individually before applying all your changes to the port using applySettings. Returns self.
Note that if autoSet is enabled, then the port settings will be fetched before they are modified whether or not autoGet is enabled.
See also: - autoSetEnabled:
setBaudRate:
- setBaudRate:(int)rate
Sets the baud rate used by the serial device. Rate must be one of
LGD_SP_B0
LGD_SP_B50
LGD_SP_B75
LGD_SP_B110
LGD_SP_B134
LGD_SP_B150
LGD_SP_B200
LGD_SP_B300
LGD_SP_B600
LGD_SP_B1200
LGD_SP_B1800
LGD_SP_B2400
LGD_SP_B4800
LGD_SP_B9600
If autoSet has been disabled, then the baud rate changes will not be applied to the device until applySettings is invoked. Returns self if successful, nil if unsuccessful.
See also: - baudRate, - setAutoSetEnabled:, - applySettings, - applySgttyb:
setCRMassage:
- setCRMassage:(BOOL)yn
Determines whether or not input carriage returns will be turned into newlines and output and echoed newlines will be turned a carriage return followed by a linefeed. This flag is ignored in RAW mode, and CR massage does not take place.
If autoSet has been disabled, then the massage flag changes will not be applied to the device until applySettings is invoked. Returns self if successful, nil if unsuccessful.
See also: - CRMassage, - setAutoSetEnabled:, - applySettings, - applySgttyb:
setDevice:
- setDevice:(const char *)device
Sets device to be the current serial device (see openAndLockDevice:mode:timeout: fora list of common devices). No action is taken at this point, but any subsequent operations will affect device. This call will fail with LGD_SP_ALREADYOPEN if the device is changed while open or locked. Returns self.
This call is seldom invoked directly, as the methods openAndLockDevice:mode:timeout: and unlockAndClose provide more convenient ways to start and stop using a device.
See also: - openAndLockDevice:mode:timeout:, - unlockAndClose
setDiscipline
- setDiscipline:(int)aDiscipline
Sets the line discipline to be one of
LGD_SP_OLD
LGD_SP_NEW
There is virtually never a reason to change the line discipline from its default of LGD_SP_NEW.
If autoSet has been disabled, then the discipline changes will not be applied to the device until applySettings is invoked. Returns self if successful, nil if unsuccessful.
See also: - discipline, - setAutoSetEnabled:, - applySettings
setDuplex:
- setDuplex:(int)duplex
Sets the serial port to be one of
LGD_SP_HALFDUPLEX
LGD_SP_FULLDUPLEX
In full-duplex mode, any characters sent to the serial device will also be echoed back as input.
If autoSet has been disabled, then the duplex flag changes will not be applied to the device until applySettings is invoked. Returns self if successful, nil if unsuccessful.
See also: - duplex, - setAutoSetEnabled:, - applySettings, - applySgttyb:
setMode:
- setMode:(int)mode
Sets the mode of the serial port to one of
LGD_SP_RAW
LGD_SP_CBREAK
LGD_SP_COOKED
In RAW mode, no input or output processing is done ± the characters are made available to the process connected through the device as soon as they are sent, and characters sent by the foreign process are immediately available. Carriage-return massage does not take place in RAW mode. This is the mode generally used for raw data transfer.
In CBREAK mode, flow control and interrupt processing take place, but non-control characters are made immediately available to the foreign process.
In COOKED mode (the mode terminals generally operate under), data is collected, but not sent to the process on the other end of the device until a newline is sent.
If autoSet has been disabled, then the mode changes will not be applied to the device until applySettings is invoked. Returns self if successful, nil if unsuccessful.
See also: - mode, - openAndLockDevice:mode:timeout, - setAutoSetEnabled:, - applySettings, - applySgttyb:
setNumericBaudRate:
- setNumericBaudRate:(int)rate
Sets the baud rate used by the serial device. The baud rate will be set to the fastest setting which is both valid and not greater than rate. For instance, attempting to set a baud rate of 5000 would result in an actual baud rate of 4800. If autoSet has been disabled, then the baud rate changes will not be applied to the device until applySettings is invoked. Returns self if successful, nil if unsuccessful.
See also: - setBaudRate:, - setAutoSetEnabled:, - applySettings, - applySgttyb:
setParity:
- setParity:(int)parity
Sets the parity of the serial device to be one of
LGD_SP_EVENPARITY
LGD_SP_ODDPARITY
LGD_SP_ZEROPARITY
LGD_SP_NOPARITY
In zero parity and no parity modes, characters are accepted regardless of the parity bit, but are sent out with the parity bit either cleared (zero parity) or set (no parity).
If autoSet has been disabled, then the massage flag changes will not be applied to the device until applySettings is invoked. Returns self if successful, nil if unsuccessful.
See also: - parity, - setAutoSetEnabled:, - applySettings, - applySgttyb:
status
- (int)status
Returns the most recent error flag generated by the reciever. This flag remains set until explicitly cleared, or until replaced by a new error, so it is a good idea to clear the status flag after checking for errors. The status may be one of
LGD_SP_OK No error
LGD_SP_DEVICEINUSE Attempt to lock a device which has been already been locked by someone else.
LGD_SP_ALREADYLOCKED Attempt to lock the reciever when it is already locked (this is NOT the same as attempting to lock a device when it has already been locked by another process).
LGD_SP_NOTLOCKED Attempt to unlock the reciever when it has not been locked.
LGD_SP_ALREADYOPEN Attempt to open the reciever when it is already open (this is NOT the same as attempting to open a device when the device is already open).
LGD_SP_NOTOPEN Attempt to perform some operation (reading, writing, setting parameters) without an open device.
LGD_SP_ERRNO Command raised a unix error. See the global variable errno for details (error numbers and their meanings are described in <errno.h>)
See also: - clearStatus, - statusString
statusString
- (const char *)statusString
Returns a string describing the error status, suitable for display in an alert panel or entering into a log file.
See also: - clearStatus, - status
unlock
- unlock
Unlocks the current device by erasing the lock file. Returns self, or null if unable to remove lock file.
This call is seldom invoked directly, as the method unlockAndClose provides a more convenient way to stop using a device.
See also: - lock, - unlockAndClose, + getLockFile:forDevice:
unlockAndClose
- unlockAndClose
This method is the standard way to stop using a serial device. It disconnects from the foreign machine, closes the port, unlocks the device. The current device is not changed. Returns self if successful, and nil otherwise.
See also: - sendDisconnect, - flush, - close, - unlock, - openAndLockDevice:mode:timeout:
write:
- write:(NXTypedStream *)stream
Archives the reciever to stream. When unarchived, the new object will have the device that was set when the reciever was archived, but will be unlocked and closed.
See also: - read:
Constants and Defined Types
// Status flags
#define LGD_SP_OK 0x0000
#define LGD_SP_DEVICEINUSE 0x0001
#define LGD_SP_ALREADYLOCKED 0x0002
#define LGD_SP_NOTLOCKED 0x0003
#define LGD_SP_ALREADYOPEN 0x0004
#define LGD_SP_NOTOPEN 0x0005
#define LGD_SP_ERRNO 0x0006
// Disciplines
// (Referenced definitions found in <sgtty.h>)
#define LGD_SP_NEW NTTYDISC
#define LGD_SP_OLD OTTYDISC
// Modes
#define LGD_SP_RAW 0x0000
#define LGD_SP_CBREAK 0x0001
#define LGD_SP_COOKED 0x0002
// Speeds
// (Referenced definitions found in <sgtty.h>)
#define LGD_SP_B0 B0
#define LGD_SP_B50 B50
#define LGD_SP_B75 B75
#define LGD_SP_B110 B110
#define LGD_SP_B134 B134
#define LGD_SP_B150 B150
#define LGD_SP_B200 B200
#define LGD_SP_B300 B300
#define LGD_SP_B600 B600
#define LGD_SP_B1200 B1200
#define LGD_SP_B1800 B1800
#define LGD_SP_B2400 B2400
#define LGD_SP_B4800 B4800
#define LGD_SP_B9600 B9600
// Parity
// (Referenced definitions found in <sgtty.h>)
#define LGD_SP_EVENPARITY EVENP
#define LGD_SP_ODDPARITY ODDP
#define LGD_SP_ZEROPARITY 0x0000
#define LGD_SP_NOPARITY (EVENP|ODDP)
// Duplex
#define LGD_SP_HALFDUPLEX 0x0000
#define LGD_SP_FULLDUPLEX 0x0001
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.