#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/file.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <termios.h>
#include <fcntl.h>
#include <signal.h>
#include "isisclient.h"
#include "siutils.h"
#include "mechanism.h"
Go to the source code of this file.
Defines | |
#define | DEFAULT_MYID "SCL" |
default client ISIS node name | |
#define | DEFAULT_MYPORT 7101 |
default client socket port | |
#define | DEFAULT_RCFILE "/home/darkstar/dts/Config/sitool.ini" |
default client runtime config file | |
#define | DEFAULT_LOGFILE "/home/darkstar/dts/Logs/sitool.log" |
default client runtime log file (unimplemented) | |
#define | DEFAULT_ISISID "IS" |
default ISIS server node name | |
#define | DEFAULT_ISISHOST "darkstar" |
default ISIS server host | |
#define | DEFAULT_ISISPORT 6600 |
default ISIS server port number | |
#define | APP_VERSION "1.0 Beta" |
placeholder version number, set in Makefile | |
#define | APP_COMPDATE "2004-01-01" |
placeholder compilation date, set by build script | |
#define | APP_COMPTIME "00:00:00" |
placeholder compilation time, set by build script | |
Functions | |
int | LoadConfig (char *) |
Load/Parse ISIS client's runtime configuration file. | |
void | KeyboardCommand (char *) |
Process a command from the client's console keyboard. | |
void | SocketCommand (char *) |
Process a message/command from a remote ISIS server/client application. | |
void | HandleInt (int) |
Service Ctrl+C Interrupts (SIGINT signals). | |
void | abortall (void) |
Abort all pending moves. | |
Variables | |
isisclient_t | client |
si_mechanism_t | scl |
si_drivepars_t | dpars |
ISIS client application header for the sitool application.
|
default client ISIS node name
|
|
default client socket port
|
|
default client runtime config file
|
|
default client runtime log file (unimplemented)
|
|
default ISIS server node name
|
|
default ISIS server host
|
|
default ISIS server port number
|
|
placeholder version number, set in Makefile
|
|
placeholder compilation date, set by build script
|
|
placeholder compilation time, set by build script
|
|
Load/Parse ISIS client's runtime configuration file.
|
|
Process a command from the client's console keyboard.
This function parses the interactive command line and calls the appropriate low-level cmd_xxx() command action functions for excuting most commands, as well as servicing ">XX msgtype: command" format raw IMPv2 message sending requests. A feature of this variant for SiTool is that once it gets past the main command tree, instead of griping about an unknown command, it assumes that it might be a raw SCL command, and ships it to the controller via SCLSendCommand(). Syntax errors or unknown commands result in gripes from the controller, but no badness we've yet encountered. All keyboard commands are treated as EXEC: type IMPv2 messages. This makes the downstream cmd_xxx() action functions insensitive to whether or not the command came from the keyboard or from a remote ISIS server or client application.
|
|
Process a message/command from a remote ISIS server/client application.
More sophisticated handlers might pass such messages on to parsers/handlers of their own if the inputs were actually used for something other than "visual" information for the user of this application. All messages received from an ISIS node are assumed to be in the proper IMPv2 messaging syntax. Note that EXEC: is new to IMPv2. It allows remote nodes to transmit protected "executive" commands to clients, giving them access to commands that would otherwise only be available on the console keyboard (e.g., the "quit" command). Thus a remote EXEC: command means "act as if this was typed at the keyboard". It is the responsibility of the remote application to make sure that EXEC: is used with care, as you could do something stupid (though your client application should not allow actions that would be physically unsafe to personnel or equipment).
|
|
Service Ctrl+C Interrupts (SIGINT signals). SIGINT signal trap for trapping Ctrl+C interrupts. Calls abortall() to immediately abort all moves in progress.
|
|
Abort all pending moves. Uses the low-level SCLAbort() function to send the motion abort (SK = Stop/Kill) command to all microstep drives. Sending SK to an idle microstep drive has no consequences, so this shotgun approach is the simplest and safest. Invoked by the Ctrl+C interrupt handler (HandleInt()), and called at the end of the main program when the application is quitting to make sure we don't accidentally quit and leave things running.
|
|
|
|
|
|
|