Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

emcpanel.cc File Reference

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "getinput.h"
#include "rcs.hh"
#include "emc.hh"
#include "canon.hh"
#include "rs274ngc.hh"
#include "nml_mod.hh"
#include "emcglb.h"

Include dependency graph for emcpanel.cc:

Include dependency graph

Go to the source code of this file.

Defines

#define __attribute__(x)
#define AWK_PATH   "awk"
#define XGRAPH_PATH   "xgraph"
#define SYSTEM_STRING_LEN   1024
#define INPUTLEN   80
#define SLEEP_SECS   0.100
#define STRLEN   80
#define EMC_COMMAND_TIMEOUT   1.0
#define EMC_COMMAND_DELAY   0.1

Enumerations

enum  { AXIS_X = 0, AXIS_Y, AXIS_Z }
enum  { JOG_CONT = 1, JOG_INCR }
enum  { DISPLAY_ABS = 1, DISPLAY_REL }
enum  { SELECT_NONE = 1, SELECT_EMC_TASK, SELECT_EMC_IO }

Functions

char __attribute__ ((unused)) ident[]="$Id
int anyprintable (const char *string)
int emcTaskNmlGet ()
int emcErrorNmlGet ()
int emcIoNmlGet ()
int emcpanelQuit ()
char * state_to_string (int state)
char * status_to_string (int status)
int btostr (char *s, unsigned char b)
void showState ()
void showMode ()
void showPosition ()
void showParams ()
void showProgram ()
void showEmcTaskExec ()
void showEmcio ()
void showTools ()
void showAxis ()
void showCodes ()
void emcpanelShow (int toPrint)
void printErrors ()
int updateStatus ()
int emcCommandWait (int serial_number)
int iniLoad (const char *filename)
int main (int argc, char *argv[])

Variables

int axisSelect = AXIS_X
double speedSelect = 1.0
double jogIncr = 1.0
int jogSelect = JOG_CONT
int printPrompt
enum { ... }  displayMode
enum { ... }  which


Define Documentation

#define AWK_PATH   "awk"
 

#define EMC_COMMAND_DELAY   0.1
 

Definition at line 1019 of file emcpanel.cc.

#define EMC_COMMAND_TIMEOUT   1.0
 

Definition at line 1018 of file emcpanel.cc.

#define INPUTLEN   80
 

Definition at line 150 of file emcpanel.cc.

#define SLEEP_SECS   0.100
 

Definition at line 153 of file emcpanel.cc.

#define STRLEN   80
 

Definition at line 320 of file emcpanel.cc.

#define SYSTEM_STRING_LEN   1024
 

#define XGRAPH_PATH   "xgraph"
 

#define __attribute__  
 

Definition at line 55 of file emcpanel.cc.


Enumeration Type Documentation

anonymous enum
 

Enumeration values:
AXIS_X 
AXIS_Y 
AXIS_Z 

Definition at line 133 of file emcpanel.cc.

00133      {AXIS_X = 0,
00134       AXIS_Y,
00135       AXIS_Z};

anonymous enum
 

Enumeration values:
JOG_CONT 
JOG_INCR 

Definition at line 138 of file emcpanel.cc.

00138      {JOG_CONT = 1,
00139       JOG_INCR};

anonymous enum
 

Enumeration values:
DISPLAY_ABS 
DISPLAY_REL 

Definition at line 155 of file emcpanel.cc.

00155             {
00156   DISPLAY_ABS = 1,
00157   DISPLAY_REL
00158 } displayMode = DISPLAY_ABS;

anonymous enum
 

Enumeration values:
SELECT_NONE 
SELECT_EMC_TASK 
SELECT_EMC_IO 

Definition at line 1042 of file emcpanel.cc.

01042             {
01043   SELECT_NONE = 1,
01044   SELECT_EMC_TASK,
01045   SELECT_EMC_IO
01046 } which = SELECT_NONE;


Function Documentation

char __attribute__ (unused)    [static]
 

Definition at line 59 of file emcpanel.cc.

00059                                                   : emcpanel.cc,v 1.7 2001/06/29 20:27:29 wshackle Exp $";
00060 
00061 // the NML channels to the EMC task
00062 static RCS_CMD_CHANNEL *emcCommandBuffer = 0;
00063 static RCS_STAT_CHANNEL *emcStatusBuffer = 0;
00064 EMC_STAT *emcStatus = 0;
00065 
00066 // the NML channels to the EMCIO controller
00067 static RCS_CMD_CHANNEL *emcIoCommandBuffer = 0;
00068 static RCS_STAT_CHANNEL *emcIoStatusBuffer = 0;
00069 EMC_IO_STAT *emcIoStatus = 0;
00070 
00071 // the NML channel for errors
00072 static NML *emcErrorBuffer = 0;
00073 
00074 // the current command numbers, set up updateStatus(), used in main()
00075 static int emcCommandSerialNumber = 0;
00076 static int emcIoCommandSerialNumber = 0;
00077 
00078 // internal params
00079 
00080 // the saved program name
00081 static char programFile[EMC_TASK_FILENAME_LEN] = "";
00082 static int programOpened = 0;
00083 static FILE * programFp = 0;
00084 static int programFpLine = 0;
00085 static int programActiveLine = 0;
00086 static char programLineText[EMC_TASK_COMMAND_LEN] = "";
00087 
00088 // saved log file params
00089 static char saveLogFile[EMC_LOG_FILENAME_LEN] = "emc.log";
00090 static int saveLogType = EMC_LOG_TYPE_AXIS_POS;
00091 static int saveLogSize = 1000;
00092 static int saveLogSkip = 0;
00093 static int saveLogAxis = 0;
00094 
00095 // paths to awk and xgraph, using to plot logs
00096 // fill these in for your system, if these are not in user's path
00097 #define AWK_PATH "awk"
00098 #define XGRAPH_PATH "xgraph"
00099 #define SYSTEM_STRING_LEN 1024
00100 
00101 static int plotLog(const char * logfile, int logtype, int which)
00102 {
00103   char string[SYSTEM_STRING_LEN];
00104   int retval;
00105 
00106   if (logfile == 0)
00107     {
00108       return -1;
00109     }
00110 
00111   switch (logtype)
00112     {
00113     case EMC_LOG_TYPE_AXIS_POS:
00114       sprintf(string, "( %s '{print $1 \" \" $2}' < %s ; echo \"\" ; %s '{print $1 \" \" $3}' < %s ) 2> /dev/null | %s -m 1> /dev/null 2> /dev/null", AWK_PATH, logfile, AWK_PATH, logfile, XGRAPH_PATH);
00115       break;
00116 
00117     case EMC_LOG_TYPE_AXES_INPOS:
00118     case EMC_LOG_TYPE_AXES_OUTPOS:
00119       sprintf(string, "%s '{print $2 \" \" $3}' < %s 2> /dev/null | %s -m 1> /dev/null 2> /dev/null", AWK_PATH, logfile, XGRAPH_PATH);
00120       break;
00121 
00122     default:
00123       return -1;
00124       break;
00125     }
00126 
00127   retval = system(string);
00128 
00129   return retval;
00130 }

int anyprintable const char *    string [static]
 

Definition at line 161 of file emcpanel.cc.

Referenced by main().

00162 {
00163   int cnt = 0;
00164   char c;
00165 
00166   while (0 != (c = string[cnt++]))
00167     {
00168       if (!isspace(c))
00169         {
00170           return 1;
00171         }
00172     }
00173 
00174   return 0;
00175 }

int btostr char *    s,
unsigned char    b
[static]
 

Definition at line 384 of file emcpanel.cc.

Referenced by printDioOutputs(), and showEmcio().

00385 {
00386   int t;
00387 
00388   for (t = 7; t >= 0; t--)
00389     {
00390       s[t] = b % 2 ? '1' : '0';
00391       b >>= 1;
00392     }
00393   s[8] = 0;                     /* null terminate */
00394 
00395   return 0;
00396 }

int emcCommandWait int    serial_number [static]
 

Definition at line 1021 of file emcpanel.cc.

01022 {
01023   double start = etime();
01024 
01025   while (etime() - start < EMC_COMMAND_TIMEOUT)
01026     {
01027       updateStatus();
01028 
01029       if (emcStatus->echo_serial_number == serial_number)
01030         {
01031           return 0;
01032         }
01033 
01034       esleep(EMC_COMMAND_DELAY);
01035     }
01036 
01037   rcs_print_error("timeout sending command\n");
01038 
01039   return -1;
01040 }

int emcErrorNmlGet   [static]
 

Definition at line 220 of file emcpanel.cc.

00221 {
00222   int retval = 0;
00223 
00224   if (emcErrorBuffer == 0)
00225     {
00226       printf("trying emcError...");
00227       emcErrorBuffer = new NML(nmlErrorFormat, "emcError", "emcpanel", EMC_NMLFILE);
00228       if (! emcErrorBuffer->valid())
00229         {
00230           rcs_print_error("emcError channel not available\n");
00231           delete emcErrorBuffer;
00232           emcErrorBuffer = 0;
00233           retval = -1;
00234           printf("failed\n");
00235         }
00236       printf("got it\n");
00237     }
00238 
00239   return retval;
00240 }

int emcIoNmlGet   [static]
 

Definition at line 242 of file emcpanel.cc.

00243 {
00244   int retval = 0;
00245 
00246   if (emcIoCommandBuffer == 0)
00247     {
00248       printf("trying toolCmd...");
00249       emcIoCommandBuffer = new RCS_CMD_CHANNEL(emcFormat, "toolCmd", "emcpanel", EMC_NMLFILE);
00250       if (! emcIoCommandBuffer->valid())
00251         {
00252           delete emcIoCommandBuffer;
00253           emcIoCommandBuffer = 0;
00254           retval = -1;
00255           printf("failed\n");
00256         }
00257       printf("got it\n");
00258     }
00259 
00260   if (emcIoStatusBuffer == 0)
00261     {
00262       printf("tring toolSts...");
00263       emcIoStatusBuffer = new RCS_STAT_CHANNEL(emcFormat, "toolSts", "emcpanel", EMC_NMLFILE);
00264       if (! emcIoStatusBuffer->valid() ||
00265           EMC_IO_STAT_TYPE != emcIoStatusBuffer->peek())
00266         {
00267           delete emcIoStatusBuffer;
00268           emcIoStatusBuffer = 0;
00269           emcIoStatus = 0;
00270           retval = -1;
00271           printf("failed\n");
00272         }
00273       else
00274         {
00275           emcIoStatus = (EMC_IO_STAT *) emcIoStatusBuffer->get_address();
00276           printf("got it\n");
00277         }
00278     }
00279 
00280   return retval;
00281 }

int emcTaskNmlGet   [static]
 

Definition at line 177 of file emcpanel.cc.

Referenced by main(), and tryNml().

00178 {
00179   int retval = 0;
00180 
00181   // try to connect to NC cmd
00182   if (emcCommandBuffer == 0)
00183     {
00184       printf("trying emcCommand...");
00185       emcCommandBuffer = new RCS_CMD_CHANNEL(emcFormat, "emcCommand", "emcpanel", EMC_NMLFILE);
00186       if (! emcCommandBuffer->valid())
00187         {
00188           delete emcCommandBuffer;
00189           emcCommandBuffer = 0;
00190           retval = -1;
00191           printf("failed\n");
00192         }
00193       printf("got it\n");
00194     }
00195 
00196   // try to connect to NC status
00197   if (emcStatusBuffer == 0)
00198     {
00199       printf("trying emcStatus...");
00200       emcStatusBuffer = new RCS_STAT_CHANNEL(emcFormat, "emcStatus", "emcpanel", EMC_NMLFILE);
00201       if (! emcStatusBuffer->valid() ||
00202           EMC_STAT_TYPE != emcStatusBuffer->peek())
00203         {
00204           delete emcStatusBuffer;
00205           emcStatusBuffer = 0;
00206           emcStatus = 0;
00207           retval = -1;
00208           printf("failed\n");
00209         }
00210       else
00211         {
00212           emcStatus = (EMC_STAT *) emcStatusBuffer->get_address();
00213           printf("got it\n");
00214         }
00215     }
00216 
00217   return retval;
00218 }

int emcpanelQuit   [static]
 

Definition at line 283 of file emcpanel.cc.

Referenced by main().

00284 {
00285   if (emcIoStatusBuffer != 0)
00286     {
00287       delete emcIoStatusBuffer;
00288       emcIoStatusBuffer = 0;
00289       emcIoStatus = 0;
00290     }
00291 
00292   if (emcIoCommandBuffer != 0)
00293     {
00294       delete emcIoCommandBuffer;
00295       emcIoCommandBuffer = 0;
00296     }
00297 
00298   if (emcErrorBuffer != 0)
00299     {
00300       delete emcErrorBuffer;
00301       emcErrorBuffer = 0;
00302     }
00303 
00304   if (emcStatusBuffer != 0)
00305     {
00306       delete emcStatusBuffer;
00307       emcStatusBuffer = 0;
00308       emcStatus = 0;
00309     }
00310 
00311   if (emcCommandBuffer != 0)
00312     {
00313       delete emcCommandBuffer;
00314       emcCommandBuffer = 0;
00315     }
00316 
00317   return 0;
00318 }

void emcpanelShow int    toPrint [static]
 

Definition at line 806 of file emcpanel.cc.

Referenced by main().

00807 {
00808   switch (toPrint)
00809     {
00810     case 0:
00811       // show default stuff
00812       showState();
00813       showMode();
00814       showPosition();
00815       showProgram();
00816       showEmcTaskExec();
00817       break;
00818 
00819     case 1:
00820       // show state
00821       showState();
00822       break;
00823 
00824     case 2:
00825       // show mode
00826       showMode();
00827       break;
00828 
00829     case 3:
00830       // show position
00831       showPosition();
00832       break;
00833 
00834     case 4:
00835       // show internal params
00836       showParams();
00837       break;
00838 
00839     case 5:
00840       // show interpreter
00841       showProgram();
00842       break;
00843 
00844     case 6:
00845       // show EMC TASK
00846       showEmcTaskExec();
00847       break;
00848 
00849     case 8:
00850       // show EMC IO
00851       showEmcio();
00852       break;
00853 
00854     case 9:
00855       // show tool table
00856       showTools();
00857       break;
00858 
00859     case 10:
00860       // show axis info
00861       showAxis();
00862       break;
00863 
00864     case 11:
00865       // show active g codes
00866       showCodes();
00867       break;
00868 
00869     default:
00870       // huh?
00871       printf("invalid request to show: %d\n", toPrint);
00872       break;
00873     }
00874 }

int iniLoad const char *    filename [static]
 

Definition at line 1048 of file emcpanel.cc.

01049 {
01050   INIFILE inifile;
01051   const char *inistring;
01052 
01053   // open it
01054   if (-1 == inifile.open(filename)) {
01055     return -1;
01056   }
01057 
01058   if (NULL != (inistring = inifile.find("NML_FILE", "EMC"))) {
01059     // copy to global
01060     strcpy(EMC_NMLFILE, inistring);
01061   }
01062   else {
01063     // not found, use default
01064   }
01065 
01066   // close it
01067   inifile.close();
01068 
01069   return 0;
01070 }

int main int    argc,
char *    argv[]
 

Definition at line 1072 of file emcpanel.cc.

01073 {
01074   char input[INPUTLEN];
01075   char cmd[INPUTLEN];
01076   int nchars;                   // how many read from getinput()
01077   double delay;                 // secs until next read
01078   int done;
01079   int lastPrint = 0;            // flag for which status subset to print
01080   int inhibitPrompt = 0;        // flag for inhibiting prompt printing
01081   int valid;
01082   int t;
01083   int catchErrors = 1;          // flag for reading error buffer
01084 
01085   // messages sent out
01086   EMC_AXIS_SET_FERROR emc_axis_set_ferror_msg;
01087   EMC_AXIS_SET_MIN_FERROR emc_axis_set_min_ferror_msg;
01088   EMC_AXIS_JOG emc_axis_jog_msg;
01089   EMC_AXIS_INCR_JOG emc_axis_incr_jog_msg;
01090   EMC_AXIS_ABS_JOG emc_axis_abs_jog_msg;
01091   EMC_AXIS_HOME emc_axis_home_msg;
01092   EMC_AXIS_ABORT emc_axis_abort_msg;
01093   EMC_AXIS_SET_OUTPUT emc_axis_set_output_msg;
01094   EMC_TRAJ_SET_SCALE emc_traj_set_scale_msg;
01095   EMC_TRAJ_ABORT emc_traj_abort_msg;
01096   EMC_TASK_SET_MODE mode_msg;
01097   EMC_TASK_SET_STATE state_msg;
01098   EMC_TASK_ABORT task_abort_msg;
01099   EMC_TASK_PLAN_OPEN task_plan_open_msg;
01100   EMC_TASK_PLAN_RUN task_plan_run_msg;
01101   EMC_TASK_PLAN_EXECUTE task_plan_execute_msg;
01102   EMC_TASK_PLAN_PAUSE task_plan_pause_msg;
01103   EMC_TASK_PLAN_RESUME task_plan_resume_msg;
01104   EMC_TOOL_INIT emc_tool_init_msg;
01105   EMC_TOOL_HALT emc_tool_halt_msg;
01106   EMC_TOOL_PREPARE emc_tool_prepare_msg;
01107   EMC_TOOL_LOAD emc_tool_load_msg;
01108   EMC_TOOL_UNLOAD emc_tool_unload_msg;
01109   EMC_TOOL_LOAD_TOOL_TABLE emc_tool_load_tool_table_msg;
01110   EMC_SPINDLE_ON emc_spindle_on_msg;
01111   EMC_SPINDLE_OFF emc_spindle_off_msg;
01112   EMC_SPINDLE_INCREASE emc_spindle_increase_msg;
01113   EMC_SPINDLE_DECREASE emc_spindle_decrease_msg;
01114   EMC_SPINDLE_CONSTANT emc_spindle_constant_msg;
01115   EMC_SPINDLE_BRAKE_RELEASE emc_spindle_brake_release_msg;
01116   EMC_SPINDLE_BRAKE_ENGAGE emc_spindle_brake_engage_msg;
01117   EMC_COOLANT_MIST_ON emc_coolant_mist_on_msg;
01118   EMC_COOLANT_MIST_OFF emc_coolant_mist_off_msg;
01119   EMC_COOLANT_FLOOD_ON emc_coolant_flood_on_msg;
01120   EMC_COOLANT_FLOOD_OFF emc_coolant_flood_off_msg;
01121   EMC_AUX_DIO_WRITE emc_aux_dio_write_msg;
01122   EMC_AUX_AIO_WRITE emc_aux_aio_write_msg;
01123   EMC_AUX_ESTOP_ON emc_aux_estop_on_msg;
01124   EMC_AUX_ESTOP_OFF emc_aux_estop_off_msg;
01125   EMC_LOG_OPEN emc_log_open_msg;
01126   EMC_LOG_START emc_log_start_msg;
01127   EMC_LOG_STOP emc_log_stop_msg;
01128   EMC_LOG_CLOSE emc_log_close_msg;
01129 
01130   // blank out the annoying RCS version message
01131   rcs_version_printed = 1;
01132 
01133   // process usual command line args
01134   if (0 != emcGetArgs(argc, argv)) {
01135     rcs_print_error("error in argument list\n");
01136     exit(1);
01137   }
01138 
01139   // process our command line args
01140   for (t = 1; t < argc; t++)
01141     {
01142       // try -noerror
01143       if (!strcmp(argv[t], "-noerror"))
01144         {
01145           catchErrors = 0;
01146           continue;
01147         }
01148     }
01149 
01150   // initialize globals
01151   emcInitGlobals();
01152 
01153   // get configuration information
01154   iniLoad(EMC_INIFILE);
01155 
01156   // init NML
01157   emcErrorNmlGet();
01158   if (0 == emcIoNmlGet())
01159     {
01160       which = SELECT_EMC_IO;
01161       lastPrint = 8;
01162     }
01163   if (0 == emcTaskNmlGet())
01164     {
01165       which = SELECT_EMC_TASK;
01166       lastPrint = 0;
01167     }
01168 
01169   // loop on input
01170   done = 0;
01171   printPrompt = 1;
01172   while (! feof(stdin) &&
01173          ! done)
01174     {
01175       // print errors
01176       if (catchErrors)
01177         {
01178           printErrors();
01179         }
01180 
01181       // update status
01182       updateStatus();
01183 
01184       // check if we need to print a prompt
01185       if (printPrompt)
01186         {
01187           if (! inhibitPrompt)
01188             {
01189               if (which == SELECT_EMC_TASK)
01190                 {
01191                   printf("emctask> ");
01192                 }
01193               else if (which == SELECT_EMC_IO)
01194                 {
01195                   printf("emcio> ");
01196                 }
01197               else
01198                 {
01199                   printf("none> ");
01200                 }
01201               fflush(stdout);
01202             }
01203           printPrompt = 0;
01204         }
01205 
01206       // get the next input line
01207       nchars = getinput(input, INPUTLEN);
01208       if (nchars > 0)
01209         {
01210           // got some input-- flag that we'll need to print prompt again
01211           printPrompt = 1;
01212         }
01213       else if (nchars == -1)
01214         {
01215           // no new input-- cycle and try again
01216           esleep(SLEEP_SECS);
01217           continue;             // the while(!feof(stdin)) loop
01218         }
01219       else
01220         {
01221           // nchars == 0, it's EOF
01222           done = 1;
01223           break;
01224         }
01225 
01226       // got input-- process it
01227 
01228       // read first arg in
01229       cmd[0] = 0;
01230       sscanf(input, "%s", cmd);
01231 
01232       // match it in the big if loop
01233       // first handle commands for any selected controller
01234       // then handle emctask, emcio
01235 
01236       // commands for any controller
01237       if (! strcmp(cmd, "help") ||
01238           ! strcmp(cmd, "?"))
01239         {
01240           printf("? or help           -- print help\n");
01241           printf("delay <secs>        -- delay reading next line\n");
01242           printf("< or >              -- turn prompt off or on\n");
01243           printf(";                   -- comment follows\n");
01244           printf("quit                -- quit\n");
01245           printf("show {params} {state} {mode} {pos} -- show status\n");
01246           printf("emctask | emcio          -- select emctask or emcio\n");
01247 
01248           switch (which)
01249             {
01250             case SELECT_EMC_TASK:
01251               printf("estop on | off      -- go into/out of estop\n");
01252               printf("machine on | off    -- enable/disable control\n");
01253               printf("mode manual | auto | mdi -- set program mode\n");
01254               printf("axis x | y | z      -- select axis\n");
01255               printf("speed <pos value>   -- set jog speed\n");
01256               printf("abs | rel           -- set display to abs or rel\n");
01257               printf("cont                -- set continuous jog mode\n");
01258               printf("incr {<pos value>}  -- set incremental jog mode\n");
01259               printf("jog {<abs> | + | -} -- jog absolute, or +/- in cont/incr\n");
01260               printf("home                -- home selected axis\n");
01261               printf("a                   -- abort everything\n");
01262               printf("/                   -- abort selected axis\n");
01263               printf("//                  -- abort traj\n");
01264               printf("feed <0.100>        -- set feed override\n");
01265               printf("open <prog name>    -- open NC program\n");
01266               printf("run                 -- run opened NC program\n");
01267               printf("mdi <NC statement>  -- send manual data input\n");
01268               printf("pause               -- pause motion\n");
01269               printf("resume              -- resume motion\n");
01270               printf("tools {<file>}      -- load tool file\n");
01271               printf("brake on | off      -- turn spindle brake on or off\n");
01272               printf("maxfe <axis> <value>  -- set axis following error\n");
01273               printf("minfe <axis> <value>  -- set axis following error\n");
01274               printf("out <axis> <value>  -- set axis output\n");
01275               break;
01276 
01277             case SELECT_EMC_IO:
01278               printf("init                -- initialize emcio\n");
01279               printf("halt                -- reset emcio\n");
01280               printf("dout <bit> 0 | 1    -- set digital out point\n");
01281               printf("aout <bit> <volts>  -- set analog out point\n");
01282               printf("estop on | off      -- go into/out of estop\n");
01283               printf("prep <tool>         -- prepare tool for loading\n");
01284               printf("load                -- load prepped tool\n");
01285               printf("unload              -- unload tool\n");
01286               printf("spindle <rpm> | off -- set spindle speed\n");
01287               printf("incr                -- increase spindle speed\n");
01288               printf("decr                -- decrease spindle speed\n");
01289               printf("brake on | off      -- turn spindle brake on or off\n");
01290               printf("mist on | off       -- mist coolant\n");
01291               printf("flood on | off      -- flood coolant\n");
01292               break;
01293 
01294             default:
01295               // nothing selected
01296               break;
01297             }
01298         }
01299       else if (! strcmp(cmd, "quit"))
01300         {
01301           done = 1;
01302         }
01303       else if (! strcmp(cmd, "<"))
01304         {
01305           inhibitPrompt = 1;
01306         }
01307       else if (! strcmp(cmd, ">"))
01308         {
01309           inhibitPrompt = 0;
01310         }
01311       else if (! strcmp(cmd, ";"))
01312         {
01313           // comment-- ignore
01314         }
01315       else if (! strcmp(cmd, "delay"))
01316         {
01317           if (1 == sscanf(input, "%*s %lf", &delay))
01318             {
01319               esleep((unsigned int) (delay * 1000000.0));
01320             }
01321           else
01322             {
01323               printf("syntax: delay <secs>\n");
01324             }
01325         }
01326       else if (! strcmp(cmd, "show"))
01327         {
01328           if (1 == sscanf(input, "%*s %s", cmd))
01329             {
01330               if (! strcmp(cmd, "state"))
01331                 {
01332                   lastPrint = 1;
01333                   emcpanelShow(lastPrint);
01334                 }
01335               else if (! strcmp(cmd, "mode"))
01336                 {
01337                   lastPrint = 2;
01338                   emcpanelShow(lastPrint);
01339                 }
01340               else if (! strcmp(cmd, "pos"))
01341                 {
01342                   lastPrint = 3;
01343                   emcpanelShow(lastPrint);
01344                 }
01345               else if (! strcmp(cmd, "params"))
01346                 {
01347                   lastPrint = 4;
01348                   emcpanelShow(lastPrint);
01349                 }
01350               else if (! strcmp(cmd, "program"))
01351                 {
01352                   lastPrint = 5;
01353                   emcpanelShow(lastPrint);
01354                 }
01355               else if (! strcmp(cmd, "exec"))
01356                 {
01357                   lastPrint = 6;
01358                   emcpanelShow(lastPrint);
01359                 }
01360               else if (! strcmp(cmd, "emcio"))
01361                 {
01362                   lastPrint = 8;
01363                   emcpanelShow(lastPrint);
01364                 }
01365               else if (! strcmp(cmd, "tools"))
01366                 {
01367                   lastPrint = 9;
01368                   emcpanelShow(lastPrint);
01369                 }
01370               else if (! strcmp(cmd, "axis"))
01371                 {
01372                   lastPrint = 10;
01373                   emcpanelShow(lastPrint);
01374                 }
01375               else if (! strcmp(cmd, "codes"))
01376                 {
01377                   lastPrint = 11;
01378                   emcpanelShow(lastPrint);
01379                 }
01380               else
01381                 {
01382                   // invalid parameter
01383                   printf("syntax: show {state} {mode} {pos} {params} {program} {exec} {emcio} {tools} {axis} {codes}\n");
01384                 }
01385             }
01386           else
01387             {
01388               // blank "show" typed
01389               if (which == SELECT_EMC_TASK)
01390                 {
01391                   lastPrint = 0;
01392                 }
01393               else if (which == SELECT_EMC_IO)
01394                 {
01395                   lastPrint = 8;
01396                 }
01397 
01398               emcpanelShow(lastPrint);
01399             }
01400         }
01401       else if (!strcmp(cmd, "emctask"))
01402         {
01403           if (0 == emcTaskNmlGet())
01404             {
01405               which = SELECT_EMC_TASK;
01406               lastPrint = 0;
01407             }
01408         }
01409       else if (!strcmp(cmd, "emcio"))
01410         {
01411           if (0 == emcIoNmlGet())
01412             {
01413               which = SELECT_EMC_IO;
01414               lastPrint = 8;
01415             }
01416         } // end of general matches; now handle controller specific ones
01417       else if (which == SELECT_EMC_TASK)
01418         {
01419           if (!strcmp(cmd, "estop"))
01420             {
01421               valid = 0;
01422               if (1 == sscanf(input, "%*s %s", cmd))
01423                 {
01424                   valid = 1;
01425                   if (!strcmp(cmd, "off"))
01426                     {
01427                       // come out of estop
01428                       state_msg.state = EMC_TASK_STATE_ESTOP_RESET;
01429                       state_msg.serial_number = ++emcCommandSerialNumber;
01430                       emcCommandBuffer->write(state_msg);
01431                     }
01432                   else if (!strcmp(cmd, "on"))
01433                     {
01434                       // go into estop
01435                       state_msg.state = EMC_TASK_STATE_ESTOP;
01436                       state_msg.serial_number = ++emcCommandSerialNumber;
01437                       emcCommandBuffer->write(state_msg);
01438                     }
01439                 }
01440               if (!valid)
01441                 {
01442                   printf("syntax: estop off | on\n");
01443                 }
01444             }
01445           else if (!strcmp(cmd, "machine"))
01446             {
01447               valid = 0;
01448               if (1 == sscanf(input, "%*s %s", cmd))
01449                 {
01450                   valid = 1;
01451                   if (!strcmp(cmd, "off"))
01452                     {
01453                       // turn it off
01454                       state_msg.state = EMC_TASK_STATE_OFF;
01455                       state_msg.serial_number = ++emcCommandSerialNumber;
01456                       emcCommandBuffer->write(state_msg);
01457                     }
01458                   else if (!strcmp(cmd, "on"))
01459                     {
01460                       // turn the machine on
01461                       state_msg.state = EMC_TASK_STATE_ON;
01462                       state_msg.serial_number = ++emcCommandSerialNumber;
01463                       emcCommandBuffer->write(state_msg);
01464                     }
01465                 }
01466               if (!valid)
01467                 {
01468                   printf("syntax: machine on | off\n");
01469                 }
01470             }
01471           else if (!strcmp(cmd, "mode"))
01472             {
01473               // a request to change mode
01474               valid = 0;
01475               if (1 == sscanf(input, "%*s %s", cmd))
01476                 {
01477                   if (!strcmp(cmd, "auto"))
01478                     {
01479                       mode_msg.mode = EMC_TASK_MODE_AUTO;
01480                       mode_msg.serial_number = ++emcCommandSerialNumber;
01481                       emcCommandBuffer->write(mode_msg);
01482                       valid = 1;
01483                     }
01484                   else if (!strcmp(cmd, "mdi"))
01485                     {
01486                       mode_msg.mode = EMC_TASK_MODE_MDI;
01487                       mode_msg.serial_number = ++emcCommandSerialNumber;
01488                       emcCommandBuffer->write(mode_msg);
01489                       valid = 1;
01490                     }
01491                   else if (!strcmp(cmd, "manual"))
01492                     {
01493                       mode_msg.mode = EMC_TASK_MODE_MANUAL;
01494                       mode_msg.serial_number = ++emcCommandSerialNumber;
01495                       emcCommandBuffer->write(mode_msg);
01496                       valid = 1;
01497                     }
01498                   else
01499                     {
01500                       valid = 0;
01501                     }
01502                 }
01503               if (!valid)
01504                 {
01505                   printf("syntax: mode auto | mdi | manual\n");
01506                 }
01507             }
01508           else if (!strcmp(cmd, "axis"))
01509             {
01510               valid = 0;
01511               if (1 == sscanf(input, "%*s %s", cmd))
01512                 {
01513                   if (!strcmp(cmd, "x"))
01514                     {
01515                       valid = 1;
01516                       axisSelect = AXIS_X;
01517                     }
01518                   else if (!strcmp(cmd, "y"))
01519                     {
01520                       valid = 1;
01521                       axisSelect = AXIS_Y;
01522                     }
01523                   else if (!strcmp(cmd, "z"))
01524                     {
01525                       valid = 1;
01526                       axisSelect = AXIS_Z;
01527                     }
01528                 }
01529               if (!valid)
01530                 {
01531                   printf("syntax: axis x | y | z\n");
01532                 }
01533             }
01534           else if (!strcmp(cmd, "speed"))
01535             {
01536               double speed;
01537               valid = 0;
01538               if (1 == sscanf(input, "%*s %lf", &speed) &&
01539                   speed > 0.0)
01540                 {
01541                   speedSelect = speed;
01542                   valid = 1;
01543                 }
01544               if (!valid)
01545                 {
01546                   printf("syntax: speed <pos value>\n");
01547                 }
01548             }
01549           else if (!strcmp(cmd, "abs"))
01550             {
01551               displayMode = DISPLAY_ABS;
01552             }
01553           else if (!strcmp(cmd, "rel"))
01554             {
01555               displayMode = DISPLAY_REL;
01556             }
01557           else if (!strcmp(cmd, "cont"))
01558             {
01559               jogSelect = JOG_CONT;
01560             }
01561           else if (!strcmp(cmd, "incr"))
01562             {
01563               double incr;
01564               valid = 0;
01565               // check for optional incr arg
01566               if (1 == sscanf(input, "%*s %s", cmd))
01567                 {
01568                   if (1 == sscanf(cmd, "%lf", &incr) &&
01569                       incr > 0.0)
01570                     {
01571                       jogIncr = incr;
01572                       jogSelect = JOG_INCR;
01573                       valid = 1;
01574                     }
01575                   else
01576                     {
01577                       // arg there, but invalid
01578                       valid = 0;
01579                     }
01580                 }
01581               else
01582                 {
01583                   // no arg
01584                   jogSelect = JOG_INCR;
01585                   valid = 1;
01586                 }
01587               if (!valid)
01588                 {
01589                   printf("syntax: axis x | y | z\n");
01590                 }
01591             }
01592           else if (!strcmp(cmd, "jog"))
01593             {
01594               valid = 0;
01595               // we can have "jog <abs> | + | -"
01596               // check for arg there first
01597               if (1 == sscanf(input, "%*s %s", cmd))
01598                 {
01599                   // there's an arg there
01600                   // check for abs value
01601                   if (1 == sscanf(cmd, "%lf", &emc_axis_abs_jog_msg.pos))
01602                     {
01603                       // got an abs jog value
01604                       emc_axis_abs_jog_msg.serial_number = ++emcCommandSerialNumber;
01605                       emc_axis_abs_jog_msg.axis = axisSelect;
01606                       emc_axis_abs_jog_msg.vel = speedSelect;
01607                       emcCommandBuffer->write(emc_axis_abs_jog_msg);
01608                       valid = 1;
01609                     }
01610                   // else check for +
01611                   else if (cmd[0] == '+')
01612                     {
01613                       // check for cont or incr jog
01614                       if (JOG_CONT == jogSelect)
01615                         {
01616                           emc_axis_jog_msg.serial_number = ++emcCommandSerialNumber;
01617                           emc_axis_jog_msg.axis = axisSelect;
01618                           emc_axis_jog_msg.vel = speedSelect;
01619                           emcCommandBuffer->write(emc_axis_jog_msg);
01620                           valid = 1;
01621                         }
01622                       else if (JOG_INCR == jogSelect)
01623                         {
01624                           emc_axis_incr_jog_msg.serial_number =
01625                             ++emcCommandSerialNumber;
01626                           emc_axis_incr_jog_msg.axis = axisSelect;
01627                           emc_axis_incr_jog_msg.vel = speedSelect;
01628                           emc_axis_incr_jog_msg.incr = jogIncr;
01629                           emcCommandBuffer->write(emc_axis_incr_jog_msg);
01630                           valid = 1;
01631                         }
01632                       else
01633                         {
01634                           // coding error
01635                           printf("bad value for jog select: %d\n", jogSelect);
01636                           valid = 1; // suppress syntax error, since it's not
01637                         }
01638                     }
01639                   // else check for -
01640                   else if (cmd[0] == '-')
01641                     {
01642                       // check for cont or incr jog
01643                       if (JOG_CONT == jogSelect)
01644                         {
01645                           emc_axis_jog_msg.serial_number = ++emcCommandSerialNumber;
01646                           emc_axis_jog_msg.axis = axisSelect;
01647                           emc_axis_jog_msg.vel = - speedSelect;
01648                           emcCommandBuffer->write(emc_axis_jog_msg);
01649                           valid = 1;
01650                         }
01651                       else if (JOG_INCR == jogSelect)
01652                         {
01653                           emc_axis_incr_jog_msg.serial_number =
01654                             ++emcCommandSerialNumber;
01655                           emc_axis_incr_jog_msg.axis = axisSelect;
01656                           emc_axis_incr_jog_msg.vel = - speedSelect;
01657                           emc_axis_incr_jog_msg.incr = jogIncr;
01658                           emcCommandBuffer->write(emc_axis_incr_jog_msg);
01659                           valid = 1;
01660                         }
01661                       else
01662                         {
01663                           // coding error
01664                           printf("bad value for jog select: %d\n", jogSelect);
01665                           valid = 1; // suppress syntax error, since it's not
01666                         }
01667                     }
01668                   else
01669                     {
01670                       // bad arg
01671                       valid = 0;
01672                     }
01673                 }
01674               else
01675                 {
01676                   // no arg there at all
01677                   valid = 0;
01678                 }
01679               if (!valid)
01680                 {
01681                   printf("syntax: jog <abs> | + | -\n");
01682                 }
01683             }
01684           else if (!strcmp(cmd, "home"))
01685             {
01686               emc_axis_home_msg.serial_number = ++emcCommandSerialNumber;
01687               emc_axis_home_msg.axis = axisSelect;
01688               emcCommandBuffer->write(emc_axis_home_msg);
01689             }
01690           else if (!strcmp(cmd, "a"))
01691             {
01692               // do a task abort (abort everything)
01693               task_abort_msg.serial_number = ++emcCommandSerialNumber;
01694               emcCommandBuffer->write(task_abort_msg);
01695             }
01696           else if (!strcmp(cmd, "/"))
01697             {
01698               // do an axis abort
01699               emc_axis_abort_msg.serial_number = ++emcCommandSerialNumber;
01700               emc_axis_abort_msg.axis = axisSelect;
01701               emcCommandBuffer->write(emc_axis_abort_msg);
01702             }
01703           else if (!strcmp(cmd, "//"))
01704             {
01705               // do a traj abort
01706               emc_traj_abort_msg.serial_number = ++emcCommandSerialNumber;
01707               emcCommandBuffer->write(emc_traj_abort_msg);
01708             }
01709           else if (!strcmp(cmd, "feed"))
01710             {
01711               int valid = 0;
01712               if (1 == sscanf(input, "%*s %lf", &emc_traj_set_scale_msg.scale))
01713                 {
01714                   valid = 1;
01715                   emc_traj_set_scale_msg.scale = emc_traj_set_scale_msg.scale / 100.0; // turn percent into a fraction
01716                   emc_traj_set_scale_msg.serial_number = ++emcCommandSerialNumber;
01717                   emcCommandBuffer->write(emc_traj_set_scale_msg);
01718                 }
01719               if (! valid)
01720                 {
01721                   printf("syntax: feed <0..100>\n");
01722                 }
01723             }
01724           else if (!strcmp(cmd, "open"))
01725             {
01726               int valid = 0;
01727               if (1 == sscanf(input, "%*s %s", task_plan_open_msg.file))
01728                 {
01729                   valid = 1;
01730                   task_plan_open_msg.serial_number = ++emcCommandSerialNumber;
01731                   emcCommandBuffer->write(task_plan_open_msg);
01732                   strcpy(programFile, task_plan_open_msg.file);
01733                   programOpened = 1;
01734                   if (programFp != 0)
01735                     {
01736                       fclose(programFp);
01737                     }
01738                   programFp = fopen(programFile, "r");
01739                   programLineText[0] = 0;
01740                   programFpLine = 0;
01741                 }
01742               if (! valid)
01743                 {
01744                   printf("syntax: open <part program>\n");
01745                 }
01746             }
01747           else if (!strcmp(cmd, "run"))
01748             {
01749               if (! programOpened)
01750                 {
01751                   // send a request to open the last one
01752                   strcpy(task_plan_open_msg.file, programFile);
01753                   task_plan_open_msg.serial_number = ++emcCommandSerialNumber;
01754                   emcCommandBuffer->write(task_plan_open_msg);
01755                   emcCommandWait(task_plan_open_msg.serial_number);
01756                 }
01757               task_plan_run_msg.serial_number = ++emcCommandSerialNumber;
01758               task_plan_run_msg.line = 0;
01759               emcCommandBuffer->write(task_plan_run_msg);
01760               programOpened = 0;
01761             }
01762           else if (!strcmp(cmd, "mdi"))
01763             {
01764               int valid = 0;
01765               // check for at least one thing on the line
01766               if (1 == sscanf(input, "%*s %s", cmd))
01767                 {
01768                   valid = 1;
01769                   // copy rest of line after "mdi "
01770                   strcpy(task_plan_execute_msg.command, &input[4]);
01771                   task_plan_execute_msg.serial_number = ++emcCommandSerialNumber;
01772                   emcCommandBuffer->write(task_plan_execute_msg);
01773                 }
01774               if (! valid)
01775                 {
01776                   printf("syntax: mdi <NC statement>\n");
01777                 }
01778             }
01779           else if (!strcmp(cmd, "pause"))
01780             {
01781               task_plan_pause_msg.serial_number = ++emcCommandSerialNumber;
01782               emcCommandBuffer->write(task_plan_pause_msg);
01783             }
01784           else if (!strcmp(cmd, "resume"))
01785             {
01786               task_plan_resume_msg.serial_number = ++emcCommandSerialNumber;
01787               emcCommandBuffer->write(task_plan_resume_msg);
01788             }
01789           else if (!strcmp(cmd, "tools"))
01790             {
01791               // get tool file, if provided
01792               if (1 != sscanf(input, "%*s %s", emc_tool_load_tool_table_msg.file))
01793                 {
01794                   emc_tool_load_tool_table_msg.file[0] = 0;
01795                 }
01796               emc_tool_load_tool_table_msg.serial_number = ++emcCommandSerialNumber;
01797               emcCommandBuffer->write(emc_tool_load_tool_table_msg);
01798             }
01799           else if (!strcmp(cmd, "brake"))
01800             {
01801               valid = 0;
01802               if (1 == sscanf(input, "%*s %s", cmd))
01803                 {
01804                   valid = 1;
01805                   if (!strcmp(cmd, "off"))
01806                     {
01807                       // take brake off
01808                       emc_spindle_brake_release_msg.serial_number = ++emcCommandSerialNumber;
01809                       emcCommandBuffer->write(emc_spindle_brake_release_msg);
01810                     }
01811                   else if (!strcmp(cmd, "on"))
01812                     {
01813                       // go into estop
01814                       emc_spindle_brake_engage_msg.serial_number = ++emcCommandSerialNumber;
01815                       emcCommandBuffer->write(emc_spindle_brake_engage_msg);
01816                     }
01817                 }
01818               if (!valid)
01819                 {
01820                   printf("syntax: brake off | on\n");
01821                 }
01822             }
01823           else if (!strcmp(cmd, "maxfe"))
01824             {
01825               int valid = 0;
01826               if (2 == sscanf(input, "%*s %d %lf",
01827                               &emc_axis_set_ferror_msg.axis,
01828                               &emc_axis_set_ferror_msg.ferror))
01829                 {
01830                   valid = 1;
01831                   emc_axis_set_ferror_msg.serial_number = ++emcCommandSerialNumber;
01832                   emcCommandBuffer->write(emc_axis_set_ferror_msg);
01833                 }
01834               if (! valid)
01835                 {
01836                   printf("syntax: maxfe <axis> <ferror>\n");
01837                 }
01838             }
01839           else if (!strcmp(cmd, "minfe"))
01840             {
01841               int valid = 0;
01842               if (2 == sscanf(input, "%*s %d %lf",
01843                               &emc_axis_set_min_ferror_msg.axis,
01844                               &emc_axis_set_min_ferror_msg.ferror))
01845                 {
01846                   valid = 1;
01847                   emc_axis_set_min_ferror_msg.serial_number = ++emcCommandSerialNumber;
01848                   emcCommandBuffer->write(emc_axis_set_min_ferror_msg);
01849                 }
01850               if (! valid)
01851                 {
01852                   printf("syntax: minfe <axis> <ferror>\n");
01853                 }
01854             }
01855           else if (!strcmp(cmd, "out"))
01856             {
01857               int valid = 0;
01858               if (2 == sscanf(input, "%*s %d %lf",
01859                               &emc_axis_set_output_msg.axis,
01860                               &emc_axis_set_output_msg.output))
01861                 {
01862                   valid = 1;
01863                   emc_axis_set_output_msg.serial_number = ++emcCommandSerialNumber;
01864                   emcCommandBuffer->write(emc_axis_set_output_msg);
01865                 }
01866               if (! valid)
01867                 {
01868                   printf("syntax: minfe <axis> <ferror>\n");
01869                 }
01870             }
01871           else if (!strcmp(cmd, "log"))
01872             {
01873               valid = 0;
01874               if (1 == sscanf(input, "%*s %s", cmd))
01875                 {
01876                   if (!strcmp(cmd, "open"))
01877                     {
01878                       valid = 1;
01879                       if (1 == sscanf(input, "%*s %*s %s", saveLogFile))
01880                         {
01881                           strcpy(emc_log_open_msg.file, saveLogFile);
01882                           emc_log_open_msg.type = saveLogType;
01883                           emc_log_open_msg.size = saveLogSize;
01884                           emc_log_open_msg.skip = saveLogSkip;
01885                           emc_log_open_msg.which = saveLogAxis;
01886                           emc_log_open_msg.serial_number = ++emcCommandSerialNumber;
01887                           emcCommandBuffer->write(emc_log_open_msg);
01888                           emcCommandWait(emcCommandSerialNumber);
01889                         }
01890                     }
01891                   else if (!strcmp(cmd, "start"))
01892                     {
01893                       valid = 1;
01894                       // check for open log file first; if not, and old one saved,
01895                       // open old one
01896                       if (! emcStatus->logOpen)
01897                         {
01898                           if (saveLogFile[0] != 0)
01899                             {
01900                               strcpy(emc_log_open_msg.file, saveLogFile);
01901                               emc_log_open_msg.type = saveLogType;
01902                               emc_log_open_msg.size = saveLogSize;
01903                               emc_log_open_msg.skip = saveLogSkip;
01904                               emc_log_open_msg.which = saveLogAxis;
01905                               emc_log_open_msg.serial_number = ++emcCommandSerialNumber;
01906                               emcCommandBuffer->write(emc_log_open_msg);
01907                               emcCommandWait(emcCommandSerialNumber);
01908                             }
01909                           else
01910                             {
01911                               // log is not opened, and no name saved, so ignore
01912                               break;
01913                             }
01914                         }
01915 
01916                       emc_log_start_msg.serial_number = ++emcCommandSerialNumber;
01917                       emcCommandBuffer->write(emc_log_start_msg);
01918                       emcCommandWait(emcCommandSerialNumber);
01919                     }
01920                   else if (!strcmp(cmd, "stop"))
01921                     {
01922                       valid = 1;
01923                       emc_log_stop_msg.serial_number = ++emcCommandSerialNumber;
01924                       emcCommandBuffer->write(emc_log_stop_msg);
01925                       emcCommandWait(emcCommandSerialNumber);
01926                     }
01927                   else if (!strcmp(cmd, "save"))
01928                     {
01929                       valid = 1;
01930                       emc_log_close_msg.serial_number = ++emcCommandSerialNumber;
01931                       emcCommandBuffer->write(emc_log_close_msg);
01932                       emcCommandWait(emcCommandSerialNumber);
01933                     }
01934                   else if (!strcmp(cmd, "plot"))
01935                     {
01936                       valid = 1;
01937                       if (0 != plotLog(saveLogFile, saveLogType, saveLogAxis))
01938                         {
01939                           printf("can't print log-- check log file manually");
01940                         }
01941                     }
01942                 }
01943               if (!valid)
01944                 {
01945                   printf("syntax: log open <file> | start | stop | save | plot\n");
01946                 }
01947             }
01948           else if (anyprintable(input))
01949             {
01950               printf("?\n");
01951             }
01952           else
01953             {
01954               // blank line was typed
01955               emcpanelShow(lastPrint);
01956             }
01957         } // if (which == SELECT_EMC_TASK)
01958       else                      // default matches SELECT_EMC_IO
01959         {
01960           if (!strcmp(cmd, "init"))
01961             {
01962               emc_tool_init_msg.serial_number = ++emcIoCommandSerialNumber;
01963               emcIoCommandBuffer->write(emc_tool_init_msg);
01964             }
01965           else if (!strcmp(cmd, "halt"))
01966             {
01967               emc_tool_halt_msg.serial_number = ++emcIoCommandSerialNumber;
01968               emcIoCommandBuffer->write(emc_tool_halt_msg);
01969             }
01970           else if (!strcmp(cmd, "dout"))
01971             {
01972               valid = 0;
01973 
01974               if (2 == sscanf(input, "%*s %d %d",
01975                               &emc_aux_dio_write_msg.index,
01976                               &emc_aux_dio_write_msg.value))
01977                 {
01978                   valid = 1;
01979                   emc_aux_dio_write_msg.serial_number = ++emcIoCommandSerialNumber;
01980                   emcIoCommandBuffer->write(emc_aux_dio_write_msg);
01981                 }
01982 
01983               if (!valid)
01984                 {
01985                   printf("syntax: set <bit> 0 | 1\n");
01986                 }
01987             }
01988           else if (!strcmp(cmd, "aout"))
01989             {
01990               valid = 0;
01991 
01992               if (2 == sscanf(input, "%*s %d %lf",
01993                               &emc_aux_aio_write_msg.index,
01994                               &emc_aux_aio_write_msg.value))
01995                 {
01996                   valid = 1;
01997                   emc_aux_aio_write_msg.serial_number = ++emcIoCommandSerialNumber;
01998                   emcIoCommandBuffer->write(emc_aux_aio_write_msg);
01999                 }
02000 
02001               if (!valid)
02002                 {
02003                   printf("syntax: set <bit> 0 | 1\n");
02004                 }
02005             }
02006           else if (!strcmp(cmd, "prep"))
02007             {
02008               valid = 0;
02009 
02010               if (1 == sscanf(input, "%*s %d",
02011                               &emc_tool_prepare_msg.tool))
02012                 {
02013                   valid = 1;
02014                   emc_tool_prepare_msg.serial_number = ++emcIoCommandSerialNumber;
02015                   emcIoCommandBuffer->write(emc_tool_prepare_msg);
02016                 }
02017 
02018               if (!valid)
02019                 {
02020                   printf("syntax: prep <tool>\n");
02021                 }
02022             }
02023           else if (!strcmp(cmd, "load"))
02024             {
02025               emc_tool_load_msg.serial_number = ++emcIoCommandSerialNumber;
02026               emcIoCommandBuffer->write(emc_tool_load_msg);
02027             }
02028           else if (!strcmp(cmd, "unload"))
02029             {
02030               emc_tool_unload_msg.serial_number = ++emcIoCommandSerialNumber;
02031               emcIoCommandBuffer->write(emc_tool_unload_msg);
02032             }
02033           else if (!strcmp(cmd, "spindle"))
02034             {
02035               valid = 0;
02036 
02037               if (1 == sscanf(input, "%*s %s", cmd))
02038                 {
02039                   if (!strcmp(cmd, "off"))
02040                     {
02041                       valid = 1;
02042                       emc_spindle_off_msg.serial_number = ++emcIoCommandSerialNumber;
02043                       emcIoCommandBuffer->write(emc_spindle_off_msg);
02044                     }
02045                   else if (1 == sscanf(cmd, "%lf", &emc_spindle_on_msg.speed))
02046                     {
02047                       valid = 1;
02048                       emc_spindle_on_msg.serial_number = ++emcIoCommandSerialNumber;
02049                       emcIoCommandBuffer->write(emc_spindle_on_msg);
02050                     }
02051                 }
02052 
02053               if (!valid)
02054                 {
02055                   printf("syntax: spindle <rpm> | off\n");
02056                 }
02057             }
02058           else if (!strcmp(cmd, "incr"))
02059             {
02060               emc_spindle_increase_msg.serial_number = ++emcIoCommandSerialNumber;
02061               emcIoCommandBuffer->write(emc_spindle_increase_msg);
02062             }
02063           else if (!strcmp(cmd, "decr"))
02064             {
02065               emc_spindle_decrease_msg.serial_number = ++emcIoCommandSerialNumber;
02066               emcIoCommandBuffer->write(emc_spindle_decrease_msg);
02067             }
02068           else if (!strcmp(cmd, "c"))
02069             {
02070               // make spindle constant
02071               emc_spindle_constant_msg.serial_number = ++emcIoCommandSerialNumber;
02072               emcIoCommandBuffer->write(emc_spindle_constant_msg);
02073             }
02074           else if (!strcmp(cmd, "brake"))
02075             {
02076               valid = 0;
02077 
02078               if (1 == sscanf(input, "%*s %s", cmd))
02079                 {
02080                   if (!strcmp(cmd, "off"))
02081                     {
02082                       valid = 1;
02083                       emc_spindle_brake_release_msg.serial_number = ++emcIoCommandSerialNumber;
02084                       emcIoCommandBuffer->write(emc_spindle_brake_release_msg);
02085                     }
02086                   else if (!strcmp(cmd, "on"))
02087                     {
02088                       valid = 1;
02089                       emc_spindle_brake_engage_msg.serial_number = ++emcIoCommandSerialNumber;
02090                       emcIoCommandBuffer->write(emc_spindle_brake_engage_msg);
02091                     }
02092                 }
02093               if (!valid)
02094                 {
02095                   printf("syntax: brake on | off\n");
02096                 }
02097             }
02098           else if (!strcmp(cmd, "estop"))
02099             {
02100               valid = 0;
02101 
02102               if (1 == sscanf(input, "%*s %s", cmd))
02103                 {
02104                   if (!strcmp(cmd, "off"))
02105                     {
02106                       valid = 1;
02107                       emc_aux_estop_off_msg.serial_number = ++emcIoCommandSerialNumber;
02108                       emcIoCommandBuffer->write(emc_aux_estop_off_msg);
02109                     }
02110                   else if (!strcmp(cmd, "on"))
02111                     {
02112                       valid = 1;
02113                       emc_aux_estop_on_msg.serial_number = ++emcIoCommandSerialNumber;
02114                       emcIoCommandBuffer->write(emc_aux_estop_on_msg);
02115                     }
02116                 }
02117 
02118               if (!valid)
02119                 {
02120                   printf("syntax: estop off | on\n");
02121                 }
02122             }
02123           else if (!strcmp(cmd, "mist"))
02124             {
02125               valid = 0;
02126 
02127               if (1 == sscanf(input, "%*s %s", cmd))
02128                 {
02129                   if (!strcmp(cmd, "off"))
02130                     {
02131                       valid = 1;
02132                       emc_coolant_mist_off_msg.serial_number = ++emcIoCommandSerialNumber;
02133                       emcIoCommandBuffer->write(emc_coolant_mist_off_msg);
02134                     }
02135                   else if (!strcmp(cmd, "on"))
02136                     {
02137                       valid = 1;
02138                       emc_coolant_mist_on_msg.serial_number = ++emcIoCommandSerialNumber;
02139                       emcIoCommandBuffer->write(emc_coolant_mist_on_msg);
02140                     }
02141                 }
02142 
02143               if (!valid)
02144                 {
02145                   printf("syntax: mist on | off");
02146                 }
02147             }
02148           else if (!strcmp(cmd, "flood"))
02149             {
02150               valid = 0;
02151 
02152               if (1 == sscanf(input, "%*s %s", cmd))
02153                 {
02154                   if (!strcmp(cmd, "off"))
02155                     {
02156                       valid = 1;
02157                       emc_coolant_flood_off_msg.serial_number = ++emcIoCommandSerialNumber;
02158                       emcIoCommandBuffer->write(emc_coolant_flood_off_msg);
02159                     }
02160                   else if (!strcmp(cmd, "on"))
02161                     {
02162                       valid = 1;
02163                       emc_coolant_flood_on_msg.serial_number = ++emcIoCommandSerialNumber;
02164                       emcIoCommandBuffer->write(emc_coolant_flood_on_msg);
02165                     }
02166                 }
02167 
02168               if (!valid)
02169                 {
02170                   printf("syntax: flood on | off\n");
02171                 }
02172             }
02173           else if (anyprintable(input))
02174             {
02175               printf("?\n");
02176             }
02177           else
02178             {
02179               // blank line was typed
02180               emcpanelShow(lastPrint);
02181             }
02182         } // end else which == SELECT_EMC_IO
02183     } // end of while stdin
02184 
02185   emcpanelQuit();
02186 
02187   exit(0);
02188 }

void printErrors   [static]
 

Definition at line 876 of file emcpanel.cc.

Referenced by main().

00877 {
00878   NMLTYPE type;
00879 
00880   if (0 == emcErrorBuffer ||
00881       ! emcErrorBuffer->valid())
00882     {
00883       return;
00884     }
00885 
00886   switch (type = emcErrorBuffer->read())
00887     {
00888     case 0:
00889       // nothing new
00890       break;
00891 
00892     case -1:
00893       // error reading channel
00894       break;
00895 
00896     case EMC_OPERATOR_ERROR_TYPE:
00897       printf("\nerror: [%d] %s\n",
00898              ((EMC_OPERATOR_ERROR *) (emcErrorBuffer->get_address()))->id,
00899              ((EMC_OPERATOR_ERROR *) (emcErrorBuffer->get_address()))->error);
00900       printPrompt = 1;
00901       break;
00902 
00903     case EMC_OPERATOR_TEXT_TYPE:
00904       printf("\ntext: [%d] %s\n",
00905              ((EMC_OPERATOR_TEXT *) (emcErrorBuffer->get_address()))->id,
00906              ((EMC_OPERATOR_TEXT *) (emcErrorBuffer->get_address()))->text);
00907       printPrompt = 1;
00908       break;
00909 
00910     case EMC_OPERATOR_DISPLAY_TYPE:
00911       printf("\ndisplay: [%d] %s\n",
00912              ((EMC_OPERATOR_DISPLAY *) (emcErrorBuffer->get_address()))->id,
00913              ((EMC_OPERATOR_DISPLAY *) (emcErrorBuffer->get_address()))->display);
00914       printPrompt = 1;
00915       break;
00916 
00917     case NML_ERROR_TYPE:
00918       printf("\nerror: %s\n",
00919              ((NML_ERROR *) (emcErrorBuffer->get_address()))->error);
00920       printPrompt = 1;
00921       break;
00922 
00923     case NML_TEXT_TYPE:
00924       printf("\ntext: %s\n",
00925              ((NML_TEXT *) (emcErrorBuffer->get_address()))->text);
00926       printPrompt = 1;
00927       break;
00928 
00929     case NML_DISPLAY_TYPE:
00930       printf("\ndisplay: %s\n",
00931              ((NML_DISPLAY *) (emcErrorBuffer->get_address()))->display);
00932       printPrompt = 1;
00933       break;
00934 
00935     default:
00936       // unrecognized message
00937       printf("\nunrecognized message in error channel:  %ld\n", type);
00938       printPrompt = 1;
00939       break;
00940     }
00941 }

void showAxis   [static]
 

Definition at line 720 of file emcpanel.cc.

Referenced by emcpanelShow().

00721 {
00722   int axis;
00723 
00724   axis = axisSelect;
00725 
00726   printf("axis:\t\t\t%d\n", emcStatus->motion.axis[axis].axis);
00727 
00728   printf("type:\t\t\t%s\n",
00729          emcStatus->motion.axis[axis].axisType == EMC_AXIS_LINEAR ? "LINEAR" :
00730          emcStatus->motion.axis[axis].axisType == EMC_AXIS_ANGULAR ? "ANGULAR" :
00731          "?");
00732   printf("units:\t\t\t%f\n", emcStatus->motion.axis[axis].units);
00733 
00734   printf("P I D FF0 FF1 FF2:\t%.3f %.3f %.3f %.3f %.3f %.3f\n",
00735          emcStatus->motion.axis[axis].p,
00736          emcStatus->motion.axis[axis].i,
00737          emcStatus->motion.axis[axis].d,
00738          emcStatus->motion.axis[axis].ff0,
00739          emcStatus->motion.axis[axis].ff1,
00740          emcStatus->motion.axis[axis].ff2);
00741   printf("cycle time:\t\t%f\n", emcStatus->motion.axis[axis].cycleTime);
00742 
00743   printf("input scale:\t\t%f %f\n",
00744          emcStatus->motion.axis[axis].inputScale,
00745          emcStatus->motion.axis[axis].inputOffset);
00746 
00747   printf("output scale:\t\t%f %f\n",
00748          emcStatus->motion.axis[axis].outputScale,
00749          emcStatus->motion.axis[axis].outputOffset);
00750 
00751   printf("pos limits:\t\t%f %f\n",
00752          emcStatus->motion.axis[axis].minPositionLimit,
00753          emcStatus->motion.axis[axis].maxPositionLimit);
00754 
00755   printf("output limits:\t\t%f %f\n",
00756          emcStatus->motion.axis[axis].minOutputLimit,
00757          emcStatus->motion.axis[axis].maxOutputLimit);
00758 
00759   printf("max ferror:\t\t%f\n", emcStatus->motion.axis[axis].maxFerror);
00760 
00761   printf("polarity:\t\tEN\tLS-\tLS+\tHS\tH\tF\n");
00762   printf("\t\t\t%d\t %d\t %d\t%d\t%d\t%d\n",
00763          (int) emcStatus->motion.axis[axis].enablePolarity,
00764          (int) emcStatus->motion.axis[axis].minLimitSwitchPolarity,
00765          (int) emcStatus->motion.axis[axis].maxLimitSwitchPolarity,
00766          (int) emcStatus->motion.axis[axis].homeSwitchPolarity,
00767          (int) emcStatus->motion.axis[axis].homingPolarity,
00768          (int) emcStatus->motion.axis[axis].faultPolarity);
00769 
00770   printf("setpoint:   \t\t%f\n", emcStatus->motion.axis[axis].setpoint);
00771   printf("ferror:     \t\t%f\n", emcStatus->motion.axis[axis].ferrorCurrent);
00772   printf("ferrorHighMark:     \t\t%f\n", emcStatus->motion.axis[axis].ferrorHighMark);
00773   printf("output:     \t\t%f\n", emcStatus->motion.axis[axis].output);
00774   printf("input:      \t\t%f\n", emcStatus->motion.axis[axis].input);
00775   printf("homing:     \t\t%s\n",
00776          emcStatus->motion.axis[axis].homing == 1 ? "homing" : "done");
00777   printf("homed:      \t\t%s\n",
00778          emcStatus->motion.axis[axis].homed == 1 ? "home" : "not yet");
00779   printf("enabled:    \t\t%s\n",
00780          emcStatus->motion.axis[axis].enabled == 1 ? "ON" : "OFF");
00781 }

void showCodes   [static]
 

Definition at line 783 of file emcpanel.cc.

Referenced by emcpanelShow().

00784 {
00785   int t;
00786   int code;
00787 
00788   if (0 == emcStatus)
00789     {
00790       return;
00791     }
00792 
00793   for (t = 1; t < EMC_TASK_ACTIVE_G_CODES; t++)
00794     {
00795       code = emcStatus->task.activeGCodes[t];
00796       if (code == -1)
00797         continue;
00798       if (code % 10)
00799         printf("G%.1f ", (double) code / 10.0);
00800       else
00801         printf("G%d ", code / 10);
00802     }
00803   printf("\n");
00804 }

void showEmcTaskExec   [static]
 

Definition at line 583 of file emcpanel.cc.

Referenced by emcpanelShow().

00584 {
00585   if (0 == emcStatus)
00586     {
00587       return;
00588     }
00589 
00590   printf("NML:         \tcmd\tser #\tstatus\n");
00591   printf("             \t%ld\t%d\t%s\n",
00592          emcStatus->command_type, emcStatus->echo_serial_number,
00593          emcStatus->status == RCS_DONE ? "DONE" :
00594          emcStatus->status == RCS_EXEC ? "EXEC" :
00595          emcStatus->status == RCS_ERROR ? "ERROR" : "(?)");
00596 
00597   printf("Exec:         \t%s\n",
00598          emcStatus->task.execState == EMC_TASK_EXEC_ERROR ? "ERROR" :
00599          emcStatus->task.execState == EMC_TASK_EXEC_DONE ? "DONE" :
00600          emcStatus->task.execState == EMC_TASK_EXEC_WAITING_FOR_MOTION ? "MOTION WAIT" :
00601          emcStatus->task.execState == EMC_TASK_EXEC_WAITING_FOR_IO ? "IO WAIT" :
00602          emcStatus->task.execState == EMC_TASK_EXEC_WAITING_FOR_MOTION_QUEUE ? "QUEUE WAIT" :
00603          emcStatus->task.execState == EMC_TASK_EXEC_WAITING_FOR_PAUSE ? "PAUSE WAIT" :
00604          emcStatus->task.execState == EMC_TASK_EXEC_WAITING_FOR_MOTION_AND_IO ? "MOTION AND IO WAIT" :
00605          "?");
00606 
00607   printf("Interp:       \t%s\n",
00608          emcStatus->task.interpState == EMC_TASK_INTERP_IDLE ? "IDLE" :
00609          emcStatus->task.interpState == EMC_TASK_INTERP_READING ? "READING" :
00610          emcStatus->task.interpState == EMC_TASK_INTERP_PAUSED ? "PAUSED" :
00611          emcStatus->task.interpState == EMC_TASK_INTERP_WAITING ? "WAITING" :
00612          "?");
00613 
00614   printf("Motion line:  \t%d\n", emcStatus->task.motionLine);
00615   printf("Current line: \t%d\n", emcStatus->task.currentLine);
00616   printf("Read line:    \t%d\n", emcStatus->task.readLine);
00617 }

void showEmcio   [static]
 

Definition at line 619 of file emcpanel.cc.

Referenced by emcpanelShow().

00620 {
00621   int t;
00622   char bits[9];                 // for "11011001\0" bits string
00623 
00624   if (0 == emcIoStatus)
00625     {
00626       return;
00627     }
00628 
00629   printf("emcio status:    %ld %d %s %s %d %d %s\n",
00630          emcIoStatus->command_type,
00631          emcIoStatus->echo_serial_number,
00632          status_to_string(emcIoStatus->status),
00633          state_to_string(emcIoStatus->state),
00634          emcIoStatus->line,
00635          emcIoStatus->source_line,
00636          emcIoStatus->source_file);
00637 
00638   printf("heartbeat:       %lu\n", emcIoStatus->heartbeat);
00639 
00640   printf("debug level:     %d\n", emcIoStatus->debug);
00641 
00642   printf("tools:           pocket\ttool\tlength\t\tdiameter\n");
00643   printf("                 ------\t----\t------\t\t--------\n");
00644   for (t = 0; t < CANON_TOOL_MAX; t++)
00645     {
00646       if (emcIoStatus->tool.toolTable[t].id != 0)
00647         {
00648           printf("                 %d\t%d\t%10.4f\t%10.4f\n",
00649                  t,
00650                  emcIoStatus->tool.toolTable[t].id,
00651                  emcIoStatus->tool.toolTable[t].length,
00652                  emcIoStatus->tool.toolTable[t].diameter);
00653         }
00654     }
00655 
00656   printf("tool prepped:    %d\n",
00657          emcIoStatus->tool.toolPrepped);
00658   printf("tool in spindle: %d\n",
00659          emcIoStatus->tool.toolInSpindle);
00660 
00661   printf("spindle:         %.0f RPM, %s\n",
00662          emcIoStatus->spindle.speed,
00663          emcIoStatus->spindle.brake == 0 ? "free" : "braked");
00664 
00665   printf("mist:            %s\n",
00666          emcIoStatus->coolant.mist == 0 ? "OFF" : "ON");
00667   printf("flood:           %s\n",
00668          emcIoStatus->coolant.flood == 0 ? "OFF" : "ON");
00669 
00670   printf("estop:           %s\n",
00671          emcIoStatus->aux.estop == 0 ? "OFF" : "ESTOPPED");
00672 
00673   printf("lube:            %s\n",
00674          emcIoStatus->lube.on == 0 ? "OFF" : "ON");
00675 
00676   printf("lube level:      %s\n",
00677          emcIoStatus->lube.level == 0 ? "LOW" : "OK");
00678 
00679   printf("digital ins:     ");
00680   for (t = EMC_AUX_MAX_DIN - 1; t >= 0; t--)
00681     {
00682       btostr(bits, emcIoStatus->aux.din[t]);
00683       printf("%s ", bits);
00684     }
00685   printf("\n");
00686 
00687   printf("digital outs:    ");
00688   for (t = EMC_AUX_MAX_DOUT - 1; t >= 0; t--)
00689     {
00690       btostr(bits, emcIoStatus->aux.dout[t]);
00691       printf("%s ", bits);
00692     }
00693   printf("\n");
00694 }

void showMode   [static]
 

Definition at line 428 of file emcpanel.cc.

Referenced by emcpanelShow().

00429 {
00430   if (0 == emcStatus)
00431     {
00432       return;
00433     }
00434 
00435   printf("Mode:\t\t");
00436   switch (emcStatus->task.mode)
00437     {
00438     case EMC_TASK_MODE_AUTO:
00439       printf("AUTO\n");
00440       break;
00441     case EMC_TASK_MODE_MDI:
00442       printf("MDI\n");
00443       break;
00444     case EMC_TASK_MODE_MANUAL:
00445       printf("MANUAL\n");
00446       break;
00447     default:
00448       printf("%d (?)\n", emcStatus->task.mode);
00449       break;
00450     }
00451 }

void showParams   [static]
 

Definition at line 510 of file emcpanel.cc.

Referenced by emcpanelShow().

00511 {
00512   printf("Axis:    \t%s\n",
00513          axisSelect == AXIS_X ? "X" :
00514          axisSelect == AXIS_Y ? "Y" :
00515          axisSelect == AXIS_Z ? "Z" : "?");
00516   printf("Speed:   \t%f\n", speedSelect);
00517   printf("Jog Type:\t%s\n",
00518          jogSelect == JOG_CONT ? "CONT" :
00519          jogSelect == JOG_INCR ? "INCR" : "?");
00520   printf("Jog Incr:\t%f\n", jogIncr);
00521 }

void showPosition   [static]
 

Definition at line 453 of file emcpanel.cc.

Referenced by emcpanelShow().

00454 {
00455   int axis;
00456 
00457   if (0 == emcStatus)
00458     {
00459       return;
00460     }
00461 
00462   if (displayMode == DISPLAY_ABS)
00463     {
00464       printf("Cmd Pos: \t%f\t%f\t%f\n",
00465              emcStatus->motion.traj.position.tran.x,
00466              emcStatus->motion.traj.position.tran.y,
00467              emcStatus->motion.traj.position.tran.z);
00468       printf("Act Pos: \t%f\t%f\t%f\n",
00469              emcStatus->motion.traj.actualPosition.tran.x,
00470              emcStatus->motion.traj.actualPosition.tran.y,
00471              emcStatus->motion.traj.actualPosition.tran.z);
00472     }
00473   else if (displayMode == DISPLAY_REL)
00474     {
00475       printf("Cmd Pos: \t%f\t%f\t%f\n",
00476              emcStatus->motion.traj.position.tran.x -
00477              emcStatus->task.origin.tran.x,
00478              emcStatus->motion.traj.position.tran.y -
00479              emcStatus->task.origin.tran.y,
00480              emcStatus->motion.traj.position.tran.z -
00481              emcStatus->task.origin.tran.z);
00482       printf("Act Pos: \t%f\t%f\t%f\n",
00483              emcStatus->motion.traj.actualPosition.tran.x -
00484              emcStatus->task.origin.tran.x,
00485              emcStatus->motion.traj.actualPosition.tran.y -
00486              emcStatus->task.origin.tran.y,
00487              emcStatus->motion.traj.actualPosition.tran.z -
00488              emcStatus->task.origin.tran.z);
00489     }
00490   else
00491     {
00492       printf("Position:\t(display mode not abs or rel: %d)\n",
00493              displayMode);
00494     }
00495 
00496   printf("Axes:    ");
00497   for (axis = 0; axis < EMC_AXIS_MAX; axis++) {
00498     printf("\t%f", emcStatus->motion.axis[axis].setpoint);
00499   }
00500   printf("\n");
00501 
00502   printf("Queue:   \t%d\n",
00503          emcStatus->motion.traj.queue);
00504   printf("Inpos:   \t%d\n",
00505          emcStatus->motion.traj.inpos);
00506   printf("V Scale: \t%.2f\n",
00507          emcStatus->motion.traj.scale);
00508 }

void showProgram   [static]
 

Definition at line 523 of file emcpanel.cc.

Referenced by emcpanelShow().

00524 {
00525   if (0 == emcStatus) {
00526     return;
00527   }
00528 
00529   if (! programOpened) {
00530     // print the last one opened, since we'll send this by default
00531     printf("Program: \t%s\n", programFile);
00532   }
00533   else {
00534     // print the one the controller knows about
00535     printf("Program: \t%s\n", emcStatus->task.file);
00536   }
00537 
00538   if (emcStatus->task.currentLine > 0) {
00539     if (emcStatus->task.motionLine > 0 &&
00540         emcStatus->task.motionLine < emcStatus->task.currentLine) {
00541       programActiveLine = emcStatus->task.motionLine;
00542     }
00543     else {
00544       programActiveLine = emcStatus->task.currentLine;
00545     }
00546 
00547     if (programFp != 0) {
00548       if (programFpLine > programActiveLine) {
00549         rewind(programFp);
00550         programFpLine = 0;
00551         programLineText[0] = 0;
00552       }
00553       else {
00554         while (programFpLine < programActiveLine) {
00555           fgets(programLineText, EMC_TASK_COMMAND_LEN, programFp);
00556           programFpLine++;
00557         }
00558       }
00559     }
00560     else {
00561       programLineText[0] = 0;
00562     }
00563   }
00564   else {
00565     programActiveLine = 0;
00566     programLineText[0] = 0;
00567   }
00568 
00569   printf("Units:   \t%s\n", 
00570          emcStatus->task.programUnits == CANON_UNITS_INCHES ? "inches" :
00571          emcStatus->task.programUnits == CANON_UNITS_MM ? "mm" :
00572          emcStatus->task.programUnits == CANON_UNITS_CM ? "cm" : "?");
00573          
00574   printf("Line:    \t%d\n", programActiveLine);
00575   printf("Command: \t%s\n", programLineText);
00576 
00577   printf("Origin:  \t%f\t%f\t%f\n",
00578          emcStatus->task.origin.tran.x,
00579          emcStatus->task.origin.tran.y,
00580          emcStatus->task.origin.tran.z);
00581 }

void showState   [static]
 

Definition at line 398 of file emcpanel.cc.

Referenced by emcpanelShow().

00399 {
00400   if (0 == emcStatus)
00401     {
00402       return;
00403     }
00404 
00405   printf("Heartbeat: \t%lu\n", emcStatus->task.heartbeat);
00406   printf("Debug:     \t%d\n", emcStatus->debug);
00407   printf("State:     \t");
00408   switch (emcStatus->task.state)
00409     {
00410     case EMC_TASK_STATE_OFF:
00411       printf("OFF\n");
00412       break;
00413     case EMC_TASK_STATE_ON:
00414       printf("ON\n");
00415       break;
00416     case EMC_TASK_STATE_ESTOP:
00417       printf("ESTOP\n");
00418       break;
00419     case EMC_TASK_STATE_ESTOP_RESET:
00420       printf("ESTOP RESET\n");
00421       break;
00422     default:
00423       printf("%d (?)\n", emcStatus->task.state);
00424       break;
00425     }
00426 }

void showTools   [static]
 

Definition at line 696 of file emcpanel.cc.

Referenced by emcpanelShow().

00697 {
00698   int t;
00699 
00700   if (0 == emcStatus)
00701     {
00702       return;
00703     }
00704 
00705   printf("pocket\ttool\tlength\tdiameter\n");
00706   printf("------\t----\t------\t--------\n");
00707   for (t = 0; t < CANON_TOOL_MAX; t++)
00708     {
00709       if (emcStatus->io.tool.toolTable[t].id != 0)
00710         {
00711           printf("%d\t%d\t%f\t%f\n",
00712                  t,
00713                  emcStatus->io.tool.toolTable[t].id,
00714                  emcStatus->io.tool.toolTable[t].length,
00715                  emcStatus->io.tool.toolTable[t].diameter);
00716         }
00717     }
00718 }

char* state_to_string int    state [static]
 

Definition at line 321 of file emcpanel.cc.

00322 {
00323   static char scratch[STRLEN];
00324 
00325   switch (state)
00326     {
00327     case NEW_COMMAND:
00328       return "NEW_COMMAND";
00329     case S0:
00330       return "S0";
00331     case S1:
00332       return "S1";
00333     case S2:
00334       return "S2";
00335     case S3:
00336       return "S3";
00337     case S4:
00338       return "S4";
00339     case S5:
00340       return "S5";
00341     case S6:
00342       return "S6";
00343     case S7:
00344       return "S7";
00345     case S8:
00346       return "S8";
00347     case S9:
00348       return "S9";
00349     case S10:
00350       return "S10";
00351     case S11:
00352       return "S11";
00353     case S12:
00354       return "S12";
00355     default:
00356       sprintf(scratch, "%d", state);
00357       return scratch;
00358     }
00359 }

char* status_to_string int    status [static]
 

Definition at line 361 of file emcpanel.cc.

00362 {
00363   static char scratch[STRLEN];
00364 
00365   switch (status)
00366     {
00367     case RCS_DONE:
00368       return "DONE";
00369     case RCS_EXEC:
00370       return "EXEC";
00371     case RCS_ERROR:
00372       return "ERROR";
00373     default:
00374       sprintf(scratch, "%d", status);
00375       return scratch;
00376     }
00377 }

int updateStatus   [static]
 

Definition at line 944 of file emcpanel.cc.

Referenced by alarmHandler(), emcCommandWait(), emcCommandWaitDone(), emcCommandWaitReceived(), emc_abs_act_pos(), emc_abs_cmd_pos(), emc_axis_alter(), emc_axis_enable(), emc_axis_gains(), emc_brake(), emc_debug(), emc_display_angular_units(), emc_display_linear_units(), emc_estop(), emc_estop_in(), emc_feed_override(), emc_flood(), emc_io_command(), emc_io_command_number(), emc_io_command_status(), emc_io_heartbeat(), emc_joint_fault(), emc_joint_homed(), emc_joint_limit(), emc_joint_pos(), emc_joint_type(), emc_joint_units(), emc_kinematics_type(), emc_log_islogging(), emc_log_isopen(), emc_log_numpoints(), emc_lube(), emc_lube_level(), emc_machine(), emc_mist(), emc_mode(), emc_motion_command(), emc_motion_command_number(), emc_motion_command_status(), emc_motion_heartbeat(), emc_override_limit(), emc_pos_offset(), emc_probe_clear(), emc_probe_index(), emc_probe_polarity(), emc_probe_tripped(), emc_probe_value(), emc_probed_pos(), emc_program(), emc_program_angular_units(), emc_program_codes(), emc_program_line(), emc_program_linear_units(), emc_program_status(), emc_rel_act_pos(), emc_rel_cmd_pos(), emc_spindle(), emc_task_command(), emc_task_command_number(), emc_task_command_status(), emc_task_heartbeat(), emc_teleop_enable(), emc_tool(), emc_tool_offset(), emc_update(), emc_user_angular_units(), emc_user_linear_units(), main(), sendProgramRun(), and timeoutCB().

00945 {
00946   int r1 = 0, r2 = 0;
00947   NMLTYPE type;
00948 
00949   // update EMC TASK
00950   if (0 == emcStatus)
00951     {
00952       // not connected
00953       r1 = -1;
00954     }
00955   else
00956     {
00957       switch (type = emcStatusBuffer->peek())
00958         {
00959         case -1:
00960           // error on CMS channel
00961           printf("error reading emcStatus channel\n");
00962           r1 = -1;
00963           break;
00964 
00965         case 0:                 // no new data
00966         case EMC_STAT_TYPE:     // new data
00967           // new data
00968           // get command serial number
00969           emcCommandSerialNumber = emcStatus->echo_serial_number;
00970           break;
00971 
00972         default:
00973           printf("bad id in emcStatusBuffer: %ld\n", type);
00974           r1 = -1;
00975           break;
00976         }
00977     }
00978 
00979   // update EMCIO
00980   if (0 == emcIoStatus)
00981     {
00982       // not connected
00983       r2 = -1;
00984     }
00985   else
00986     {
00987       switch (type = emcIoStatusBuffer->peek())
00988         {
00989         case -1:
00990           // error on CMS channel
00991           printf("error reading emcioStatus channel\n");
00992           r2 = -1;
00993           break;
00994 
00995         case 0:                 // no new data
00996         case EMC_IO_STAT_TYPE:  // new data
00997           // new data
00998           // get command serial number
00999           emcIoCommandSerialNumber = emcIoStatus->echo_serial_number;
01000           break;
01001 
01002         default:
01003           printf("bad id in emcIoStatusBuffer: %ld\n", type);
01004           r2 = -1;
01005           break;
01006         }
01007     }
01008 
01009   return (r1 != 0 ||
01010           r2 != 0) ? -1 : 0;
01011 }


Variable Documentation

int axisSelect = AXIS_X [static]
 

Definition at line 141 of file emcpanel.cc.

enum { ... } displayMode [static]
 

double jogIncr = 1.0 [static]
 

Definition at line 143 of file emcpanel.cc.

int jogSelect = JOG_CONT [static]
 

Definition at line 144 of file emcpanel.cc.

int printPrompt [static]
 

Definition at line 147 of file emcpanel.cc.

double speedSelect = 1.0 [static]
 

Definition at line 142 of file emcpanel.cc.

enum { ... } which [static]
 


Generated on Sun Dec 2 15:27:57 2001 for EMC by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001