lase_edl_aqt.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef HAVE_LIBPCAN
00025 # error "Cannot use Lase EDL driver without libpcan"
00026 #endif
00027
00028 #ifndef __PLUGINS_LASER_LASE_EDL_AQT_H_
00029 #define __PLUGINS_LASER_LASE_EDL_AQT_H_
00030
00031 #include "acquisition_thread.h"
00032
00033 #include <libpcan.h>
00034 #include <string>
00035
00036 class LaseEdlAcquisitionThread : public LaserAcquisitionThread
00037 {
00038 public:
00039 LaseEdlAcquisitionThread(std::string &cfg_name, std::string &cfg_prefix);
00040
00041
00042 virtual void pre_init(fawkes::Configuration *config, fawkes::Logger *logger);
00043
00044 virtual void init();
00045 virtual void finalize();
00046 virtual void loop();
00047
00048 private:
00049 static const WORD RESETLEVEL_RESET;
00050 static const WORD RESETLEVEL_RESTART;
00051 static const WORD RESETLEVEL_HALT_IDLE;
00052 static const WORD RESETLEVEL_RELOAD_VOLTSET;
00053 static const WORD CONFIGITEM_ARCNET_HISTORIC;
00054 static const WORD CONFIGITEM_RS232_RS422;
00055 static const WORD CONFIGITEM_CAN;
00056 static const WORD CONFIGITEM_SPI;
00057 static const WORD CONFIGITEM_ARCNET;
00058 static const WORD CONFIGITEM_GLOBAL;
00059 static const WORD CONFIGDATA_LENGTH_RS232_RS422;
00060 static const WORD CONFIGDATA_LENGTH_CAN;
00061 static const WORD CONFIGDATA_LENGTH_ARCNET;
00062 static const WORD CONFIGDATA_LENGTH_GLOBAL;
00063 static const WORD SECTOR_0;
00064 static const WORD SECTOR_1;
00065 static const WORD SECTOR_2;
00066 static const WORD SECTOR_3;
00067 static const WORD SECTOR_4;
00068 static const WORD SECTOR_5;
00069 static const WORD SECTOR_6;
00070 static const WORD SECTOR_7;
00071 static const WORD SECTORFUNC_NOT_INITIALIZED;
00072 static const WORD SECTORFUNC_NO_MEASUREMENT;
00073 static const WORD SECTORFUNC_DUMMY_MEASUREMENT;
00074 static const WORD SECTORFUNC_NORMAL_MEASUREMENT;
00075 static const WORD SECTORFUNC_REFERENCE_TARGET;
00076 static const WORD FLASH_YES;
00077 static const WORD FLASH_NO;
00078 static const WORD PROFILENUM_CONTINUOUS;
00079 static const WORD PROFILEFORMAT_NUMBER;
00080 static const WORD PROFILEFORMAT_COUNTER;
00081 static const WORD PROFILEFORMAT_LAYER;
00082 static const WORD PROFILEFORMAT_SECTOR;
00083 static const WORD PROFILEFORMAT_ANGLE_STEP;
00084 static const WORD PROFILEFORMAT_NUM_SECT_POINTS;
00085 static const WORD PROFILEFORMAT_TIMESTAMP_START;
00086 static const WORD PROFILEFORMAT_START_DIRECTION;
00087 static const WORD PROFILEFORMAT_DISTANCE;
00088 static const WORD PROFILEFORMAT_DIRECTION;
00089 static const WORD PROFILEFORMAT_ECHO_AMPLITUDE;
00090 static const WORD PROFILEFORMAT_TIMESTAMP_END;
00091 static const WORD PROFILEFORMAT_END_DIRECTION;
00092 static const WORD PROFILEFORMAT_SENSOR_MODE;
00093 static const WORD SERVICEGROUP_STATUS;
00094 static const WORD CMD_GET_IDENTIFICATION;
00095 static const WORD CMD_GET_STATUS;
00096 static const WORD CMD_GET_ERROR;
00097 static const WORD CMD_GET_SIGNAL;
00098 static const WORD CMD_SET_SIGNAL;
00099 static const WORD CMD_REGISTER_APPLICATION;
00100 static const WORD SERVICEGROUP_CONFIG;
00101 static const WORD CMD_SET_CONFIG;
00102 static const WORD CMD_GET_CONFIG;
00103 static const WORD CMD_SET_SYNC_ABS;
00104 static const WORD CMD_SET_SYNC_REL;
00105 static const WORD CMD_SET_SYNC_CLOCK;
00106 static const WORD CMD_SET_ZONE;
00107 static const WORD CMD_GET_ZONE;
00108 static const WORD CMD_RELEASE_ZONE;
00109 static const WORD CMD_SET_FILTER;
00110 static const WORD CMD_SET_FUNCTION;
00111 static const WORD CMD_GET_FUNCTION;
00112 static const WORD SERVICEGROUP_MEASUREMENT;
00113 static const WORD CMD_GET_PROFILE;
00114 static const WORD CMD_CANCEL_PROFILE;
00115 static const WORD SERVICEGROUP_WORKING;
00116 static const WORD CMD_DO_RESET;
00117 static const WORD CMD_TRANS_IDLE;
00118 static const WORD CMD_TRANS_ROTATE;
00119 static const WORD CMD_TRANS_MEASURE;
00120 static const WORD SERVICEGROUP_MAINTENANCE;
00121 static const WORD CMD_DO_ADJUST;
00122 static const WORD CMD_DO_TEST;
00123 static const WORD SERVICEGROUP_INTERFACE_ROUTING;
00124 static const WORD CMD_COM_ATTACH;
00125 static const WORD CMD_COM_DETACH;
00126 static const WORD CMD_COM_INIT;
00127 static const WORD CMD_COM_OUTPUT;
00128 static const WORD CMD_COM_DATA;
00129 static const WORD SERVICEGROUP_FILE;
00130 static const WORD CMD_DIR;
00131 static const WORD CMD_SAVE;
00132 static const WORD CMD_LOAD;
00133 static const WORD CMD_DELETE;
00134 static const WORD SERVICEGROUP_MONITOR;
00135 static const WORD CMD_MONITOR_ENABLE_LOG;
00136 static const WORD CMD_MONITOR_DISABLE_LOG;
00137
00138 static const WORD SERVICEGROUP_ADJUST;
00139 static const WORD SERVICEGROUP_SPECIAL;
00140 static const WORD CMD_SERVICE_FAILURE;
00141 static const WORD RESPONSE_BIT;
00142 static const float DISTANCE_FACTOR;
00143
00144 private:
00145 unsigned int calc_angle_step(unsigned int rotation_freq, unsigned int max_pulse_freq);
00146 inline WORD respcode(WORD cmd) { return cmd | RESPONSE_BIT; }
00147 void init_bus();
00148 void send(WORD *data, int n);
00149 int recv(WORD **data, bool allocate = true);
00150
00151 void send_and_check(WORD *command_data, int command_length,
00152 WORD *expected_response, int n,
00153 WORD **real_response = NULL, int *response_size = NULL);
00154
00155 inline void append_to_msg(WORD word, TPCANMsg *msg);
00156 inline void append_to_msg(BYTE byte, TPCANMsg *msg);
00157 inline WORD get_word_from_msg(TPCANMsg *msg, int *index);
00158 WORD * make_word_array(int count, ...);
00159 int compare_word_arrays(int count, WORD* a, WORD* b);
00160 void print_word_array(int count, WORD* a);
00161 void print_message(TPCANMsg *m);
00162
00163 void process_profiles();
00164
00165 void SET_CONFIG(WORD config_item, int k, ...);
00166 void SET_FUNCTION(WORD sect_num, WORD sect_func, WORD sect_stop, WORD flash);
00167 void GET_PROFILE(WORD prof_num, WORD prof_format);
00168 void CANCEL_PROFILE();
00169 void DO_RESET(WORD reset_level);
00170 void TRANS_IDLE();
00171 void TRANS_ROTATE(WORD frequency);
00172 void TRANS_MEASURE();
00173
00174
00175
00176 private:
00177 HANDLE __handle;
00178 bool __pre_init_done;
00179
00180 std::string __cfg_name;
00181 std::string __cfg_prefix;
00182
00183 bool __cfg_use_default;
00184 bool __cfg_set_default;
00185 unsigned int __cfg_rotation_freq;
00186 unsigned int __cfg_angle_step;
00187 unsigned int __cfg_max_pulse_freq;
00188 unsigned int __cfg_profile_format;
00189 unsigned int __cfg_can_id;
00190 unsigned int __cfg_can_id_resp;
00191 unsigned int __cfg_sensor_id;
00192 unsigned int __cfg_sensor_id_resp;
00193 unsigned int __cfg_interface_type;
00194 unsigned int __cfg_btr0btr1;
00195 unsigned int __cfg_port;
00196 unsigned int __cfg_irq;
00197 unsigned int __cfg_num_init_tries;
00198 float __cfg_mount_rotation;
00199
00200 unsigned int __min_angle_step;
00201 unsigned int __number_of_values;
00202
00203 };
00204
00205
00206 #endif