Skip to content

Commit 2bc7af3

Browse files
author
Dennis Sheirer
committed
#52 SDRPlay RSP tuner support.
1 parent 9abf64c commit 2bc7af3

File tree

336 files changed

+31841
-264
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

336 files changed

+31841
-264
lines changed

.github/workflows/gradle.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ jobs:
2222

2323
steps:
2424
- uses: actions/checkout@v2
25-
- name: Set up JDK 17
25+
- name: Set up JDK 19
2626
uses: actions/setup-java@v2
2727
with:
28-
java-version: '17'
28+
java-version: '19'
2929
distribution: 'liberica'
3030
java-package: 'jdk+fx'
3131
- name: Build with Gradle

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
Auto-generating Java code from SDRPlay API using jextract.
2+
3+
Note: the api headers in the 3.11 folder are equivalent to the 3.08 headers. The only
4+
difference from the 3.07 headers is the addition of the boolean 'valid' flag to DeviceT structure.
5+
6+
1. Download JDK19 compatible build of jextract JDK: https://jdk.java.net/jextract/
7+
2. If generating on windows platform, modify the sdrplay_api.h to remove the windows
8+
pieces of the file. Specifically:
9+
2a. Comment out these lines but leave the *HANDLE typedef:
10+
11+
//#if defined(_M_X64) || defined(_M_IX86) || defined(_M_ARM64)
12+
//#include "windows.h"
13+
//#elif defined (__GNUC__)
14+
typedef void *HANDLE;
15+
//#endif
16+
17+
//#ifndef _SDRPLAY_DLL_QUALIFIER
18+
//#if !defined(STATIC_LIB) && (defined(_M_X64) || defined(_M_IX86) || defined(_M_ARM64))
19+
//#define _SDRPLAY_DLL_QUALIFIER __declspec(dllimport)
20+
//#elif defined(STATIC_LIB) || defined(__GNUC__)
21+
//#define _SDRPLAY_DLL_QUALIFIER
22+
//#endif
23+
//#endif // _SDRPLAY_DLL_QUALIFIER
24+
25+
2b. Remove the '_SDRPLAY_DLL_QUALIFIER' from in front of the method declarations
26+
27+
2c. Change the 3.11 version string to 3.08 either in the header file, or in the generated java class
28+
29+
3. Open command prompt to the root source code where the generated files should be placed:
30+
..\SDRtrunk\sdrplay-api\src\main\java
31+
32+
4. Generate the code:
33+
c:\Users\Denny\Downloads\jdk-19-ea2-panama\bin\jextract "C:\Users\Denny\git\sdrtrunk\sdrplay-api\api\v3_11\sdrplay_api.h" -l libsdrplay_api --source
34+
35+
5. Do this for all versions of the API.
36+
Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
#ifndef SDRPLAY_API_H
2+
#define SDRPLAY_API_H
3+
4+
#include "sdrplay_api_dev.h"
5+
#include "sdrplay_api_rx_channel.h"
6+
#include "sdrplay_api_callback.h"
7+
8+
//#if defined(_M_X64) || defined(_M_IX86)
9+
//#include "windows.h"
10+
//#elif defined (__GNUC__)
11+
typedef void *HANDLE;
12+
//#endif
13+
14+
//#ifndef _SDRPLAY_DLL_QUALIFIER
15+
//#if !defined(STATIC_LIB) && (defined(_M_X64) || defined(_M_IX86))
16+
//#define _SDRPLAY_DLL_QUALIFIER __declspec(dllimport)
17+
//#elif defined(STATIC_LIB) || defined(__GNUC__)
18+
//#define _SDRPLAY_DLL_QUALIFIER
19+
//#endif
20+
//#endif // _SDRPLAY_DLL_QUALIFIER
21+
22+
// Application code should check that it is compiled against the same API version
23+
// sdrplay_api_ApiVersion() returns the API version
24+
#define SDRPLAY_API_VERSION (float)(3.07)
25+
26+
// API Constants
27+
#define SDRPLAY_MAX_DEVICES (16)
28+
#define SDRPLAY_MAX_TUNERS_PER_DEVICE (2)
29+
30+
#define SDRPLAY_MAX_SER_NO_LEN (64)
31+
#define SDRPLAY_MAX_ROOT_NM_LEN (32)
32+
33+
#define SDRPLAY_RSP1_ID (1)
34+
#define SDRPLAY_RSP1A_ID (255)
35+
#define SDRPLAY_RSP2_ID (2)
36+
#define SDRPLAY_RSPduo_ID (3)
37+
#define SDRPLAY_RSPdx_ID (4)
38+
39+
// Enum types
40+
typedef enum
41+
{
42+
sdrplay_api_Success = 0,
43+
sdrplay_api_Fail = 1,
44+
sdrplay_api_InvalidParam = 2,
45+
sdrplay_api_OutOfRange = 3,
46+
sdrplay_api_GainUpdateError = 4,
47+
sdrplay_api_RfUpdateError = 5,
48+
sdrplay_api_FsUpdateError = 6,
49+
sdrplay_api_HwError = 7,
50+
sdrplay_api_AliasingError = 8,
51+
sdrplay_api_AlreadyInitialised = 9,
52+
sdrplay_api_NotInitialised = 10,
53+
sdrplay_api_NotEnabled = 11,
54+
sdrplay_api_HwVerError = 12,
55+
sdrplay_api_OutOfMemError = 13,
56+
sdrplay_api_ServiceNotResponding = 14,
57+
sdrplay_api_StartPending = 15,
58+
sdrplay_api_StopPending = 16,
59+
sdrplay_api_InvalidMode = 17,
60+
sdrplay_api_FailedVerification1 = 18,
61+
sdrplay_api_FailedVerification2 = 19,
62+
sdrplay_api_FailedVerification3 = 20,
63+
sdrplay_api_FailedVerification4 = 21,
64+
sdrplay_api_FailedVerification5 = 22,
65+
sdrplay_api_FailedVerification6 = 23,
66+
sdrplay_api_InvalidServiceVersion = 24
67+
} sdrplay_api_ErrT;
68+
69+
typedef enum
70+
{
71+
sdrplay_api_Update_None = 0x00000000,
72+
73+
// Reasons for master only mode
74+
sdrplay_api_Update_Dev_Fs = 0x00000001,
75+
sdrplay_api_Update_Dev_Ppm = 0x00000002,
76+
sdrplay_api_Update_Dev_SyncUpdate = 0x00000004,
77+
sdrplay_api_Update_Dev_ResetFlags = 0x00000008,
78+
79+
sdrplay_api_Update_Rsp1a_BiasTControl = 0x00000010,
80+
sdrplay_api_Update_Rsp1a_RfNotchControl = 0x00000020,
81+
sdrplay_api_Update_Rsp1a_RfDabNotchControl = 0x00000040,
82+
83+
sdrplay_api_Update_Rsp2_BiasTControl = 0x00000080,
84+
sdrplay_api_Update_Rsp2_AmPortSelect = 0x00000100,
85+
sdrplay_api_Update_Rsp2_AntennaControl = 0x00000200,
86+
sdrplay_api_Update_Rsp2_RfNotchControl = 0x00000400,
87+
sdrplay_api_Update_Rsp2_ExtRefControl = 0x00000800,
88+
89+
sdrplay_api_Update_RspDuo_ExtRefControl = 0x00001000,
90+
91+
sdrplay_api_Update_Master_Spare_1 = 0x00002000,
92+
sdrplay_api_Update_Master_Spare_2 = 0x00004000,
93+
94+
// Reasons for master and slave mode
95+
// Note: sdrplay_api_Update_Tuner_Gr MUST be the first value defined in this section!
96+
sdrplay_api_Update_Tuner_Gr = 0x00008000,
97+
sdrplay_api_Update_Tuner_GrLimits = 0x00010000,
98+
sdrplay_api_Update_Tuner_Frf = 0x00020000,
99+
sdrplay_api_Update_Tuner_BwType = 0x00040000,
100+
sdrplay_api_Update_Tuner_IfType = 0x00080000,
101+
sdrplay_api_Update_Tuner_DcOffset = 0x00100000,
102+
sdrplay_api_Update_Tuner_LoMode = 0x00200000,
103+
104+
sdrplay_api_Update_Ctrl_DCoffsetIQimbalance = 0x00400000,
105+
sdrplay_api_Update_Ctrl_Decimation = 0x00800000,
106+
sdrplay_api_Update_Ctrl_Agc = 0x01000000,
107+
sdrplay_api_Update_Ctrl_AdsbMode = 0x02000000,
108+
sdrplay_api_Update_Ctrl_OverloadMsgAck = 0x04000000,
109+
110+
sdrplay_api_Update_RspDuo_BiasTControl = 0x08000000,
111+
sdrplay_api_Update_RspDuo_AmPortSelect = 0x10000000,
112+
sdrplay_api_Update_RspDuo_Tuner1AmNotchControl = 0x20000000,
113+
sdrplay_api_Update_RspDuo_RfNotchControl = 0x40000000,
114+
sdrplay_api_Update_RspDuo_RfDabNotchControl = 0x80000000,
115+
} sdrplay_api_ReasonForUpdateT;
116+
117+
typedef enum
118+
{
119+
sdrplay_api_Update_Ext1_None = 0x00000000,
120+
121+
// Reasons for master only mode
122+
sdrplay_api_Update_RspDx_HdrEnable = 0x00000001,
123+
sdrplay_api_Update_RspDx_BiasTControl = 0x00000002,
124+
sdrplay_api_Update_RspDx_AntennaControl = 0x00000004,
125+
sdrplay_api_Update_RspDx_RfNotchControl = 0x00000008,
126+
sdrplay_api_Update_RspDx_RfDabNotchControl = 0x00000010,
127+
sdrplay_api_Update_RspDx_HdrBw = 0x00000020,
128+
129+
// Reasons for master and slave mode
130+
} sdrplay_api_ReasonForUpdateExtension1T;
131+
132+
typedef enum
133+
{
134+
sdrplay_api_DbgLvl_Disable = 0,
135+
sdrplay_api_DbgLvl_Verbose = 1,
136+
sdrplay_api_DbgLvl_Warning = 2,
137+
sdrplay_api_DbgLvl_Error = 3,
138+
sdrplay_api_DbgLvl_Message = 4,
139+
} sdrplay_api_DbgLvl_t;
140+
141+
// Device structure
142+
typedef struct
143+
{
144+
char SerNo[SDRPLAY_MAX_SER_NO_LEN];
145+
unsigned char hwVer;
146+
sdrplay_api_TunerSelectT tuner;
147+
sdrplay_api_RspDuoModeT rspDuoMode;
148+
double rspDuoSampleFreq;
149+
HANDLE dev;
150+
} sdrplay_api_DeviceT;
151+
152+
// Device parameter structure
153+
typedef struct
154+
{
155+
sdrplay_api_DevParamsT *devParams;
156+
sdrplay_api_RxChannelParamsT *rxChannelA;
157+
sdrplay_api_RxChannelParamsT *rxChannelB;
158+
} sdrplay_api_DeviceParamsT;
159+
160+
// Extended error message structure
161+
typedef struct
162+
{
163+
char file[256];
164+
char function[256];
165+
int line;
166+
char message[1024];
167+
} sdrplay_api_ErrorInfoT;
168+
169+
// Comman API function types
170+
typedef sdrplay_api_ErrT (*sdrplay_api_Open_t)(void);
171+
typedef sdrplay_api_ErrT (*sdrplay_api_Close_t)(void);
172+
typedef sdrplay_api_ErrT (*sdrplay_api_ApiVersion_t)(float *apiVer);
173+
typedef sdrplay_api_ErrT (*sdrplay_api_LockDeviceApi_t)(void);
174+
typedef sdrplay_api_ErrT (*sdrplay_api_UnlockDeviceApi_t)(void);
175+
typedef sdrplay_api_ErrT (*sdrplay_api_GetDevices_t)(sdrplay_api_DeviceT *devices, unsigned int *numDevs, unsigned int maxDevs);
176+
typedef sdrplay_api_ErrT (*sdrplay_api_SelectDevice_t)(sdrplay_api_DeviceT *device);
177+
typedef sdrplay_api_ErrT (*sdrplay_api_ReleaseDevice_t)(sdrplay_api_DeviceT *device);
178+
typedef const char* (*sdrplay_api_GetErrorString_t)(sdrplay_api_ErrT err);
179+
typedef sdrplay_api_ErrorInfoT* (*sdrplay_api_GetLastError_t)(sdrplay_api_DeviceT *device);
180+
typedef sdrplay_api_ErrT (*sdrplay_api_DisableHeartbeat_t)(void);
181+
182+
// Device API function types
183+
typedef sdrplay_api_ErrT (*sdrplay_api_DebugEnable_t)(HANDLE dev, sdrplay_api_DbgLvl_t dbgLvl);
184+
typedef sdrplay_api_ErrT (*sdrplay_api_GetDeviceParams_t)(HANDLE dev, sdrplay_api_DeviceParamsT **deviceParams);
185+
typedef sdrplay_api_ErrT (*sdrplay_api_Init_t)(HANDLE dev, sdrplay_api_CallbackFnsT *callbackFns, void *cbContext);
186+
typedef sdrplay_api_ErrT (*sdrplay_api_Uninit_t)(HANDLE dev);
187+
typedef sdrplay_api_ErrT (*sdrplay_api_Update_t)(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1);
188+
typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoActiveTuner_t)(HANDLE dev, sdrplay_api_TunerSelectT *tuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
189+
typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t)(double *currentSampleRate);
190+
typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoMode_t)(sdrplay_api_DeviceT *currDevice, sdrplay_api_DeviceParamsT **deviceParams,
191+
sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner,
192+
sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
193+
194+
// API function definitions
195+
#ifdef __cplusplus
196+
extern "C"
197+
{
198+
#endif
199+
200+
// Comman API function definitions
201+
sdrplay_api_ErrT sdrplay_api_Open(void);
202+
sdrplay_api_ErrT sdrplay_api_Close(void);
203+
sdrplay_api_ErrT sdrplay_api_ApiVersion(float *apiVer);
204+
sdrplay_api_ErrT sdrplay_api_LockDeviceApi(void);
205+
sdrplay_api_ErrT sdrplay_api_UnlockDeviceApi(void);
206+
sdrplay_api_ErrT sdrplay_api_GetDevices(sdrplay_api_DeviceT *devices, unsigned int *numDevs, unsigned int maxDevs);
207+
sdrplay_api_ErrT sdrplay_api_SelectDevice(sdrplay_api_DeviceT *device);
208+
sdrplay_api_ErrT sdrplay_api_ReleaseDevice(sdrplay_api_DeviceT *device);
209+
const char* sdrplay_api_GetErrorString(sdrplay_api_ErrT err);
210+
sdrplay_api_ErrorInfoT* sdrplay_api_GetLastError(sdrplay_api_DeviceT *device);
211+
sdrplay_api_ErrT sdrplay_api_DisableHeartbeat(void); // Must be called before sdrplay_api_SelectDevice()
212+
213+
// Device API function definitions
214+
sdrplay_api_ErrT sdrplay_api_DebugEnable(HANDLE dev, sdrplay_api_DbgLvl_t enable);
215+
sdrplay_api_ErrT sdrplay_api_GetDeviceParams(HANDLE dev, sdrplay_api_DeviceParamsT **deviceParams);
216+
sdrplay_api_ErrT sdrplay_api_Init(HANDLE dev, sdrplay_api_CallbackFnsT *callbackFns, void *cbContext);
217+
sdrplay_api_ErrT sdrplay_api_Uninit(HANDLE dev);
218+
sdrplay_api_ErrT sdrplay_api_Update(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1);
219+
sdrplay_api_ErrT sdrplay_api_SwapRspDuoActiveTuner(HANDLE dev, sdrplay_api_TunerSelectT *currentTuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
220+
sdrplay_api_ErrT sdrplay_api_SwapRspDuoDualTunerModeSampleRate(HANDLE dev, double *currentSampleRate);
221+
sdrplay_api_ErrT sdrplay_api_SwapRspDuoMode(sdrplay_api_DeviceT *currDevice, sdrplay_api_DeviceParamsT **deviceParams,
222+
sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner,
223+
sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
224+
225+
#ifdef __cplusplus
226+
}
227+
#endif
228+
229+
#endif //SDRPLAY_API_H
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#ifndef SDRPLAY_API_CALLBACK_H
2+
#define SDRPLAY_API_CALLBACK_H
3+
4+
// Event callback enums
5+
typedef enum
6+
{
7+
sdrplay_api_Overload_Detected = 0,
8+
sdrplay_api_Overload_Corrected = 1,
9+
} sdrplay_api_PowerOverloadCbEventIdT;
10+
11+
typedef enum
12+
{
13+
sdrplay_api_MasterInitialised = 0,
14+
sdrplay_api_SlaveAttached = 1,
15+
sdrplay_api_SlaveDetached = 2,
16+
sdrplay_api_SlaveInitialised = 3,
17+
sdrplay_api_SlaveUninitialised = 4,
18+
sdrplay_api_MasterDllDisappeared = 5,
19+
sdrplay_api_SlaveDllDisappeared = 6,
20+
} sdrplay_api_RspDuoModeCbEventIdT;
21+
22+
typedef enum
23+
{
24+
sdrplay_api_GainChange = 0,
25+
sdrplay_api_PowerOverloadChange = 1,
26+
sdrplay_api_DeviceRemoved = 2,
27+
sdrplay_api_RspDuoModeChange = 3,
28+
} sdrplay_api_EventT;
29+
30+
// Event callback parameter structs
31+
typedef struct
32+
{
33+
unsigned int gRdB;
34+
unsigned int lnaGRdB;
35+
double currGain;
36+
} sdrplay_api_GainCbParamT;
37+
38+
typedef struct
39+
{
40+
sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType;
41+
} sdrplay_api_PowerOverloadCbParamT;
42+
43+
typedef struct
44+
{
45+
sdrplay_api_RspDuoModeCbEventIdT modeChangeType;
46+
} sdrplay_api_RspDuoModeCbParamT;
47+
48+
// Event parameters overlay
49+
typedef union
50+
{
51+
sdrplay_api_GainCbParamT gainParams;
52+
sdrplay_api_PowerOverloadCbParamT powerOverloadParams;
53+
sdrplay_api_RspDuoModeCbParamT rspDuoModeParams;
54+
} sdrplay_api_EventParamsT;
55+
56+
// Stream callback parameter structs
57+
typedef struct
58+
{
59+
unsigned int firstSampleNum;
60+
int grChanged;
61+
int rfChanged;
62+
int fsChanged;
63+
unsigned int numSamples;
64+
} sdrplay_api_StreamCbParamsT;
65+
66+
// Callback function prototypes
67+
typedef void (*sdrplay_api_StreamCallback_t)(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, unsigned int numSamples, unsigned int reset, void *cbContext);
68+
typedef void (*sdrplay_api_EventCallback_t)(sdrplay_api_EventT eventId, sdrplay_api_TunerSelectT tuner, sdrplay_api_EventParamsT *params, void *cbContext);
69+
70+
// Callback function struct
71+
typedef struct
72+
{
73+
sdrplay_api_StreamCallback_t StreamACbFn;
74+
sdrplay_api_StreamCallback_t StreamBCbFn;
75+
sdrplay_api_EventCallback_t EventCbFn;
76+
} sdrplay_api_CallbackFnsT;
77+
78+
#endif //SDRPLAY_API_CALLBACK_H

0 commit comments

Comments
 (0)