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
1 /*
2  * GearBox Project: Peer-Reviewed Open-Source Libraries for Robotics
3  * http://gearbox.sf.net/
4  * Copyright (c) 2004-2010 Alex Brooks
5  *
6  * This distribution is licensed to you under the terms described in
7  * the LICENSE file included in this distribution.
8  *
9  */
10 #ifndef SICK_ACFR_DRIVER_SICKDEFINES_H
11 #define SICK_ACFR_DRIVER_SICKDEFINES_H
12 
13 #include <string>
14 #include <stdint.h>
15 
16 namespace gbxsickacfr {
17 
18  typedef unsigned char uChar;
19 
21  //
22  // Random SICK crap
23  //
24  const uChar STX = 0x02; // Start of Text
25  const uChar ACK = 0x06;
26  const uChar NACK = 0x15;
27  const uChar ADDRESS = 0x00;
28 
29  const int MAX_SICK_TELEGRAM_LENGTH = 812; // bytes
30 
31  const int MAX_RESPONSE_TIME_MS = 60;
32 
34  //
35  // Command Types
36  //
37  const uChar CMD_INIT_AND_RESET = 0x10;
38  const uChar CMD_SWITCH_OPERATING_MODE = 0x20;
39  const uChar CMD_REQUEST_MEASURED_VALUES = 0x30;
40  const uChar CMD_REQUEST_LMS_STATUS = 0x31;
41  const uChar CMD_REQUEST_ERROR_OR_TEST_MESSAGE = 0x32;
42  const uChar CMD_REQUEST_OPERATING_DATA_COUNTER = 0x35;
43  const uChar CMD_REQUEST_MEAN_MEASURED_VALUES = 0x36;
44  const uChar CMD_REQUEST_MEASURED_VALUE_SUBRANGE = 0x37;
45  const uChar CMD_REQUEST_LMS_TYPE = 0x3A;
46  const uChar CMD_SWITCH_VARIANT = 0x3B;
47  const uChar CMD_REQUEST_MEASURED_VALUE_WITH_FIELD_VALUES = 0x3E;
48  const uChar CMD_REQUEST_MEAN_MEASURED_VALUE_SUBRANGE = 0x3F;
49  const uChar CMD_CONFIGURE_FIELDS = 0x40;
50  const uChar CMD_SWITCH_ACTIVE_FIELD_SET = 0x41;
51  const uChar CMD_CHANGE_PASSWORD = 0x42;
52  const uChar CMD_REQUEST_MEASURED_VALUES_AND_REFLECTIVITY_VALUE_SUBRANGE = 0x44;
53  const uChar CMD_REQUEST_CONFIGURED_FIELDS = 0x45;
54  const uChar CMD_START_TEACH_MODE_FOR_FIELD_CONFIGURATION = 0x46;
55  const uChar CMD_REQUEST_STATUS_OF_FIELD_OUTPUTS = 0x4A;
56  const uChar CMD_DEFINE_PERMANENT_BAUD_RATE_OR_LMS_TYPE = 0x66;
57  const uChar CMD_DEFINE_ANGULAR_RANGE_FOR_POSITIONING_AID = 0x69;
58  const uChar CMD_REQUEST_LMS_CONFIGURATION = 0x74;
59  const uChar CMD_REQUEST_MEASURED_VALUE_WITH_REFLECTIVITY_DATA = 0x75;
60  const uChar CMD_REQUEST_MEASURED_VALUES_IN_CARTESIAN_COORDINATES = 0x76;
61  const uChar CMD_CONFIGURE_LMS = 0x77;
62  const uChar CMD_CONFIGURE_LMS_CONTINUED = 0x7C;
64 
66  //
67  // Acknowledgement types
68  //
69  inline uChar ack( uChar command ) { return (uChar)(command + 0x80); }
70 
71  // Need to do this so they can be used in constant expressions (eg in switch stmts)
72  const uChar ACK_INIT_AND_RESET = CMD_INIT_AND_RESET + 0x80;
73  const uChar ACK_SWITCH_OPERATING_MODE = CMD_SWITCH_OPERATING_MODE + 0x80;
74  const uChar ACK_REQUEST_MEASURED_VALUES = CMD_REQUEST_MEASURED_VALUES + 0x80;
75  const uChar ACK_REQUEST_LMS_STATUS = CMD_REQUEST_LMS_STATUS + 0x80;
76  const uChar ACK_REQUEST_ERROR_OR_TEST_MESSAGE = CMD_REQUEST_ERROR_OR_TEST_MESSAGE + 0x80;
77  const uChar ACK_REQUEST_OPERATING_DATA_COUNTER = CMD_REQUEST_OPERATING_DATA_COUNTER + 0x80;
78  const uChar ACK_REQUEST_MEAN_MEASURED_VALUES = CMD_REQUEST_MEAN_MEASURED_VALUES + 0x80;
79  const uChar ACK_REQUEST_MEASURED_VALUE_SUBRANGE = CMD_REQUEST_MEASURED_VALUE_SUBRANGE + 0x80;
80  const uChar ACK_REQUEST_LMS_TYPE = CMD_REQUEST_LMS_TYPE + 0x80;
81  const uChar ACK_SWITCH_VARIANT = CMD_SWITCH_VARIANT + 0x80;
82  const uChar ACK_REQUEST_MEASURED_VALUE_WITH_FIELD_VALUES =
83  CMD_REQUEST_MEASURED_VALUE_WITH_FIELD_VALUES + 0x80;
84  const uChar ACK_REQUEST_MEAN_MEASURED_VALUE_SUBRANGE =
85  CMD_REQUEST_MEAN_MEASURED_VALUE_SUBRANGE + 0x80;
86  const uChar ACK_CONFIGURE_FIELDS = CMD_CONFIGURE_FIELDS + 0x80;
87  const uChar ACK_SWITCH_ACTIVE_FIELD_SET = CMD_SWITCH_ACTIVE_FIELD_SET + 0x80;
88  const uChar ACK_CHANGE_PASSWORD = CMD_CHANGE_PASSWORD + 0x80;
89  const uChar ACK_REQUEST_MEASURED_VALUES_AND_REFLECTIVITY_VALUE_SUBRANGE =
90  CMD_REQUEST_MEASURED_VALUES_AND_REFLECTIVITY_VALUE_SUBRANGE + 0x80;
91  const uChar ACK_REQUEST_CONFIGURED_FIELDS = CMD_REQUEST_CONFIGURED_FIELDS + 0x80;
92  const uChar ACK_START_TEACH_MODE_FOR_FIELD_CONFIGURATION =
93  CMD_START_TEACH_MODE_FOR_FIELD_CONFIGURATION + 0x80;
94  const uChar ACK_REQUEST_STATUS_OF_FIELD_OUTPUTS = CMD_REQUEST_STATUS_OF_FIELD_OUTPUTS + 0x80;
95  const uChar ACK_DEFINE_PERMANENT_BAUD_RATE_OR_LMS_TYPE =
96  CMD_DEFINE_PERMANENT_BAUD_RATE_OR_LMS_TYPE + 0x80;
97  const uChar ACK_DEFINE_ANGULAR_RANGE_FOR_POSITIONING_AID =
98  CMD_DEFINE_ANGULAR_RANGE_FOR_POSITIONING_AID + 0x80;
99  const uChar ACK_REQUEST_LMS_CONFIGURATION = CMD_REQUEST_LMS_CONFIGURATION + 0x80;
100  const uChar ACK_REQUEST_MEASURED_VALUE_WITH_REFLECTIVITY_DATA =
101  CMD_REQUEST_MEASURED_VALUE_WITH_REFLECTIVITY_DATA + 0x80;
102  const uChar ACK_REQUEST_MEASURED_VALUES_IN_CARTESIAN_COORDINATES =
103  CMD_REQUEST_MEASURED_VALUES_IN_CARTESIAN_COORDINATES + 0x80;
104  const uChar ACK_CONFIGURE_LMS = CMD_CONFIGURE_LMS + 0x80;
105  const uChar ACK_CONFIGURE_LMS_CONTINUED = CMD_CONFIGURE_LMS_CONTINUED + 0x80;
106 
107  // Response Types (in addition to acknowledgement types)
108  const uChar RESP_SOFTWARE_RESET_CONFIRM = 0x91;
109  const uChar RESP_INCORRECT_COMMAND = 0x92;
110 
111  std::string cmdToString( uChar command );
112 
113 
115  //
116  // Operating Modes
117  //
118  const uChar OPERATING_MODE_INSTALLATION = 0x00;
119 
120  const uChar OPERATING_MODE_DIAGNOSIS = 0x10;
121 
122  const uChar OPERATING_MODE_MIN_MEASURED_CONTINUOUS = 0x20;
123  const uChar OPERATING_MODE_MIN_MEASURED_IN_FIELD = 0x21;
124  const uChar OPERATING_MODE_MIN_VERTICAL_DISTANCE_CONTINUOUS = 0x22;
125  const uChar OPERATING_MODE_MIN_VERTICAL_DISTANCE_IN_FIELD = 0x23;
126  const uChar OPERATING_MODE_ALL_MEASURED_CONTINUOUS = 0x24;
127  const uChar OPERATING_MODE_MEASURED_ON_REQUEST = 0x25; // (this is the default setting)
128  const uChar OPERATING_MODE_MEAN_MEASURED_CONTINUOUS = 0x26;
129  const uChar OPERATING_MODE_MEASURED_SUBRANGE_CONTINUOUS = 0x27;
130  const uChar OPERATING_MODE_MEAN_MEASURED_SUBRANGE_CONTINUOUS = 0x28;
131  const uChar OPERATING_MODE_MEASURED_WITH_FIELD_VALUES_CONTINUOUS = 0x29;
132  const uChar OPERATING_MODE_MEASURED_PARTIAL_CONTINUOUS = 0x2A;
133  const uChar OPERATING_MODE_MEASURED_N_PARTIAL_CONTINUOUS = 0x2B;
134  const uChar OPERATING_MODE_MEASURED_PER_SEGMENT_CONTINUOUS = 0x2C;
135  const uChar OPERATING_MODE_NAV_DATA_RECORDS = 0x2E;
136  const uChar OPERATING_MODE_ALL_MEASURED_PLUS_REFLECTIVITY_SUBRANGE_CONTINUOUS = 0x50;
137 
138  const uChar OPERATING_MODE_TEST_PASSWORD = 0x30;
139 
140  const uChar OPERATING_MODE_SET_BAUDRATE_38400 = 0x40;
141  const uChar OPERATING_MODE_SET_BAUDRATE_19200 = 0x41;
142  const uChar OPERATING_MODE_SET_BAUDRATE_9600 = 0x42;
143  const uChar OPERATING_MODE_SET_BAUDRATE_500000 = 0x48;
144 
145  std::string operatingModeToString( uChar operatingMode );
146 
148  //
149  // Operating Mode Response Data
150  //
151  const uChar OPERATING_MODE_RESPONSE_SUCCESS = 0x00;
152  const uChar OPERATING_MODE_RESPONSE_FAIL = 0x01;
153 
155  //
156  // Status Response Data Stuff
157  //
158  const int VERSION_LENGTH = 6;
159  const int SOFTWARE_VERSION_LENGTH = 6;
160  const int MANUFACTURER_LENGTH = 8;
161  const int POLLUTION_LENGTH = 8;
162  const int REF_POLLUTION_LENGTH = 4;
163  const int CALIB_POLLUTION_LENGTH = 8;
164  const int CALIB_REF_POLLUTION_LENGTH = 4;
165 
167  //
168  // Measuring Modes
169  //
170  const uChar MEASURING_MODE_8m80m_FIELD_AB_DAZZLE = 0x00; // (default value)
171  const uChar MEASURING_MODE_8m80m_REFLECTOR8LEVELS = 0x01;
172  const uChar MEASURING_MODE_8m80m_FIELD_ABC = 0x02;
173  const uChar MEASURING_MODE_16m_REFLECTOR4LEVELS = 0x03;
174  const uChar MEASURING_MODE_16m_FIELD_AB = 0x04;
175  const uChar MEASURING_MODE_32m_FIELD_AB = 0x05;
176  const uChar MEASURING_MODE_32m_FIELD_A = 0x06;
177 
178  std::string measuringModeToString( uChar mode );
179 
181  //
182  // Status Codes
183  //
184 
185  const uChar STATUS_GENERAL_MASK = 0x07;
186  // These apply to the lower 3 bits as masked by STATUS_GENERAL_MASK
187  const uChar STATUS_OK = 0x00;
188  const uChar STATUS_INFO = 0x01;
189  const uChar STATUS_WARNING = 0x02;
190  const uChar STATUS_ERROR = 0x03;
191  const uChar STATUS_FATAL_ERROR = 0x04;
192 
193  // one-bit masks
194  const uChar STATUS_RESTART_MASK = 0x20;
195  const uChar STATUS_IMPLAUSIBLE_MEASURED_VALUES_MASK = 0x30;
196  const uChar STATUS_POLLUTION_MASK = 0x80;
197 
198  std::string statusToString( uChar status );
199  bool generalStatusIsWarn( uChar generalStatus );
200  bool generalStatusIsError( uChar generalStatus );
201 
202 
204  //
205  // Status Codes
206  //
207 
208  const uChar MODE_SWITCH_SUCCESS_OK = 0x00;
209  const uChar MODE_SWITCH_FAIL_BAD_PASSWORD = 0x01;
210  const uChar MODE_SWITCH_FAIL_LMS_FAULT = 0x02;
211 
212  std::string modeSwitchSuccessToString( uChar success );
213 
215  //
216  // Measurement units
217  //
218 
219  const uChar MEASURED_VALUE_UNIT_CM = 0x00;
220  const uChar MEASURED_VALUE_UNIT_MM = 0x01;
221 
222  std::string measuredValueUnitToString( uChar unit );
223 
225  //
226  // Angular Resolution and scanning angle
227  //
228  const uint16_t ANGULAR_RESOLUTION_1_0_DEG = 100;
229  const uint16_t ANGULAR_RESOLUTION_0_5_DEG = 50;
230  const uint16_t ANGULAR_RESOLUTION_0_25_DEG = 25;
231 
232  inline double angularResolutionToDoubleInDegrees( uint16_t angularResolution )
233  { return angularResolution/100.0; }
234 
235  const uint16_t SCANNING_ANGLE_180 = 180;
236  const uint16_t SCANNING_ANGLE_100 = 100;
237 
238  const uChar SWITCH_VARIANT_SUCCESS = 0x01;
239  const uChar SWITCH_VARIANT_FAIL = 0x00;
240 
241  std::string switchVariantSuccessToString( uChar success );
242 
244  //
245  // Sensitivity
246  //
247 
248  const uChar SENSITIVITY_STANDARD = 0x00; // between medium and high
249  const uChar SENSITIVITY_MEDIUM = 0x01;
250  const uChar SENSITIVITY_LOW = 0x02;
251  const uChar SENSITIVITY_HIGH = 0x03;
252 
253  std::string sensitivityToString( uChar sens );
254 
256  //
257  // Configuration success
258  //
259 
260  const uChar CONFIGURATION_SUCCESS = 0x01;
261  const uChar CONFIGURATION_FAIL = 0x00;
262 
263  std::string configurationSuccessToString( uChar success );
264 
266  //
267  // Baud rates
268  //
269 
270  // returns -1 on error
271  int baudRateToInt( uint16_t baudRate );
272  uChar baudRateIntToOperatingMode( int baudRate );
273 
274  std::string permanentBaudRateToString( uChar permanentBaudRate );
275 
277  //
278  // Error codes
279  //
280 
281  const uChar ERROR_TYPE_NO_LONGER_RELEVANT_MASK = 0x80;
282 
283  const uChar ERROR_CODE_DAZZLE_TEST = 05;
284  const uChar ERROR_CODE_PEAK_COMPARATOR_TEST = 06;
285  const uChar ERROR_CODE_STOP_COMPARATOR_TEST = 07;
286  const uChar ERROR_CODE_TDC_INIT_AND_GATE_FUNCTION_TEST = 15;
287  const uChar ERROR_CODE_POLLUTION_EVALUATION_OIL_CHANNEL_1 = 17;
288  const uChar ERROR_CODE_POLLUTION_EVALUATION_DIRT_CHANNEL_1 = 18;
289  const uChar ERROR_CODE_POLLUTION_EVALUATION_DIRT_CHANNEL_2 = 19;
290  const uChar ERROR_CODE_POLLUTION_EVALUATION_OIL_CHANNEL_2 = 20;
291  const uChar ERROR_CODE_POLLUTION_EVALUATION_REF_CHANNEL_0 = 21;
292  const uChar ERROR_CODE_POLLUTION_EVALUATION_REF_CHANNEL_1 = 22;
293  const uChar ERROR_CODE_OUTPUT_A_DEFECTIVE = 27;
294  const uChar ERROR_CODE_OUTPUT_B_DEFECTIVE = 28;
295  const uChar ERROR_CODE_NUM_MOTOR_REVOLUTIONS = 29;
296  const uChar ERROR_CODE_CALIBRATION_POLLUTION = 37;
297  const uChar ERROR_CODE_TIMEOUT_ON_TDC_CALIBRATION = 39;
298  const uChar ERROR_CODE_1_MEASUREMENT_VALUE_MISSING = 45;
299  const uChar ERROR_CODE_1_SCAN_MISSING_SCAN_LASTS_TOO_LONG = 46;
300  const uChar ERROR_CODE_REFERENCE_TARGET_LOAD_PULSE_WIDTH_IMPLAUSIBLE = 47;
301  const uChar ERROR_CODE_CALIBRATION_OF_LASER_POWER = 48;
302  const uChar ERROR_CODE_LASER_POWER_OUTSIDE_50_PCT_140_PCT = 49;
303  const uChar ERROR_CODE_INITIALISATION_TDC_MO_CHANNEL_0_AND_1 = 50;
304  const uChar ERROR_CODE_DA_AD_TEST_STOP_BRANCH = 51;
305  const uChar ERROR_CODE_DA_AD_TEST_PEAK_BRANCH = 52;
306  const uChar ERROR_CODE_FLASH_WRITTEN = 53;
307  const uChar ERROR_CODE_POLLUTION_CHANNEL_MEASUREMENT_WITHOUT_ACTIVE_TRANSMITTER = 54;
308  const uChar ERROR_CODE_NO_TWO_DIFFERENT_ANGLES_DETECTED_ON_LASER_POWER_CALIBRATION = 55;
309  const uChar ERROR_CODE_HARDWARE_WATCHDOG_DEFECTIVE = 56;
310  const uChar ERROR_CODE_NO_ZERO_INDEX_SIGNAL_AVAILABLE = 57;
311  const uChar ERROR_CODE_SLAVE_CANNOT_SYNC_DURING_INIT = 58;
312  const uChar ERROR_CODE_SYNC_LOST_IN_OPERATING_STATE = 59;
313  const uChar ERROR_CODE_SYNC_CYCLE_FROM_MASTER_MISSING = 60;
314  const uChar ERROR_CODE_HARDWARE_UNSUITABLE_FOR_SYNC_IN_SLAVE_OPERATING_MODE = 61;
315  const uChar ERROR_CODE_WRONG_DIP_SWITCH_POSITION = 62;
316  const uChar ERROR_CODE_REF_TARGET_SMALLEST_PULSE_WIDTH_TOO_SMALL = 86;
317  const uChar ERROR_CODE_REF_TARGET_LARGEST_PULSE_WIDTH_TOO_LARGE = 87;
318  const uChar ERROR_CODE_REF_TARGET_PULSE_WIDTH_SPECTRUM_TOO_LARGE = 88;
319  const uChar ERROR_CODE_REF_TARGET_REF_TABLE_LESS_THAN_2_CYCLES_UPDATE = 89;
320  const uChar ERROR_CODE_REF_TARGET_REFLECTIVITY_MEASUREMENT_CANNOT_BE_CALIBRATED = 91;
321  const uChar ERROR_CODE_REF_TARGET_TEACH_IN_MODE_IS_NOT_COMPLETED = 92;
322  const uChar ERROR_CODE_OUT_OF_MEMORY_IN_MEASUREMENT_ROUTINE = 124;
323  const uChar ERROR_CODE_OUT_OF_MEMORY_IN_REFERENCE_TARGET_ROUTINE = 125;
324  const uChar ERROR_CODE_OUT_OF_MEMORY_IN_REFERENCE_TARGET_ANGULAR_TABLE = 126;
325 
326  std::string errorTypeToString( uChar errorType );
327  bool errorTypeIsWarn( uChar errorType );
328  bool errorTypeIsError( uChar errorType );
329  std::string errorCodeToString( uChar errorCode );
330 }
331 
332 #endif
SICK laser driver.
 

Generated for GearBox by  doxygen 1.4.5