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

initraj.cc File Reference

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "emc.hh"
#include "posemath.h"
#include "inifile.h"
#include "initraj.hh"
#include "emcglb.h"

Include dependency graph for initraj.cc:

Include dependency graph

Go to the source code of this file.

Functions

int loadTraj ()
int iniTraj (const char *filename)

Variables

INIFILE * trajInifile = 0


Function Documentation

int iniTraj const char *    filename
 

Definition at line 502 of file initraj.cc.

00503 {
00504   int retval = 0;
00505 
00506   trajInifile = new INIFILE;
00507 
00508   if (-1 == trajInifile->open(filename))
00509     {
00510       return -1;
00511     }
00512 
00513   // load trajectory values
00514   if (0 != loadTraj())
00515     {
00516       retval = -1;
00517     }
00518 
00519   // close the inifile
00520   trajInifile->close();
00521   delete trajInifile;
00522 
00523   return retval;
00524 }

int loadTraj   [static]
 

Definition at line 73 of file initraj.cc.

Referenced by iniTraj().

00074 {
00075   const char *inistring;
00076   int axes;
00077   double linearUnits;
00078   double angularUnits;
00079   double cycleTime;
00080   double vel;
00081   double acc;
00082   unsigned char coordinateMark[6] = {1, 1, 1, 0, 0, 0};
00083   int t;
00084   int len;
00085   char homes[INIFILE_MAX_LINELEN];
00086   char home[INIFILE_MAX_LINELEN];
00087   EmcPose homePose ={ { 0.0, 0.0, 0.0 } , 0.0, 0.0, 0.0};
00088   double d;
00089   int index;
00090   int polarity;
00091 
00092   if (NULL != (inistring = trajInifile->find("AXES", "TRAJ"))) {
00093 #ifndef UNDER_CE
00094     if (1 == sscanf(inistring, "%d", &axes)) {
00095       // found, and valid
00096     }
00097     else {
00098       // found, but invalid
00099       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00100         rcs_print("invalid inifile value for [TRAJ] AXES: %s\n", inistring);
00101       }
00102       axes = 0;                 // default
00103     }
00104 #else
00105     axes = atol(inistring);
00106 #endif
00107   }
00108   else {
00109     // not found at all
00110     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00111       rcs_print("can't find [TRAJ] AXES, using default\n");
00112     }
00113     axes = 0;                   // default
00114   }
00115   if (0 != emcTrajSetAxes(axes)) {
00116     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00117       rcs_print("bad return value from emcTrajSetAxes\n");
00118     }
00119     return -1;
00120   }
00121 
00122   if (NULL != (inistring = trajInifile->find("LINEAR_UNITS", "TRAJ"))) {
00123 #ifndef UNDER_CE
00124     if (1 == sscanf(inistring, "%lf", &linearUnits)) {
00125       // found, and valid
00126     }
00127     else {
00128       // found, but invalid
00129       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00130         rcs_print("invalid inifile value for [TRAJ] LINEAR_UNITS: %s\n", inistring);
00131       }
00132       linearUnits = 1;          // default
00133     }
00134 #else
00135     linearUnits = RCS_CE_ATOF(inistring);
00136 #endif
00137   }
00138   else {
00139     // not found at all
00140     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00141       rcs_print("can't find [TRAJ] LINEAR_UNITS, using default\n");
00142     }
00143     linearUnits = 1;            // default
00144   }
00145 
00146   if (NULL != (inistring = trajInifile->find("ANGULAR_UNITS", "TRAJ"))) {
00147 #ifndef UNDER_CE
00148     if (1 == sscanf(inistring, "%lf", &angularUnits)) {
00149       // found, and valid
00150     }
00151     else {
00152       // found, but invalid
00153       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00154         rcs_print("invalid inifile value for [TRAJ] ANGULAR_UNITS: %s\n", inistring);
00155       }
00156       angularUnits = 1;         // default
00157     }
00158 #else
00159     angularUnits = RCS_CE_ATOF(inistring);
00160 #endif
00161   }
00162   else {
00163     // not found at all
00164     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00165       rcs_print("can't find [TRAJ] ANGULAR_UNITS, using default\n");
00166     }
00167     angularUnits = 1;           // default
00168   }
00169 
00170   if (0 != emcTrajSetUnits(linearUnits, angularUnits)) {
00171     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00172       rcs_print("bad return value from emcTrajSetUnits\n");
00173     }
00174     return -1;
00175   }
00176 
00177   if (NULL != (inistring = trajInifile->find("CYCLE_TIME", "TRAJ"))) {
00178 #ifndef UNDER_CE
00179     if (1 == sscanf(inistring, "%lf", &cycleTime)) {
00180       // found, and valid
00181     }
00182     else {
00183       // found, but invalid
00184       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00185         rcs_print("invalid inifile value for [TRAJ] CYCLE_TIME: %s\n", inistring);
00186       }
00187       cycleTime = 1.0;          // default
00188     }
00189 #else
00190     cycleTime = RCS_CE_ATOF(inistring);
00191 #endif
00192   }
00193   else {
00194     // not found at all
00195     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00196       rcs_print("can't find [TRAJ] CYCLE_TIME, using default\n");
00197     }
00198     cycleTime = 1.0;            // default
00199   }
00200   if (0 != emcTrajSetCycleTime(cycleTime)) {
00201     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00202       rcs_print("bad return value from emcTrajSetCycleTime\n");
00203     }
00204     return -1;
00205   }
00206 
00207   if (NULL != (inistring = trajInifile->find("DEFAULT_VELOCITY", "TRAJ"))) {
00208 #ifndef UNDER_CE
00209     if (1 == sscanf(inistring, "%lf", &vel)) {
00210       // found, and valid
00211     }
00212     else {
00213       // found, but invalid
00214       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00215         rcs_print("invalid inifile value for [TRAJ] DEFAULT_VELOCITY: %s\n", inistring);
00216       }
00217       vel = 1.0;                // default
00218     }
00219 #else
00220     vel = RCS_CE_ATOF(inistring);
00221 #endif
00222   }
00223   else {
00224     // not found at all
00225     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00226       rcs_print("can't find [TRAJ] DEFAULT_VELOCITY, using default\n");
00227     }
00228     vel = 1.0;          // default
00229   }
00230 
00231   // set the corresponding global
00232   TRAJ_DEFAULT_VELOCITY = vel;
00233 
00234   // and set dynamic value
00235   if (0 != emcTrajSetVelocity(vel)) {
00236     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00237       rcs_print("bad return value from emcTrajSetVelocity\n");
00238     }
00239     return -1;
00240   }
00241 
00242   if (NULL != (inistring = trajInifile->find("DEFAULT_ACCELERATION", "TRAJ"))) {
00243 #ifndef UNDER_CE
00244     if (1 == sscanf(inistring, "%lf", &acc)) {
00245       // found, and valid
00246     }
00247     else {
00248       // found, but invalid
00249       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00250         rcs_print("invalid inifile value for [TRAJ] DEFAULT_ACCELERATION: %s\n", inistring);
00251       }
00252       acc = 1.0;                // default
00253     }
00254 #else
00255     acc = RCS_CE_ATOF(inistring);
00256 #endif
00257   }
00258   else {
00259     // not found at all
00260     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00261       rcs_print("can't find [TRAJ] DEFAULT_ACCELERATION, using default\n");
00262     }
00263     acc = 1.0;          // default
00264   }
00265   if (0 != emcTrajSetAcceleration(acc)) {
00266     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00267       rcs_print("bad return value from emcTrajSetAcceleration\n");
00268     }
00269     return -1;
00270   }
00271 
00272   if (NULL != (inistring = trajInifile->find("MAX_VELOCITY", "TRAJ"))) {
00273 #ifndef UNDER_CE
00274     if (1 == sscanf(inistring, "%lf", &vel)) {
00275       // found, and valid
00276     }
00277     else {
00278       // found, but invalid
00279       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00280         rcs_print("invalid inifile value for [TRAJ] MAX_VELOCITY: %s\n", inistring);
00281       }
00282       vel = 1.0;                // default
00283     }
00284 #else
00285     vel = RCS_CE_ATOF(inistring);
00286 #endif
00287   }
00288   else {
00289     // not found at all
00290     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00291       rcs_print("can't find [TRAJ] MAX_VELOCITY, using default\n");
00292     }
00293     vel = 1.0;          // default
00294   }
00295 
00296   // set the corresponding global
00297   TRAJ_MAX_VELOCITY = vel;
00298 
00299   // and set dynamic value
00300   if (0 != emcTrajSetMaxVelocity(vel)) {
00301     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00302       rcs_print("bad return value from emcTrajSetMaxVelocity\n");
00303     }
00304     return -1;
00305   }
00306 
00307   // also set the global-- it's likely to be done in emcTrajSetMaxVelocity(),
00308   // but it can't hurt to make sure
00309   TRAJ_MAX_VELOCITY = vel;
00310 
00311   if (NULL != (inistring = trajInifile->find("MAX_ACCELERATION", "TRAJ"))) {
00312 #ifndef UNDER_CE
00313     if (1 == sscanf(inistring, "%lf", &acc)) {
00314       // found, and valid
00315     }
00316     else {
00317       // found, but invalid
00318       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00319         rcs_print("invalid inifile value for [TRAJ] MAX_ACCELERATION: %s\n", inistring);
00320       }
00321       acc = 1.0;                // default
00322     }
00323 #else
00324     acc = RCS_CE_ATOF(inistring);
00325 #endif
00326   }
00327   else {
00328     // not found at all
00329     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00330       rcs_print("can't find [TRAJ] MAX_ACCELERATION, using default\n");
00331     }
00332     acc = 1.0;          // default
00333   }
00334   if (0 != emcTrajSetMaxAcceleration(acc)) {
00335     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00336       rcs_print("bad return value from emcTrajSetMaxAcceleration\n");
00337     }
00338     return -1;
00339   }
00340 
00341   // set coordinateMark[] to hold 1's for each coordinate present,
00342   // so that home position can be interpreted properly
00343   if (NULL != (inistring = trajInifile->find("COORDINATES", "TRAJ"))) {
00344     len = strlen(inistring);
00345     // there's an entry in ini file, so clear all the marks out first
00346     // so that defaults don't apply at all
00347     for (t = 0; t < 6; t++) {
00348       coordinateMark[t] = 0;
00349     }
00350     // now set actual marks
00351     for (t = 0; t < len; t++) {
00352       if (inistring[t] == 'X')
00353         coordinateMark[0] = 1;
00354       else if (inistring[t] == 'Y')
00355         coordinateMark[1] = 1;
00356       else if (inistring[t] == 'Z')
00357         coordinateMark[2] = 1;
00358       else if (inistring[t] == 'R')
00359         coordinateMark[3] = 1;
00360       else if (inistring[t] == 'P')
00361         coordinateMark[4] = 1;
00362       else if (inistring[t] == 'W')
00363         coordinateMark[5] = 1;
00364     }
00365   }
00366   else {
00367     // not there, use default
00368     // by leaving coordinateMark[] alone, default is X Y Z
00369   }
00370 
00371   if (NULL != (inistring = trajInifile->find("HOME", "TRAJ"))) {
00372     // found it, now interpret it according to coordinateMark[]
00373     strcpy(homes, inistring);
00374     len = 0;
00375     for (t = 0; t < 6; t++) {
00376       if (! coordinateMark[t]) {
00377         continue; // position t at index of next non-zero mark
00378       }
00379 #ifndef UNDER_CE
00380       // there is a mark, so read the string for a value
00381       if (1 == sscanf(&homes[len], "%s", home) &&
00382           1 == sscanf(home, "%lf", &d)) {
00383 #else
00384         strcpy(home,&homes[len]);
00385         d = RCS_CE_ATOF(home);
00386 #endif
00387         // got an entry, index into coordinateMark[] is 't'
00388         if (t == 0)
00389           homePose.tran.x = d;
00390         else if (t == 1)
00391           homePose.tran.y = d;
00392         else if (t == 2)
00393           homePose.tran.z = d;
00394         else if (t == 3)
00395           homePose.a = d;
00396         else if (t == 4)
00397           homePose.b = d;
00398         else
00399           homePose.c = d;
00400 
00401         // position string ptr past this value
00402         len += strlen(home);
00403         // and at start of next value
00404         while ((homes[len] == ' ' || home[len] == '\t') &&
00405                len < INIFILE_MAX_LINELEN) {
00406           len++;
00407         }
00408         if (len >= INIFILE_MAX_LINELEN) {
00409           break;                // out of for loop
00410         }
00411       }
00412       else {
00413         // badly formatted entry
00414         rcs_print("invalid inifile value for [TRAJ] HOME: %s\n", inistring);
00415         break;
00416       }
00417     } // end of for-loop on coordinateMark[]
00418   }
00419   else {
00420     // not found at all
00421     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00422       rcs_print("can't find [TRAJ] HOME, using default\n");
00423     }
00424   }
00425 
00426 
00427   if (0 != emcTrajSetHome(homePose)) {
00428     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00429       rcs_print("bad return value from emcTrajSetHome\n");
00430     }
00431     return -1;
00432   }
00433 
00434   if (NULL != (inistring = trajInifile->find("PROBE_POLARITY", "TRAJ"))) {
00435 #ifndef UNDER_CE
00436     if (1 == sscanf(inistring, "%d", &polarity)) {
00437       // found, and valid
00438     }
00439     else {
00440       // found, but invalid
00441       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00442         rcs_print("invalid inifile value for [TRAJ] PROBE_POLARITY: %s\n", inistring);
00443       }
00444       polarity = 1;                     // default for polarities
00445     }
00446 #else
00447     polarity = atol(inistring);
00448 #endif
00449   }
00450   else {
00451     // not found at all
00452     polarity = 1;                       // default for polarities
00453     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00454       rcs_print("can't find [TRAJ] PROBE_POLARITY, using default\n");
00455     }
00456   }
00457   if (0 != emcTrajSetProbePolarity(polarity)) {
00458     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00459       rcs_print("bad return from emcTrajSetPolarity\n");
00460     }
00461     return -1;
00462   }
00463 
00464   if (NULL != (inistring = trajInifile->find("PROBE_INDEX", "TRAJ"))) {
00465 #ifndef UNDER_CE
00466     if (1 == sscanf(inistring, "%d", &index)) {
00467       // found, and valid
00468     }
00469     else {
00470       // found, but invalid
00471       if (EMC_DEBUG & EMC_DEBUG_INVALID) {
00472         rcs_print("invalid inifile value for [TRAJ] PROBE_INDEX: %s\n", inistring);
00473       }
00474       index = 0;                        // default for indexes
00475     }
00476 #else
00477     index = atol(inistring);
00478 #endif
00479   }
00480   else {
00481     // not found at all
00482     index = 1;                  // default for polarities
00483     if (EMC_DEBUG & EMC_DEBUG_DEFAULTS) {
00484       rcs_print("can't find [TRAJ] PROBE_INDEX, using default\n");
00485     }
00486   }
00487   if (0 != emcTrajSetProbeIndex(index)) {
00488     if (EMC_DEBUG & EMC_DEBUG_CONFIG) {
00489       rcs_print("bad return from emcTrajSetIndex\n");
00490     }
00491     return -1;
00492   }
00493 
00494   return 0;
00495 }


Variable Documentation

INIFILE* trajInifile = 0 [static]
 

Definition at line 42 of file initraj.cc.


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