00001 #ifndef ACM_H
00002 #define ACM_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 #include "semLib.h"
00052
00053
00054
00055 #include "ccs.h"
00056 #include "err.h"
00057 #include "io.h"
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 #define acmMAX_FILE_NAME_LENGTH 256
00069 #define acmMAX_NUM_SIGNALS 256
00070
00071
00072 #define acmSTATE_UNDEFINED 0
00073 #define acmSTATE_IDLE 1
00074 #define acmSTATE_PRESETTING 2
00075 #define acmSTATE_TRACKING 3
00076
00077
00078
00079 #define acmAXIS_ALT_STR "altitude"
00080 #define acmAXIS_AZ_STR "azimuth"
00081 #define acmAXIS_ROT_STR "rotator"
00082 #define acmAXIS_AD_STR "adapter"
00083
00084 #define acmAXIS_ALT 1
00085 #define acmAXIS_AZ 2
00086 #define acmAXIS_ROT 3
00087 #define acmAXIS_AD 4
00088
00089
00090 #define acmACTION_NONE 1
00091 #define acmACTION_STAR 2
00092 #define acmACTION_FIXED 3
00093 #define acmACTION_UPDATE 4
00094 #define acmACTION_STAR_OFFS 5
00095 #define acmACTION_AGC 6
00096
00097 #define acmACTION_NONE_STR "acmACTION_NONE"
00098 #define acmACTION_STAR_STR "acmACTION_STAR"
00099 #define acmACTION_FIXED_STR "acmACTION_FIXED"
00100 #define acmACTION_UPDATE_STR "acmACTION_UPDATE"
00101 #define acmACTION_STAR_OFFS_STR "acmACTION_STAR_OFFS"
00102 #define acmACTION_AGC_STR "acmACTION_AGC"
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123 typedef struct
00124 {
00125 vltDOUBLE posAlt;
00126 vltDOUBLE posAz;
00127 vltDOUBLE posRot;
00128 vltDOUBLE posAdap;
00129 vltDOUBLE parallacticAngle;
00130 vltDOUBLE vffAlt;
00131 vltDOUBLE vffAz;
00132 vltDOUBLE vffRot;
00133 vltDOUBLE agcAlt;
00134 vltDOUBLE agcAz;
00135 vltDOUBLE agcRot;
00136 } acmSEND_REFS_SET_POINTS;
00137
00138
00139 typedef ccsCOMPL_STAT (acmSEND_REFS) (vltINT32 action,
00140 ccsTIMEVAL timeStamp,
00141 acmSEND_REFS_SET_POINTS
00142 setPoints,
00143 vltINT32 *state,
00144 ccsERROR *error);
00145
00146
00147 typedef acmSEND_REFS *acmSEND_REFS_P;
00148
00149 acmSEND_REFS acmSendRefs;
00150
00151
00152
00153
00154
00155 typedef struct
00156 {
00157 vltDOUBLE posAlt;
00158 vltDOUBLE posAz;
00159 vltDOUBLE posRot;
00160 } acmREAD_POS_DATA;
00161
00162 typedef ccsCOMPL_STAT (acmREAD_POS) (acmREAD_POS_DATA *acmReadPosData,
00163 ccsERROR *error);
00164
00165 typedef acmREAD_POS *acmREAD_POS_P;
00166
00167
00168
00169
00170
00171
00172 typedef vltDOUBLE (acmREM_TRACK_F) (
00173 vltDOUBLE ra,
00174 vltDOUBLE decl,
00175 vltDOUBLE limLow,
00176 vltDOUBLE limHigh,
00177 vltDOUBLE siderealTime,
00178 vltDOUBLE lat,
00179 vltDOUBLE *remTime,
00180 ccsERROR *error);
00181
00182 typedef acmREM_TRACK_F *acmREM_TRACK_F_P;
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193 typedef struct
00194 {
00195 vltINT32 action;
00196 ccsTIMEVAL timeStamp;
00197 vltDOUBLE pos;
00198 vltDOUBLE vff;
00199 vltDOUBLE agc;
00200 } acmAXIS_REF;
00201
00202 typedef ccsCOMPL_STAT (acmAXIS_SEND_POS_REFS)
00203 (acmAXIS_REF ref,
00204 vltLOGICAL pathOptimisation,
00205 char *axisName,
00206
00207
00208
00209 vltINT32 *state,
00210 ccsERROR *error);
00211
00212 typedef acmAXIS_SEND_POS_REFS *acmAXIS_SEND_POS_REFS_P;
00213
00214
00215 typedef enum
00216 {
00217 axisServoStateUndef,
00218 axisServoStateStartup,
00219 axisServoStateHwOff,
00220 axisServoStateHwSwitchingOn,
00221 axisServoStateSpeedNoMoveWithEnc,
00222 axisServoStateSpeedNoMoveNoEnc,
00223 axisServoStateDeceleratingWithEnc,
00224 axisServoStateDeceleratingNoEnc,
00225 axisServoStateSpeedWithEnc,
00226 axisServoStateSpeedNoEnc,
00227 axisServoStatePos,
00228 axisServoStatePosPreset,
00229 axisServoStatePosFixed,
00230 axisServoStatePosExtrapol,
00231 axisServoStateSpeedPos
00232 } acmAXIS_SERVO_STATE;
00233
00234 typedef ccsCOMPL_STAT (acmAXIS_CHECK_STOP_COND)
00235 (
00236 void *encData,
00237 vltLOGICAL *stop,
00238 vltINT32 delayTimeInMicroSec,
00239 ccsERROR *error
00240 );
00241 typedef acmAXIS_CHECK_STOP_COND *acmAXIS_CHECK_STOP_COND_P;
00242
00243
00244 typedef void (acmTIMER_IR)
00245 (
00246 SEM_ID *timerSem,
00247 vltINT32 dummy
00248 );
00249 typedef acmTIMER_IR *acmTIMER_IR_P;
00250
00251
00252 typedef ccsCOMPL_STAT (acmAXIS_UPDATE_VEL_REF)
00253 (
00254 void *encData,
00255 vltDOUBLE *velocity,
00256 vltINT32 delayTimeInMicroSec,
00257 ccsERROR *error
00258 );
00259 typedef acmAXIS_UPDATE_VEL_REF *acmAXIS_UPDATE_VEL_REF_P;
00260
00261 typedef ccsCOMPL_STAT (acmAXIS_PRESET_POS)
00262 (vltDOUBLE pos,
00263 vltUINT32 timeoutInMilliSec,
00264
00265
00266 acmAXIS_CHECK_STOP_COND_P stopFunction,
00267 acmAXIS_SERVO_STATE *axisState,
00268 ccsERROR *error);
00269
00270 typedef acmAXIS_PRESET_POS *acmAXIS_PRESET_POS_P;
00271
00272 typedef ccsCOMPL_STAT (acmAXIS_SEND_VEL_REF)
00273 (vltDOUBLE velocity,
00274 vltUINT32 timeoutInMilliSec,
00275
00276
00277 acmAXIS_CHECK_STOP_COND_P stopFunction,
00278 acmAXIS_UPDATE_VEL_REF_P updateVelRefFunction,
00279 acmAXIS_SERVO_STATE *axisState,
00280 ccsERROR *error);
00281
00282 typedef acmAXIS_SEND_VEL_REF *acmAXIS_SEND_VEL_REF_P;
00283
00284 typedef ccsCOMPL_STAT (acmAXIS_GET_STATE)
00285 (acmAXIS_SERVO_STATE *axisState,
00286 ccsERROR *error);
00287
00288 typedef acmAXIS_GET_STATE *acmAXIS_GET_STATE_P;
00289
00290 typedef ccsCOMPL_STAT (acmAXIS_UPDATE_POS_LIMS)
00291 (vltDOUBLE posLimits[],
00292 ccsERROR *error);
00293
00294 typedef acmAXIS_UPDATE_POS_LIMS *acmAXIS_UPDATE_POS_LIMS_P;
00295
00296 typedef struct
00297 {
00298 char acmAxisDigitalFileName[acmMAX_FILE_NAME_LENGTH];
00299 char acmAxisAnalogFileName[acmMAX_FILE_NAME_LENGTH];
00300 ioDIRADDRESS *acmAxisSignal;
00301 vltINT32 acmAxisSignalNumber;
00302 vltBYTES32 acmAxisSignalNames[acmMAX_NUM_SIGNALS];
00303 }acmAXIS_SIGNAL_CONF;
00304
00305 typedef acmAXIS_SIGNAL_CONF *acmAXIS_SIGNAL_CONF_P;
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317 typedef ccsCOMPL_STAT (acmHW_HW_ON)
00318 (
00319 void *hwData,
00320 ccsERROR *error
00321 );
00322
00323 typedef acmHW_HW_ON *acmHW_HW_ON_P;
00324
00325 typedef ccsCOMPL_STAT (acmHW_HW_OFF)
00326 (
00327 void *hwData,
00328 ccsERROR *error
00329 );
00330 typedef acmHW_HW_OFF *acmHW_HW_OFF_P;
00331
00332 typedef ccsCOMPL_STAT (acmHW_READ_SPEEDREF)
00333 (
00334 void *hwData,
00335 vltLOGICAL *enable,
00336 vltDOUBLE *speed,
00337 ccsERROR *error
00338 );
00339 typedef acmHW_READ_SPEEDREF *acmHW_READ_SPEEDREF_P;
00340
00341 typedef ccsCOMPL_STAT (acmHW_WRITE_SPEED)
00342 (
00343 void *hwData,
00344 vltDOUBLE speed,
00345 vltDOUBLE *voltageWritten,
00346 ccsERROR *error
00347 );
00348
00349 typedef acmHW_WRITE_SPEED *acmHW_WRITE_SPEED_P;
00350
00351 typedef ccsCOMPL_STAT (acmHW_READ_TACHO)
00352 (
00353 void *hwData,
00354 vltDOUBLE *voltage,
00355 ccsERROR *error
00356 );
00357
00358 typedef acmHW_READ_TACHO *acmHW_READ_TACHO_P;
00359
00360 typedef ccsCOMPL_STAT (acmHW_WRITE_TACHO)
00361 (
00362 void *hwData,
00363 vltLOGICAL valid,
00364 vltDOUBLE speed,
00365 vltDOUBLE *voltageWritten,
00366 ccsERROR *error
00367 );
00368
00369 typedef acmHW_WRITE_TACHO *acmHW_WRITE_TACHO_P;
00370
00371 typedef ccsCOMPL_STAT (acmHW_WRITE_TORQUE)
00372 (
00373 void *hwData,
00374 vltDOUBLE position,
00375 vltDOUBLE velocity,
00376 vltDOUBLE torque,
00377 vltDOUBLE *voltageWritten,
00378 ccsERROR *error
00379 );
00380
00381 typedef acmHW_WRITE_TORQUE *acmHW_WRITE_TORQUE_P;
00382
00383 typedef ccsCOMPL_STAT (acmHW_CHECK_INTERLOCK)
00384 (
00385 void *hwData,
00386 vltLOGICAL *active,
00387 ccsERROR *error
00388 );
00389 typedef acmHW_CHECK_INTERLOCK *acmHW_CHECK_INTERLOCK_P;
00390
00391 typedef ccsCOMPL_STAT (acmHW_CHECK_VICINITY_LIMIT)
00392 (
00393 void *hwData,
00394 vltLOGICAL *upActive,
00395 vltLOGICAL *lowActive,
00396 ccsERROR *error
00397 );
00398
00399 typedef acmHW_CHECK_VICINITY_LIMIT *acmHW_CHECK_VICINITY_LIMIT_P;
00400
00401 typedef struct
00402 {
00403 vltLOGICAL valid;
00404 vltDOUBLE velError;
00405 } acmHW_CYCLIC_VELERR;
00406
00407 typedef ccsCOMPL_STAT (acmHW_CYCLIC)
00408 (
00409 void *hwData,
00410 vltINT32 delayInMicroSecs,
00411 vltLOGICAL posAvailable,
00412 vltDOUBLE pos,
00413 acmHW_CYCLIC_VELERR *velErr,
00414 ccsERROR *error
00415 );
00416
00417 typedef acmHW_CYCLIC *acmHW_CYCLIC_P;
00418
00419
00420
00421 typedef ccsCOMPL_STAT (acmHW_SET_TIMER)
00422 (
00423 void *hwData,
00424 acmTIMER_IR_P IrRoutine,
00425 SEM_ID *timerSem,
00426 vltUINT32 delay,
00427 ccsERROR *error
00428 );
00429
00430 typedef acmHW_SET_TIMER *acmHW_SET_TIMER_P;
00431
00432
00433 typedef ccsCOMPL_STAT (acmHW_INIT)
00434 (
00435 void *hwData,
00436 ccsERROR *error
00437 );
00438
00439 typedef acmHW_INIT *acmHW_INIT_P;
00440
00441 typedef ccsCOMPL_STAT (acmHW_EXIT)
00442 (
00443 void *hwData,
00444 ccsERROR *error
00445 );
00446
00447 typedef acmHW_EXIT *acmHW_EXIT_P;
00448
00449 typedef ccsCOMPL_STAT (acmHW_OFF)
00450 (
00451 void *hwData,
00452 ccsERROR *error
00453 );
00454
00455 typedef acmHW_OFF *acmHW_OFF_P;
00456
00457 typedef ccsCOMPL_STAT (acmHW_REF_MOVE)
00458 (
00459 void *hwData,
00460 acmAXIS_SEND_VEL_REF_P cbAxisSendVelRefP,
00461 acmAXIS_GET_STATE_P cbAxisGetStateP,
00462 ccsERROR *error
00463 );
00464
00465 typedef acmHW_REF_MOVE *acmHW_REF_MOVE_P;
00466
00467 typedef ccsCOMPL_STAT (acmHW_VERSION)
00468 (
00469 char *buffer,
00470 ccsERROR *error
00471 );
00472
00473 typedef acmHW_VERSION *acmHW_VERSION_P;
00474
00475 typedef ccsCOMPL_STAT (acmHW_UPDATE)
00476 (
00477 void *hwData,
00478 ccsERROR *error
00479 );
00480
00481 typedef acmHW_UPDATE *acmHW_UPDATE_P;
00482
00483 typedef struct
00484 {
00485 void *hwData;
00486
00487
00488
00489
00490 acmHW_HW_OFF_P hwHwOffP;
00491 acmHW_READ_SPEEDREF_P hwReadSpeedrefP;
00492 acmHW_READ_TACHO_P hwReadTachoP;
00493 acmHW_WRITE_SPEED_P hwWriteSpeedP;
00494 acmHW_WRITE_TACHO_P hwWriteTachoP;
00495 acmHW_WRITE_TORQUE_P hwWriteTorqueP;
00496 acmHW_CHECK_INTERLOCK_P hwCheckInterlockP;
00497 acmHW_CHECK_VICINITY_LIMIT_P hwCheckVicinityLimitP;
00498 acmHW_CYCLIC_P hwCyclicP;
00499 acmHW_SET_TIMER_P hwSetTimerP;
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509 acmHW_VERSION_P hwVersionP;
00510 acmHW_HW_ON_P hwHwOnP;
00511 acmHW_INIT_P hwInitP;
00512 acmHW_EXIT_P hwExitP;
00513 acmHW_OFF_P hwOffP;
00514 acmHW_REF_MOVE_P hwRefMoveP;
00515 acmHW_UPDATE_P hwUpdateP;
00516 }acmHW;
00517
00518 typedef acmHW *acmHW_P;
00519
00520
00521
00522 typedef ccsCOMPL_STAT (acmHW_INIT_ALL)
00523 (
00524 char *dbRoot,
00525 acmAXIS_SEND_POS_REFS_P cbAxisSendRefsP,
00526 acmHW_P acmHw,
00527 acmAXIS_SIGNAL_CONF_P acmHwSignalConf,
00528 ccsERROR *error
00529 );
00530
00531 typedef acmHW_INIT_ALL *acmHW_INIT_ALL_P;
00532
00533
00534
00535
00536
00537
00538
00539 typedef ccsCOMPL_STAT (acmENC_VERSION)
00540 (
00541 char *buffer,
00542 ccsERROR *error
00543 );
00544
00545 typedef acmENC_VERSION *acmENC_VERSION_P;
00546
00547 typedef ccsCOMPL_STAT (acmENC_READ)
00548 (
00549 void *encData,
00550 vltDOUBLE *positionInRad,
00551 vltLOGICAL tracking,
00552
00553
00554 ccsERROR *error
00555 );
00556
00557 typedef acmENC_READ *acmENC_READ_P;
00558
00559
00560
00561 #define acmENC_CALIB_STD "STANDARD"
00562 #define acmENC_CALIB_MECH_ALIGN "MECHALIGN"
00563 #define acmENC_CALIB_VER_EXT "VERIFYEXT"
00564 #define acmENC_CALIB_MIRRORS "MIRRORS"
00565 #define acmENC_CALIB_ABSREF "ABSREF"
00566 #define acmENC_CALIB_HEAD_1 "HEAD_1"
00567 #define acmENC_CALIB_HEAD_2 "HEAD_2"
00568 #define acmENC_CALIB_HEAD_3 "HEAD_3"
00569 #define acmENC_CALIB_HEAD_4 "HEAD_4"
00570
00571
00572 #define acmENC_CALIB_MODE_2a "2a"
00573 #define acmENC_CALIB_MODE_2b "2b"
00574 #define acmENC_CALIB_MODE_2c "2c"
00575 #define acmENC_CALIB_MODE_2d "2d"
00576 #define acmENC_CALIB_MODE_4a "4a"
00577 #define acmENC_CALIB_MODE_4b "4b"
00578
00579 typedef enum
00580 {
00581
00582 acmEncCalibModeStandard,
00583 acmEncCalibModeMechAlign,
00584 acmEncCalibModeVerifyExt,
00585 acmEncCalibModeMirrors,
00586 acmEncCalibModeAbsRef,
00587 acmEncCalibModeHead1,
00588 acmEncCalibModeHead2,
00589 acmEncCalibModeHead3,
00590 acmEncCalibModeHead4,
00591
00592
00593 acmEncCalibMode2a,
00594 acmEncCalibMode2b,
00595 acmEncCalibMode2c,
00596 acmEncCalibMode2d,
00597 acmEncCalibMode4a,
00598 acmEncCalibMode4b
00599
00600 }acmENC_CALIB_MODE;
00601
00602 typedef ccsCOMPL_STAT (acmENC_CALIB)
00603 (
00604 void *encData,
00605 acmENC_CALIB_MODE calibMode,
00606 ccsERROR *error
00607 );
00608
00609 typedef acmENC_CALIB *acmENC_CALIB_P;
00610
00611
00612 typedef ccsCOMPL_STAT (acmENC_STATUS)
00613 (
00614 void *encData,
00615 char *buffer,
00616 vltINT32 reportLevel,
00617 ccsERROR *error
00618 );
00619
00620 typedef acmENC_STATUS *acmENC_STATUS_P;
00621
00622
00623 typedef ccsCOMPL_STAT (acmENC_INIT)
00624 (
00625 void *encData,
00626 vltLOGICAL *calibrated,
00627 ccsERROR *error
00628 );
00629
00630 typedef acmENC_INIT *acmENC_INIT_P;
00631
00632 typedef ccsCOMPL_STAT (acmENC_EXIT)
00633 (
00634 void *encData,
00635 ccsERROR *error
00636 );
00637
00638 typedef acmENC_EXIT *acmENC_EXIT_P;
00639
00640 typedef ccsCOMPL_STAT (acmENC_OFF)
00641 (
00642 void *encData,
00643 ccsERROR *error
00644 );
00645
00646 typedef acmENC_OFF *acmENC_OFF_P;
00647
00648 typedef ccsCOMPL_STAT (acmENC_UPDATE)
00649 (
00650 void *encData,
00651 ccsERROR *error
00652 );
00653
00654 typedef acmENC_UPDATE *acmENC_UPDATE_P;
00655
00656 typedef struct
00657 {
00658 void *encData;
00659
00660
00661
00662
00663 acmENC_READ_P encReadP;
00664
00665
00666
00667 acmENC_VERSION_P encVersionP;
00668 acmENC_CALIB_P encCalibP;
00669 acmENC_STATUS_P encStatusP;
00670 acmENC_INIT_P encInitP;
00671 acmENC_EXIT_P encExitP;
00672 acmENC_OFF_P encOffP;
00673 acmENC_UPDATE_P encUpdateP;
00674 }acmENC;
00675
00676 typedef acmENC *acmENC_P;
00677
00678
00679 typedef ccsCOMPL_STAT (acmENC_INIT_ALL)
00680 (
00681 char *dbRoot,
00682 acmAXIS_PRESET_POS_P cbAxisPresetPosP,
00683 acmAXIS_SEND_VEL_REF_P cbAxisSendVelRefP,
00684 acmAXIS_GET_STATE_P cbAxisGetStateP,
00685 acmAXIS_UPDATE_POS_LIMS_P cbAxisUpdatePosLims,
00686 acmAXIS_SIGNAL_CONF_P acmEncSignalConf,
00687 acmENC_P acmEnc,
00688 ccsERROR *error
00689 );
00690
00691 typedef acmENC_INIT_ALL *acmENC_INIT_ALL_P;
00692
00693
00694
00695
00696
00697
00698
00699
00700 typedef ccsCOMPL_STAT (acmENC_CALC_OFFSETS)
00701 (void *ikencData,
00702 vltINT32 refMark,
00703 vltDOUBLE b1h1Pos,
00704 vltDOUBLE b1h2Pos,
00705 vltDOUBLE b2h1Pos,
00706 vltDOUBLE b2h2Pos,
00707 vltINT32 *b1h1Offset,
00708 vltINT32 *b1h2Offset,
00709 vltINT32 *b2h1Offset,
00710 vltINT32 *b2h2Offset,
00711 ccsERROR *error);
00712 typedef acmENC_CALC_OFFSETS *acmENC_CALC_OFFSETS_P;
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733 #endif