GNU Radio's HPSDR Package
HermesProxyW.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2013-2015,2020 Tom McDermott, N5EG
4  *
5  * This is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3, or (at your option)
8  * any later version.
9  *
10  * This software is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this software; see the file COPYING. If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street,
18  * Boston, MA 02110-1301, USA.
19  */
20 
21 //
22 // Proxy for Hermes board wideband mode, communicates with
23 // only one hardware module.
24 // Version: March 21, 2015
25 
26 #include <gnuradio/io_signature.h>
27 #include "HermesProxy.h" // typedefs and enums
28 
29 #ifndef HermesProxyW_H
30 #define HermesProxyW_H
31 
32 #define NUMRXIQBUFS 128 // number of receiver IQ buffers in circular queue.
33  // Must be integral power of 2 (2,4,8,16,32,64, etc.)
34 
35 #define RXBUFSIZE 256 // number of floats in one RxIQBuf, #complexes is half
36  // Must be integral power of 2 (2,4,8,16,32,64, etc.)
37 
38 #define NUMTXBUFS 128 // number of transmit buffers in circular queue
39  // Must be integral power of 2
40 
41 #define TXBUFSIZE 512 // number of bytes in one TxBuf
42 
43 
44 //typedef float* IQBuf_t; // IQ buffer type (IQ samples as floats)
45 //typedef unsigned char* RawBuf_t; // Raw transmit buffer type
46 
47 //enum { PTTOff, // PTT disabled
48 // PTTVox, // PTT vox mode (examines TxFrame to decide whether to Tx)
49 // PTTOn }; // PTT force Tx on
50 
52 {
53 
54 private:
55 
56  IQBuf_t RxIQBuf[NUMRXIQBUFS]; // ReceiveIQ buffers
57  unsigned RxWriteCounter; // Which Rx buffer to write to
58  unsigned RxReadCounter; // Which Rx buffer to read from
59  unsigned RxWriteFill; // Fill level of the RxWrite buffer
60 
61  RawBuf_t TxBuf[NUMTXBUFS]; // Transmit buffers
62  unsigned TxWriteCounter; // Which Tx buffer to write to
63  unsigned TxReadCounter; // Which Tx buffer to read from
64  unsigned TxControlCycler; // Which Tx control register set to send
65  unsigned TxFrameIdleCount; // How long we've gone since sending a TxFrame
66 
67  unsigned long LostRxBufCount; // Lost-buffer counter for packets we actually got
68  unsigned long TotalRxBufCount; // Total buffer count (may roll over)
69  unsigned long LostTxBufCount; //
70  unsigned long TotalTxBufCount; //
71  unsigned long CorruptRxCount; //
72  unsigned long LostEthernetRx; //
73  unsigned long CurrentEthSeqNum; // Diagnostic
74 
75 public:
76 
77  unsigned Receive0Frequency; // 1st rcvr. Corresponds to out0 in gnuradio
78  unsigned Receive1Frequency; // 2nd rcvr. Corresponds to out1 in gnuradio
82 
83  unsigned char TxDrive;
84  unsigned char RxAtten; // not yet used (requires Hermes firmware V2.0)
85 
86  unsigned int ClockSource; // upper 6-bits of clock control register
87 
88  unsigned char AlexRxAnt; // Select Alex Receive Antenna or from T/R relay
89  unsigned char AlexTxAnt; // Select Alex Tx Antenna
90  unsigned char AlexRxHPF; // Select Alex Receive High Pass Filter
91  unsigned char AlexTxLPF; // Select Alex Transmit Low Pass Filter
92 
93  int PTTMode;
94  bool RxPreamp;
95  bool ADCdither;
96  bool ADCrandom;
98  bool Duplex;
99 
100  unsigned char HermesVersion;
101  unsigned int AIN1, AIN2, AIN3, AIN4, AIN5, AIN6; // Analog inputs to Hermes
102  unsigned int AlexRevPwr;
103  unsigned int SlowCount;
104  int Verbose;
105 
106  bool TxStop;
107  bool PTTOffMutesTx; // PTT Off mutes the transmitter
108  bool PTTOnMutesRx; // PTT On receiver
109  char interface[16];
110 
111  char mactarget[18]; // Requested target's MAC address as string
112  // "HH:HH:HH:HH:HH:HH" HH is hexadecimal string.
113  unsigned int metis_entry; // Index into Metis_card MAC table
114 
115 
116  HermesProxyW(int RxPre, const char* Intfc, const char * ClkS,
117  int AlexRA, int AlexTA, int AlexHPF, int AlexRPF,
118  const char* MACAddr); // constructor
119 
120  ~HermesProxyW(); // destructor
121 
122  void Stop(); // stop ethernet I/O
123  void Start(); // start rx stream
124 
125  void SendTxIQ(); // send an IQ buffer to Hermes transmit hardware
126  void BuildControlRegs(unsigned, RawBuf_t); // fill in the 8 byte sync+control registers from RegNum
127  void PutTxIQ(); // post a transmit TxIQ buffer
128  void ScheduleTxFrame(); // Schedule a Tx frame
129  RawBuf_t GetNextTxBuf(); // get an empty Tx Buffer
130 
131  void UpdateHermes(); // update control registers in Hermes without any Tx data
132 
133  void ReceiveRxIQ(unsigned char *); // receive an IQ buffer from Hermes hardware via metis.cc thread
134 
135  IQBuf_t GetNextRxWriteBuf(); // Used to be named GetRxIQ()
136  IQBuf_t GetNextRxReadBuf(); // Used to be named GetNextRxBuf(IQBuf_t)
139  bool RxReadBufAligned(); // True if the current Rcv Read Buffer is aligned on a 64 buffer boundary
140  bool RxWriteBufAligned(); // True if the current Rcv Write Buffer is aligned on a 64 buffer boundary
141  int RxBufFillCount(); // how many RxBuffers are filled?
142 
143  void PrintRawBuf(RawBuf_t); // for debugging
144 
145 
146 
147 };
148 
149 #endif // #ifndef HermesProxyW_H
150 
HermesProxyW::ScheduleTxFrame
void ScheduleTxFrame()
HermesProxyW::PrintRawBuf
void PrintRawBuf(RawBuf_t)
HermesProxy.h
HermesProxyW::PutTxIQ
void PutTxIQ()
NUMTXBUFS
#define NUMTXBUFS
Definition: HermesProxyW.h:38
HermesProxyW::Receive0Frequency
unsigned Receive0Frequency
Definition: HermesProxyW.h:77
HermesProxyW::Start
void Start()
HermesProxyW::GetNextRxReadBuf
IQBuf_t GetNextRxReadBuf()
HermesProxyW::AIN3
unsigned int AIN3
Definition: HermesProxyW.h:101
HermesProxyW::GetNextRxWriteBuf
IQBuf_t GetNextRxWriteBuf()
RawBuf_t
unsigned char * RawBuf_t
Definition: HermesProxy.h:59
HermesProxyW::HermesVersion
unsigned char HermesVersion
Definition: HermesProxyW.h:100
HermesProxyW::Duplex
bool Duplex
Definition: HermesProxyW.h:98
HermesProxyW::RxWriteBufAligned
bool RxWriteBufAligned()
HermesProxyW::RxReadBufAligned
bool RxReadBufAligned()
HermesProxyW::AlexRevPwr
unsigned int AlexRevPwr
Definition: HermesProxyW.h:102
HermesProxyW::HermesProxyW
HermesProxyW(int RxPre, const char *Intfc, const char *ClkS, int AlexRA, int AlexTA, int AlexHPF, int AlexRPF, const char *MACAddr)
HermesProxyW::NumReceivers
int NumReceivers
Definition: HermesProxyW.h:80
HermesProxyW::ADCrandom
bool ADCrandom
Definition: HermesProxyW.h:96
HermesProxyW::AIN6
unsigned int AIN6
Definition: HermesProxyW.h:101
HermesProxyW
Definition: HermesProxyW.h:51
HermesProxyW::ADCdither
bool ADCdither
Definition: HermesProxyW.h:95
HermesProxyW::~HermesProxyW
~HermesProxyW()
HermesProxyW::SendTxIQ
void SendTxIQ()
HermesProxyW::TxStop
bool TxStop
Definition: HermesProxyW.h:106
HermesProxyW::ADCoverload
bool ADCoverload
Definition: HermesProxyW.h:97
HermesProxyW::PTTOffMutesTx
bool PTTOffMutesTx
Definition: HermesProxyW.h:107
HermesProxyW::SlowCount
unsigned int SlowCount
Definition: HermesProxyW.h:103
HermesProxyW::GetCurrentRxWriteBuf
IQBuf_t GetCurrentRxWriteBuf()
HermesProxyW::RxBufFillCount
int RxBufFillCount()
HermesProxyW::ReceiveRxIQ
void ReceiveRxIQ(unsigned char *)
HermesProxyW::TxDrive
unsigned char TxDrive
Definition: HermesProxyW.h:83
HermesProxyW::PTTMode
int PTTMode
Definition: HermesProxyW.h:93
HermesProxyW::mactarget
char mactarget[18]
Definition: HermesProxyW.h:111
HermesProxyW::RxSampleRate
int RxSampleRate
Definition: HermesProxyW.h:81
HermesProxyW::metis_entry
unsigned int metis_entry
Definition: HermesProxyW.h:113
HermesProxyW::AIN1
unsigned int AIN1
Definition: HermesProxyW.h:101
HermesProxyW::RxAtten
unsigned char RxAtten
Definition: HermesProxyW.h:84
HermesProxyW::Receive1Frequency
unsigned Receive1Frequency
Definition: HermesProxyW.h:78
HermesProxyW::interface
char interface[16]
Definition: HermesProxyW.h:109
HermesProxyW::AIN4
unsigned int AIN4
Definition: HermesProxyW.h:101
HermesProxyW::Stop
void Stop()
HermesProxyW::RxPreamp
bool RxPreamp
Definition: HermesProxyW.h:94
HermesProxyW::PTTOnMutesRx
bool PTTOnMutesRx
Definition: HermesProxyW.h:108
NUMRXIQBUFS
#define NUMRXIQBUFS
Definition: HermesProxyW.h:32
HermesProxyW::AIN2
unsigned int AIN2
Definition: HermesProxyW.h:101
HermesProxyW::GetCurrentRxReadBuf
IQBuf_t GetCurrentRxReadBuf()
HermesProxyW::AIN5
unsigned int AIN5
Definition: HermesProxyW.h:101
HermesProxyW::AlexRxAnt
unsigned char AlexRxAnt
Definition: HermesProxyW.h:88
HermesProxyW::ClockSource
unsigned int ClockSource
Definition: HermesProxyW.h:86
HermesProxyW::TransmitFrequency
unsigned TransmitFrequency
Definition: HermesProxyW.h:79
HermesProxyW::UpdateHermes
void UpdateHermes()
HermesProxyW::AlexRxHPF
unsigned char AlexRxHPF
Definition: HermesProxyW.h:90
HermesProxyW::AlexTxAnt
unsigned char AlexTxAnt
Definition: HermesProxyW.h:89
HermesProxyW::BuildControlRegs
void BuildControlRegs(unsigned, RawBuf_t)
IQBuf_t
float * IQBuf_t
Definition: HermesProxy.h:58
HermesProxyW::GetNextTxBuf
RawBuf_t GetNextTxBuf()
HermesProxyW::Verbose
int Verbose
Definition: HermesProxyW.h:104
HermesProxyW::AlexTxLPF
unsigned char AlexTxLPF
Definition: HermesProxyW.h:91