INTRODUCTION
Overview
Download and Install
Documentation
Publications

REPOSITORY
Libraries

DEVELOPER
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

sickdefines.h

00001 /*
00002  * GearBox Project: Peer-Reviewed Open-Source Libraries for Robotics 
00003  *               http://gearbox.sf.net/
00004  * Copyright (c) 2004-2008 Alex Brooks
00005  *
00006  * This distribution is licensed to you under the terms described in
00007  * the LICENSE file included in this distribution.
00008  *
00009  */
00010 #ifndef SICK_ACFR_DRIVER_SICKDEFINES_H
00011 #define SICK_ACFR_DRIVER_SICKDEFINES_H
00012 
00013 #include <string>
00014 
00015 namespace gbxsickacfr {
00016 
00017     typedef unsigned char uChar;
00018 
00020     //
00021     // Random SICK crap
00022     //
00023     const uChar STX  = 0x02;     // Start of Text
00024     const uChar ACK  = 0x06;
00025     const uChar NACK = 0x15;
00026     const uChar ADDRESS = 0x00;
00027 
00028     const int MAX_SICK_TELEGRAM_LENGTH = 812; // bytes
00029 
00030     const int MAX_RESPONSE_TIME_MS = 60;
00031 
00033     //
00034     // Command Types
00035     //
00036     const uChar CMD_INIT_AND_RESET = 0x10;
00037     const uChar CMD_SWITCH_OPERATING_MODE = 0x20;
00038     const uChar CMD_REQUEST_MEASURED_VALUES = 0x30;
00039     const uChar CMD_REQUEST_LMS_STATUS = 0x31;
00040     const uChar CMD_REQUEST_ERROR_OR_TEST_MESSAGE = 0x32;
00041     const uChar CMD_REQUEST_OPERATING_DATA_COUNTER = 0x35;
00042     const uChar CMD_REQUEST_MEAN_MEASURED_VALUES = 0x36;
00043     const uChar CMD_REQUEST_MEASURED_VALUE_SUBRANGE = 0x37;
00044     const uChar CMD_REQUEST_LMS_TYPE = 0x3A;
00045     const uChar CMD_SWITCH_VARIANT = 0x3B;
00046     const uChar CMD_REQUEST_MEASURED_VALUE_WITH_FIELD_VALUES = 0x3E;
00047     const uChar CMD_REQUEST_MEAN_MEASURED_VALUE_SUBRANGE = 0x3F;
00048     const uChar CMD_CONFIGURE_FIELDS = 0x40;
00049     const uChar CMD_SWITCH_ACTIVE_FIELD_SET = 0x41;
00050     const uChar CMD_CHANGE_PASSWORD = 0x42;
00051     const uChar CMD_REQUEST_MEASURED_VALUES_AND_REFLECTIVITY_VALUE_SUBRANGE = 0x44;
00052     const uChar CMD_REQUEST_CONFIGURED_FIELDS = 0x45;
00053     const uChar CMD_START_TEACH_MODE_FOR_FIELD_CONFIGURATION = 0x46;
00054     const uChar CMD_REQUEST_STATUS_OF_FIELD_OUTPUTS = 0x4A;
00055     const uChar CMD_DEFINE_PERMANENT_BAUD_RATE_OR_LMS_TYPE = 0x66;
00056     const uChar CMD_DEFINE_ANGULAR_RANGE_FOR_POSITIONING_AID = 0x69;
00057     const uChar CMD_REQUEST_LMS_CONFIGURATION = 0x74;
00058     const uChar CMD_REQUEST_MEASURED_VALUE_WITH_REFLECTIVITY_DATA = 0x75;
00059     const uChar CMD_REQUEST_MEASURED_VALUES_IN_CARTESIAN_COORDINATES = 0x76;
00060     const uChar CMD_CONFIGURE_LMS = 0x77;
00061     const uChar CMD_CONFIGURE_LMS_CONTINUED = 0x7C;
00063 
00065     //
00066     // Acknowledgement types
00067     //
00068     inline uChar ack( uChar command ) { return command + 0x80; }
00069 
00070     // Need to do this so they can be used in constant expressions (eg in switch stmts)
00071     const uChar ACK_INIT_AND_RESET = CMD_INIT_AND_RESET + 0x80;
00072     const uChar ACK_SWITCH_OPERATING_MODE = CMD_SWITCH_OPERATING_MODE + 0x80;
00073     const uChar ACK_REQUEST_MEASURED_VALUES = CMD_REQUEST_MEASURED_VALUES + 0x80;
00074     const uChar ACK_REQUEST_LMS_STATUS = CMD_REQUEST_LMS_STATUS + 0x80;
00075     const uChar ACK_REQUEST_ERROR_OR_TEST_MESSAGE = CMD_REQUEST_ERROR_OR_TEST_MESSAGE + 0x80;
00076     const uChar ACK_REQUEST_OPERATING_DATA_COUNTER = CMD_REQUEST_OPERATING_DATA_COUNTER + 0x80;
00077     const uChar ACK_REQUEST_MEAN_MEASURED_VALUES = CMD_REQUEST_MEAN_MEASURED_VALUES + 0x80;
00078     const uChar ACK_REQUEST_MEASURED_VALUE_SUBRANGE = CMD_REQUEST_MEASURED_VALUE_SUBRANGE + 0x80;
00079     const uChar ACK_REQUEST_LMS_TYPE = CMD_REQUEST_LMS_TYPE + 0x80;
00080     const uChar ACK_SWITCH_VARIANT = CMD_SWITCH_VARIANT + 0x80;
00081     const uChar ACK_REQUEST_MEASURED_VALUE_WITH_FIELD_VALUES = 
00082                 CMD_REQUEST_MEASURED_VALUE_WITH_FIELD_VALUES + 0x80;
00083     const uChar ACK_REQUEST_MEAN_MEASURED_VALUE_SUBRANGE = 
00084                 CMD_REQUEST_MEAN_MEASURED_VALUE_SUBRANGE + 0x80;
00085     const uChar ACK_CONFIGURE_FIELDS = CMD_CONFIGURE_FIELDS + 0x80;
00086     const uChar ACK_SWITCH_ACTIVE_FIELD_SET = CMD_SWITCH_ACTIVE_FIELD_SET + 0x80;
00087     const uChar ACK_CHANGE_PASSWORD = CMD_CHANGE_PASSWORD + 0x80;
00088     const uChar ACK_REQUEST_MEASURED_VALUES_AND_REFLECTIVITY_VALUE_SUBRANGE = 
00089                 CMD_REQUEST_MEASURED_VALUES_AND_REFLECTIVITY_VALUE_SUBRANGE + 0x80;
00090     const uChar ACK_REQUEST_CONFIGURED_FIELDS = CMD_REQUEST_CONFIGURED_FIELDS + 0x80;
00091     const uChar ACK_START_TEACH_MODE_FOR_FIELD_CONFIGURATION = 
00092                 CMD_START_TEACH_MODE_FOR_FIELD_CONFIGURATION + 0x80;
00093     const uChar ACK_REQUEST_STATUS_OF_FIELD_OUTPUTS = CMD_REQUEST_STATUS_OF_FIELD_OUTPUTS + 0x80;
00094     const uChar ACK_DEFINE_PERMANENT_BAUD_RATE_OR_LMS_TYPE = 
00095                 CMD_DEFINE_PERMANENT_BAUD_RATE_OR_LMS_TYPE + 0x80;
00096     const uChar ACK_DEFINE_ANGULAR_RANGE_FOR_POSITIONING_AID =
00097                 CMD_DEFINE_ANGULAR_RANGE_FOR_POSITIONING_AID + 0x80;
00098     const uChar ACK_REQUEST_LMS_CONFIGURATION = CMD_REQUEST_LMS_CONFIGURATION + 0x80;
00099     const uChar ACK_REQUEST_MEASURED_VALUE_WITH_REFLECTIVITY_DATA =
00100                 CMD_REQUEST_MEASURED_VALUE_WITH_REFLECTIVITY_DATA + 0x80;
00101     const uChar ACK_REQUEST_MEASURED_VALUES_IN_CARTESIAN_COORDINATES = 
00102                 CMD_REQUEST_MEASURED_VALUES_IN_CARTESIAN_COORDINATES + 0x80;
00103     const uChar ACK_CONFIGURE_LMS = CMD_CONFIGURE_LMS + 0x80;
00104     const uChar ACK_CONFIGURE_LMS_CONTINUED = CMD_CONFIGURE_LMS_CONTINUED + 0x80;
00105     
00106     // Response Types (in addition to acknowledgement types)
00107     const uChar RESP_SOFTWARE_RESET_CONFIRM = 0x91;
00108     const uChar RESP_INCORRECT_COMMAND = 0x92;
00109 
00110     std::string cmdToString( uChar command );
00111     
00112 
00114     //
00115     // Operating Modes
00116     //
00117     const uChar OPERATING_MODE_INSTALLATION = 0x00;
00118 
00119     const uChar OPERATING_MODE_DIAGNOSIS = 0x10;
00120 
00121     const uChar OPERATING_MODE_MIN_MEASURED_CONTINUOUS = 0x20;
00122     const uChar OPERATING_MODE_MIN_MEASURED_IN_FIELD = 0x21;
00123     const uChar OPERATING_MODE_MIN_VERTICAL_DISTANCE_CONTINUOUS = 0x22;
00124     const uChar OPERATING_MODE_MIN_VERTICAL_DISTANCE_IN_FIELD = 0x23;
00125     const uChar OPERATING_MODE_ALL_MEASURED_CONTINUOUS = 0x24;
00126     const uChar OPERATING_MODE_MEASURED_ON_REQUEST = 0x25; // (this is the default setting)
00127     const uChar OPERATING_MODE_MEAN_MEASURED_CONTINUOUS = 0x26;
00128     const uChar OPERATING_MODE_MEASURED_SUBRANGE_CONTINUOUS = 0x27;
00129     const uChar OPERATING_MODE_MEAN_MEASURED_SUBRANGE_CONTINUOUS = 0x28;
00130     const uChar OPERATING_MODE_MEASURED_WITH_FIELD_VALUES_CONTINUOUS = 0x29;
00131     const uChar OPERATING_MODE_MEASURED_PARTIAL_CONTINUOUS = 0x2A;
00132     const uChar OPERATING_MODE_MEASURED_N_PARTIAL_CONTINUOUS = 0x2B;
00133     const uChar OPERATING_MODE_MEASURED_PER_SEGMENT_CONTINUOUS = 0x2C;
00134     const uChar OPERATING_MODE_NAV_DATA_RECORDS = 0x2E;
00135     const uChar OPERATING_MODE_ALL_MEASURED_PLUS_REFLECTIVITY_SUBRANGE_CONTINUOUS = 0x50;
00136 
00137     const uChar OPERATING_MODE_TEST_PASSWORD = 0x30;
00138 
00139     const uChar OPERATING_MODE_SET_BAUDRATE_38400  = 0x40;
00140     const uChar OPERATING_MODE_SET_BAUDRATE_19200  = 0x41;
00141     const uChar OPERATING_MODE_SET_BAUDRATE_9600   = 0x42;
00142     const uChar OPERATING_MODE_SET_BAUDRATE_500000 = 0x48;
00143     
00144     std::string operatingModeToString( uChar operatingMode );
00145 
00147     //
00148     // Operating Mode Response Data
00149     //
00150     const uChar OPERATING_MODE_RESPONSE_SUCCESS = 0x00;
00151     const uChar OPERATING_MODE_RESPONSE_FAIL    = 0x01;
00152 
00154     //
00155     // Status Response Data Stuff
00156     //
00157     const int VERSION_LENGTH = 6;
00158     const int SOFTWARE_VERSION_LENGTH = 6;
00159     const int MANUFACTURER_LENGTH = 8;
00160     const int POLLUTION_LENGTH = 8;
00161     const int REF_POLLUTION_LENGTH = 4;
00162     const int CALIB_POLLUTION_LENGTH = 8;
00163     const int CALIB_REF_POLLUTION_LENGTH = 4;
00164 
00166     //
00167     // Measuring Modes
00168     //
00169     const uChar MEASURING_MODE_8m80m_FIELD_AB_DAZZLE = 0x00; // (default value)
00170     const uChar MEASURING_MODE_8m80m_REFLECTOR8LEVELS = 0x01;
00171     const uChar MEASURING_MODE_8m80m_FIELD_ABC = 0x02;
00172     const uChar MEASURING_MODE_16m_REFLECTOR4LEVELS = 0x03;
00173     const uChar MEASURING_MODE_16m_FIELD_AB = 0x04;
00174     const uChar MEASURING_MODE_32m_FIELD_AB = 0x05;
00175     const uChar MEASURING_MODE_32m_FIELD_A = 0x06;
00176 
00177     std::string measuringModeToString( uChar mode );
00178 
00180     //
00181     // Status Codes
00182     //
00183     
00184     const uChar STATUS_GENERAL_MASK = 0x07;
00185     // These apply to the lower 3 bits as masked by STATUS_GENERAL_MASK
00186     const uChar STATUS_OK          = 0x00;
00187     const uChar STATUS_INFO        = 0x01;
00188     const uChar STATUS_WARNING     = 0x02;
00189     const uChar STATUS_ERROR       = 0x03;
00190     const uChar STATUS_FATAL_ERROR = 0x04;
00191 
00192     // one-bit masks
00193     const uChar STATUS_RESTART_MASK = 0x20;
00194     const uChar STATUS_IMPLAUSIBLE_MEASURED_VALUES_MASK = 0x30;
00195     const uChar STATUS_POLLUTION_MASK = 0x80;
00196 
00197     std::string statusToString( uChar status );
00198     bool generalStatusIsWarn( uChar generalStatus );
00199     bool generalStatusIsError( uChar generalStatus );
00200     
00201 
00203     //
00204     // Status Codes
00205     //
00206 
00207     const uChar MODE_SWITCH_SUCCESS_OK = 0x00;
00208     const uChar MODE_SWITCH_FAIL_BAD_PASSWORD = 0x01;
00209     const uChar MODE_SWITCH_FAIL_LMS_FAULT = 0x02;
00210 
00211     std::string modeSwitchSuccessToString( uChar success );
00212 
00214     //
00215     // Measurement units
00216     //
00217 
00218     const uChar MEASURED_VALUE_UNIT_CM = 0x00;
00219     const uChar MEASURED_VALUE_UNIT_MM = 0x01;
00220 
00221     std::string measuredValueUnitToString( uChar unit );
00222 
00224     //
00225     // Angular Resolution and scanning angle
00226     //
00227     const uint16_t ANGULAR_RESOLUTION_1_0_DEG = 100;
00228     const uint16_t ANGULAR_RESOLUTION_0_5_DEG = 50;
00229     const uint16_t ANGULAR_RESOLUTION_0_25_DEG = 25;
00230 
00231     inline double angularResolutionToDoubleInDegrees( uint16_t angularResolution )
00232     { return angularResolution/100.0; }
00233 
00234     const uint16_t SCANNING_ANGLE_180 = 180;
00235     const uint16_t SCANNING_ANGLE_100 = 100;
00236 
00237     const uChar SWITCH_VARIANT_SUCCESS = 0x01;
00238     const uChar SWITCH_VARIANT_FAIL    = 0x00;
00239 
00240     std::string switchVariantSuccessToString( uChar success );
00241 
00243     //
00244     // Sensitivity
00245     //
00246 
00247     const uChar SENSITIVITY_STANDARD = 0x00; // between medium and high
00248     const uChar SENSITIVITY_MEDIUM = 0x01;
00249     const uChar SENSITIVITY_LOW = 0x02;
00250     const uChar SENSITIVITY_HIGH = 0x03;
00251 
00252     std::string sensitivityToString( uChar sens );
00253 
00255     //
00256     // Configuration success
00257     //
00258 
00259     const uChar CONFIGURATION_SUCCESS = 0x01;
00260     const uChar CONFIGURATION_FAIL    = 0x00;
00261 
00262     std::string configurationSuccessToString( uChar success );
00263 
00265     //
00266     // Baud rates
00267     //
00268 
00269     // returns -1 on error
00270     int baudRateToInt( uint16_t baudRate );
00271     uChar baudRateIntToOperatingMode( int baudRate );
00272 
00273     std::string permanentBaudRateToString( uChar permanentBaudRate );
00274 
00276     //
00277     // Error codes
00278     //
00279 
00280     const uChar ERROR_TYPE_NO_LONGER_RELEVANT_MASK = 0x80;
00281 
00282     const uChar ERROR_CODE_DAZZLE_TEST = 05;
00283     const uChar ERROR_CODE_PEAK_COMPARATOR_TEST = 06;
00284     const uChar ERROR_CODE_STOP_COMPARATOR_TEST = 07;
00285     const uChar ERROR_CODE_TDC_INIT_AND_GATE_FUNCTION_TEST = 15;
00286     const uChar ERROR_CODE_POLLUTION_EVALUATION_OIL_CHANNEL_1 = 17;
00287     const uChar ERROR_CODE_POLLUTION_EVALUATION_DIRT_CHANNEL_1 = 18;
00288     const uChar ERROR_CODE_POLLUTION_EVALUATION_DIRT_CHANNEL_2 = 19;
00289     const uChar ERROR_CODE_POLLUTION_EVALUATION_OIL_CHANNEL_2 = 20;
00290     const uChar ERROR_CODE_POLLUTION_EVALUATION_REF_CHANNEL_0 = 21;
00291     const uChar ERROR_CODE_POLLUTION_EVALUATION_REF_CHANNEL_1 = 22;
00292     const uChar ERROR_CODE_OUTPUT_A_DEFECTIVE = 27;
00293     const uChar ERROR_CODE_OUTPUT_B_DEFECTIVE = 28;
00294     const uChar ERROR_CODE_NUM_MOTOR_REVOLUTIONS = 29;
00295     const uChar ERROR_CODE_CALIBRATION_POLLUTION = 37;
00296     const uChar ERROR_CODE_TIMEOUT_ON_TDC_CALIBRATION = 39;
00297     const uChar ERROR_CODE_1_MEASUREMENT_VALUE_MISSING = 45;
00298     const uChar ERROR_CODE_1_SCAN_MISSING_SCAN_LASTS_TOO_LONG = 46;
00299     const uChar ERROR_CODE_REFERENCE_TARGET_LOAD_PULSE_WIDTH_IMPLAUSIBLE = 47;
00300     const uChar ERROR_CODE_CALIBRATION_OF_LASER_POWER = 48;
00301     const uChar ERROR_CODE_LASER_POWER_OUTSIDE_50_PCT_140_PCT = 49;
00302     const uChar ERROR_CODE_INITIALISATION_TDC_MO_CHANNEL_0_AND_1 = 50;
00303     const uChar ERROR_CODE_DA_AD_TEST_STOP_BRANCH = 51;
00304     const uChar ERROR_CODE_DA_AD_TEST_PEAK_BRANCH = 52;
00305     const uChar ERROR_CODE_FLASH_WRITTEN = 53;
00306     const uChar ERROR_CODE_POLLUTION_CHANNEL_MEASUREMENT_WITHOUT_ACTIVE_TRANSMITTER = 54;
00307     const uChar ERROR_CODE_NO_TWO_DIFFERENT_ANGLES_DETECTED_ON_LASER_POWER_CALIBRATION = 55;
00308     const uChar ERROR_CODE_HARDWARE_WATCHDOG_DEFECTIVE = 56;
00309     const uChar ERROR_CODE_NO_ZERO_INDEX_SIGNAL_AVAILABLE = 57;
00310     const uChar ERROR_CODE_SLAVE_CANNOT_SYNC_DURING_INIT = 58;
00311     const uChar ERROR_CODE_SYNC_LOST_IN_OPERATING_STATE = 59;
00312     const uChar ERROR_CODE_SYNC_CYCLE_FROM_MASTER_MISSING = 60;
00313     const uChar ERROR_CODE_HARDWARE_UNSUITABLE_FOR_SYNC_IN_SLAVE_OPERATING_MODE = 61;
00314     const uChar ERROR_CODE_WRONG_DIP_SWITCH_POSITION = 62;
00315     const uChar ERROR_CODE_REF_TARGET_SMALLEST_PULSE_WIDTH_TOO_SMALL = 86;
00316     const uChar ERROR_CODE_REF_TARGET_LARGEST_PULSE_WIDTH_TOO_LARGE = 87;
00317     const uChar ERROR_CODE_REF_TARGET_PULSE_WIDTH_SPECTRUM_TOO_LARGE = 88;
00318     const uChar ERROR_CODE_REF_TARGET_REF_TABLE_LESS_THAN_2_CYCLES_UPDATE = 89;
00319     const uChar ERROR_CODE_REF_TARGET_REFLECTIVITY_MEASUREMENT_CANNOT_BE_CALIBRATED = 91;
00320     const uChar ERROR_CODE_REF_TARGET_TEACH_IN_MODE_IS_NOT_COMPLETED = 92;
00321     const uChar ERROR_CODE_OUT_OF_MEMORY_IN_MEASUREMENT_ROUTINE = 124;
00322     const uChar ERROR_CODE_OUT_OF_MEMORY_IN_REFERENCE_TARGET_ROUTINE = 125;
00323     const uChar ERROR_CODE_OUT_OF_MEMORY_IN_REFERENCE_TARGET_ANGULAR_TABLE = 126;
00324 
00325     std::string errorTypeToString( uChar errorType );
00326     bool errorTypeIsWarn( uChar errorType );
00327     bool errorTypeIsError( uChar errorType );
00328     std::string errorCodeToString( uChar errorCode );
00329 }
00330 
00331 #endif
 

Generated for GearBox by  doxygen 1.4.5