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