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

C:/temp/src/j2k/nto/speed.cpp

Go to the documentation of this file.
00001 #include <j2k/Fred/Standard.hpp>
00002 
00003 //  -1  Emergency stop
00004 //   0  Stop
00005 //   1   1st speed step:  1/14 * MAX
00006 //   2   2nd speed step:  2/14 * MAX
00007 //   3   3rd speed step:  3/14 * MAX
00008 //   4   4th speed step:  4/14 * MAX
00009 //   5   5th speed step:  5/14 * MAX
00010 //   6   6th speed step:  6/14 * MAX
00011 //   7   7th speed step:  7/14 * MAX
00012 //   8   8th speed step:  8/14 * MAX
00013 //   9   9th speed step:  9/14 * MAX
00014 //  10  10th speed step: 10/14 * MAX
00015 //  11  11th speed step: 11/14 * MAX
00016 //  12  12th speed step: 12/14 * MAX
00017 //  13  13th speed step: 13/14 * MAX
00018 //  14  14th speed step: 14/14 * MAX
00019 
00020 
00021 // If you don't understand look at the HEX value table at p.123 !
00022 // 0x00 = Stop
00023 // 0x01 = Emergency Stop
00024 // 0x11 = Emergency Stop
00025 // 0x02 =  1/14
00026 // 0x12 =  2/14
00027 // 0x03 =  3/14
00028 // 0x13 =  4/14
00029 // 0x04 =  5/14
00030 // 0x14 =  6/14
00031 // 0x05 =  7/14
00032 // 0x15 =  8/14
00033 // 0x06 =  9/14
00034 // 0x16 = 10/14
00035 // 0x07 = 11/14
00036 // 0x17 = 12/14
00037 // 0x08 = 13/14
00038 // 0x18 = 14/14
00039 
00040 UCHAR getSpeedHex( int spd )
00041 {
00042   //
00043   // Emergency stop
00044   //
00045   if ( spd <  0 ) return 0x01;
00046 
00047   //
00048   // Stop the train
00049   //
00050   if ( spd == 0 ) return 0x00;
00051 
00052   assert( spd <= 28 );
00053 
00054   // 
00055   // if ( spd ) { even = 0x00; } else { even = 0x10; }
00056   //
00057   register UCHAR even = ( (spd & 0x01) ? 0x00 : 0x10 );
00058 
00059 
00060   //
00061   // Same as: val = (spd+1)/2  + 1;
00062   //
00063   register UCHAR val  = spd;
00064 
00065 
00066   val++;
00067   val >>= 1;  // Shift Right by 1  _OR_  Divide by 2
00068   val++;
00069 
00070   return even + val;  
00071 }
00072 
00073 char* setSpeed( UCHAR trainid, int speed, BOOL clockwise, BOOL lights )
00074 {
00075   char buf[13];
00076   memset( buf, 0, 13 );
00077 
00078   register UCHAR checksum = trainid;
00079   register UCHAR command  = 0x40;      // Set Speed 14 speed steps
00080 
00081   if ( clockwise ) command += 0x20;
00082   if ( lights    ) command += 0x10;
00083   
00084   command += getSpeedHex( speed );
00085 
00086   // XOR the parameters to get checksum = trainid ^ command.
00087   checksum ^= command;
00088 
00089   sprintf( buf, "Q %02X %02X %02X%c%c", trainid, command, checksum, 13, 0 ); 
00090 
00091   printf( "Train #%d is going at speed %d ", trainid, speed );
00092 
00093   if ( clockwise ) {
00094     printf( "in the forward direction " );
00095   } else {
00096     printf( "in the reverse direction " );
00097   }
00098 
00099   if ( lights ) {
00100     printf( "with the lights ON \n" );
00101   } else {
00102     printf( "with the lights OFF \n" );
00103   }
00104 
00105   printf( "\t%s\n", buf );
00106   fflush( stdout );
00107 
00108   return strdup( buf );
00109 }
00110 
00111 /*
00112 void setInfo( UCHAR trainid, int speed, BOOL clockwise, BOOL lights )
00113 {
00114     char buf[12];
00115     char* cmd = setSpeed( trainid, speed, clockwise, lights );
00116     memset( buf, 0, 12 );
00117 
00118     int done = 0;
00119     int loop = 1;
00120     while( !done )
00121     {
00122        loop++;
00123    if ( loop > 10 ) exit( 1 );
00124   
00125        write( cmd, strlen( cmd ) );
00126        size_t size_read = read( buf, 12 );      
00127        if ( buf[0] != 'O' ) 
00128        { 
00129          // error 
00130          cmd = setSpeed( trainid, speed, clockwise, lights );
00131        } else {
00132          done = 1;
00133        } 
00134     }
00135 } 
00136 
00137 */
00138 
00139 void test()
00140 {
00141   UCHAR trainid  = 7;
00142 
00143   for( int l =  0; l <= 1; l++ ) 
00144   for( int d =  0; d <= 1; d++ ) 
00145   for( int i = -1; i <= 14; i++ ) 
00146   {
00147     char* b = setSpeed( trainid, i, d==1, l==1 );
00148     printf( "Command: %s", b );
00149   }
00150 }
00151 
00152 
00153 int main()
00154 {
00155   test();
00156 
00157   return 0;
00158 }
00159 

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