00001 #ifndef actcalCOEFFICIENTS_H
00002 #define actcalCOEFFICIENTS_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 #define _POSIX_SOURCE 1
00029 #include "vltPort.h"
00030
00031 #include <stdlib.h>
00032 #include <stdio.h>
00033 #include <string.h>
00034 #include <math.h>
00035
00036 #include "ECCS.h"
00037 #include "eccsTestTools.h"
00038 #include "eccsDB_ATTR.h"
00039 #include "eccsDB_TABLE.h"
00040 #include "tif.h"
00041 #include "mswDefines.h"
00042
00043 #include <vector>
00044
00045 #include "ccd.h"
00046
00047 #include "eccsDB_VECTOR.h"
00048
00049 #include "actcalErrors.h"
00050 #include "actcalDefines.h"
00051 #include "actcalDB_ACCESS.h"
00052
00053
00054
00055
00056
00057
00058 struct actcalACTIVE_MODES
00059 {
00060 vltLOGICAL mode[actcalMAX_NUM_MODES];
00061 };
00062
00063
00064 struct actcalINS_ABERR_MODULUS
00065 {
00066 vltDOUBLE modulus[actcalMAX_NUM_MODES];
00067 };
00068 struct actcalINS_ABERR_ANGLE
00069 {
00070 vltDOUBLE angle[actcalMAX_NUM_MODES];
00071 };
00072
00073
00074 struct actcalSINGLE_CALIB_COEFF
00075 {
00076 vltDOUBLE modulus;
00077 vltDOUBLE angle;
00078 };
00079
00080 struct actcalCALIB_COEFFS_RECORD : public eccsDB_TABLE_RECORD
00081 {
00082 vltDOUBLE zd;
00083 actcalSINGLE_CALIB_COEFF coeff[actcalMAX_NUM_MODES];
00084
00085 ccsCOMPL_STAT Unpack( void *buffer ){
00086 memcpy( &zd, buffer, sizeof(vltDOUBLE) );
00087 buffer = (char*)buffer+sizeof(vltDOUBLE);
00088 memcpy( coeff, buffer,
00089 sizeof(actcalSINGLE_CALIB_COEFF)*actcalMAX_NUM_MODES );
00090 return SUCCESS;
00091 }
00092
00093 ccsCOMPL_STAT Pack( void *buffer ){
00094 memcpy( buffer, &zd, sizeof(vltDOUBLE) );
00095 buffer = (char*)buffer+sizeof(vltDOUBLE);
00096 memcpy( buffer, coeff,
00097 sizeof(actcalSINGLE_CALIB_COEFF)*actcalMAX_NUM_MODES );
00098 return(SUCCESS);
00099 }
00100 };
00101
00102
00103 struct actcalCALIB_COEFFS
00104 {
00105 vltINT32 active[actcalMAX_NUM_MODES];
00106 actcalCALIB_COEFFS_RECORD coeff[actcalMAX_NUM_ZD_ENTRIES];
00107 };
00108
00109
00110
00111 struct actcalCOEFFS : public eccsDB_TABLE_RECORD {
00112
00113 vltLOGICAL active;
00114 vltDOUBLE modulus;
00115 vltDOUBLE angle;
00116
00117 ccsCOMPL_STAT Unpack( void *buffer ){
00118 memcpy( &active, buffer, sizeof(vltLOGICAL) );
00119 buffer = (char*)buffer+sizeof(vltLOGICAL);
00120 memcpy( &modulus, buffer, sizeof(vltDOUBLE) );
00121 buffer = (char*)buffer+sizeof(vltDOUBLE);
00122 memcpy( &angle, buffer, sizeof(vltDOUBLE));
00123 return SUCCESS;
00124 }
00125
00126 ccsCOMPL_STAT Pack( void *buffer ){
00127 vltINT32 size;
00128 dbFillBuf( (char**)&buffer, (char*)&active , &size, dbLOGICAL );
00129 dbFillBuf( (char**)&buffer, (char*)&modulus, &size, dbDOUBLE );
00130 dbFillBuf( (char**)&buffer, (char*)&angle , &size, dbDOUBLE );
00131 return(SUCCESS);
00132 }
00133 };
00134
00136 struct actcalCALIB_POLYNOM_RECORD : public eccsDB_TABLE_RECORD {
00137
00138 vltDOUBLE cx[10], cy[10];
00139
00140 ccsCOMPL_STAT Unpack(void *buffer)
00141 {
00142 int p;
00143 for (p=0 ; p<10 ; p++)
00144 {
00145 memcpy(&(cx[p]), buffer, sizeof(vltDOUBLE));
00146 buffer = (char *)buffer +sizeof(vltDOUBLE);
00147 memcpy(&(cy[p]), buffer, sizeof(vltDOUBLE));
00148 buffer = (char *)buffer +sizeof(vltDOUBLE);
00149 }
00150 return SUCCESS;
00151 }
00152 ccsCOMPL_STAT Pack(void *buffer)
00153 {
00154 vltINT32 size;
00155 int p;
00156
00157 for (p=0 ; p<10 ; p++)
00158 {
00159 dbFillBuf((char **)&buffer, (char *)&(cx[p]), &size, dbDOUBLE);
00160 dbFillBuf((char **)&buffer, (char *)&(cy[p]), &size, dbDOUBLE);
00161 }
00162 return SUCCESS;
00163 }
00164 };
00165
00167
00168 struct actcalAVG_COEFFS : public eccsDB_TABLE_RECORD {
00169
00170 vltLOGICAL active;
00171 vltDOUBLE modulus;
00172 vltDOUBLE angle;
00173 vltDOUBLE rmsVariation;
00174 vltDOUBLE rmsD80;
00175 vltDOUBLE d80Coeff;
00176 vltDOUBLE rmsCoeffTilt;
00177
00178 ccsCOMPL_STAT Unpack( void *buffer ){
00179 memcpy( &active, buffer, sizeof(vltLOGICAL) );
00180 buffer = (char*)buffer+sizeof(vltLOGICAL);
00181
00182 memcpy( &modulus, buffer, sizeof(vltDOUBLE) );
00183 buffer = (char*)buffer+sizeof(vltDOUBLE);
00184
00185 memcpy( &angle, buffer, sizeof(vltDOUBLE));
00186 buffer = (char*)buffer+sizeof(vltDOUBLE);
00187
00188 memcpy( &rmsVariation, buffer, sizeof(vltDOUBLE));
00189 buffer = (char*)buffer+sizeof(vltDOUBLE);
00190
00191 memcpy( &rmsD80, buffer, sizeof(vltDOUBLE));
00192 buffer = (char*)buffer+sizeof(vltDOUBLE);
00193
00194 memcpy( &d80Coeff, buffer, sizeof(vltDOUBLE));
00195 buffer = (char*)buffer+sizeof(vltDOUBLE);
00196
00197 memcpy( &rmsCoeffTilt, buffer, sizeof(vltDOUBLE));
00198
00199 return SUCCESS;
00200 }
00201
00202 ccsCOMPL_STAT Pack( void *buffer ){
00203 vltINT32 size;
00204 dbFillBuf( (char**)&buffer, (char*)&active , &size, dbLOGICAL);
00205 dbFillBuf( (char**)&buffer, (char*)&modulus , &size, dbDOUBLE );
00206 dbFillBuf( (char**)&buffer, (char*)&angle , &size, dbDOUBLE );
00207 dbFillBuf( (char**)&buffer, (char*)&rmsVariation , &size, dbDOUBLE );
00208 dbFillBuf( (char**)&buffer, (char*)&rmsD80 , &size, dbDOUBLE );
00209 dbFillBuf( (char**)&buffer, (char*)&d80Coeff , &size, dbDOUBLE );
00210 dbFillBuf( (char**)&buffer, (char*)&rmsCoeffTilt , &size, dbDOUBLE );
00211 return(SUCCESS);
00212 }
00213 };
00214
00215
00216 #endif