ubitx-v5x/TeensyDSP/RigState.h

77 lines
2.1 KiB
C++

#ifndef __RigState_h__
#define __RigState_h__
#define UBITX_VFOA_UPDATE 0x01
#define UBITX_VFOB_UPDATE 0x02
#define UBITX_RIT_UPDATE 0x04
#define UBITX_XIT_UPDATE 0x08
#define UBITX_FLAGS_UPDATE 0x10
#define UBITX_VFOB_FLAG 0x01
#define UBITX_SPLIT_FLAG 0x02
#define UBITX_RIT_FLAG 0x04
#define UBITX_XIT_FLAG 0x08
#define UBITX_CW_FLAG 0x10
#define UBITX_USB_FLAG 0x20
#define UBITX_TX_FLAG 0x40
struct UBitxRigState {
uint8_t header = 0;
uint32_t vfo[2];
uint16_t rit;
uint16_t xit;
uint8_t flags = 0;
};
/*
class UBitxRig {
public:
inline int freqA() const { return state.vfo[0]; }
inline int freqB() const { return state.vfo[1]; }
inline int freqRIT() const { return state.rit; }
inline int freqXIT() const { return state.xit; }
inline char vfo() const { return (state.flags & UBITX_VFOB_FLAG) == UBITX_VFOB_FLAG; }
inline char isSplit() const { return (state.flags & UBITX_SPLIT_FLAG) == UBITX_SPLIT_FLAG; }
inline char isRIT() const { return (state.flags & UBITX_RIT_FLAG) == UBITX_RIT_FLAG; }
inline char isXIT() const { return (state.flags & UBITX_XIT_FLAG) == UBITX_XIT_FLAG; }
inline char isCW() const { return (state.flags & UBITX_CW_FLAG) == UBITX_CW_FLAG; }
inline char isLSB() const { return (state.flags & UBITX_USB_FLAG) != UBITX_USB_FLAG; }
inline char isUSB() const { return (state.flags & UBITX_USB_FLAG) == UBITX_USB_FLAG; }
char* packDelta() {
buflen = 0;
// first byte: what fields have changed
buf[buflen++] = uint8_t(state.dirty);
// next (if req'd): VFO A frequency
if (state.dirty & UBITX_VFOA_UPDATE) {
packInt(state.vfo[0];
}
// next (if req'd): VFO B frequency
if (state.dirty & UBITX_VFOB_UPDATE) {
packInt(state.vfo[0];
}
private:
inline void packByte(uint8_t b) { buf[buflen++] = uint8_t(state.dirty);
inline void packInt(int i) {
int tmp = i;
for (int j = 0; j < 32; j+=8) {
tmp = tmp >> j;
buf[buflen++] = uint8_t(tmp & 0x000000FF);
}
}
UBitxRigState state;
uint8_t buf[sizeof(uint8_t) + sizeof(UBitxRigState)];
int buflen = 0;
};
*/
#endif