Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/QNX4/Train/Track.cpp

Go to the documentation of this file.
00001 #ifndef __J2K__Train__Track_CPP__
00002 #define __J2K__Train__Track_CPP__
00003 
00004 Track::Track()
00005 {
00006   initSegments();
00007   initSwitches();
00008   initGeometry();
00009 
00010   //testSwitches();
00011 }
00012 
00013 
00014 void Track::initSegments()
00015 {
00016   int i;
00017   for( i = 0; i < NSEG; i++ ) {
00018     segment[i].setSegmentID(i+1);
00019   }
00020 }
00021 
00022 void Track::initSwitches()
00023 {
00024   int i;
00025 
00026   // Initialize (close) the switches...
00027   for( i = 0; i < NSW; i++ ) {
00028     switch[i].setSwitchID(i+1);
00029   }
00030 }
00031 
00032 void Track::initGeometry()
00033 {
00034   // The following assumes that ALL switches are closed (inner track connected).
00035   // Create the geometry by linking the segment IDs (not the array indices!)
00036 
00037   segment[ 1-1].setNext(2);
00038   segment[ 2-1].setNext(5);
00039   segment[ 3-1].setNext(4);
00040   segment[ 4-1].setNext(7);
00041   segment[ 5-1].setNext(6);
00042   segment[ 6-1].setNext(7);
00043   segment[ 7-1].setNext(8);
00044   segment[ 8-1].setNext(9);
00045   segment[ 9-1].setNext(10);
00046   segment[10-1].setNext(11);
00047   segment[11-1].setNext(12);
00048   segment[12-1].setNext(15);
00049   segment[13-1].setNext(14);
00050   segment[14-1].setNext(15);
00051   segment[15-1].setNext(16);
00052   segment[16-1].setNext(1);
00053 
00054   segment[ 1-1].setPrev(16);
00055   segment[ 2-1].setPrev(1);
00056   segment[ 3-1].setPrev(2);
00057   segment[ 4-1].setPrev(3);
00058   segment[ 5-1].setPrev(2);
00059   segment[ 6-1].setPrev(5);
00060   segment[ 7-1].setPrev(6);
00061   segment[ 8-1].setPrev(7);
00062   segment[ 9-1].setPrev(8);
00063   segment[10-1].setPrev(9);
00064   segment[11-1].setPrev(10);
00065   segment[12-1].setPrev(11);
00066   segment[13-1].setPrev(10);
00067   segment[14-1].setPrev(13);
00068   segment[15-1].setPrev(12);
00069   segment[16-1].setPrev(15);
00070 
00071   showGeometry();
00072 }
00073 
00074 void Track::showGeometry()
00075 {
00076   int ID;
00077   printf("Track Geometry\n==============\n\n");
00078 
00079   for( ID = 1; ID <= NSEG; ID++) {
00080     printf("(%2d) --> %2d\t", ID, segment[ID-1].getNext() );
00081 
00082     if ( ID % 4 == 0 ) {  printf("\n"); }
00083   }                                                                                    
00084 
00085   printf("\n\n\n");
00086   for( ID = 1; ID <= NSEG; ID++) {
00087     printf("(%2d) <-- %2d\t", ID, segment[ID-1].getPrev() );
00088     if ( ID % 4 == 0 ) {  printf("\n"); }
00089   }                                                                                    
00090                                                                                              
00091   printf("\n\n");          
00092 }
00093 
00094 Track::~Track() { }
00095 
00096 void Track::testSwitches()
00097 {
00098   delay( 5000 );   // DEBUG!!!!
00099 
00100   for( int Sw = 1; Sw <= NSW; Sw++ ) {
00101     setSwitch( Sw, 1 );
00102     delay( 250 );
00103 
00104     setSwitch( Sw, 0 );
00105     delay( 250 );
00106   }
00107 }
00108 
00109 int Track::isSegmentOccupied(int Seg)
00110 {
00111   if ( Seg >= 1 && Seg <= NSEG ) {     // Validation
00112     return  segment[Seg-1].isOccupied();
00113   } else {
00114     printf("Track ERROR - isActive: Zone out of range\a\n");
00115     exit(1);
00116     return  0;
00117   }
00118 }
00119 
00120 void Track::setSwitch(int S, int P) {
00121   if ( Seg >= 1 && Seg <= NSEG ) {     // Validation
00122     switch[S-1].setSwitch(P);
00123     updateTrack(S,P);
00124   } else {
00125     printf("Track ERROR - setSwitch: Switch out of range\a\n");
00126     exit(1);
00127   }
00128 }
00129 
00130 void Track::updateTrack(int ID, int P) {
00131   // the following code is to update the track
00132   if ( P == OPEN ) {
00133     switch( ID ) {
00134       case 1: segment[2-1].setNext(3);
00135               segment[3-1].setPrev(2);
00136               segment[5-1].setPrev(2);
00137               break;  // Update the next segment of segment 2
00138 
00139       case 2: segment[7-1].setPrev(4);
00140               segment[4-1].setNext(7);
00141               segment[6-1].setNext(7);
00142               break;  // Update the previous segment of segment 7
00143 
00144       case 3: segment[10-1].setNext(13);
00145               segment[13-1].setPrev(10);
00146               segment[11-1].setPrev(10);
00147               break;  // Update the next segment of segment 10
00148 
00149       case 4: segment[15-1].setPrev(14);
00150               segment[14-1].setNext(15);
00151               segment[12-1].setNext(15);
00152               break;  // Update the previous segment of segment 15
00153     }
00154 
00155   } else {
00156     switch( ID ) {
00157      case 1: segment[2-1].setNext(5);
00158              segment[3-1].setPrev(2);
00159              segment[5-1].setPrev(2);
00160              break;   // Update the next segment of segment 2
00161 
00162      case 2: segment[7-1].setPrev(6);                                                  
00163              segment[4-1].setNext(7);
00164              segment[6-1].setNext(7);
00165              break;   // Update the previous segment of segment 7                            
00166 
00167      case 3: segment[10-1].setNext(11);
00168              segment[13-1].setPrev(10);
00169              segment[11-1].setPrev(10);
00170              break;   // Update the next segment of segment 10
00171 
00172      case 4: segment[15-1].setPrev(12);
00173              segment[14-1].setNext(15);
00174              segment[12-1].setNext(15);
00175              break;  //update the previous segment of segment 15                           
00176     }   
00177   }
00178 }
00179 
00180 int Track::GetNext( int s )
00181 {
00182   return segment[s-1].getNext();
00183 }
00184 
00185 int Track::GetPrev( int s ) 
00186 {
00187   return segment[s-1].getPrev();
00188 }
00189 
00190 #endif

Generated on Sun Oct 14 18:46:37 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001