]> git.rkrishnan.org Git - dttsp.git/blob - pyhw/hardware.h
New hardware control code
[dttsp.git] / pyhw / hardware.h
1 /* hardware.h */
2
3 #ifndef _HARDWARE_H
4 #define _HARDWARE_H
5
6 #include <sys/types.h>
7 #include <sys/param.h>
8 #include <sys/stat.h>
9 #include <sys/time.h>
10 #include <sys/wait.h>  
11 #include <sys/mman.h>
12 #include <sys/ioctl.h>
13 #include <sys/socket.h>  
14 #include <signal.h>
15 #include <unistd.h>
16 #include <fcntl.h>
17 #include <setjmp.h>
18
19 #include <stdlib.h>
20 #include <values.h>
21 #include <stdio.h>
22 #include <stdarg.h>
23 #include <ctype.h>
24 #include <string.h>
25 #include <math.h>
26 #include <assert.h>
27 #include <libgen.h>
28
29 #include <pthread.h>
30 #include <semaphore.h>
31
32 #include <linux/ppdev.h>
33 #include <linux/parport.h>
34
35 #ifndef PRIVATE
36 #define PRIVATE static
37 #endif
38
39 typedef int BOOLEAN;
40 typedef unsigned char BYTE;
41
42 #ifndef FALSE
43 #define FALSE 0
44 #endif
45
46 #ifndef TRUE
47 #define TRUE 1
48 #endif
49
50 // ======================================================
51 // Constants and PRIVATE Variables
52 // ======================================================
53
54 typedef enum _bandplan
55 {
56   IARU1 = 1,
57   IARU2 = 2,
58   IARU3 = 3,
59 } BandPlan;
60
61 //Constants for BPF relays
62
63 typedef enum _bandsetting
64 {
65   bsnone = 0,                   //none
66   bs0 = 0x01,                   //2.5MHz LPF
67   bs1 = 0x02,                   //2-6MHz BPF
68   bs2 = 0x08,                   //5-12MHz BPF
69   bs3 = 0x04,                   //10-24MHz BPF
70   bs4 = 0x10,                   //20-40MHz BPF
71   bs5 = 0x20,                   //35-60MHz BPF
72 } BandSetting;
73
74 //PIO Control Pin Numbers
75
76 typedef enum _ctrlpin
77 {
78   EXT = 1,                      //C0
79   BPF = 14,                     //C1
80   DAT = 16,                     //C2
81   ADR = 17,                     //C3
82 } CtrlPin;
83
84 //PIO Status Mask
85
86 typedef enum _statuspin
87 {
88   PIN_12 = 0x08,                //S3
89   Dash = 0x10,                  //S4
90   Dot = 0x20,                   //S5
91   PTT = 0x40,                   //S6
92   PIN_11 = 0x80,                //S7
93 } StatusPin;
94
95 //External control port mask
96
97 typedef enum _extpin
98 {
99   P1 = 0x01,
100   P2 = 0x02,
101   P3 = 0x04,
102   P4 = 0x08,
103   P5 = 0x10,
104   P6 = 0x20,
105   P7 = 0x40,
106 } ExtPin;
107
108 //BEGIN RFE CONTROLS =====================================================
109
110 //Control and data lines for RFE serial decoders
111 #define SER  1
112 #define SCK  2
113 #define SCLR_NOT  4
114 #define DCDR_NE  32
115
116 //RFE 1:4 Decoder (74HC139) values to drive shift register RCK lines
117 typedef enum _rfe_rck
118 {
119   IC11 = 0,
120   IC7 = 8,
121   IC9 = 24,
122   IC10 = 16,
123 } RFE_RCK;
124
125 //RFE control constants
126 #define LPF0  1                 //On board low pass filter relays
127 #define LPF1 2
128 #define LPF2  4
129 #define LPF3 8
130 #define LPF4 16
131 #define LPF5  32
132 #define LPF6  64
133 #define LPF7  128
134 #define LPF8  1
135 #define LPF9 2
136
137 #define BPF0  128               //Band pass filter relays
138 #define BPF1  64
139 #define BPF2  16                //Note: BPF2 and BPF3 are reverse order
140 #define BPF3  32                //on BPF board
141 #define BPF4  8
142 #define BPF5  4
143
144 #define PAF0  1                 //Power Amplifier low pass filters
145 #define PAF1  2
146 #define PAF2  4
147 #define PAF3  8
148 #define PAF4  16
149 #define PAF5  32
150 #define PAFR  64                //Power amplifier TR relay
151
152 #define ATUCTL  128             //Automatic Tuning Unit control
153
154 #define AMP_RLYS  3             //Controls both AMP1 and AMP2 relays
155 #define XVTR_RLY  8             //Switches 2M transverter switching relayinto signal path
156 #define ATTN_RLY  16            //Attenuator relay
157 #define XVTR_TR_RLY  4          //2M transverter TR relay (on for RX) XVRX on schematic
158 #define IMPULSE_RLY  32         //Impulse circuit switching relay
159 #define SPARE_CTRL  64          //Spare control line to PA
160
161
162 //Constants latch outputs
163
164 #define TR  0x40
165 #define MUTE  0x80
166 #define GAIN  0x80
167 #define WRB  0x40
168 #define RESET  0x80
169
170 //DDS Control Constants
171 #define COMP_PD  0x10           //DDS Comparator power down
172 #define DIG_PD  0x01            //DDS Digital Power down
173 #define BYPASS_PLL  0x20        //Bypass DDS PLL
174 #define INT_IOUD  0x01          //Internal IO Update
175 #define OSK_EN  0x20            //Offset Shift Keying enable
176 #define OSK_INT  0x10           //Offset Shift Keying
177 #define BYPASS_SINC  0x40       //Bypass Inverse Sinc Filter
178 #define PLL_RANGE  0x40         //Set PLL Range
179
180 typedef struct _rig
181 {
182   //PIO register base address
183 //  unsigned short baseAdr;
184   double min_freq;              // minimum allowable tuning frequency
185   double max_freq;              // maximum allowable tuning frequency
186   unsigned radio_number;
187   unsigned short Adr;
188   int m_IC7_Memory;
189   //RFE relay memory
190   BOOLEAN rfe_enabled;          //True if RFE board is enabled
191   BOOLEAN xvtr_enabled;         //Transverter is enabled
192   BOOLEAN extended;
193   BOOLEAN xvtr_tr_logic;
194
195   // END RFE controls
196   //Latch Memories
197
198   BandSetting band_relay;
199   int external_output;
200   int mute_relay;
201   int transmit_relay;
202   int gain_relay;
203   int latch_delay;
204
205   //DDS Clock properties
206   double dds_clock;
207   int pll_mult;
208   double dds_clock_correction;
209   double sysClock;
210   int ioud_clock;
211   unsigned short dac_mult;
212
213   //DDS Frequency Control properties
214   double dds_freq;
215   double if_freq;
216   BOOLEAN if_shift;
217   BOOLEAN spur_reduction;
218   double dds_step_size;
219   int sample_rate;
220   int fft_length;
221   double FFT_Bin_Size;
222   int tune_fft;
223   double tune_frac_rel;
224   double vfo_offset;
225   double last_VFO;
226
227   //Current Bandplan
228   BandPlan curBandPlan;
229
230   double TWO_TO_THE_48_DIVIDED_BY_200;
231   long last_tuning_word;
232
233   int fd;
234   BOOLEAN needs_OSC_change;
235   double OSC_change;
236 } Rig;
237
238 extern Rig myRig;
239
240 extern BOOLEAN openRig(char *port);
241 extern void closeRig(void);
242
243 extern BOOLEAN getExtended(void);
244 extern void setExtended(BOOLEAN value);
245 extern BOOLEAN getRFE_Enabled(void);
246 extern void setRFE_Enabled(BOOLEAN value);
247 extern BOOLEAN getXVTR_Enabled(void);
248 extern void setXVTR_Enabled(BOOLEAN value);
249 extern BOOLEAN getXVTR_TR_Logic(void);
250 extern void setXVTR_TR_Logic(BOOLEAN value);
251 extern int getLatchDelay(void);
252 extern void setLatchDelay(int value);
253 extern double getMinFreq(void);
254 extern double getMaxFreq(void);
255 //extern unsigned short getBaseAddr(void);
256 //extern void setBaseAddr(unsigned short value);
257 extern BandSetting getBandRelay(void);
258 extern void setBandRelay(BandSetting value);
259 extern BOOLEAN getTransmitRelay(void);
260 extern void setTransmitRelay(BOOLEAN value);
261 extern BOOLEAN getMuteRelay(void);
262 extern void setMuteRelay(BOOLEAN value);
263 extern BOOLEAN getGainRelay(void);
264 extern void setGainRelay(BOOLEAN value);
265 extern int getExternalOutput(void);
266 extern void setExternalOutput(int value);
267 extern double getDDSClockCorrection(void);
268 extern void setDDSClockCorrection(double value);
269 extern int getPLLMult(void);
270 extern void setPLLMult(int value);
271 extern double getDDSClock(void);
272 extern void setDDSClock(double value);
273 extern BOOLEAN getIFShift(void);
274 extern void setIFShift(BOOLEAN value);
275 extern BOOLEAN getSpurReduction(void);
276 extern void setSpurReduction(BOOLEAN value);
277 extern double getIFFreq(void);
278 extern void setIFFreq(double value);
279 extern double getDDSFreq(void);
280 extern void setDDSFreq(double value);
281 extern int getSampleRate(void);
282 extern void setSampleRate(int value);
283 extern int getFFTLength(void);
284 extern void setFFTLength(int value);
285 extern int getTuneFFT(void);
286 extern double getTuneFracRel(void);
287 extern double getVFOOffset(void);
288 extern void setVFOOffset(double value);
289 extern int getIOUDClock(void);
290 extern void setIOUDClock(int value);
291 extern unsigned short getDACMult(void);
292 extern void setDACMult(unsigned short value);
293 extern BOOLEAN InputPin(StatusPin vStatusPin);
294 extern BYTE StatusPort(void);
295 extern void RigInit(void);
296 extern void PowerOn(void);
297 extern void StandBy(void);
298 extern void SetExt(ExtPin pin);
299 extern void ResExt(ExtPin pin);
300 extern BOOLEAN PinValue(ExtPin pin);
301 extern void SetBPF(double VFOValue);
302 extern BOOLEAN IsHamBand(BandPlan b);
303 extern void TestPort(void);
304 extern void RCKStrobe(BOOLEAN ClearReg, RFE_RCK Reg);
305 extern void SRLoad(RFE_RCK Reg, int Data);
306 extern void ResetRFE(void);
307 extern BOOLEAN getAMP_Relay(void);
308 extern void setAMP_Relay(BOOLEAN value);
309 extern BOOLEAN getATTN_Relay(void);
310 extern void setATTN_Relay(BOOLEAN value);
311 extern BOOLEAN getXVTR_TR_Relay(void);
312 extern void setXVTR_TR_Relay(BOOLEAN value);
313 extern BOOLEAN getXVTR_Relay(void);
314 extern void setXVTR_Relay(BOOLEAN value);
315 extern BOOLEAN getIMPULSE_Relay(void);
316 extern void setIMPULSE_Relay(BOOLEAN);
317 extern void Impulse(void);
318 #endif