1/*********************************************************************** 2 * 3 * Module: ttime_api.h 4 * 5 * Author: SIS 1998 6 * LM NE&SS 2001 7 * 8 * Description 9 * 10 * This header file contains data necessary for the API to the 11 * True Time board. This contains all of the structure definitions 12 * for the individual registers. 13 * 14 ***********************************************************************/ 15#ifndef TTIME_API_H 16#define TTIME_API_H 17 18#ifdef CPP 19extern "C" { 20#endif 21 22#include <time.h> 23 24typedef struct 25{ 26 unsigned int micro_sec; 27 unsigned int milli_sec; 28 struct tm gps_tm; 29} gps_time_t; 30 31typedef struct 32{ 33 unsigned char reserved_1; 34 unsigned unit_ms : 4; 35 unsigned filler_0 : 4; 36 unsigned hun_ms : 4; 37 unsigned tens_ms : 4; 38 unsigned tens_sec : 4; 39 unsigned unit_sec : 4; 40 41 unsigned tens_min : 4; 42 unsigned unit_min : 4; 43 unsigned tens_hour : 4; 44 unsigned unit_hour : 4; 45 unsigned tens_day : 4; 46 unsigned unit_day : 4; 47 unsigned filler_1 : 4; 48 unsigned hun_day : 4; 49 50 unsigned tens_year : 4; 51 unsigned unit_year : 4; 52 unsigned thou_year : 4; 53 unsigned hun_year : 4; 54 unsigned char reserved_2[2]; 55} preset_time_reg_t; 56 57typedef struct 58{ 59 unsigned n_d0 : 2; 60 unsigned antenna_short_stat : 1; /* 0 = fault */ 61 unsigned antenna_open_stat : 1; /* 0 = fault */ 62 unsigned n_d1 : 1; 63 unsigned rate_gen_pulse_stat : 1; 64 unsigned time_cmp_pulse_stat : 1; 65 unsigned ext_event_stat : 1; 66 67} hw_stat_reg_t; 68 69typedef struct 70{ 71 unsigned tens_us : 4; 72 unsigned unit_us : 4; 73 unsigned unit_ms : 4; 74 unsigned hun_us : 4; 75 unsigned char hw_stat; /* hw_stat_reg_t hw_stat; */ 76 unsigned char reserved_3; 77 78 unsigned hun_ms : 4; 79 unsigned tens_ms : 4; 80 unsigned tens_sec : 4; 81 unsigned unit_sec : 4; 82 unsigned tens_min : 4; 83 unsigned unit_min : 4; 84 unsigned tens_hour : 4; 85 unsigned unit_hour : 4; 86 87 unsigned tens_day : 4; 88 unsigned unit_day : 4; 89 unsigned status : 4; 90 unsigned hun_day : 4; 91 unsigned tens_year : 4; 92 unsigned unit_year : 4; 93 unsigned thou_year : 4; 94 unsigned hun_year : 4; 95} time_freeze_reg_t; 96 97typedef struct 98{ 99 unsigned char off_low; 100 unsigned char off_high; 101 unsigned char reserved_4[2]; 102} sync_gen_off_reg_t; 103 104typedef struct 105{ 106 unsigned tens_min : 4; 107 unsigned unit_min : 4; 108 unsigned tens_hour : 4; 109 unsigned unit_hour : 4; 110 unsigned char sign_ascii; /* '+' or '-' */ 111 unsigned char reserved_5; 112} local_off_t; 113 114/* 115 * This structure can be used for both the position freeze 116 * and position preset registers. 117 */ 118typedef struct 119{ 120 unsigned lat_tens_degee : 4; 121 unsigned lat_unit_degee : 4; 122 unsigned filler_0 : 4; 123 unsigned lat_hun_degree : 4; 124 unsigned lat_tens_min : 4; 125 unsigned lat_unit_min : 4; 126 unsigned char lat_north_south; /* 'N' or 'S' */ 127 128 unsigned filler_1 : 4; 129 unsigned lat_tenth_sec : 4; 130 unsigned lat_tens_sec : 4; 131 unsigned lat_unit_sec : 4; 132 unsigned long_tens_degree : 4; 133 unsigned long_unit_degree : 4; 134 unsigned filler_2 : 4; 135 unsigned long_hun_degree : 4; 136 137 unsigned long_tens_min : 4; 138 unsigned long_unit_min : 4; 139 unsigned char long_east_west; /* 'E' or 'W' */ 140 unsigned filler_3 : 4; 141 unsigned long_tenth_sec : 4; 142 unsigned long_tens_sec : 4; 143 unsigned long_unit_sec : 4; 144 145 unsigned elv_tens_km : 4; 146 unsigned elv_unit_km : 4; 147 unsigned char elv_sign; /* '+' or '-' */ 148 unsigned elv_unit_m : 4; 149 unsigned elv_tenth_m : 4; 150 unsigned elv_hun_m : 4; 151 unsigned elv_tens_m : 4; 152} pos_reg_t; 153 154typedef struct 155{ 156 unsigned char prn1_tens_units; 157 unsigned char prn1_reserved; 158 unsigned char lvl1_tenths_hundredths; 159 unsigned char lvl1_tens_units; 160 161 unsigned char prn2_tens_units; 162 unsigned char prn2_reserved; 163 unsigned char lvl2_tenths_hundredths; 164 unsigned char lvl2_tens_units; 165 166 unsigned char prn3_tens_units; 167 unsigned char prn3_reserved; 168 unsigned char lvl3_tenths_hundredths; 169 unsigned char lvl3_tens_units; 170 171 unsigned char prn4_tens_units; 172 unsigned char prn4_reserved; 173 unsigned char lvl4_tenths_hundredths; 174 unsigned char lvl4_tens_units; 175 176 unsigned char prn5_tens_units; 177 unsigned char prn5_reserved; 178 unsigned char lvl5_tenths_hundredths; 179 unsigned char lvl5_tens_units; 180 181 unsigned char prn6_tens_units; 182 unsigned char prn6_reserved; 183 unsigned char lvl6_tenths_hundredths; 184 unsigned char lvl6_tens_units; 185 186 unsigned char flag; 187 unsigned char reserved[3]; 188} sig_levels_t; 189 190typedef struct 191{ 192 unsigned tens_us : 4; 193 unsigned unit_us : 4; 194 unsigned unit_ms : 4; 195 unsigned hun_us : 4; 196 unsigned hun_ms : 4; 197 unsigned tens_ms : 4; 198 unsigned tens_sec : 4; 199 unsigned unit_sec : 4; 200 201 unsigned tens_min : 4; 202 unsigned unit_min : 4; 203 unsigned tens_hour : 4; 204 unsigned unit_hour : 4; 205 unsigned tens_day : 4; 206 unsigned unit_day : 4; 207 unsigned stat : 4; 208 unsigned hun_day : 4; 209 210 unsigned tens_year : 4; 211 unsigned unit_year : 4; 212 unsigned thou_year : 4; 213 unsigned hun_year : 4; 214 unsigned char reserved_5[2]; 215} ext_time_event_reg_t; 216 217typedef struct 218{ 219 unsigned tens_us : 4; 220 unsigned unit_us : 4; 221 unsigned unit_ms : 4; 222 unsigned hun_us : 4; 223 unsigned hun_ms : 4; 224 unsigned tens_ms : 4; 225 unsigned tens_sec : 4; 226 unsigned unit_sec : 4; 227 228 unsigned tens_min : 4; 229 unsigned unit_min : 4; 230 unsigned tens_hour : 4; 231 unsigned unit_hour : 4; 232 unsigned tens_day : 4; 233 unsigned unit_day : 4; 234 unsigned mask : 4; 235 unsigned hun_day : 4; 236} time_cmp_reg_t; 237 238typedef struct 239{ 240 unsigned char err_stat; 241 unsigned char no_def; 242 unsigned char oscillator_stat[2]; 243} diag_reg_t; 244 245typedef struct 246{ 247 unsigned res :2; 248 unsigned rate_int_mask :1; 249 unsigned cmp_int_mask :1; 250 unsigned ext_int_mask :1; 251 unsigned rate_stat_clr :1; 252 unsigned cmp_stat_clr :1; 253 unsigned ext_stat_clr :1; 254 unsigned char reserved[3]; 255} hw_ctl_reg_t; 256 257typedef struct 258{ 259 unsigned preset_pos_rdy :1; 260 unsigned sel_pps_ref :1; 261 unsigned sel_gps_ref :1; 262 unsigned sel_time_code :1; 263 unsigned gen_stp_run :1; 264 unsigned preset_time_rdy :1; 265 unsigned dst :1; 266 unsigned mode_sel :1; 267 268 unsigned ctl_am_dc :1; 269 unsigned reserved :3; 270 unsigned input_code :4; 271 272 unsigned char rate_reserved; 273 274 unsigned rate_flag :4; 275 unsigned rate_reserved1 :4; 276} conf_reg_t; 277 278typedef struct 279{ 280 unsigned char mem_reserved[0xf8]; 281 282 hw_ctl_reg_t hw_ctl_reg; 283 284 time_freeze_reg_t time_freeze_reg; 285 286 pos_reg_t pos_freeze_reg; 287 288 conf_reg_t conf_reg; 289 290 diag_reg_t diag_reg; 291 292 local_off_t local_offset; 293 294 sync_gen_off_reg_t sync_gen_offset; 295 296 unsigned char reserved[4]; 297 298 unsigned char config_reg2_ctl; 299 300 unsigned char reserved2[11]; 301 302 time_cmp_reg_t time_compare_reg; 303 304 unsigned char reserved3[24]; 305 306 preset_time_reg_t preset_time_reg; 307 308 pos_reg_t preset_pos_reg; 309 310 ext_time_event_reg_t extern_time_event_reg; 311 312 unsigned char reserved4[24]; 313 314 sig_levels_t signal_levels_reg; 315 316 unsigned char reserved5[12]; 317} tt_mem_space_t; 318 319#define TTIME_MEMORY_SIZE 0x200 320 321/* 322 * Defines for register offsets 323 */ 324#define HW_CTL_REG 0x0f8 325#define TIME_FREEZE_REG 0x0fc 326#define HW_STAT_REG 0x0fe 327#define POS_FREEZE_REG 0x108 328#define CONFIG_REG_1 0x118 329#define DIAG_REG 0x11c 330#define LOCAL_OFF_REG 0x120 331#define SYNC_GEN_OFF_REG 0x124 332#define CONFIG_REG_2 0x12c 333#define TIME_CMP_REG 0x138 334#define PRESET_TIME_REG 0x158 335#define PRESET_POS_REG 0x164 336#define EXT_EVENT_REG 0x174 337#define SIG_LVL_PRN1 0x198 338#define SIG_LVL_PRN2 0x19c 339#define SIG_LVL_PRN3 0x1a0 340#define SIG_LVL_PRN4 0x1a4 341#define SIG_LVL_PRN5 0x1a8 342#define SIG_LVL_PRN6 0x1ac 343#define SIG_LVL_FLAG 0x1b0 344 345/* 346 * Defines for accessing the hardware status register. 347 */ 348#define HW_STAT_ANTENNA_SHORT 0 /* access the antenna short bit */ 349#define HW_STAT_ANTENNA_OPEN 1 /* access the antenna open bit */ 350#define HW_STAT_RATE_GEN_PULSE_STAT 2 /* access the rate gen pulse bit */ 351#define HW_STAT_TIME_CMP_PULSE_STAT 3 /* access the time cmp bit */ 352#define HW_STAT_EXT_EVENT_STAT 4 /* access the external event bit */ 353 354/* 355 * Defines for accessing the hardware control register 356 */ 357 358#define HW_CTL_RATE_INT_MASK 0 /* access rate generator int mask */ 359#define HW_CTL_CMP_INT_MASK 1 /* access compare interrupt mask */ 360#define HW_CTL_EXT_INT_MASK 2 /* access external event interrupt mask */ 361#define HW_CTL_RATE_GEN_INT_CLEAR 3 /* access rate gen. interrupt clear field */ 362#define HW_CTL_TIME_CMP_INT_CLEAR 4 /* access time cmp interrupt clear field */ 363#define HW_CTL_EXT_EVENT_INT_CLEAR 5 /* access external event int clear field */ 364 365/* 366 * Defines for configuration register bit fields. 367 */ 368#define PRESET_POS_RDY_BIT 0 /* access the preset pos. rdy. bit */ 369#define SEL_1_PPS_REF_BIT 1 /* access the select 1 pps reference bit */ 370#define SEL_GPS_REF_BIT 2 /* access the select gps reference bit */ 371#define SEL_TIME_CODE_REF_BIT 3 /* access the select time code reference bit */ 372#define GEN_STOP_BIT 4 /* access the generator start/stop bit */ 373#define PRESET_TIME_RDY_BIT 5 /* access the preset time ready bit */ 374#define DST_BIT 6 /* access the DST bit */ 375#define MODE_SEL_BIT 7 /* access the mode select bit */ 376#define AM_DC_BIT 8 /* access the code bits AM/DC bit */ 377#define IN_CODE_SEL_BIT 9 /* access the input code select bit */ 378#define FLAG_BIT 10 /* access the flag bit */ 379 380/* 381 * The following defines are used to set modes in the 382 * configuration register. 383 */ 384 385#define CONF_SET_AM 0 /* Set code to AM */ 386#define CONF_SET_DC 1 /* Set code to DC */ 387#define CONF_SET_IRIG_B 0 /* Set code IRIG B */ 388#define CONF_SET_IRIG_A 1 /* Set code IRIG A */ 389 390#define CONF_FLAG_DISABLE 0 /* Disable pulse */ 391#define CONF_FLAG_10K_PPS 1 /* Set rate to 10k PPS */ 392#define CONF_FLAG_1K_PPS 2 /* Set rate to 1k PPS */ 393#define CONF_FLAG_100_PPS 3 /* Set rate to 100 PPS */ 394#define CONF_FLAG_10_PPS 4 /* Set rate to 10 PPS */ 395#define CONF_FLAG_1_PPS 5 /* Set rate to 1 PPS */ 396 397/* 398 * Defines for read commands 399 */ 400 401#define TT_RD_FREEZE_REG 0x01 402#define TT_RD_HW_CTL_REG 0x02 403#define TT_RD_CNFG_REG 0x03 404#define TT_RD_DIAG_REG 0x04 405#define TT_RD_LCL_OFFSET 0x05 406#define TT_RD_SYNC_GEN_OFF 0x06 407#define TT_RD_CNFG_REG_2 0x07 408#define TT_RD_TIME_CMP_REG 0x08 409#define TT_RD_PRESET_REG 0x09 410#define TT_RD_EXT_EVNT_REG 0x0a 411#define TT_RD_SIG_LVL_REG 0x0b 412 413/* 414 * Defines for write commands 415 */ 416#define TT_WRT_FREEZE_REG 0x0c 417#define TT_WRT_HW_CTL_REG 0x0d 418#define TT_WRT_CNFG_REG 0x0e 419#define TT_WRT_DIAG_REG 0x0f 420#define TT_WRT_LCL_OFFSET 0x10 421#define TT_WRT_SYNC_GEN_OFF 0x11 422#define TT_WRT_CNFG_REG_2 0x12 423#define TT_WRT_TIME_CMP_REG 0x13 424#define TT_WRT_PRESET_REG 0x14 425#define TT_WRT_EXT_EVNT_REG 0x15 426#define TT_WRT_SIG_LVL_REG 0x16 427 428/* 429 * Define the length of the buffers to move (in 32 bit words). 430 */ 431 432#define HW_CTL_REG_LEN 1 433#define CNFG_REG_1_LEN 1 434#define DIAG_REG_LEN 1 435#define LCL_OFFSET_LEN 1 436#define SYNC_GEN_OFF_LEN 1 437#define CNFG_REG_2_LEN 1 438 439#define TIME_CMP_REG_LEN 2 440#define PRESET_TIME_REG_LEN 3 441#define PRESET_POS_REG_LEN 4 442#define PRESET_REG_LEN (PRESET_TIME_REG_LEN+PRESET_POS_REG_LEN) 443#define TIME_FREEZE_REG_LEN 3 444#define POSN_FREEZE_REG_LEN 4 445#define FREEZE_REG_LEN (TIME_FREEZE_REG_LEN+POSN_FREEZE_REG_LEN) 446#define EXT_EVNT_REG_LEN 3 447#define SIG_LVL_REG_LEN 7 448#define GPS_TIME_LEN 7 449 450/* 451 * Define BCD - INT - BCD macros. 452 */ 453 454#define BCDTOI(a) ( ( ( ( (a) & 0xf0 ) >> 4 ) * 10 ) + ( (a) & 0x0f ) ) 455#define ITOBCD(a) ( ( ( ( (a) ) / 10) << 4 ) + ( ( (a) ) % 10) ) 456#define LTOBCD(a) ( ( ( ( (uint64_t)(a) ) / 10) << 4 ) + ( ( (uint64_t)(a) ) % 10) ) 457 458extern int init_560 ( ); 459extern void close_560 ( ); 460extern int write_hw_ctl_reg (hw_ctl_reg_t *); 461extern int write_hw_ctl_reg_bitfield (int, int ); 462extern int read_conf_reg (conf_reg_t *); 463extern int read_conf_reg_bitfield (int ); 464extern int write_conf_reg (conf_reg_t *); 465extern int write_conf_reg_bitfield (int, unsigned char ); 466extern int read_hw_stat_reg_bitfield (int ); 467extern int read_local_offset_reg (local_off_t *); 468extern int write_local_offset_reg (local_off_t *); 469extern int read_sync_offset_reg (sync_gen_off_reg_t *); 470extern int write_sync_offset_reg (sync_gen_off_reg_t *); 471extern int read_time_cmp_reg (time_cmp_reg_t *); 472extern int write_time_cmp_reg (time_cmp_reg_t *); 473extern int read_preset_time_reg (preset_time_reg_t *); 474extern int write_preset_time_reg (preset_time_reg_t *); 475extern int reset_time ( ); 476extern int set_new_time (preset_time_reg_t *); 477extern int read_preset_position_reg (pos_reg_t *); 478extern int write_preset_position_reg (pos_reg_t *); 479extern int read_external_event_reg (ext_time_event_reg_t *); 480extern int read_signal_level_reg (sig_levels_t *); 481extern int freeze_time ( ); 482extern int snapshot_time (time_freeze_reg_t *); 483extern int read_position_freeze_reg (pos_reg_t *); 484extern int read_diag_reg (diag_reg_t *); 485 486#ifdef CPP 487} 488#endif 489#endif 490