00001 #ifndef SICK_H 00002 #define SICK_H 00003 00004 #define LASER_BUFFER_SIZE 100000 00005 00006 #define CRC16_GEN_POL 0x8005 00007 #define CRC16_GEN_POL0 0x80 00008 #define CRC16_GEN_POL1 0x05 00009 00010 #define LMS_PASSWORD "SICK_LMS" 00011 #define PLS_PASSWORD "SICK_PLS" 00012 00013 #define BUFFER_SIZE 16000 00014 #define MAX_COMMAND_SIZE 8196 00015 #define MAX_NAME_LENGTH 256 00016 00017 #define MAX_TIME_FOR_CLEAR 0.2 00018 #define MAX_TIME_FOR_DATA 0.3 00019 #define MAX_TIME_FOR_ACK 0.1 00020 #define MAX_TIME_FOR_ANSWER 0.1 00021 #define MAX_TIME_FOR_SENSOR_DATA 0.5 00022 #define MAX_TIME_FOR_CONFIG 3.0 00023 #define MAX_TIME_FOR_GETTING_CONF 0.3 00024 #define MAX_TIME_FOR_TESTING_BAUDRATE 1.0 00025 00026 #define INI -1 00027 #define TIO 0 00028 #define STX 0x02 00029 #define UKN 0x05 00030 #define ACK 0x06 00031 #define DLE 0x10 00032 #define NAK 0x15 00033 #define LID 0x80 00034 00035 #define RES_1_00_DEGREE 0 00036 #define RES_0_50_DEGREE 1 00037 #define RES_0_25_DEGREE 2 00038 00039 #ifndef TIOCGETP 00040 #define TIOCGETP 0x5481 00041 #define TIOCSETP 0x5482 00042 #define RAW 1 00043 #define CBREAK 64 00044 #endif 00045 00046 #ifdef __cplusplus 00047 extern "C" { 00048 #endif 00049 00050 typedef enum { PLS, LMS } laser_model_t; 00051 typedef enum { CM, MM, DM } range_res_t; 00052 typedef enum { RANGE80M, RANGE160M, RANGE320M } range_dist_t; 00053 typedef enum { N, E, O } parity_t; 00054 00055 typedef struct { 00056 int fd; 00057 laser_model_t type; 00058 char *ttyport; 00059 int baudrate; 00060 parity_t parity; 00061 unsigned char passwd[8]; 00062 int databits; 00063 int stopbits; 00064 int hwf; 00065 int swf; 00066 int laser_num; 00067 } laser_device_t, *laser_device_p; 00068 00069 typedef struct { 00070 char device_name[MAX_NAME_LENGTH]; 00071 laser_model_t type; 00072 range_res_t range_res; 00073 range_dist_t range_dist; 00074 unsigned char password[8]; 00075 int laser_num; 00076 int detect_baudrate, use_highspeed; 00077 int start_baudrate, set_baudrate; 00078 int databits, stopbits; 00079 parity_t parity; 00080 int swf, hwf; 00081 int angle_range, angle_resolution; 00082 int num_values; 00083 } laser_settings_t; 00084 00085 typedef struct { 00086 laser_settings_t settings; 00087 laser_device_t dev; 00088 00089 int numvalues; 00090 double *range; 00091 float *raw; 00092 int *glare, *wfv, *sfv; 00093 unsigned char *buffer; 00094 long int buffer_position, processed_mark, packet_offset, packet_length; 00095 int new_reading; 00096 double timestamp; 00097 } sick_laser_t, *sick_laser_p; 00098 00099 int sick_start_laser(sick_laser_p laser); 00100 void sick_stop_laser(sick_laser_p laser); 00101 void sick_handle_laser(sick_laser_p laser); 00102 00103 #ifdef __cplusplus 00104 } 00105 #endif 00106 00107 #endif