11 #include "gcp/control/code/unix/libunix_src/common/genericregs.h"
12 #include "gcp/control/code/unix/libunix_src/specific/rtcnetcoms.h"
14 #include "gcp/util/common/Exception.h"
15 #include "gcp/util/common/GenericTaskMsg.h"
17 #include "gcp/util/common/Axis.h"
18 #include "gcp/util/common/OffsetMsg.h"
19 #include "gcp/util/common/PointingMode.h"
20 #include "gcp/util/common/PointingTelescopes.h"
21 #include "gcp/util/common/TimeVal.h"
22 #include "gcp/util/common/Tracking.h"
24 #include "gcp/util/common/Collimation.h"
25 #include "gcp/antenna/control/specific/Refraction.h"
77 BENCH_SET_ACQUIRED_THRESHOLD,
79 TILT_METER_CORRECTION,
83 TILT_METER_MOVING_AVERAGE_INTERVAL,
84 LINEAR_SENSOR_CORRECTION,
87 LINEAR_SENSOR_MOVING_AVERAGE_INTERVAL,
90 SPECIFIC_SERVO_COMMAND,
97 SERVO_INITIALIZE_ANTENNA,
100 SERVO_LOAD_PARAMETERS,
131 unsigned msPerSample;
132 unsigned flag[SCAN_NET_NPT];
133 unsigned index[SCAN_NET_NPT];
134 int azoff[SCAN_NET_NPT];
135 int eloff[SCAN_NET_NPT];
136 int dkoff[SCAN_NET_NPT];
147 gcp::util::Tracking::SlewType slewType;
148 char source[SRC_LEN];
165 unsigned long mjdDays;
166 unsigned long mjdSeconds;
173 unsigned long mjdDays;
174 unsigned long mjdSeconds;
182 char source[SRC_LEN];
317 gcp::util::PointingTelescopes::Ptel ptelMask;
332 gcp::util::Collimation::Type
type;
340 gcp::util::PointingTelescopes::Ptel ptelMask;
392 gcp::util::PointingTelescopes::Ptel ptelMask;
428 unsigned short board;
434 double airTemperatureInK;
435 double relativeHumidityInMax1;
436 double pressureInMbar;
467 } benchSetAcquiredThreshold;
476 } tilt_meter_correction;
493 } tilt_meter_moving_average_interval;
497 } linear_sensor_correction;
504 } linear_sensor_offset;
508 } linear_sensor_range;
512 } linear_sensor_moving_average_interval;
538 inline void packBenchZeroPositionMsg(
unsigned int seq,
double y1,
double y2,
double y3,
539 double x4,
double x5,
double z6)
542 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
544 type = BENCH_ZERO_POSITION;
546 body.benchZeroPosition.seq = seq;
547 body.benchZeroPosition.y1 = y1;
548 body.benchZeroPosition.y2 = y2;
549 body.benchZeroPosition.y3 = y3;
550 body.benchZeroPosition.x4 = x4;
551 body.benchZeroPosition.x5 = x5;
552 body.benchZeroPosition.z6 = z6;
555 inline void packBenchOffsetMsg(
unsigned int seq,
double y1,
double y2,
double y3,
double x4,
double x5,
double z6)
558 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
562 body.benchOffset.seq = seq;
563 body.benchOffset.y1 = y1;
564 body.benchOffset.y2 = y2;
565 body.benchOffset.y3 = y3;
566 body.benchOffset.x4 = x4;
567 body.benchOffset.x5 = x5;
568 body.benchOffset.z6 = z6;
571 inline void packBenchUseBrakesMsg(
unsigned int seq,
bool use_brakes)
574 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
576 type = BENCH_USE_BRAKES;
578 body.benchUseBrakes.seq = seq;
579 body.benchUseBrakes.use_brakes = use_brakes;
582 inline void packBenchSetAcquiredThresholdMsg(
unsigned int seq,
double threshold)
585 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
587 type = BENCH_SET_ACQUIRED_THRESHOLD;
589 body.benchSetAcquiredThreshold.seq = seq;
590 body.benchSetAcquiredThreshold.threshold = threshold;
593 inline void packBenchSetFocusMsg(
unsigned int seq,
double focus)
596 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
598 type = BENCH_SET_FOCUS;
600 body.benchSetFocus.seq = seq;
601 body.benchSetFocus.focus = focus;
609 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
611 type = CONNECT_DRIVE;
620 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
634 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
636 type = DISCONNECT_DRIVE;
639 inline void packRebootDriveMsg(
unsigned long seq)
642 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
645 body.rebootDrive.seq = seq;
648 inline void packTiltMeterCorrectionMsg(
bool enable)
651 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
653 type = TILT_METER_CORRECTION;
655 body.tilt_meter_correction.enable = enable;
658 inline void packTiltMeterOffsetMsg(
double x,
double y)
661 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
663 type = TILT_METER_OFFSET;
665 body.tilt_meter_offset.x = x;
666 body.tilt_meter_offset.y = y;
669 inline void packTiltMeterAngleMsg(
double angle)
672 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
674 type = TILT_METER_ANGLE;
676 body.tilt_meter_angle.angle = angle;
679 inline void packTiltMeterRangeMsg(
double maxAngle)
682 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
684 type = TILT_METER_RANGE;
686 body.tilt_meter_range.maxAngle = maxAngle;
689 inline void packTiltMeterMovingAverageIntervalMsg(
double interval)
692 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
694 type = TILT_METER_MOVING_AVERAGE_INTERVAL;
696 body.tilt_meter_moving_average_interval.interval = interval;
699 inline void packLinearSensorCorrectionMsg(
bool enable)
702 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
704 type = LINEAR_SENSOR_CORRECTION;
706 body.linear_sensor_correction.enable = enable;
709 inline void packLinearSensorOffsetMsg(
double L1,
double L2,
double R1,
double R2)
712 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
714 type = LINEAR_SENSOR_OFFSET;
716 body.linear_sensor_offset.L1 = L1;
717 body.linear_sensor_offset.L2 = L2;
718 body.linear_sensor_offset.R1 = R1;
719 body.linear_sensor_offset.R2 = R2;
722 inline void packLinearSensorRangeMsg(
double maxDistance)
725 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
727 type = LINEAR_SENSOR_RANGE;
729 body.linear_sensor_range.maxDistance = maxDistance;
732 inline void packLinearSensorMovingAverageIntervalMsg(
double interval)
735 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
737 type = LINEAR_SENSOR_MOVING_AVERAGE_INTERVAL;
739 body.linear_sensor_moving_average_interval.interval = interval;
742 inline void packScanMsg(std::string name,
749 unsigned msPerSample,
757 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
761 if(name.size() > SCAN_LEN)
762 ThrowError(
"scan name is too long");
764 if(npt > SCAN_NET_NPT)
765 ThrowError(
"scan npt > " << SCAN_NET_NPT);
767 strncpy(
body.scan.name, name.c_str(), SCAN_LEN);
770 body.scan.nreps = nreps;
771 body.scan.istart = istart;
772 body.scan.ibody = ibody;
773 body.scan.iend = iend;
775 body.scan.msPerSample = msPerSample;
777 for(
unsigned i=0; i < npt; i++) {
778 body.scan.index[i] = index[i];
779 body.scan.flag[i] = flag[i];
780 body.scan.azoff[i] = azoff[i];
781 body.scan.eloff[i] = eloff[i];
787 inline void packStopMsg()
790 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
795 inline void packShutdownDriveMsg()
798 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
803 inline void packSlewMsg(
unsigned long seq,
806 gcp::util::Tracking::SlewType slewType,
807 double az,
double el,
double pa)
810 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
814 body.slew.axes = axes;
815 body.slew.slewType = slewType;
817 if(source.size() > SRC_LEN)
818 ThrowError(
"source name is too long.\n");
820 strncpy(
body.slew.source, source.c_str(), SRC_LEN);
826 inline void packHaltMsg(
unsigned long seq)
829 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
835 inline void packTrackMsg(
unsigned long seq,
837 double mjd,
double ra,
838 double dec,
double dist)
841 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
844 body.track.seq = seq;
846 if(source.size() > SRC_LEN)
847 ThrowError(
"source name is too long.\n");
849 strncpy(
body.track.source, source.c_str(), SRC_LEN);
851 body.track.mjd = mjd;
853 body.track.dec = dec;
854 body.track.dist = dist;
857 inline void packOffsetMsg(
unsigned long seq,
861 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
864 body.offset.seq = seq;
865 body.offset.offset = offset;
868 inline void packTvAngleMsg(
double angle)
871 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
874 body.tvAngle.angle = angle;
877 inline void packEncoderZerosMsg(
unsigned long seq,
878 double az,
double el,
double dk)
881 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
883 type = ENCODER_ZEROS;
884 body.encoderZeros.seq = seq;
885 body.encoderZeros.az = az;
886 body.encoderZeros.el = el;
887 body.encoderZeros.dk = dk;
890 inline void packEncoderCountsPerTurnMsg(
unsigned long seq,
891 long az,
long el,
long dk)
894 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
897 body.encoderCountsPerTurn.seq = seq;
898 body.encoderCountsPerTurn.az = az;
899 body.encoderCountsPerTurn.el = el;
900 body.encoderCountsPerTurn.dk = dk;
907 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
910 body.refraction.mode = mode;
911 body.refraction.a = a;
912 body.refraction.b = b;
915 inline void packRestartMsg()
918 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
923 inline void packExtendUt1UtcMsg(
double mjd,
double ut1utc)
926 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
928 type = EXTEND_UT1UTC;
929 body.extendUt1Utc.mjd = mjd;
930 body.extendUt1Utc.ut1utc = ut1utc;
933 inline void packExtendEqnEqxMsg(
double mjd,
double eqneqx)
936 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
938 type = EXTEND_EQNEQX;
939 body.extendEqnEqx.mjd = mjd;
940 body.extendEqnEqx.eqneqx = eqneqx;
943 inline void packSlewRateMsg(
unsigned long seq,
945 long az,
long el,
long dk)
948 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
951 body.slewRate.seq = seq;
952 body.slewRate.axes = axes;
953 body.slewRate.az = az;
954 body.slewRate.el = el;
955 body.slewRate.dk = dk;
961 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
969 inline void packTiltsMsg(
unsigned long seq,
double ha,
double lat,
973 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
976 body.tilts.seq = seq;
978 body.tilts.lat = lat;
982 inline void packFlexureMsg(
unsigned long seq,
986 gcp::util::PointingTelescopes::Ptel ptelMask)
989 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
992 body.flexure.seq = seq;
993 body.flexure.mode = mode;
994 body.flexure.sFlexure = sFlexure;
995 body.flexure.cFlexure = cFlexure;
996 body.flexure.ptelMask = ptelMask;
999 inline void packCollimationMsg(
unsigned long seq,
1002 gcp::util::Collimation::Type collType,
1003 double mag,
double dir,
1005 gcp::util::PointingTelescopes::Ptel ptelMask)
1009 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1012 body.collimation.seq = seq;
1013 body.collimation.mode = mode;
1014 body.collimation.x = x;
1015 body.collimation.y = y;
1016 body.collimation.type = collType;
1017 body.collimation.magnitude = mag;
1018 body.collimation.direction = dir;
1019 body.collimation.addMode = addMode;
1020 body.collimation.ptelMask = ptelMask;
1023 inline void packEncoderLimitsMsg(
unsigned long seq,
1024 long az_min,
long az_max,
1025 long el_min,
long el_max,
1026 long pa_min,
long pa_max)
1029 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1031 type = ENCODER_LIMITS;
1032 body.encoderLimits.seq = seq;
1033 body.encoderLimits.az_min = az_min;
1034 body.encoderLimits.az_max = az_max;
1035 body.encoderLimits.el_min = el_min;
1036 body.encoderLimits.el_max = el_max;
1037 body.encoderLimits.pa_min = pa_min;
1038 body.encoderLimits.pa_max = pa_max;
1041 inline void packSelectModelMsg(
unsigned long seq,
1043 gcp::util::PointingTelescopes::Ptel ptelMask)
1046 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1048 type = SELECT_MODEL;
1049 body.selectModel.seq = seq;
1050 body.selectModel.mode = mode;
1051 body.selectModel.ptelMask = ptelMask;
1054 inline void packYearMsg(
short year)
1057 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1060 body.year.year = year;
1063 inline void packSiteMsg(
double lon,
double lat,
double alt)
1066 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1069 body.site.lon = lon;
1070 body.site.lat = lat;
1071 body.site.alt = alt;
1074 inline void packLocationMsg(
double north,
double east,
double up)
1077 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1080 body.location.north = north;
1081 body.location.east = east;
1082 body.location.up = up;
1085 inline void packFlagBoardMsg(
unsigned short board,
bool flag)
1088 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1091 body.flagBoard.board = board;
1092 body.flagBoard.flag = flag;
1099 inline void packWeatherMsg(
double airTempInK,
double relHumidityInMax1,
double pressureInMbar)
1102 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1106 body.weather.airTemperatureInK = airTempInK;
1107 body.weather.relativeHumidityInMax1 = relHumidityInMax1;
1108 body.weather.pressureInMbar = pressureInMbar;
1111 inline void packTestTrackTimeMsg(
unsigned sec,
unsigned msec)
1114 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1116 type = TEST_TRACK_TIME;
1117 body.testTrackTime.sec = sec;
1118 body.testTrackTime.msec = msec;
1121 inline void packServoCmdMsg(
unsigned cmdId,
float fltVal,
int intVal,
float* fltVals)
1125 gcp::util::GenericTaskMsg::TASK_SPECIFIC;
1126 type = SPECIFIC_SERVO_COMMAND;
1127 body.servoCmd.cmdId = cmdId;
1128 body.servoCmd.intVal = intVal;
1129 body.servoCmd.fltVal = fltVal;
1130 for (
unsigned i=0; i<7; i++){
1131 body.servoCmd.fltVals[i] = fltVals[i];
1135 inline friend std::ostream& operator<<(std::ostream& os,
const TrackerMsg& msg)
1137 os <<
"TrackerMsg ";
1139 case COLLIMATION: os <<
"COLLIMATION";
break;
1140 case CONNECT_DRIVE: os <<
"CONNECT_DRIVE";
break;
1141 case DISCONNECT_DRIVE: os <<
"DISCONNECT_DRIVE";
break;
1142 case ENCODER_CALS: os <<
"ENCODER_CALS";
break;
1143 case ENCODER_LIMITS: os <<
"ENCODER_LIMITS";
break;
1144 case ENCODER_ZEROS: os <<
"ENCODER_ZEROS";
break;
1145 case EXTEND_EQNEQX: os <<
"EXTEND_EQNEQX";
break;
1146 case EXTEND_UT1UTC: os <<
"EXTEND_UT1UTC";
break;
1147 case FLAG_BOARD: os <<
"FLAG_BOARD";
break;
1148 case FLEXURE: os <<
"FLEXURE";
break;
1149 case HALT: os <<
"HALT";
break;
1150 case LOCATION: os <<
"LOCATION";
break;
1151 case SITE: os <<
"SITE";
break;
1152 case OFFSET: os <<
"OFFSET";
break;
1153 case REBOOT_DRIVE: os <<
"REBOOT_DRIVE";
break;
1154 case REFRACTION: os <<
"REFRACTION";
break;
1155 case RESTART: os <<
"RESTART";
break;
1156 case SELECT_MODEL: os <<
"SELECT_MODEL";
break;
1157 case SLEW: os <<
"SLEW";
break;
1158 case SLEWRATE: os <<
"SLEWRATE";
break;
1159 case START_TIMER: os <<
"START_TIMER";
break;
1160 case STOP_TIMER: os <<
"STOP_TIMER";
break;
1161 case STROBE_SERVO: os <<
"STROBE_SERVO";
break;
1162 case TICK: os <<
"TICK";
break;
1163 case TILTS: os <<
"TILTS";
break;
1164 case TRACK: os <<
"TRACK";
break;
1165 case TV_ANGLE: os <<
"TV_ANGLE";
break;
1166 case YEAR: os <<
"YEAR";
break;
1167 case WEATHER: os <<
"WEATHER";
break;
1168 case RX: os <<
"RX";
break;
1179 #endif // End #ifndef
Definition: GenericTaskMsg.h:31
void packDisconnectDriveMsg()
Definition: TrackerMsg.h:632
struct gcp::antenna::control::TrackerMsg::@27::@51 flagBoard
void packConnectDriveMsg()
Definition: TrackerMsg.h:607
struct gcp::antenna::control::TrackerMsg::@27::@44 encoderCountsPerTurn
struct gcp::antenna::control::TrackerMsg::@27::@40 slewRate
struct gcp::antenna::control::TrackerMsg::@27::@33 strobe
SpecMsgType
Definition: TrackerMsg.h:96
struct gcp::antenna::control::TrackerMsg::@27::@31 halt
Mode
Definition: OffsetMsg.h:30
struct gcp::antenna::control::TrackerMsg::@27::@47 selectModel
struct gcp::antenna::control::TrackerMsg::@27::@42 flexure
MsgType
Definition: TrackerMsg.h:41
struct gcp::antenna::control::TrackerMsg::@27::@45 encoderLimits
struct gcp::antenna::control::TrackerMsg::@27::@32 tick
void packTickMsg(gcp::util::TimeVal &time)
Definition: TrackerMsg.h:617
struct gcp::antenna::control::TrackerMsg::@27::@46 encoderZeros
MsgType type
Definition: TrackerMsg.h:106
GenericMsgType genericMsgType_
Definition: GenericTaskMsg.h:50
Definition: OffsetMsg.h:14
struct gcp::antenna::control::TrackerMsg::@27::@41 tilts
struct gcp::antenna::control::TrackerMsg::@27::@28 rebootDrive
struct gcp::antenna::control::TrackerMsg::@27::@38 extendUt1Utc
struct gcp::antenna::control::TrackerMsg::@27::@34 track
Type
Definition: PointingMode.h:25
void packWeatherMsg(double airTempInK, double relHumidityInMax1, double pressureInMbar)
Definition: TrackerMsg.h:1099
struct gcp::antenna::control::TrackerMsg::@27::@30 slew
struct gcp::antenna::control::TrackerMsg::@27::@29 scan
Definition: TrackerMsg.h:33
Type
Definition: Axis.h:24
struct gcp::antenna::control::TrackerMsg::@27::@36 tvAngle
struct gcp::antenna::control::TrackerMsg::@27::@50 location
unsigned int getMjdDays()
Definition: TimeVal.cc:749
struct gcp::antenna::control::TrackerMsg::@27::@37 refraction
struct gcp::antenna::control::TrackerMsg::@27::@49 site
struct gcp::antenna::control::TrackerMsg::@27::@39 extendEqnEqx
struct gcp::antenna::control::TrackerMsg::@27::@43 collimation
union gcp::antenna::control::TrackerMsg::@27 body
unsigned int getMjdSeconds()
Definition: TimeVal.cc:757