diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml
index dc116e13..1e351def 100644
--- a/.github/workflows/gradle.yml
+++ b/.github/workflows/gradle.yml
@@ -22,10 +22,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- - name: Set up JDK 20
+ - name: Set up JDK 22
uses: actions/setup-java@v3
with:
- java-version: '20'
+ java-version: '22'
distribution: 'liberica'
java-package: 'jdk+fx'
- name: Build with Gradle
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 0775d0da..21044b7a 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -15,10 +15,10 @@ jobs:
steps:
- uses: actions/checkout@v4
- - name: Set up JDK 20
+ - name: Set up JDK 22
uses: actions/setup-java@v3
with:
- java-version: '20'
+ java-version: '22'
distribution: 'liberica'
java-package: 'jdk+fx'
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 76959825..f0f78df6 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,7 +4,7 @@
-
+
\ No newline at end of file
diff --git a/artifacts/sdrplay-api-headers/README.txt b/artifacts/sdrplay-api-headers/README.txt
deleted file mode 100644
index cdd9f44e..00000000
--- a/artifacts/sdrplay-api-headers/README.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-Auto-generating Java code from SDRPlay API using jextract.
-
-Note: the api headers in the 3.11 folder are equivalent to the 3.08 headers. The only
-difference from the 3.07 headers is the addition of the boolean 'valid' flag to DeviceT structure.
-
-1. Download JDK19 compatible build of jextract JDK: https://jdk.java.net/jextract/
-2. If generating on windows platform, modify the sdrplay_api.h to remove the windows
- pieces of the file. Specifically:
-2a. Comment out these lines but leave the *HANDLE typedef:
-
-//#if defined(_M_X64) || defined(_M_IX86) || defined(_M_ARM64)
-//#include "windows.h"
-//#elif defined (__GNUC__)
-typedef void *HANDLE;
-//#endif
-
-//#ifndef _SDRPLAY_DLL_QUALIFIER
-//#if !defined(STATIC_LIB) && (defined(_M_X64) || defined(_M_IX86) || defined(_M_ARM64))
-//#define _SDRPLAY_DLL_QUALIFIER __declspec(dllimport)
-//#elif defined(STATIC_LIB) || defined(__GNUC__)
-//#define _SDRPLAY_DLL_QUALIFIER
-//#endif
-//#endif // _SDRPLAY_DLL_QUALIFIER
-
-2b. Remove the '_SDRPLAY_DLL_QUALIFIER' from in front of the method declarations
-
-2c. Change the 3.11 version string to 3.08 either in the header file, or in the generated java class
-
-3. Open command prompt to the root source code where the generated files should be placed:
-..\SDRtrunk\sdrplay-api\src\main\java
-
-4. Generate the code:
-Windows:
-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 -t io.github.dsheirer.source.tuner.sdrplay.api.v3_14
-
-Linux:
-~/Downloads/jextract-20/bin/jextract ~/IdeaProjects/sdrtrunk/artifacts/sdrplay-api-headers/v3_14/sdrplay_api.h -l libsdrplay_api --source -t io.github.dsheirer.source.tuner.sdrplay.api.v3_14
-
-5. Compare the 3.07 header files to the newest version header files. Delete any auto-generated files that have not
-changed and then update the factory class to construct variation classes where there are differences.
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api.h b/artifacts/sdrplay-api-headers/v3_11/sdrplay_api.h
deleted file mode 100644
index f3400d88..00000000
--- a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api.h
+++ /dev/null
@@ -1,230 +0,0 @@
-#ifndef SDRPLAY_API_H
-#define SDRPLAY_API_H
-
-#include "sdrplay_api_dev.h"
-#include "sdrplay_api_rx_channel.h"
-#include "sdrplay_api_callback.h"
-
-//#if defined(_M_X64) || defined(_M_IX86) || defined(_M_ARM64)
-//#include "windows.h"
-//#elif defined (__GNUC__)
-typedef void *HANDLE;
-//#endif
-
-//#ifndef _SDRPLAY_DLL_QUALIFIER
-//#if !defined(STATIC_LIB) && (defined(_M_X64) || defined(_M_IX86) || defined(_M_ARM64))
-//#define _SDRPLAY_DLL_QUALIFIER __declspec(dllimport)
-//#elif defined(STATIC_LIB) || defined(__GNUC__)
-//#define _SDRPLAY_DLL_QUALIFIER
-//#endif
-//#endif // _SDRPLAY_DLL_QUALIFIER
-
-// Application code should check that it is compiled against the same API version
-// sdrplay_api_ApiVersion() returns the API version
-#define SDRPLAY_API_VERSION (float)(3.11)
-
-// API Constants
-#define SDRPLAY_MAX_DEVICES (16)
-#define SDRPLAY_MAX_TUNERS_PER_DEVICE (2)
-
-#define SDRPLAY_MAX_SER_NO_LEN (64)
-#define SDRPLAY_MAX_ROOT_NM_LEN (32)
-
-#define SDRPLAY_RSP1_ID (1)
-#define SDRPLAY_RSP1A_ID (255)
-#define SDRPLAY_RSP2_ID (2)
-#define SDRPLAY_RSPduo_ID (3)
-#define SDRPLAY_RSPdx_ID (4)
-
-// Enum types
-typedef enum
-{
- sdrplay_api_Success = 0,
- sdrplay_api_Fail = 1,
- sdrplay_api_InvalidParam = 2,
- sdrplay_api_OutOfRange = 3,
- sdrplay_api_GainUpdateError = 4,
- sdrplay_api_RfUpdateError = 5,
- sdrplay_api_FsUpdateError = 6,
- sdrplay_api_HwError = 7,
- sdrplay_api_AliasingError = 8,
- sdrplay_api_AlreadyInitialised = 9,
- sdrplay_api_NotInitialised = 10,
- sdrplay_api_NotEnabled = 11,
- sdrplay_api_HwVerError = 12,
- sdrplay_api_OutOfMemError = 13,
- sdrplay_api_ServiceNotResponding = 14,
- sdrplay_api_StartPending = 15,
- sdrplay_api_StopPending = 16,
- sdrplay_api_InvalidMode = 17,
- sdrplay_api_FailedVerification1 = 18,
- sdrplay_api_FailedVerification2 = 19,
- sdrplay_api_FailedVerification3 = 20,
- sdrplay_api_FailedVerification4 = 21,
- sdrplay_api_FailedVerification5 = 22,
- sdrplay_api_FailedVerification6 = 23,
- sdrplay_api_InvalidServiceVersion = 24
-} sdrplay_api_ErrT;
-
-typedef enum
-{
- sdrplay_api_Update_None = 0x00000000,
-
- // Reasons for master only mode
- sdrplay_api_Update_Dev_Fs = 0x00000001,
- sdrplay_api_Update_Dev_Ppm = 0x00000002,
- sdrplay_api_Update_Dev_SyncUpdate = 0x00000004,
- sdrplay_api_Update_Dev_ResetFlags = 0x00000008,
-
- sdrplay_api_Update_Rsp1a_BiasTControl = 0x00000010,
- sdrplay_api_Update_Rsp1a_RfNotchControl = 0x00000020,
- sdrplay_api_Update_Rsp1a_RfDabNotchControl = 0x00000040,
-
- sdrplay_api_Update_Rsp2_BiasTControl = 0x00000080,
- sdrplay_api_Update_Rsp2_AmPortSelect = 0x00000100,
- sdrplay_api_Update_Rsp2_AntennaControl = 0x00000200,
- sdrplay_api_Update_Rsp2_RfNotchControl = 0x00000400,
- sdrplay_api_Update_Rsp2_ExtRefControl = 0x00000800,
-
- sdrplay_api_Update_RspDuo_ExtRefControl = 0x00001000,
-
- sdrplay_api_Update_Master_Spare_1 = 0x00002000,
- sdrplay_api_Update_Master_Spare_2 = 0x00004000,
-
- // Reasons for master and slave mode
- // Note: sdrplay_api_Update_Tuner_Gr MUST be the first value defined in this section!
- sdrplay_api_Update_Tuner_Gr = 0x00008000,
- sdrplay_api_Update_Tuner_GrLimits = 0x00010000,
- sdrplay_api_Update_Tuner_Frf = 0x00020000,
- sdrplay_api_Update_Tuner_BwType = 0x00040000,
- sdrplay_api_Update_Tuner_IfType = 0x00080000,
- sdrplay_api_Update_Tuner_DcOffset = 0x00100000,
- sdrplay_api_Update_Tuner_LoMode = 0x00200000,
-
- sdrplay_api_Update_Ctrl_DCoffsetIQimbalance = 0x00400000,
- sdrplay_api_Update_Ctrl_Decimation = 0x00800000,
- sdrplay_api_Update_Ctrl_Agc = 0x01000000,
- sdrplay_api_Update_Ctrl_AdsbMode = 0x02000000,
- sdrplay_api_Update_Ctrl_OverloadMsgAck = 0x04000000,
-
- sdrplay_api_Update_RspDuo_BiasTControl = 0x08000000,
- sdrplay_api_Update_RspDuo_AmPortSelect = 0x10000000,
- sdrplay_api_Update_RspDuo_Tuner1AmNotchControl = 0x20000000,
- sdrplay_api_Update_RspDuo_RfNotchControl = 0x40000000,
- sdrplay_api_Update_RspDuo_RfDabNotchControl = 0x80000000,
-} sdrplay_api_ReasonForUpdateT;
-
-typedef enum
-{
- sdrplay_api_Update_Ext1_None = 0x00000000,
-
- // Reasons for master only mode
- sdrplay_api_Update_RspDx_HdrEnable = 0x00000001,
- sdrplay_api_Update_RspDx_BiasTControl = 0x00000002,
- sdrplay_api_Update_RspDx_AntennaControl = 0x00000004,
- sdrplay_api_Update_RspDx_RfNotchControl = 0x00000008,
- sdrplay_api_Update_RspDx_RfDabNotchControl = 0x00000010,
- sdrplay_api_Update_RspDx_HdrBw = 0x00000020,
-
- // Reasons for master and slave mode
-} sdrplay_api_ReasonForUpdateExtension1T;
-
-typedef enum
-{
- sdrplay_api_DbgLvl_Disable = 0,
- sdrplay_api_DbgLvl_Verbose = 1,
- sdrplay_api_DbgLvl_Warning = 2,
- sdrplay_api_DbgLvl_Error = 3,
- sdrplay_api_DbgLvl_Message = 4,
-} sdrplay_api_DbgLvl_t;
-
-// Device structure
-typedef struct
-{
- char SerNo[SDRPLAY_MAX_SER_NO_LEN];
- unsigned char hwVer;
- sdrplay_api_TunerSelectT tuner;
- sdrplay_api_RspDuoModeT rspDuoMode;
- unsigned char valid;
- double rspDuoSampleFreq;
- HANDLE dev;
-} sdrplay_api_DeviceT;
-
-// Device parameter structure
-typedef struct
-{
- sdrplay_api_DevParamsT *devParams;
- sdrplay_api_RxChannelParamsT *rxChannelA;
- sdrplay_api_RxChannelParamsT *rxChannelB;
-} sdrplay_api_DeviceParamsT;
-
-// Extended error message structure
-typedef struct
-{
- char file[256];
- char function[256];
- int line;
- char message[1024];
-} sdrplay_api_ErrorInfoT;
-
-// Comman API function types
-typedef sdrplay_api_ErrT (*sdrplay_api_Open_t)(void);
-typedef sdrplay_api_ErrT (*sdrplay_api_Close_t)(void);
-typedef sdrplay_api_ErrT (*sdrplay_api_ApiVersion_t)(float *apiVer);
-typedef sdrplay_api_ErrT (*sdrplay_api_LockDeviceApi_t)(void);
-typedef sdrplay_api_ErrT (*sdrplay_api_UnlockDeviceApi_t)(void);
-typedef sdrplay_api_ErrT (*sdrplay_api_GetDevices_t)(sdrplay_api_DeviceT *devices, unsigned int *numDevs, unsigned int maxDevs);
-typedef sdrplay_api_ErrT (*sdrplay_api_SelectDevice_t)(sdrplay_api_DeviceT *device);
-typedef sdrplay_api_ErrT (*sdrplay_api_ReleaseDevice_t)(sdrplay_api_DeviceT *device);
-typedef const char* (*sdrplay_api_GetErrorString_t)(sdrplay_api_ErrT err);
-typedef sdrplay_api_ErrorInfoT* (*sdrplay_api_GetLastError_t)(sdrplay_api_DeviceT *device);
-typedef sdrplay_api_ErrT (*sdrplay_api_DisableHeartbeat_t)(void);
-
-// Device API function types
-typedef sdrplay_api_ErrT (*sdrplay_api_DebugEnable_t)(HANDLE dev, sdrplay_api_DbgLvl_t dbgLvl);
-typedef sdrplay_api_ErrT (*sdrplay_api_GetDeviceParams_t)(HANDLE dev, sdrplay_api_DeviceParamsT **deviceParams);
-typedef sdrplay_api_ErrT (*sdrplay_api_Init_t)(HANDLE dev, sdrplay_api_CallbackFnsT *callbackFns, void *cbContext);
-typedef sdrplay_api_ErrT (*sdrplay_api_Uninit_t)(HANDLE dev);
-typedef sdrplay_api_ErrT (*sdrplay_api_Update_t)(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1);
-typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoActiveTuner_t)(HANDLE dev, sdrplay_api_TunerSelectT *tuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
-typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t)(double *currentSampleRate, double newSampleRate);
-typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoMode_t)(sdrplay_api_DeviceT *currDevice, sdrplay_api_DeviceParamsT **deviceParams,
- sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner,
- sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
-
-// API function definitions
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
- // Comman API function definitions
- sdrplay_api_ErrT sdrplay_api_Open(void);
- sdrplay_api_ErrT sdrplay_api_Close(void);
- sdrplay_api_ErrT sdrplay_api_ApiVersion(float *apiVer);
- sdrplay_api_ErrT sdrplay_api_LockDeviceApi(void);
- sdrplay_api_ErrT sdrplay_api_UnlockDeviceApi(void);
- sdrplay_api_ErrT sdrplay_api_GetDevices(sdrplay_api_DeviceT *devices, unsigned int *numDevs, unsigned int maxDevs);
- sdrplay_api_ErrT sdrplay_api_SelectDevice(sdrplay_api_DeviceT *device);
- sdrplay_api_ErrT sdrplay_api_ReleaseDevice(sdrplay_api_DeviceT *device);
- const char* sdrplay_api_GetErrorString(sdrplay_api_ErrT err);
- sdrplay_api_ErrorInfoT* sdrplay_api_GetLastError(sdrplay_api_DeviceT *device);
- sdrplay_api_ErrT sdrplay_api_DisableHeartbeat(void); // Must be called before sdrplay_api_SelectDevice()
-
- // Device API function definitions
- sdrplay_api_ErrT sdrplay_api_DebugEnable(HANDLE dev, sdrplay_api_DbgLvl_t enable);
- sdrplay_api_ErrT sdrplay_api_GetDeviceParams(HANDLE dev, sdrplay_api_DeviceParamsT **deviceParams);
- sdrplay_api_ErrT sdrplay_api_Init(HANDLE dev, sdrplay_api_CallbackFnsT *callbackFns, void *cbContext);
- sdrplay_api_ErrT sdrplay_api_Uninit(HANDLE dev);
- sdrplay_api_ErrT sdrplay_api_Update(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1);
- sdrplay_api_ErrT sdrplay_api_SwapRspDuoActiveTuner(HANDLE dev, sdrplay_api_TunerSelectT *currentTuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
- sdrplay_api_ErrT sdrplay_api_SwapRspDuoDualTunerModeSampleRate(HANDLE dev, double *currentSampleRate, double newSampleRate);
- sdrplay_api_ErrT sdrplay_api_SwapRspDuoMode(sdrplay_api_DeviceT *currDevice, sdrplay_api_DeviceParamsT **deviceParams,
- sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner,
- sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //SDRPLAY_API_H
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rspDuo.h b/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rspDuo.h
deleted file mode 100644
index 3c456635..00000000
--- a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rspDuo.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef SDRPLAY_API_RSPduo_H
-#define SDRPLAY_API_RSPduo_H
-
-#define RSPDUO_NUM_LNA_STATES 10
-#define RSPDUO_NUM_LNA_STATES_AMPORT 5
-#define RSPDUO_NUM_LNA_STATES_AM 7
-#define RSPDUO_NUM_LNA_STATES_LBAND 9
-
-// RSPduo parameter enums
-typedef enum
-{
- sdrplay_api_RspDuoMode_Unknown = 0,
- sdrplay_api_RspDuoMode_Single_Tuner = 1,
- sdrplay_api_RspDuoMode_Dual_Tuner = 2,
- sdrplay_api_RspDuoMode_Master = 4,
- sdrplay_api_RspDuoMode_Slave = 8,
-} sdrplay_api_RspDuoModeT;
-
-typedef enum
-{
- sdrplay_api_RspDuo_AMPORT_1 = 1,
- sdrplay_api_RspDuo_AMPORT_2 = 0,
-} sdrplay_api_RspDuo_AmPortSelectT;
-
-// RSPduo parameter structs
-typedef struct
-{
- int extRefOutputEn; // default: 0
-} sdrplay_api_RspDuoParamsT;
-
-typedef struct
-{
- unsigned char biasTEnable; // default: 0
- sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel; // default: sdrplay_api_RspDuo_AMPORT_2
- unsigned char tuner1AmNotchEnable; // default: 0
- unsigned char rfNotchEnable; // default: 0
- unsigned char rfDabNotchEnable; // default: 0
-} sdrplay_api_RspDuoTunerParamsT;
-
-#endif //SDRPLAY_API_RSPduo_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_callback.h b/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_callback.h
deleted file mode 100644
index 0da80502..00000000
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_callback.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef SDRPLAY_API_CALLBACK_H
-#define SDRPLAY_API_CALLBACK_H
-
-// Event callback enums
-typedef enum
-{
- sdrplay_api_Overload_Detected = 0,
- sdrplay_api_Overload_Corrected = 1,
-} sdrplay_api_PowerOverloadCbEventIdT;
-
-typedef enum
-{
- sdrplay_api_MasterInitialised = 0,
- sdrplay_api_SlaveAttached = 1,
- sdrplay_api_SlaveDetached = 2,
- sdrplay_api_SlaveInitialised = 3,
- sdrplay_api_SlaveUninitialised = 4,
- sdrplay_api_MasterDllDisappeared = 5,
- sdrplay_api_SlaveDllDisappeared = 6,
-} sdrplay_api_RspDuoModeCbEventIdT;
-
-typedef enum
-{
- sdrplay_api_GainChange = 0,
- sdrplay_api_PowerOverloadChange = 1,
- sdrplay_api_DeviceRemoved = 2,
- sdrplay_api_RspDuoModeChange = 3,
- sdrplay_api_DeviceFailure = 4,
-} sdrplay_api_EventT;
-
-// Event callback parameter structs
-typedef struct
-{
- unsigned int gRdB;
- unsigned int lnaGRdB;
- double currGain;
-} sdrplay_api_GainCbParamT;
-
-typedef struct
-{
- sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType;
-} sdrplay_api_PowerOverloadCbParamT;
-
-typedef struct
-{
- sdrplay_api_RspDuoModeCbEventIdT modeChangeType;
-} sdrplay_api_RspDuoModeCbParamT;
-
-// Event parameters overlay
-typedef union
-{
- sdrplay_api_GainCbParamT gainParams;
- sdrplay_api_PowerOverloadCbParamT powerOverloadParams;
- sdrplay_api_RspDuoModeCbParamT rspDuoModeParams;
-} sdrplay_api_EventParamsT;
-
-// Stream callback parameter structs
-typedef struct
-{
- unsigned int firstSampleNum;
- int grChanged;
- int rfChanged;
- int fsChanged;
- unsigned int numSamples;
-} sdrplay_api_StreamCbParamsT;
-
-// Callback function prototypes
-typedef void (*sdrplay_api_StreamCallback_t)(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, unsigned int numSamples, unsigned int reset, void *cbContext);
-typedef void (*sdrplay_api_EventCallback_t)(sdrplay_api_EventT eventId, sdrplay_api_TunerSelectT tuner, sdrplay_api_EventParamsT *params, void *cbContext);
-
-// Callback function struct
-typedef struct
-{
- sdrplay_api_StreamCallback_t StreamACbFn;
- sdrplay_api_StreamCallback_t StreamBCbFn;
- sdrplay_api_EventCallback_t EventCbFn;
-} sdrplay_api_CallbackFnsT;
-
-#endif //SDRPLAY_API_CALLBACK_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_control.h b/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_control.h
deleted file mode 100644
index 5a52a104..00000000
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_control.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef SDRPLAY_API_CONTROL_H
-#define SDRPLAY_API_CONTROL_H
-
-// Control parameter enums
-typedef enum
-{
- sdrplay_api_AGC_DISABLE = 0,
- sdrplay_api_AGC_100HZ = 1,
- sdrplay_api_AGC_50HZ = 2,
- sdrplay_api_AGC_5HZ = 3,
- sdrplay_api_AGC_CTRL_EN = 4
-} sdrplay_api_AgcControlT;
-
-typedef enum
-{
- sdrplay_api_ADSB_DECIMATION = 0,
- sdrplay_api_ADSB_NO_DECIMATION_LOWPASS = 1,
- sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ = 2,
- sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ = 3
-} sdrplay_api_AdsbModeT;
-
-// Control parameter structs
-typedef struct
-{
- unsigned char DCenable; // default: 1
- unsigned char IQenable; // default: 1
-} sdrplay_api_DcOffsetT;
-
-typedef struct
-{
- unsigned char enable; // default: 0
- unsigned char decimationFactor; // default: 1
- unsigned char wideBandSignal; // default: 0
-} sdrplay_api_DecimationT;
-
-typedef struct
-{
- sdrplay_api_AgcControlT enable; // default: sdrplay_api_AGC_50HZ
- int setPoint_dBfs; // default: -60
- unsigned short attack_ms; // default: 0
- unsigned short decay_ms; // default: 0
- unsigned short decay_delay_ms; // default: 0
- unsigned short decay_threshold_dB; // default: 0
- int syncUpdate; // default: 0
-} sdrplay_api_AgcT;
-
-typedef struct
-{
- sdrplay_api_DcOffsetT dcOffset;
- sdrplay_api_DecimationT decimation;
- sdrplay_api_AgcT agc;
- sdrplay_api_AdsbModeT adsbMode; //default: sdrplay_api_ADSB_DECIMATION
-} sdrplay_api_ControlParamsT;
-
-#endif //SDRPLAY_API_CONTROL_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_dev.h b/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_dev.h
deleted file mode 100644
index 5ac99ae2..00000000
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_dev.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef SDRPLAY_API_DEV_H
-#define SDRPLAY_API_DEV_H
-
-#include "sdrplay_api_rsp1a.h"
-#include "sdrplay_api_rsp2.h"
-#include "sdrplay_api_rspDuo.h"
-#include "sdrplay_api_rspDx.h"
-
-// Dev parameter enums
-typedef enum
-{
- sdrplay_api_ISOCH = 0,
- sdrplay_api_BULK = 1
-} sdrplay_api_TransferModeT;
-
-// Dev parameter structs
-typedef struct
-{
- double fsHz; // default: 2000000.0
- unsigned char syncUpdate; // default: 0
- unsigned char reCal; // default: 0
-} sdrplay_api_FsFreqT;
-
-typedef struct
-{
- unsigned int sampleNum; // default: 0
- unsigned int period; // default: 0
-} sdrplay_api_SyncUpdateT;
-
-typedef struct
-{
- unsigned char resetGainUpdate; // default: 0
- unsigned char resetRfUpdate; // default: 0
- unsigned char resetFsUpdate; // default: 0
-} sdrplay_api_ResetFlagsT;
-
-typedef struct
-{
- double ppm; // default: 0.0
- sdrplay_api_FsFreqT fsFreq;
- sdrplay_api_SyncUpdateT syncUpdate;
- sdrplay_api_ResetFlagsT resetFlags;
- sdrplay_api_TransferModeT mode; // default: sdrplay_api_ISOCH
- unsigned int samplesPerPkt; // default: 0 (output param)
- sdrplay_api_Rsp1aParamsT rsp1aParams;
- sdrplay_api_Rsp2ParamsT rsp2Params;
- sdrplay_api_RspDuoParamsT rspDuoParams;
- sdrplay_api_RspDxParamsT rspDxParams;
-} sdrplay_api_DevParamsT;
-
-#endif //SDRPLAY_API_DEV_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rsp1a.h b/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rsp1a.h
deleted file mode 100644
index 3affbcc3..00000000
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rsp1a.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef SDRPLAY_API_RSP1A_H
-#define SDRPLAY_API_RSP1A_H
-
-#define RSPIA_NUM_LNA_STATES 10
-#define RSPIA_NUM_LNA_STATES_AM 7
-#define RSPIA_NUM_LNA_STATES_LBAND 9
-
-// RSP1A parameter enums
-
-// RSP1A parameter structs
-typedef struct
-{
- unsigned char rfNotchEnable; // default: 0
- unsigned char rfDabNotchEnable; // default: 0
-} sdrplay_api_Rsp1aParamsT;
-
-typedef struct
-{
- unsigned char biasTEnable; // default: 0
-} sdrplay_api_Rsp1aTunerParamsT;
-
-#endif //SDRPLAY_API_RSP1A_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rsp2.h b/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rsp2.h
deleted file mode 100644
index 930d3e95..00000000
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rsp2.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef SDRPLAY_API_RSP2_H
-#define SDRPLAY_API_RSP2_H
-
-#define RSPII_NUM_LNA_STATES 9
-#define RSPII_NUM_LNA_STATES_AMPORT 5
-#define RSPII_NUM_LNA_STATES_420MHZ 6
-
-// RSP2 parameter enums
-typedef enum
-{
- sdrplay_api_Rsp2_ANTENNA_A = 5,
- sdrplay_api_Rsp2_ANTENNA_B = 6,
-} sdrplay_api_Rsp2_AntennaSelectT;
-
-typedef enum
-{
- sdrplay_api_Rsp2_AMPORT_1 = 1,
- sdrplay_api_Rsp2_AMPORT_2 = 0,
-} sdrplay_api_Rsp2_AmPortSelectT;
-
-// RSP2 parameter structs
-typedef struct
-{
- unsigned char extRefOutputEn; // default: 0
-} sdrplay_api_Rsp2ParamsT;
-
-typedef struct
-{
- unsigned char biasTEnable; // default: 0
- sdrplay_api_Rsp2_AmPortSelectT amPortSel; // default: sdrplay_api_Rsp2_AMPORT_2
- sdrplay_api_Rsp2_AntennaSelectT antennaSel; // default: sdrplay_api_Rsp2_ANTENNA_A
- unsigned char rfNotchEnable; // default: 0
-} sdrplay_api_Rsp2TunerParamsT;
-
-#endif //SDRPLAY_API_RSP2_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rspDx.h b/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rspDx.h
deleted file mode 100644
index 0528de96..00000000
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rspDx.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef SDRPLAY_API_RSPDX_H
-#define SDRPLAY_API_RSPDX_H
-
-#include "sdrplay_api_tuner.h"
-
-#define RSPDX_NUM_LNA_STATES 28 // Number of LNA states in all bands (except where defined differently below)
-#define RSPDX_NUM_LNA_STATES_AMPORT2_0_12 19 // Number of LNA states when using AM Port 2 between 0 and 12MHz
-#define RSPDX_NUM_LNA_STATES_AMPORT2_12_50 20 // Number of LNA states when using AM Port 2 between 12 and 50MHz
-#define RSPDX_NUM_LNA_STATES_AMPORT2_50_60 25 // Number of LNA states when using AM Port 2 between 50 and 60MHz
-#define RSPDX_NUM_LNA_STATES_VHF_BAND3 27 // Number of LNA states in VHF and Band3
-#define RSPDX_NUM_LNA_STATES_420MHZ 21 // Number of LNA states in 420MHz band
-#define RSPDX_NUM_LNA_STATES_LBAND 19 // Number of LNA states in L-band
-#define RSPDX_NUM_LNA_STATES_DX 22 // Number of LNA states in DX path
-
-// RSPdx parameter enums
-typedef enum
-{
- sdrplay_api_RspDx_ANTENNA_A = 0,
- sdrplay_api_RspDx_ANTENNA_B = 1,
- sdrplay_api_RspDx_ANTENNA_C = 2,
-} sdrplay_api_RspDx_AntennaSelectT;
-
-typedef enum
-{
- sdrplay_api_RspDx_HDRMODE_BW_0_200 = 0,
- sdrplay_api_RspDx_HDRMODE_BW_0_500 = 1,
- sdrplay_api_RspDx_HDRMODE_BW_1_200 = 2,
- sdrplay_api_RspDx_HDRMODE_BW_1_700 = 3,
-} sdrplay_api_RspDx_HdrModeBwT;
-
-// RSPdx parameter structs
-typedef struct
-{
- unsigned char hdrEnable; // default: 0
- unsigned char biasTEnable; // default: 0
- sdrplay_api_RspDx_AntennaSelectT antennaSel; // default: sdrplay_api_RspDx_ANTENNA_A
- unsigned char rfNotchEnable; // default: 0
- unsigned char rfDabNotchEnable; // default: 0
-} sdrplay_api_RspDxParamsT;
-
-typedef struct
-{
- sdrplay_api_RspDx_HdrModeBwT hdrBw; // default: sdrplay_api_RspDx_HDRMODE_BW_1_700
-} sdrplay_api_RspDxTunerParamsT;
-
-#endif //SDRPLAY_API_RSPDX_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rx_channel.h b/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rx_channel.h
deleted file mode 100644
index 01008040..00000000
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rx_channel.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef SDRPLAY_API_RX_CHANNEL_H
-#define SDRPLAY_API_RX_CHANNEL_H
-
-#include "sdrplay_api_tuner.h"
-#include "sdrplay_api_control.h"
-#include "sdrplay_api_rsp1a.h"
-#include "sdrplay_api_rsp2.h"
-#include "sdrplay_api_rspDuo.h"
-#include "sdrplay_api_rspDx.h"
-
-typedef struct
-{
- sdrplay_api_TunerParamsT tunerParams;
- sdrplay_api_ControlParamsT ctrlParams;
- sdrplay_api_Rsp1aTunerParamsT rsp1aTunerParams;
- sdrplay_api_Rsp2TunerParamsT rsp2TunerParams;
- sdrplay_api_RspDuoTunerParamsT rspDuoTunerParams;
- sdrplay_api_RspDxTunerParamsT rspDxTunerParams;
-} sdrplay_api_RxChannelParamsT;
-
-#endif //SDRPLAY_API_RX_CHANNEL_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_tuner.h b/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_tuner.h
deleted file mode 100644
index a5c446d6..00000000
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_tuner.h
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef SDRPLAY_API_TUNER_H
-#define SDRPLAY_API_TUNER_H
-
-#define MAX_BB_GR (59)
-
-// Tuner parameter enums
-typedef enum
-{
- sdrplay_api_BW_Undefined = 0,
- sdrplay_api_BW_0_200 = 200,
- sdrplay_api_BW_0_300 = 300,
- sdrplay_api_BW_0_600 = 600,
- sdrplay_api_BW_1_536 = 1536,
- sdrplay_api_BW_5_000 = 5000,
- sdrplay_api_BW_6_000 = 6000,
- sdrplay_api_BW_7_000 = 7000,
- sdrplay_api_BW_8_000 = 8000
-} sdrplay_api_Bw_MHzT;
-
-typedef enum
-{
- sdrplay_api_IF_Undefined = -1,
- sdrplay_api_IF_Zero = 0,
- sdrplay_api_IF_0_450 = 450,
- sdrplay_api_IF_1_620 = 1620,
- sdrplay_api_IF_2_048 = 2048
-} sdrplay_api_If_kHzT;
-
-typedef enum
-{
- sdrplay_api_LO_Undefined = 0,
- sdrplay_api_LO_Auto = 1,
- sdrplay_api_LO_120MHz = 2,
- sdrplay_api_LO_144MHz = 3,
- sdrplay_api_LO_168MHz = 4
-} sdrplay_api_LoModeT;
-
-typedef enum
-{
- sdrplay_api_EXTENDED_MIN_GR = 0,
- sdrplay_api_NORMAL_MIN_GR = 20
-} sdrplay_api_MinGainReductionT;
-
-typedef enum
-{
- sdrplay_api_Tuner_Neither = 0,
- sdrplay_api_Tuner_A = 1,
- sdrplay_api_Tuner_B = 2,
- sdrplay_api_Tuner_Both = 3,
-} sdrplay_api_TunerSelectT;
-
-// Tuner parameter structs
-typedef struct
-{
- float curr;
- float max;
- float min;
-} sdrplay_api_GainValuesT;
-
-typedef struct
-{
- int gRdB; // default: 50
- unsigned char LNAstate; // default: 0
- unsigned char syncUpdate; // default: 0
- sdrplay_api_MinGainReductionT minGr; // default: sdrplay_api_NORMAL_MIN_GR
- sdrplay_api_GainValuesT gainVals; // output parameter
-} sdrplay_api_GainT;
-
-typedef struct
-{
- double rfHz; // default: 200000000.0
- unsigned char syncUpdate; // default: 0
-} sdrplay_api_RfFreqT;
-
-typedef struct
-{
- unsigned char dcCal; // default: 3 (Periodic mode)
- unsigned char speedUp; // default: 0 (No speedup)
- int trackTime; // default: 1 (=> time in uSec = (72 * 3 * trackTime) / 24e6 = 9uSec)
- int refreshRateTime; // default: 2048 (=> time in uSec = (72 * 3 * refreshRateTime) / 24e6 = 18432uSec)
-} sdrplay_api_DcOffsetTunerT;
-
-typedef struct
-{
- sdrplay_api_Bw_MHzT bwType; // default: sdrplay_api_BW_0_200
- sdrplay_api_If_kHzT ifType; // default: sdrplay_api_IF_Zero
- sdrplay_api_LoModeT loMode; // default: sdrplay_api_LO_Auto
- sdrplay_api_GainT gain;
- sdrplay_api_RfFreqT rfFreq;
- sdrplay_api_DcOffsetTunerT dcOffsetTuner;
-} sdrplay_api_TunerParamsT;
-
-#endif //SDRPLAY_API_TUNER_H
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api.h
similarity index 99%
rename from artifacts/sdrplay-api-headers/v3_14/sdrplay_api.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api.h
index e9e9fa45..2844e21a 100644
--- a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api.h
+++ b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api.h
@@ -21,7 +21,7 @@ typedef void *HANDLE;
// Application code should check that it is compiled against the same API version
// sdrplay_api_ApiVersion() returns the API version
-#define SDRPLAY_API_VERSION (float)(3.14)
+#define SDRPLAY_API_VERSION (float)(3.15)
// API Constants
#define SDRPLAY_MAX_DEVICES (16)
@@ -36,6 +36,7 @@ typedef void *HANDLE;
#define SDRPLAY_RSPduo_ID (3)
#define SDRPLAY_RSPdx_ID (4)
#define SDRPLAY_RSP1B_ID (6)
+#define SDRPLAY_RSPdxR2_ID (7)
// Enum types
typedef enum
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_callback.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_callback.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_11/sdrplay_api_callback.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_callback.h
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_control.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_control.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_11/sdrplay_api_control.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_control.h
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_dev.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_dev.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_11/sdrplay_api_dev.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_dev.h
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rsp1a.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rsp1a.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rsp1a.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rsp1a.h
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rsp2.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rsp2.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rsp2.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rsp2.h
diff --git a/artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rspDuo.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rspDuo.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_14/sdrplay_api_rspDuo.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rspDuo.h
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rspDx.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rspDx.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rspDx.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rspDx.h
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rx_channel.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rx_channel.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_11/sdrplay_api_rx_channel.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_rx_channel.h
diff --git a/artifacts/sdrplay-api-headers/v3_11/sdrplay_api_tuner.h b/artifacts/sdrplay-api-headers/v3_15/sdrplay_api_tuner.h
similarity index 100%
rename from artifacts/sdrplay-api-headers/v3_11/sdrplay_api_tuner.h
rename to artifacts/sdrplay-api-headers/v3_15/sdrplay_api_tuner.h
diff --git a/build.gradle b/build.gradle
index 73b294e3..5f42f376 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,8 +25,8 @@ import java.text.SimpleDateFormat
* Instructions for building/compiling the sdrtrunk application.
*
* Prerequisites:
- * Install and configure an OpenJDK version 19+ that includes the JavaFX modules (e.g. Bellsoft Liberica JDK)
- * - Optional: install and configure Gradle 7.6+
+ * Install and configure an OpenJDK version 22+ that includes the JavaFX modules (e.g. Bellsoft Liberica JDK)
+ * - Optional: install and configure Gradle 8.10+
*
* Scenario 1: run the application via gradle command line from the source code root directory:
* command: ./gradlew run
@@ -58,10 +58,10 @@ repositories {
//Version is defined in gradle.properties so that we can CLI override it for nightly builds.
version = project.findProperty('projectVersion')
-//Java 20 is required for this version of the Project Panama preview/incubator feature
+//Java 22 is required for this version of the Project Panama preview/incubator feature
java {
toolchain {
- languageVersion = JavaLanguageVersion.of(20)
+ languageVersion = JavaLanguageVersion.of(22)
}
}
@@ -90,8 +90,8 @@ dependencies {
implementation 'com.github.nwaldispuehl:java-lame:v3.98.4'
//mavenCentral/jcenter imports
- implementation 'ch.qos.logback:logback-classic:1.4.5'
- implementation 'ch.qos.logback:logback-core:1.4.5'
+ implementation 'ch.qos.logback:logback-classic:1.4.12'
+ implementation 'ch.qos.logback:logback-core:1.4.14'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.0'
implementation 'com.fazecast:jSerialComm:2.9.3'
implementation 'com.github.jiconfont:jiconfont-font_awesome:4.7.0.1'
@@ -99,7 +99,7 @@ dependencies {
implementation 'com.github.jiconfont:jiconfont-swing:1.0.1'
implementation 'com.github.wendykierp:JTransforms:3.1'
implementation 'com.google.code.gson:gson:2.10'
- implementation 'com.google.guava:guava:31.1-jre'
+ implementation 'com.google.guava:guava:33.3.0-jre'
implementation 'com.jidesoft:jide-oss:3.6.18'
implementation 'com.miglayout:miglayout-swing:11.0'
implementation 'com.mpatric:mp3agic:0.9.1'
@@ -108,7 +108,7 @@ dependencies {
implementation 'io.github.dsheirer:radio-reference-api:18.0.0'
implementation 'javax.usb:usb-api:1.0.2'
implementation 'net.coderazzi:tablefilter-swing:5.5.4'
- implementation 'org.apache.commons:commons-compress:1.21'
+ implementation 'org.apache.commons:commons-compress:1.26.0'
implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'org.apache.commons:commons-math3:3.6.1'
implementation 'org.apache.commons:commons-csv:1.9.0'
@@ -127,11 +127,11 @@ dependencies {
def os = org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.currentOperatingSystem
/**
- * This is needed for the JDK19 panama and vector API ... until it moves out of incubation or preview
+ * This is needed for the JDK22 vector API ... until it moves out of incubation or preview
*/
tasks.withType(JavaCompile) {
- options.compilerArgs.add("--enable-preview") //Panama Foreign Function/Memory is preview in JDK 19
- options.compilerArgs.add("--add-modules=jdk.incubator.vector") //Needed while Panama Vector API remains in incubator
+ options.compilerArgs.add("--enable-preview") //Project Panama Vector API is still in incubator
+ options.compilerArgs.add("--add-modules=jdk.incubator.vector") //Project Panama Vector API is still in incubator
}
/**
@@ -140,10 +140,10 @@ tasks.withType(JavaCompile) {
def jvmArgsWindows =
['--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED', //Needed for controls-fx.jar
'--add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED', //windows users for JIDE
- '--add-modules=jdk.incubator.vector', //Needed while Project Panama API is still in incubator
- '--enable-preview', //Project Panama Vector & Foreign Function APIs remain in incubator
- '--enable-native-access=ALL-UNNAMED',
- '-Djava.library.path=c:\\Program Files\\SDRplay\\API\\x64'] //Allows Project Panama Foreign Function access to system library
+ '--add-modules=jdk.incubator.vector', //Project Panama Vector API is still in incubator
+ '--enable-preview', //Project Panama Vector API is still in incubator
+ '--enable-native-access=ALL-UNNAMED', //Suppress unsafe warnings for FFM API Foreign Memory calls
+ '-Djava.library.path=c:\\Program Files\\SDRplay\\API\\x64'] //SDRPlay API library path
/**
* JVM Arguments for running the application on Linux.
@@ -152,8 +152,7 @@ def jvmArgsLinux =
['--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED', //Needed for controls-fx.jar
'--add-modules=jdk.incubator.vector', //Needed while Project Panama API is still in incubator
'--enable-preview', //Project Panama Vector & Foreign Function APIs remain in incubator
- '--enable-native-access=ALL-UNNAMED',
- '-Djava.library.path=/usr/local/lib'] //Allows Project Panama Foreign Function access to system library
+ '--enable-native-access=ALL-UNNAMED'] //SDRPlay API library path
application {
mainClassName = "io.github.dsheirer.gui.SDRTrunk"
@@ -200,16 +199,16 @@ String targetWindowsX86_64 = 'windows-x86_64-v' + version
* author's development environment, but can be changed to your environment if you want to use this build pattern.
*/
String jdk_base = '/home/denny/java_jdks/'
-String jdk_linux_aarch64 = jdk_base + 'linux-arm64/jdk-20.0.1-full'
-String jdk_linux_x86_64 = jdk_base + 'linux-x64/jdk-20.0.1-full'
-String jdk_osx_x86_64 = jdk_base + 'osx-x64/jdk-20.0.1-full.jdk'
-String jdk_osx_aarch64 = jdk_base + 'osx-arm64/jdk-20.0.1-full.jdk'
-String jdk_windows_x86_64 = jdk_base + 'windows-x64/jdk-20.0.1-full'
+String jdk_linux_aarch64 = jdk_base + 'linux-arm64/jdk-22.0.2-full'
+String jdk_linux_x86_64 = jdk_base + 'linux-x64/jdk-22.0.2-full'
+String jdk_osx_x86_64 = jdk_base + 'osx-x64/jdk-22.0.2-full.jdk'
+String jdk_osx_aarch64 = jdk_base + 'osx-arm64/jdk-22.0.2-full.jdk'
+String jdk_windows_x86_64 = jdk_base + 'windows-x64/jdk-22.0.2-full'
/**
* Download URLs to download the JDK as part of the gradle build packaging process
*/
-def jdk_download_base = "https://download.bell-sw.com/java/20.0.1+10/bellsoft-jdk20.0.1+10-"
+def jdk_download_base = "https://download.bell-sw.com/java/22.0.2+11/bellsoft-jdk22.0.2+11-"
def jdk_download_suffix = "-full.tar.gz"
def jdk_download_linux_aarch64 = jdk_download_base + "linux-aarch64" + jdk_download_suffix
def jdk_download_linux_x86_64 = jdk_download_base + "linux-amd64" + jdk_download_suffix
diff --git a/gradle.properties b/gradle.properties
index 1a69b922..24645b0a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -28,4 +28,4 @@
# tag name, specifically the dashes inserted before and after the alpha/beta labels.
# See: https://github.com/DSheirer/sdrtrunk/issues/1651
-projectVersion=0.6.1-beta-1
\ No newline at end of file
+projectVersion=0.6.1-beta-2
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 943f0cbf..033e24c4 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 99c3f1d9..9b1c73eb 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#
# ******************************************************************************
-# Copyright (C) 2014-2023 Dennis Sheirer
+# Copyright (C) 2014-2024 Dennis Sheirer
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,7 +19,8 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index d461c8cc..3d21f354 100755
--- a/gradlew
+++ b/gradlew
@@ -2,7 +2,7 @@
#
# ******************************************************************************
-# Copyright (C) 2014-2022 Dennis Sheirer
+# Copyright (C) 2014-2024 Dennis Sheirer
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -88,9 +88,6 @@ done
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -136,10 +133,13 @@ location of your Java installation."
fi
else
JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
+ fi
fi
# Increase the maximum file descriptors if we can.
@@ -147,7 +147,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
+ # shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@@ -155,7 +155,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
+ # shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -200,6 +200,10 @@ if "$cygwin" || "$msys" ; then
done
fi
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
diff --git a/src/main/java/io/github/dsheirer/gui/SDRTrunk.java b/src/main/java/io/github/dsheirer/gui/SDRTrunk.java
index 0ffd851c..c7e083ba 100644
--- a/src/main/java/io/github/dsheirer/gui/SDRTrunk.java
+++ b/src/main/java/io/github/dsheirer/gui/SDRTrunk.java
@@ -55,6 +55,7 @@ import io.github.dsheirer.source.tuner.Tuner;
import io.github.dsheirer.source.tuner.TunerEvent;
import io.github.dsheirer.source.tuner.manager.DiscoveredTuner;
import io.github.dsheirer.source.tuner.manager.TunerManager;
+import io.github.dsheirer.source.tuner.sdrplay.api.SDRPlayLibraryHelper;
import io.github.dsheirer.source.tuner.ui.TunerSpectralDisplayManager;
import io.github.dsheirer.spectrum.DisableSpectrumWaterfallMenuItem;
import io.github.dsheirer.spectrum.ShowTunerMenuItem;
@@ -152,6 +153,14 @@ public class SDRTrunk implements Listener
mApplicationLog = new ApplicationLog(mUserPreferences);
mApplicationLog.start();
+ //Note: invoke this early in the application lifecycle, before the TunerManager causes the sdrplay classes
+ //to be loaded since the jextract auto-generated code attempts to load the library by name and that can fail
+ //when the library was not installed into a normal/default location, particularly on windows OS systems.
+ if(SDRPlayLibraryHelper.LOADED)
+ {
+ mLog.info("SDRPlay API native library preemptively loaded");
+ }
+
mResourceMonitor = new ResourceMonitor(mUserPreferences);
String operatingSystem = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/README b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/README
index af332185..9d7a0cc8 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/README
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/README
@@ -1,11 +1,12 @@
SDRplay API
-All source class files are auto-created from sdrplay api header files using JDK 20 jextract tool:
+All source class files are auto-created from sdrplay api header files using JDK 22 jextract tool:
-Version 3.07 is the oldest supported version. Versions 3.08 through 3.11 are all functionally equivalent.
+Version 3.07 is the oldest supported version. Versions 3.08 through 3.14 are all functionally equivalent and
+versions 3.15+ are functionally equivalent.
-We use the JDK 20 jextract tool to generate java source files from the API include files that are
-located in the /arctifacts directory.
+We use the jextract tool to generate java source files from the API include files that are located in
+the /artifacts directory.
With each new JDK release where they change something about the Foreign Function api, we have to regenerate
the java source files. My approach is to generate the java files into the source code directories alongside
@@ -21,22 +22,42 @@ Generate Source Files from SDRPlay API Headers
- Download latest jextract tool and alias the jextract command.
- cd into the (project)/jSDRplay/sdrplay-api/src/main/java/ directory
+Note: each version is auto-generated with a _1 suffix to avoid overwriting the existing implementation. Then,
+you can just delete the original implementation and rename the suffixed versions to remove the _1. Then,
+resolve any import or syntax errors to integrate the new auto-gen code into the existing codebase.
+
Version 3.07
-- cd into the same folder where the v3.07 header files are lcoated.
-- jextract --source -t io.github.dsheirer.source.tuner.sdrplay.api.v3_08_1 -l libsdrplay_api --output ~/IdeaProjects/sdrtrunk/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08_1/ sdrplay_api.h
-- In the generated RuntimeHelper class, comment out this line: System.loadLibrary("libsdrplay_api");
+- cd into the same folder where the v3.07 header files are located.
+- jextract -t io.github.dsheirer.source.tuner.sdrplay.api.v3_07 -l sdrplay_api --output ~/IdeaProjects/sdrtrunk/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07_1/ sdrplay_api.h
Version 3.08
-Note: API include files are from a windows 10 installer, with the windows DLL aspects commented out.
- cd into the same folder where the v3.08 header files are located.
-- jextract --source -t io.github.dsheirer.source.tuner.sdrplay.api.v3_08_1 -l libsdrplay_api --output ~/IdeaProjects/sdrtrunk/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08_1/ sdrplay_api.h
-- In the generated RuntimeHelper class, comment out this line: System.loadLibrary("libsdrplay_api");
+- jextract -t io.github.dsheirer.source.tuner.sdrplay.api.v3_08 -l sdrplay_api --output ~/IdeaProjects/sdrtrunk/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08_1/ sdrplay_api.h
+Version 3.15 - Adds support for RSP dx2
+- cd into the same folder where the v3.15 header files are located.
+- jextract -t io.github.dsheirer.source.tuner.sdrplay.api.v3_15 -l sdrplay_api --output ~/IdeaProjects/sdrtrunk/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_15_1/ sdrplay_api.h
+
+As a final step, delete the original api version branches and rename each of the new api version branches to remove the _1 suffix.
+
+Code Modifications: for each version, modify the sdrplay_api_h.java class to wrap the SYMBOL_LOOKUP variable using the
+following changes, so that the code doesn't throw an error on systems that don't have the API installed:
+ //jextract auto-generated code modified to wrap with exception handler for systems that don't have the library
+ static SymbolLookup SYMBOL_LOOKUP;
+ static
+ {
+ try
+ {
+ SYMBOL_LOOKUP = SymbolLookup.libraryLookup(System.mapLibraryName("sdrplay_api"), LIBRARY_ARENA)
+ .or(SymbolLookup.loaderLookup())
+ .or(Linker.nativeLinker().defaultLookup());
+ }
+ catch(Exception e)
+ {
+ SYMBOL_LOOKUP = null;
+ }
+ }
IntelliJ setup
1. Run configuration
2. JVM Option: --enable-native-access=ALL-UNNAMED
-3. Add library location to the java.library.path:
- Linux: /usr/local/lib
- Windows: ??
- MacOS: ??
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/SDRPlayLibraryHelper.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/SDRPlayLibraryHelper.java
new file mode 100644
index 00000000..fb20ccc3
--- /dev/null
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/SDRPlayLibraryHelper.java
@@ -0,0 +1,123 @@
+/*
+ * *****************************************************************************
+ * Copyright (C) 2014-2024 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ * ****************************************************************************
+ */
+
+package io.github.dsheirer.source.tuner.sdrplay.api;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import org.apache.commons.lang3.SystemUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Helper utility to load the SDRPlay API native library into the VM.
+ *
+ * Note: the jextract auto-generated code attempts to load the native library by simple library name without any path
+ * information. On Windows this can fail because the API library is not installed in the normal Windows library location
+ * and for some reason the system library VM option with the specific location that is passed in as an argument on
+ * the command line doesn't help the system loader to resolve the library path. So, we preemptively load the library
+ * here.
+ */
+public class SDRPlayLibraryHelper
+{
+ private static final Logger mLog = LoggerFactory.getLogger(SDRPlayLibraryHelper.class);
+ private static final String SDRPLAY_API_LIBRARY_NAME = "sdrplay_api";
+ private static final String SDRPLAY_API_PATH_LINUX = "/usr/local/lib/libsdrplay_api.so";
+ private static final String SDRPLAY_API_PATH_MAC_OS = "/usr/local/lib/libsdrplay_api.dylib";
+ private static final String SDRPLAY_API_PATH_MAC_OS_ALTERNATE = "/usr/local/lib/libsdrplay_api.so";
+ private static final String SDRPLAY_API_PATH_WINDOWS = System.getenv("ProgramFiles") +
+ "\\SDRplay\\API\\" + (System.getProperty("sun.arch.data.model").contentEquals("64") ? "x64" : "x86") +
+ "\\" + SDRPLAY_API_LIBRARY_NAME;
+ private static final String JAVA_LIBRARY_PATH_KEY = "java.library.path";
+ public static final boolean LOADED = load();
+
+ /**
+ * Attempts to load the SDRPlay API library from the local system.
+ *
+ * @return true if library was loaded successfully.
+ */
+ public static boolean load()
+ {
+ try
+ {
+ System.loadLibrary(SDRPLAY_API_LIBRARY_NAME);
+ return true;
+ }
+ catch(Throwable t)
+ {
+ String libraryPath = getSDRplayLibraryPath();
+ Path path = Path.of(libraryPath);
+ boolean exists = Files.exists(path);
+
+ if(exists)
+ {
+ try
+ {
+ System.load(libraryPath);
+ return true;
+ }
+ catch(Throwable t2)
+ {
+ mLog.warn("Unable to load SDRPlay API native library: " + libraryPath);
+ }
+ }
+ else
+ {
+ mLog.info("SDRPlay API native library not found at: " + libraryPath);
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Identifies the java library path for the sdrplay api library at runtime.
+ */
+ public static String getSDRplayLibraryPath()
+ {
+ if(SystemUtils.IS_OS_WINDOWS)
+ {
+ return SDRPLAY_API_PATH_WINDOWS;
+ }
+ else if(SystemUtils.IS_OS_LINUX)
+ {
+ return SDRPLAY_API_PATH_LINUX;
+ }
+ else if(SystemUtils.IS_OS_MAC_OSX)
+ {
+ //API versions 3.14 and earlier used a (.so) extension and 3.15 and later use the (.dylib) extension
+ if(Files.exists(Path.of(SDRPLAY_API_PATH_MAC_OS)))
+ {
+ return SDRPLAY_API_PATH_MAC_OS;
+ }
+ else
+ {
+ return SDRPLAY_API_PATH_MAC_OS_ALTERNATE;
+ }
+ }
+
+ mLog.error("Unrecognized operating system. Cannot identify sdrplay api library path");
+ return "";
+ }
+
+ public static void main(String[] args)
+ {
+ System.out.println("Loaded: " + SDRPlayLibraryHelper.LOADED);
+ }
+}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/SDRplay.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/SDRplay.java
index e0f1654a..064f3278 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/SDRplay.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/SDRplay.java
@@ -33,7 +33,7 @@ import io.github.dsheirer.source.tuner.sdrplay.api.error.ErrorInformation;
import io.github.dsheirer.source.tuner.sdrplay.api.parameter.composite.CompositeParameters;
import io.github.dsheirer.source.tuner.sdrplay.api.parameter.composite.CompositeParametersFactory;
import io.github.dsheirer.source.tuner.sdrplay.api.util.Flag;
-import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_DeviceT;
+import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_DeviceParamsT;
import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_ErrorInfoT;
import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_h;
import java.lang.foreign.Arena;
@@ -44,35 +44,21 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.apache.commons.lang3.SystemUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* SDRplay API wrapper.
- *
- * Note: the jextract auto-generated RuntimeHelper contains a static block that attempts to load the sdrplay_api
- * library. This approach fails because the API is installed to a non-default location. Comment out the library
- * load code in the RuntimeHelper and we'll directly load the library.
- *
- * // System.loadLibrary("libsdrplay_api");
*/
public class SDRplay
{
- public static final String SDRPLAY_API_LIBRARY_NAME = "sdrplay_api";
- public static final String SDRPLAY_API_PATH_LINUX = "/usr/local/lib/libsdrplay_api.so";
- public static final String SDRPLAY_API_PATH_MAC_OS = "/usr/local/lib/libsdrplay_api.dylib";
- public static final String SDRPLAY_API_PATH_WINDOWS = System.getenv("ProgramFiles") +
- "\\SDRplay\\API\\" + (System.getProperty("sun.arch.data.model").contentEquals("64") ? "x64" : "x86") +
- "\\" + SDRPLAY_API_LIBRARY_NAME;
- public static final String JAVA_LIBRARY_PATH_KEY = "java.library.path";
-
private static final Logger mLog = LoggerFactory.getLogger(SDRplay.class);
/**
- * Foreign memory arena allocation resource scope
+ * Foreign memory arena allocation resource scope. We use a shared arena with a lifetime bounded by the
+ * lifetime of this API.
*/
- private final Arena mArena = Arena.openShared();
+ private final Arena mSharedArena = Arena.ofShared();
/**
* Indicates if libsdrplay_api.xx library was found and loaded.
@@ -105,28 +91,21 @@ public class SDRplay
*/
public SDRplay() throws SDRPlayException
{
- mSdrplayLibraryLoaded = loadLibrary();
+ mSdrplayLibraryLoaded = SDRPlayLibraryHelper.LOADED;
if(mSdrplayLibraryLoaded)
{
Status openStatus = open();
- if(sLibraryLoadStatusLogging)
- {
- mLog.info("API library - open status: " + openStatus);
- }
+
mAvailable = openStatus.success() && getVersion().isSupported();
if(openStatus == Status.FAIL)
{
- throw new SDRPlayException("Service not available");
+ throw new SDRPlayException("Service not available - open status: " + openStatus);
}
}
else
{
- if(sLibraryLoadStatusLogging)
- {
- mLog.info("API library was not loaded");
- }
mAvailable = false;
}
@@ -141,7 +120,14 @@ public class SDRplay
{
if(sLibraryLoadStatusLogging)
{
- mLog.info("API library is not available.");
+ if(!getVersion().isSupported())
+ {
+ mLog.info("API library is not available - unsupported version: " + getVersion());
+ }
+ else
+ {
+ mLog.info("API library is not available.");
+ }
}
}
@@ -151,52 +137,9 @@ public class SDRplay
/**
* Open Shared Memory Arena for this API instance
*/
- private Arena getArena()
+ private Arena getSharedArena()
{
- return mArena;
- }
-
- /**
- * Attempts to load the SDRPlay API library from the local system.
- *
- * @return true if library was loaded successfully.
- */
- private boolean loadLibrary()
- {
- try
- {
- String libraryPath = getSDRplayLibraryPath();
- if(sLibraryLoadStatusLogging)
- {
- mLog.info("Loading API Library from default install path: " + libraryPath);
- }
- System.loadLibrary(SDRPLAY_API_LIBRARY_NAME);
- return true;
- }
- catch(Throwable t)
- {
- mLog.error("Unable to load SDRplay API library from default install path. Loading from java system library path");
-
- try
- {
- System.loadLibrary(SDRPLAY_API_LIBRARY_NAME);
- return true;
- }
- catch(Throwable t2)
- {
- String name = System.mapLibraryName(SDRPLAY_API_LIBRARY_NAME);
-
- if(sLibraryLoadStatusLogging)
- {
- mLog.warn("SDRPlay API library not found/installed on this system. Ensure the API is installed either " +
- "in the default install location or the install location is included in the " +
- "'java.library.path' JVM property contains path to the library file [" + name +
- "]. Current library path property contents: " + System.getProperty(JAVA_LIBRARY_PATH_KEY));
- }
- }
- }
-
- return false;
+ return mSharedArena;
}
/**
@@ -219,9 +162,9 @@ public class SDRplay
List deviceStructs = new ArrayList<>();
//Get a version-correct array of DeviceT structures
- MemorySegment devicesArray = DeviceFactory.createDeviceArray(getVersion(), getArena());
+ MemorySegment devicesArray = DeviceFactory.createDeviceArray(getVersion(), getSharedArena());
- MemorySegment deviceCount = getArena().allocate(ValueLayout.JAVA_INT, 0);
+ MemorySegment deviceCount = getSharedArena().allocate(ValueLayout.JAVA_INT);
Status status = Status.fromValue(sdrplay_api_h.sdrplay_api_GetDevices(devicesArray, deviceCount,
sdrplay_api_h.SDRPLAY_MAX_DEVICES()));
@@ -356,18 +299,22 @@ public class SDRplay
*/
public CompositeParameters getCompositeParameters(DeviceType deviceType, MemorySegment deviceHandle) throws SDRPlayException
{
- //Allocate a pointer that the api will fill with the memory address of the device parameters in memory.
- MemorySegment pointer = getArena().allocate(ValueLayout.ADDRESS);
- Status status = Status.fromValue(sdrplay_api_h.sdrplay_api_GetDeviceParams(deviceHandle, pointer));
+ //The GetDeviceParams function call returns a C pointer-to-pointer so we have to:
+ // 1) Allocate native memory to receive the address
+ // 2) Invoke the method call
+ // 3) Reinterpret the address to 8-bytes so we can get the returned address value
+ // 4) Allocate a memory segment for that address
+ // 5) Reinterpret the memory segment to the size of the DeviceParamsT structure
+ // 6) Finally, wrap the native memory in a composite parameters instance
+ MemorySegment pointerToPointer = getSharedArena().allocate(ValueLayout.ADDRESS);
+ Status status = Status.fromValue(sdrplay_api_h.sdrplay_api_GetDeviceParams(deviceHandle, pointerToPointer));
if(status.success())
{
- //Get the memory address from the pointer's memory segment to where the structure is located
- MemorySegment memoryAddress = pointer.get(ValueLayout.ADDRESS, 0);
-
- //The structure's memory is already allocated ... wrap a memory segment around it
- MemorySegment memorySegment = sdrplay_api_DeviceT.ofAddress(memoryAddress, getArena().scope());
- return CompositeParametersFactory.create(getVersion(), deviceType, memorySegment, getArena());
+ MemorySegment pointer = pointerToPointer.reinterpret(ValueLayout.ADDRESS.byteSize());
+ MemorySegment deviceParamsAddress = MemorySegment.ofAddress(pointer.get(ValueLayout.JAVA_LONG, 0));
+ MemorySegment deviceParams = deviceParamsAddress.reinterpret(sdrplay_api_DeviceParamsT.sizeof(), getSharedArena(), null);
+ return CompositeParametersFactory.create(getVersion(), deviceType, deviceParams, getSharedArena());
}
else
{
@@ -385,7 +332,7 @@ public class SDRplay
private void init(MemorySegment deviceHandle, MemorySegment callbackFunctions) throws SDRPlayException
{
//Since we don't need/use the callback context ... setup as a pointer to the callback functions
- MemorySegment contextPointer = getArena().allocate(ValueLayout.ADDRESS, callbackFunctions);
+ MemorySegment contextPointer = Arena.ofAuto().allocate(ValueLayout.ADDRESS);
Status status = Status.fromValue(sdrplay_api_h.sdrplay_api_Init(deviceHandle, callbackFunctions, contextPointer));
if(!status.success())
@@ -410,7 +357,7 @@ public class SDRplay
if(callbackFunctions == null)
{
- callbackFunctions = new CallbackFunctions(getArena(), eventListener, streamListener,
+ callbackFunctions = new CallbackFunctions(getSharedArena(), eventListener, streamListener,
device.getStreamCallbackListener());
mDeviceCallbackFunctionsMap.put(deviceHandle, callbackFunctions);
}
@@ -439,7 +386,7 @@ public class SDRplay
if(callbackFunctions == null)
{
- callbackFunctions = new CallbackFunctions(getArena(), eventListener, streamListener, streamListener,
+ callbackFunctions = new CallbackFunctions(getSharedArena(), eventListener, streamListener, streamListener,
device.getStreamCallbackListener());
mDeviceCallbackFunctionsMap.put(deviceHandle, callbackFunctions);
}
@@ -505,7 +452,7 @@ public class SDRplay
private ErrorInformation getLastError(MemorySegment deviceSegment)
{
MemorySegment errorAddress = sdrplay_api_h.sdrplay_api_GetLastError(deviceSegment);
- MemorySegment errorSegment = sdrplay_api_ErrorInfoT.ofAddress(errorAddress, getArena().scope());
+ MemorySegment errorSegment = errorAddress.reinterpret(sdrplay_api_ErrorInfoT.layout().byteSize(), getSharedArena(), null);
return new ErrorInformation(errorSegment);
}
@@ -559,7 +506,7 @@ public class SDRplay
* Closes the API service. MUST be invoked before shutdown, after all SDRPlay API operations are completed.
*
* Note: when using multiple instances of this class, only invoke close() on a single instance. With linux API
- * version 3.07, if you invoked close() on one instance, then all of the other instances become unusable for
+ * version 3.07, if you invoked close() on one instance, then all other instances become unusable for
* performing device operations (e.g. release(), etc). This may be an artifact of the way that the Java
* Foreign Function support is implemented, but not sure. dls 1-Jan-2023
*/
@@ -579,12 +526,14 @@ public class SDRplay
mLog.error("Error closing SDRPlay API");
}
+ getSharedArena().close();
mSdrplayLibraryLoaded = false;
mAvailable = false;
return closeStatus;
}
else
{
+ getSharedArena().close();
return Status.API_UNAVAILABLE;
}
}
@@ -602,7 +551,7 @@ public class SDRplay
{
if(mSdrplayLibraryLoaded)
{
- MemorySegment apiVersion = getArena().allocate(ValueLayout.JAVA_FLOAT, 0);
+ MemorySegment apiVersion = getSharedArena().allocate(ValueLayout.JAVA_FLOAT);
Status status = Status.fromValue(sdrplay_api_h.sdrplay_api_ApiVersion(apiVersion));
if(status.success())
{
@@ -665,28 +614,6 @@ public class SDRplay
}
}
- /**
- * Identifies the java library path for the sdrplay api library at runtime.
- */
- public static String getSDRplayLibraryPath()
- {
- if(SystemUtils.IS_OS_WINDOWS)
- {
- return SDRPLAY_API_PATH_WINDOWS;
- }
- else if(SystemUtils.IS_OS_LINUX)
- {
- return SDRPLAY_API_PATH_LINUX;
- }
- else if(SystemUtils.IS_OS_MAC_OSX)
- {
- return SDRPLAY_API_PATH_MAC_OS;
- }
-
- mLog.error("Unrecognized operating system. Cannot identify sdrplay api library path");
- return "";
- }
-
public static void main(String[] args)
{
/**
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/UpdateReason.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/UpdateReason.java
index 1e55df88..133ca23e 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/UpdateReason.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/UpdateReason.java
@@ -78,7 +78,7 @@ public enum UpdateReason
EXTENSION_RSP_DX_RF_NOTCH_CONTROL(sdrplay_api_h.sdrplay_api_Update_RspDx_RfNotchControl(), "RSPdx RF Notch Control"),
EXTENSION_RSP_DX_RF_DAB_NOTCH_CONTROL(sdrplay_api_h.sdrplay_api_Update_RspDx_RfDabNotchControl(), "RSPdx RF DAB Notch Control"),
EXTENSION_RSP_DX_HDR_BANDWIDTH(sdrplay_api_h.sdrplay_api_Update_RspDx_HdrBw(), "RSPdx HDR Bandwidth"),
- EXTENSION_RSP_DUO_RESET_SLAVE_FLAGS(io.github.dsheirer.source.tuner.sdrplay.api.v3_14.sdrplay_api_h.sdrplay_api_Update_RspDuo_ResetSlaveFlags(), "RSPDuo Reset Slave Flags"),
+ EXTENSION_RSP_DUO_RESET_SLAVE_FLAGS(io.github.dsheirer.source.tuner.sdrplay.api.v3_15.sdrplay_api_h.sdrplay_api_Update_RspDuo_ResetSlaveFlags(), "RSPDuo Reset Slave Flags"),
EXTENSION_NONE(sdrplay_api_h.sdrplay_api_Update_Ext1_None(), "NONE"),
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/CallbackFunctions.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/CallbackFunctions.java
index 89f38587..ce9beca9 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/CallbackFunctions.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/CallbackFunctions.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,33 +30,36 @@ import java.lang.foreign.MemorySegment;
*/
public class CallbackFunctions
{
- private DeviceEventAdapter mDeviceEventAdapter;
- private StreamCallbackAdapter mStreamACallbackAdapter;
- private StreamCallbackAdapter mStreamBCallbackAdapter;
- private MemorySegment mCallbackFunctionsMemorySegment;
+ private final DeviceEventAdapter mDeviceEventAdapter;
+ private final StreamCallbackAdapter mStreamACallbackAdapter;
+ private final StreamCallbackAdapter mStreamBCallbackAdapter;
+ private final MemorySegment mCallbackFunctionsMemorySegment;
/**
* Constructs a callback functions for single-tuner use.
- * @param longLifecycleArena for native memory allocation for long lifecycle objects.
+ * @param arena for native memory allocation for long lifecycle objects.
* @param deviceEventListener for device events
* @param streamListener for streaming samples
* @param streamCallbackListener for streaming events
*/
- public CallbackFunctions(Arena longLifecycleArena, IDeviceEventListener deviceEventListener,
- IStreamListener streamListener, IStreamCallbackListener streamCallbackListener)
+ public CallbackFunctions(Arena arena, IDeviceEventListener deviceEventListener, IStreamListener streamListener,
+ IStreamCallbackListener streamCallbackListener)
{
//Create the event callback function
mDeviceEventAdapter = new DeviceEventAdapter(deviceEventListener);
- MemorySegment eventFunction = sdrplay_api_EventCallback_t.allocate(mDeviceEventAdapter, longLifecycleArena.scope());
+ MemorySegment eventFunction = sdrplay_api_EventCallback_t.allocate(mDeviceEventAdapter, arena);
//Create the stream A callback function
mStreamACallbackAdapter = new StreamCallbackAdapter(streamListener, streamCallbackListener);
- MemorySegment streamAFunction = sdrplay_api_StreamCallback_t.allocate(mStreamACallbackAdapter, longLifecycleArena.scope());
+ MemorySegment streamAFunction = sdrplay_api_StreamCallback_t.allocate(mStreamACallbackAdapter, arena);
+ mStreamBCallbackAdapter = null;
//Create the callback functions union and populate the callback functions
- mCallbackFunctionsMemorySegment = sdrplay_api_CallbackFnsT.allocate(longLifecycleArena);
- sdrplay_api_CallbackFnsT.EventCbFn$set(mCallbackFunctionsMemorySegment, eventFunction);
- sdrplay_api_CallbackFnsT.StreamACbFn$set(mCallbackFunctionsMemorySegment, streamAFunction);
+ mCallbackFunctionsMemorySegment = sdrplay_api_CallbackFnsT.allocate(arena);
+ sdrplay_api_CallbackFnsT.EventCbFn(mCallbackFunctionsMemorySegment, eventFunction);
+ sdrplay_api_CallbackFnsT.StreamACbFn(mCallbackFunctionsMemorySegment, streamAFunction);
+// sdrplay_api_CallbackFnsT.EventCbFn$set(mCallbackFunctionsMemorySegment, eventFunction);
+// sdrplay_api_CallbackFnsT.StreamACbFn$set(mCallbackFunctionsMemorySegment, streamAFunction);
}
/**
@@ -73,21 +76,24 @@ public class CallbackFunctions
{
//Create the event callback function
mDeviceEventAdapter = new DeviceEventAdapter(deviceEventListener);
- MemorySegment eventFunction = sdrplay_api_EventCallback_t.allocate(mDeviceEventAdapter, arena.scope());
+ MemorySegment eventFunction = sdrplay_api_EventCallback_t.allocate(mDeviceEventAdapter, arena);
//Create the stream A callback function
mStreamACallbackAdapter = new StreamCallbackAdapter(streamAListener, streamCallbackListener);
- MemorySegment streamAFunction = sdrplay_api_StreamCallback_t.allocate(mStreamACallbackAdapter, arena.scope());
+ MemorySegment streamAFunction = sdrplay_api_StreamCallback_t.allocate(mStreamACallbackAdapter, arena);
//Create the stream B callback function
mStreamBCallbackAdapter = new StreamCallbackAdapter(streamBListener, streamCallbackListener);
- MemorySegment streamBFunction = sdrplay_api_StreamCallback_t.allocate(mStreamBCallbackAdapter, arena.scope());
+ MemorySegment streamBFunction = sdrplay_api_StreamCallback_t.allocate(mStreamBCallbackAdapter, arena);
//Create the callback functions union and populate the callback functions
mCallbackFunctionsMemorySegment = sdrplay_api_CallbackFnsT.allocate(arena);
- sdrplay_api_CallbackFnsT.EventCbFn$set(mCallbackFunctionsMemorySegment, eventFunction);
- sdrplay_api_CallbackFnsT.StreamACbFn$set(mCallbackFunctionsMemorySegment, streamAFunction);
- sdrplay_api_CallbackFnsT.StreamBCbFn$set(mCallbackFunctionsMemorySegment, streamBFunction);
+ sdrplay_api_CallbackFnsT.EventCbFn(mCallbackFunctionsMemorySegment, eventFunction);
+ sdrplay_api_CallbackFnsT.StreamACbFn(mCallbackFunctionsMemorySegment, streamAFunction);
+ sdrplay_api_CallbackFnsT.StreamBCbFn(mCallbackFunctionsMemorySegment, streamBFunction);
+// sdrplay_api_CallbackFnsT.EventCbFn$set(mCallbackFunctionsMemorySegment, eventFunction);
+// sdrplay_api_CallbackFnsT.StreamACbFn$set(mCallbackFunctionsMemorySegment, streamAFunction);
+// sdrplay_api_CallbackFnsT.StreamBCbFn$set(mCallbackFunctionsMemorySegment, streamBFunction);
}
/**
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/DeviceEventAdapter.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/DeviceEventAdapter.java
index cbb68633..2113c45b 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/DeviceEventAdapter.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/DeviceEventAdapter.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory;
* Adapter for Device Event callbacks. Implements foreign interface and transfers foreign memory event details to
* native Java and invokes the appropriate interface methods for an event listener.
*/
-public class DeviceEventAdapter implements sdrplay_api_EventCallback_t
+public class DeviceEventAdapter implements sdrplay_api_EventCallback_t.Function
{
private static final Logger mLog = LoggerFactory.getLogger(DeviceEventAdapter.class);
private IDeviceEventListener mDeviceEventListener;
@@ -65,44 +65,43 @@ public class DeviceEventAdapter implements sdrplay_api_EventCallback_t
public void apply(int eventTypeId, int tunerSelectId, MemorySegment eventParametersPointer,
MemorySegment callbackContext)
{
- try(Arena arena = Arena.openConfined())
- {
- MemorySegment memorySegment = sdrplay_api_EventParamsT.ofAddress(eventParametersPointer, arena.scope());
- EventType eventType = EventType.fromValue(eventTypeId);
- TunerSelect tunerSelect = TunerSelect.fromValue(tunerSelectId);
+ //Use an auto arena to allow the garbage collector to deallocate, since we don't know if the device event
+ //listener will ever hold onto any object that is backed by our memory segment.
+ MemorySegment eventParams = eventParametersPointer.reinterpret(sdrplay_api_EventParamsT.sizeof(), Arena.ofAuto(), null);
+ EventType eventType = EventType.fromValue(eventTypeId);
+ TunerSelect tunerSelect = TunerSelect.fromValue(tunerSelectId);
- switch(eventType)
+ switch(eventType)
+ {
+ case GAIN_CHANGE ->
{
- case GAIN_CHANGE ->
- {
- mDeviceEventListener.processGainChange(tunerSelect,
- EventParametersFactory.createGainCallbackParameters(memorySegment));
- }
- case POWER_OVERLOAD_CHANGE ->
- {
- mDeviceEventListener.processPowerOverload(tunerSelect,
- EventParametersFactory.createPowerOverloadCallbackParameters(memorySegment));
- }
- case DEVICE_REMOVED ->
- {
- mDeviceEventListener.processDeviceRemoval(tunerSelect);
- }
- case RSP_DUO_MODE_CHANGE ->
- {
- mDeviceEventListener.processRspDuoModeChange(tunerSelect,
- EventParametersFactory.createRspDuoModeCallbackParameters(memorySegment));
- }
- case UNKNOWN ->
- {
- mLog.warn("Unknown device event callback ignored. Please contact the library developer as this may " +
- "indicate a change to the SDRPlay API change. Tuner:" + tunerSelect + " Event Type ID:" +
- eventTypeId);
- mDeviceEventListener.processEvent(eventType, tunerSelect);
- }
- default ->
- {
- throw new IllegalStateException("DeviceEventAdapter must be updated handle EventType." + eventType);
- }
+ mDeviceEventListener.processGainChange(tunerSelect,
+ EventParametersFactory.createGainCallbackParameters(eventParams));
+ }
+ case POWER_OVERLOAD_CHANGE ->
+ {
+ mDeviceEventListener.processPowerOverload(tunerSelect,
+ EventParametersFactory.createPowerOverloadCallbackParameters(eventParams));
+ }
+ case DEVICE_REMOVED ->
+ {
+ mDeviceEventListener.processDeviceRemoval(tunerSelect);
+ }
+ case RSP_DUO_MODE_CHANGE ->
+ {
+ mDeviceEventListener.processRspDuoModeChange(tunerSelect,
+ EventParametersFactory.createRspDuoModeCallbackParameters(eventParams));
+ }
+ case UNKNOWN ->
+ {
+ mLog.warn("Unknown device event callback ignored. Please contact the library developer as this may " +
+ "indicate a change to the SDRPlay API change. Tuner:" + tunerSelect + " Event Type ID:" +
+ eventTypeId);
+ mDeviceEventListener.processEvent(eventType, tunerSelect);
+ }
+ default ->
+ {
+ throw new IllegalStateException("DeviceEventAdapter must be updated handle EventType." + eventType);
}
}
}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/StreamCallbackAdapter.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/StreamCallbackAdapter.java
index 8951f1be..065a8e3a 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/StreamCallbackAdapter.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/StreamCallbackAdapter.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory;
* I/Q sample stream callback adapter. Implements the native interface and transfers the native callback data to an
* implementation of the Java IStreamListener interface.
*/
-public class StreamCallbackAdapter implements sdrplay_api_StreamCallback_t
+public class StreamCallbackAdapter implements sdrplay_api_StreamCallback_t.Function
{
private static final Logger mLog = LoggerFactory.getLogger(StreamCallbackAdapter.class);
private IStreamListener mStreamListener;
@@ -73,11 +73,11 @@ public class StreamCallbackAdapter implements sdrplay_api_StreamCallback_t
{
if(mStreamListener != null || mStreamCallbackListener != null)
{
- try(Arena arena = Arena.openConfined())
+ try(Arena confinedArena = Arena.ofConfined())
{
//Translate the callback parameters pointer to a memory segment and re-construct the parameters as a Java object
- StreamCallbackParameters parameters = new StreamCallbackParameters(sdrplay_api_StreamCbParamsT
- .ofAddress(parametersPointer, arena.scope()));
+ MemorySegment memorySegment = parametersPointer.reinterpret(sdrplay_api_StreamCbParamsT.sizeof(), confinedArena, null);
+ StreamCallbackParameters parameters = new StreamCallbackParameters(memorySegment);
if(mStreamCallbackListener != null)
{
@@ -88,8 +88,10 @@ public class StreamCallbackAdapter implements sdrplay_api_StreamCallback_t
{
//Allocate memory segments from I/Q pointers, transfer from native to JVM array, and send to listener
long arrayByteSize = ValueLayout.JAVA_SHORT.byteSize() * sampleCount;
- MemorySegment iSamples = MemorySegment.ofAddress(iSamplesPointer.address(), arrayByteSize, arena.scope());
- MemorySegment qSamples = MemorySegment.ofAddress(qSamplesPointer.address(), arrayByteSize, arena.scope());
+ MemorySegment iSamples = iSamplesPointer.reinterpret(arrayByteSize, confinedArena, null);
+ MemorySegment qSamples = qSamplesPointer.reinterpret(arrayByteSize, confinedArena, null);
+// MemorySegment iSamples = MemorySegment.ofAddress(iSamplesPointer.address(), arrayByteSize, confinedArena.scope());
+// MemorySegment qSamples = MemorySegment.ofAddress(qSamplesPointer.address(), arrayByteSize, confinedArena.scope());
short[] i = iSamples.toArray(ValueLayout.JAVA_SHORT);
short[] q = qSamples.toArray(ValueLayout.JAVA_SHORT);
mStreamListener.processStream(i, q, parameters, Flag.evaluate(reset));
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/StreamCallbackParameters.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/StreamCallbackParameters.java
index 14384896..d7b87b5b 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/StreamCallbackParameters.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/callback/StreamCallbackParameters.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,22 +28,22 @@ import java.lang.foreign.MemorySegment;
*/
public class StreamCallbackParameters
{
- private int mFirstSampleNumber;
- private boolean mGainReductionChanged;
- private boolean mRfFrequencyChanged;
- private boolean mSampleRateChanged;
- private long mNumberSamples;
+ private final int mFirstSampleNumber;
+ private final boolean mGainReductionChanged;
+ private final boolean mRfFrequencyChanged;
+ private final boolean mSampleRateChanged;
+ private final long mNumberSamples;
/**
* Constructs an instance from the foreign memory segment
*/
public StreamCallbackParameters(MemorySegment memorySegment)
{
- mFirstSampleNumber = sdrplay_api_StreamCbParamsT.firstSampleNum$get(memorySegment);
- mGainReductionChanged = Flag.evaluate(sdrplay_api_StreamCbParamsT.grChanged$get(memorySegment));
- mRfFrequencyChanged = Flag.evaluate(sdrplay_api_StreamCbParamsT.rfChanged$get(memorySegment));
- mSampleRateChanged = Flag.evaluate(sdrplay_api_StreamCbParamsT.fsChanged$get(memorySegment));
- mNumberSamples = sdrplay_api_StreamCbParamsT.numSamples$get(memorySegment);
+ mFirstSampleNumber = sdrplay_api_StreamCbParamsT.firstSampleNum(memorySegment);
+ mGainReductionChanged = Flag.evaluate(sdrplay_api_StreamCbParamsT.grChanged(memorySegment));
+ mRfFrequencyChanged = Flag.evaluate(sdrplay_api_StreamCbParamsT.rfChanged(memorySegment));
+ mSampleRateChanged = Flag.evaluate(sdrplay_api_StreamCbParamsT.fsChanged(memorySegment));
+ mNumberSamples = sdrplay_api_StreamCbParamsT.numSamples(memorySegment);
}
/**
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceFactory.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceFactory.java
index b51e53c4..6fbec9b7 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceFactory.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceFactory.java
@@ -28,16 +28,12 @@ import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
import java.util.ArrayList;
import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* Factory methods for creating new RSP Device instances
*/
public class DeviceFactory
{
- private static final Logger mLog = LoggerFactory.getLogger(DeviceFactory.class);
-
/**
* Creates a foreign memory segment for a DeviceT array, appropriate for the specified version.
* @param version value
@@ -81,7 +77,7 @@ public class DeviceFactory
* @param devicesArray memory segment
* @param count of device structures in the devicesArray.
* @return a list of device infos
- * @throws exception if version is unrecognized or unsupported
+ * @throws SDRPlayException if version is unrecognized or unsupported
*/
public static List parseDeviceStructs(Version version, MemorySegment devicesArray, int count)
throws SDRPlayException
@@ -90,13 +86,13 @@ public class DeviceFactory
if(version.gte(Version.V3_08))
{
- devicesArray.elements(sdrplay_api_DeviceT.$LAYOUT())
+ devicesArray.elements(sdrplay_api_DeviceT.layout())
.limit(count).forEach(memorySegment ->
deviceStructs.add(DeviceFactory.createDeviceStruct(version, memorySegment)));
}
else if(version == Version.V3_07)
{
- devicesArray.elements(sdrplay_api_DeviceT.$LAYOUT()).limit(count).forEach(memorySegment ->
+ devicesArray.elements(sdrplay_api_DeviceT.layout()).limit(count).forEach(memorySegment ->
{
deviceStructs.add(DeviceFactory.createDeviceStruct(version, memorySegment));
});
@@ -112,7 +108,7 @@ public class DeviceFactory
/**
* Creates an SDRplay device from the foreign memory Device instance.
* @param sdrPlay for device callback support
- * @param deviceMemorySegment instance for the device
+ * @param deviceStruct instance for the device
* @return correctly typed device
*/
public static Device createDevice(SDRplay sdrPlay, IDeviceStruct deviceStruct)
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceStruct_v3_07.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceStruct_v3_07.java
index 9ede845c..18c579a4 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceStruct_v3_07.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceStruct_v3_07.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,9 +27,9 @@ import java.lang.foreign.MemorySegment;
*/
public class DeviceStruct_v3_07 implements IDeviceStruct
{
- private MemorySegment mDeviceMemorySegment;
- private DeviceType mDeviceType;
- private String mSerialNumber;
+ private final MemorySegment mDeviceMemorySegment;
+ private final DeviceType mDeviceType;
+ private final String mSerialNumber;
/**
* Constructs an instance
@@ -38,9 +38,9 @@ public class DeviceStruct_v3_07 implements IDeviceStruct
public DeviceStruct_v3_07(MemorySegment deviceMemorySegment)
{
mDeviceMemorySegment = deviceMemorySegment;
- mDeviceType = DeviceType.fromValue(0xFF & sdrplay_api_DeviceT.hwVer$get(mDeviceMemorySegment));
- MemorySegment serialSegment = sdrplay_api_DeviceT.SerNo$slice(mDeviceMemorySegment);
- mSerialNumber = serialSegment.getUtf8String(0);
+ mDeviceType = DeviceType.fromValue(0xFF & sdrplay_api_DeviceT.hwVer(mDeviceMemorySegment));
+ MemorySegment serialSegment = sdrplay_api_DeviceT.SerNo(mDeviceMemorySegment);
+ mSerialNumber = serialSegment.getString(0);
}
@Override public MemorySegment getDeviceMemorySegment()
@@ -60,18 +60,18 @@ public class DeviceStruct_v3_07 implements IDeviceStruct
@Override public TunerSelect getTunerSelect()
{
- return TunerSelect.fromValue(sdrplay_api_DeviceT.tuner$get(getDeviceMemorySegment()));
+ return TunerSelect.fromValue(sdrplay_api_DeviceT.tuner(getDeviceMemorySegment()));
}
@Override public RspDuoMode getRspDuoMode()
{
- return RspDuoMode.fromValue(sdrplay_api_DeviceT.rspDuoMode$get(getDeviceMemorySegment()));
+ return RspDuoMode.fromValue(sdrplay_api_DeviceT.rspDuoMode(getDeviceMemorySegment()));
}
@Override
public void setRspDuoMode(RspDuoMode mode)
{
- sdrplay_api_DeviceT.rspDuoMode$set(getDeviceMemorySegment(), mode.getValue());
+ sdrplay_api_DeviceT.rspDuoMode(getDeviceMemorySegment(), mode.getValue());
}
@Override public boolean isValid()
@@ -82,17 +82,17 @@ public class DeviceStruct_v3_07 implements IDeviceStruct
@Override public double getRspDuoSampleFrequency()
{
- return sdrplay_api_DeviceT.rspDuoSampleFreq$get(getDeviceMemorySegment());
+ return sdrplay_api_DeviceT.rspDuoSampleFreq(getDeviceMemorySegment());
}
@Override
public void setRspDuoSampleFrequency(double frequency)
{
- sdrplay_api_DeviceT.rspDuoSampleFreq$set(getDeviceMemorySegment(), frequency);
+ sdrplay_api_DeviceT.rspDuoSampleFreq(getDeviceMemorySegment(), frequency);
}
@Override public MemorySegment getDeviceHandle()
{
- return sdrplay_api_DeviceT.dev$get(getDeviceMemorySegment());
+ return sdrplay_api_DeviceT.dev(getDeviceMemorySegment());
}
}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceStruct_v3_08.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceStruct_v3_08.java
index 4de67254..440af097 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceStruct_v3_08.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceStruct_v3_08.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,9 +27,9 @@ import java.lang.foreign.MemorySegment;
*/
public class DeviceStruct_v3_08 implements IDeviceStruct
{
- private MemorySegment mDeviceMemorySegment;
- private DeviceType mDeviceType;
- private String mSerialNumber;
+ private final MemorySegment mDeviceMemorySegment;
+ private final DeviceType mDeviceType;
+ private final String mSerialNumber;
/**
* Constructs an instance
@@ -38,9 +38,9 @@ public class DeviceStruct_v3_08 implements IDeviceStruct
public DeviceStruct_v3_08(MemorySegment deviceMemorySegment)
{
mDeviceMemorySegment = deviceMemorySegment;
- mDeviceType = DeviceType.fromValue(0xFF & sdrplay_api_DeviceT.hwVer$get(mDeviceMemorySegment));
- MemorySegment serialSegment = sdrplay_api_DeviceT.SerNo$slice(mDeviceMemorySegment);
- mSerialNumber = serialSegment.getUtf8String(0);
+ mDeviceType = DeviceType.fromValue(0xFF & sdrplay_api_DeviceT.hwVer(mDeviceMemorySegment));
+ MemorySegment serialSegment = sdrplay_api_DeviceT.SerNo(mDeviceMemorySegment);
+ mSerialNumber = serialSegment.getString(0);
}
@Override public MemorySegment getDeviceMemorySegment()
@@ -60,18 +60,18 @@ public class DeviceStruct_v3_08 implements IDeviceStruct
@Override public TunerSelect getTunerSelect()
{
- return TunerSelect.fromValue(sdrplay_api_DeviceT.tuner$get(getDeviceMemorySegment()));
+ return TunerSelect.fromValue(sdrplay_api_DeviceT.tuner(getDeviceMemorySegment()));
}
@Override public RspDuoMode getRspDuoMode()
{
- return RspDuoMode.fromValue(sdrplay_api_DeviceT.rspDuoMode$get(getDeviceMemorySegment()));
+ return RspDuoMode.fromValue(sdrplay_api_DeviceT.rspDuoMode(getDeviceMemorySegment()));
}
@Override
public void setRspDuoMode(RspDuoMode mode)
{
- sdrplay_api_DeviceT.rspDuoMode$set(getDeviceMemorySegment(), mode.getValue());
+ sdrplay_api_DeviceT.rspDuoMode(getDeviceMemorySegment(), mode.getValue());
}
@Override public boolean isValid()
@@ -82,17 +82,17 @@ public class DeviceStruct_v3_08 implements IDeviceStruct
@Override public double getRspDuoSampleFrequency()
{
- return sdrplay_api_DeviceT.rspDuoSampleFreq$get(getDeviceMemorySegment());
+ return sdrplay_api_DeviceT.rspDuoSampleFreq(getDeviceMemorySegment());
}
@Override
public void setRspDuoSampleFrequency(double frequency)
{
- sdrplay_api_DeviceT.rspDuoSampleFreq$set(getDeviceMemorySegment(), frequency);
+ sdrplay_api_DeviceT.rspDuoSampleFreq(getDeviceMemorySegment(), frequency);
}
@Override public MemorySegment getDeviceHandle()
{
- return sdrplay_api_DeviceT.dev$get(getDeviceMemorySegment());
+ return sdrplay_api_DeviceT.dev(getDeviceMemorySegment());
}
}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceType.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceType.java
index 8b2313bd..afd4a462 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceType.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/DeviceType.java
@@ -19,7 +19,7 @@
package io.github.dsheirer.source.tuner.sdrplay.api.device;
-import io.github.dsheirer.source.tuner.sdrplay.api.v3_14.sdrplay_api_h;
+import io.github.dsheirer.source.tuner.sdrplay.api.v3_15.sdrplay_api_h;
/**
* RSP Device type
@@ -32,11 +32,11 @@ public enum DeviceType
RSP2(sdrplay_api_h.SDRPLAY_RSP2_ID(), "RSP2"),
RSPduo(sdrplay_api_h.SDRPLAY_RSPduo_ID(), "RSPduo"),
RSPdx(sdrplay_api_h.SDRPLAY_RSPdx_ID(), "RSPdx"),
- RSPdxR2(sdrplay_api_h.SDRPLAY_RSPdx_R2_ID(), "RSPdxR2"),
+ RSPdxR2(sdrplay_api_h.SDRPLAY_RSPdxR2_ID(), "RSPdxR2"),
UNKNOWN(Integer.MIN_VALUE, "UNKNOWN");
- private int mValue;
- private String mDescription;
+ private final int mValue;
+ private final String mDescription;
DeviceType(int value, String description)
{
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/RspDuoDevice.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/RspDuoDevice.java
index 956df511..a94b7e41 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/RspDuoDevice.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/device/RspDuoDevice.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,16 +26,12 @@ import io.github.dsheirer.source.tuner.sdrplay.api.parameter.composite.RspDuoCom
import io.github.dsheirer.source.tuner.sdrplay.api.parameter.tuner.IfMode;
import io.github.dsheirer.source.tuner.sdrplay.api.parameter.tuner.LoMode;
import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_DeviceT;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* RSPduo Device
*/
public class RspDuoDevice extends Device
{
- private static final Logger mLog = LoggerFactory.getLogger(RspDuoDevice.class);
-
private RspDuoTuner mTuner;
/**
@@ -87,7 +83,7 @@ public class RspDuoDevice extends Device
@Override
public TunerSelect getTunerSelect()
{
- return TunerSelect.fromValue(sdrplay_api_DeviceT.tuner$get(getDeviceMemorySegment()));
+ return TunerSelect.fromValue(sdrplay_api_DeviceT.tuner(getDeviceMemorySegment()));
}
/**
@@ -95,7 +91,7 @@ public class RspDuoDevice extends Device
*/
public void setTunerSelect(TunerSelect tunerSelect)
{
- sdrplay_api_DeviceT.tuner$set(getDeviceMemorySegment(), tunerSelect.getValue());
+ sdrplay_api_DeviceT.tuner(getDeviceMemorySegment(), tunerSelect.getValue());
}
/**
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/error/ErrorInformation.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/error/ErrorInformation.java
index b2689136..5fd8346c 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/error/ErrorInformation.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/error/ErrorInformation.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,20 +27,20 @@ import java.lang.foreign.MemorySegment;
*/
public class ErrorInformation
{
- private String mFile;
- private String mFunction;
- private int mLine;
- private String mMessage;
+ private final String mFile;
+ private final String mFunction;
+ private final int mLine;
+ private final String mMessage;
/**
* Constructs an instance from the foreign memory segment
*/
public ErrorInformation(MemorySegment memorySegment)
{
- mFile = sdrplay_api_ErrorInfoT.file$slice(memorySegment).getUtf8String(0);
- mFunction = sdrplay_api_ErrorInfoT.function$slice(memorySegment).getUtf8String(0);
- mLine = sdrplay_api_ErrorInfoT.line$get(memorySegment);
- mMessage = sdrplay_api_ErrorInfoT.message$slice(memorySegment).getUtf8String(0);
+ mFile = sdrplay_api_ErrorInfoT.file(memorySegment).getString(0);
+ mFunction = sdrplay_api_ErrorInfoT.function(memorySegment).getString(0);
+ mLine = sdrplay_api_ErrorInfoT.line(memorySegment);
+ mMessage = sdrplay_api_ErrorInfoT.message(memorySegment).getString(0);
}
public String getFile()
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/CompositeParameters.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/CompositeParameters.java
index 3b84ed6f..015ce733 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/CompositeParameters.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/CompositeParameters.java
@@ -26,6 +26,7 @@ import io.github.dsheirer.source.tuner.sdrplay.api.parameter.device.DeviceParame
import io.github.dsheirer.source.tuner.sdrplay.api.parameter.device.DeviceParametersFactory;
import io.github.dsheirer.source.tuner.sdrplay.api.parameter.tuner.TunerParameters;
import io.github.dsheirer.source.tuner.sdrplay.api.parameter.tuner.TunerParametersFactory;
+import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_ControlParamsT;
import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_DevParamsT;
import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_DeviceParamsT;
import io.github.dsheirer.source.tuner.sdrplay.api.v3_07.sdrplay_api_RxChannelParamsT;
@@ -34,37 +35,37 @@ import java.lang.foreign.MemorySegment;
/**
* Composite Device Parameters structure (sdrplay_api_DeviceParamsT) providing access to the device parameters and
- * the tuner 1 parameters. Tuner 2 parameters are only accessible via the RSPduo sub-class implementation.
+ * the tuner 1 parameter. Tuner 2 parameters are only accessible via the RSPduo subclass implementation.
*
- * Note: sub-class implementations will constrain access to the appropriate sub-structures of the DeviceParamsT
+ * Note: subclass implementations will constrain access to the appropriate sub-structures of the DeviceParamsT
* structure for each specific device.
*/
public class CompositeParameters
{
- private D mDeviceParameters;
- private T mTunerAParameters;
- private ControlParameters mControlAParameters;
+ private final D mDeviceParameters;
+ private final T mTunerAParameters;
+ private final ControlParameters mControlAParameters;
/**
* Constructs an instance from the foreign memory segment
*
* @param version of the API
* @param deviceType to create
- * @param memorySegment for the composite structure in foreign memory
+ * @param deviceParamsT native memory sdrplay_api_DeviceParamsT structure
* @param arena for allocating additional memory segments for the sub-structures.
*/
- public CompositeParameters(Version version, DeviceType deviceType, MemorySegment memorySegment, Arena arena)
+ public CompositeParameters(Version version, DeviceType deviceType, MemorySegment deviceParamsT, Arena arena)
{
- MemorySegment parametersMemoryAddress = sdrplay_api_DeviceParamsT.devParams$get(memorySegment);
- MemorySegment parametersMemorySegment = sdrplay_api_DevParamsT.ofAddress(parametersMemoryAddress, arena.scope());
- mDeviceParameters = (D) DeviceParametersFactory.create(deviceType, parametersMemorySegment);
+ MemorySegment addressDevParams = sdrplay_api_DeviceParamsT.devParams(deviceParamsT);
+ MemorySegment devParams = addressDevParams.reinterpret(sdrplay_api_DevParamsT.sizeof(), arena, null);
+ mDeviceParameters = (D) DeviceParametersFactory.create(deviceType, devParams);
- MemorySegment memoryAddressRxA = sdrplay_api_DeviceParamsT.rxChannelA$get(memorySegment);
- MemorySegment memorySegmentRxA = sdrplay_api_RxChannelParamsT.ofAddress(memoryAddressRxA, arena.scope());
- mTunerAParameters = (T) TunerParametersFactory.create(version, deviceType, memorySegmentRxA);
+ MemorySegment addressRxA = sdrplay_api_DeviceParamsT.rxChannelA(deviceParamsT);
+ MemorySegment rxA = addressRxA.reinterpret(sdrplay_api_RxChannelParamsT.sizeof(), arena, null);
+ mTunerAParameters = (T) TunerParametersFactory.create(version, deviceType, rxA);
- MemorySegment tunerAControlParametersMemorySegment = sdrplay_api_RxChannelParamsT.ctrlParams$slice(memorySegmentRxA);
- mControlAParameters = new ControlParameters(tunerAControlParametersMemorySegment);
+ MemorySegment tunerACtrlParams = rxA.asSlice(sdrplay_api_RxChannelParamsT.ctrlParams$offset(), sdrplay_api_ControlParamsT.sizeof());
+ mControlAParameters = new ControlParameters(tunerACtrlParams);
}
/**
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/CompositeParametersFactory.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/CompositeParametersFactory.java
index c5ac7943..fe2edcb3 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/CompositeParametersFactory.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/CompositeParametersFactory.java
@@ -33,32 +33,32 @@ public class CompositeParametersFactory
* Creates a composite parameters instance for the specified device type
* @param version of the api
* @param deviceType to create
- * @param memorySegment of foreign memory structure for the composite parameters
+ * @param deviceParams sdrplay_api_DeviceParamsT structure
* @param arena to allocate additional memory structures
* @return instance
*/
- public static CompositeParameters create(Version version, DeviceType deviceType, MemorySegment memorySegment,
+ public static CompositeParameters create(Version version, DeviceType deviceType, MemorySegment deviceParams,
Arena arena)
{
switch(deviceType)
{
case RSP1 -> {
- return new Rsp1CompositeParameters(version, memorySegment, arena);
+ return new Rsp1CompositeParameters(version, deviceParams, arena);
}
case RSP1A -> {
- return new Rsp1aCompositeParameters(version, memorySegment, arena);
+ return new Rsp1aCompositeParameters(version, deviceParams, arena);
}
case RSP1B -> {
- return new Rsp1bCompositeParameters(version, memorySegment, arena);
+ return new Rsp1bCompositeParameters(version, deviceParams, arena);
}
case RSP2 -> {
- return new Rsp2CompositeParameters(version, memorySegment, arena);
+ return new Rsp2CompositeParameters(version, deviceParams, arena);
}
case RSPduo -> {
- return new RspDuoCompositeParameters(version, memorySegment, arena);
+ return new RspDuoCompositeParameters(version, deviceParams, arena);
}
case RSPdx, RSPdxR2 -> {
- return new RspDxCompositeParameters(version, memorySegment, arena);
+ return new RspDxCompositeParameters(version, deviceParams, arena);
}
}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/Rsp1CompositeParameters.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/Rsp1CompositeParameters.java
index a3fb0a84..a06ed54c 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/Rsp1CompositeParameters.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/Rsp1CompositeParameters.java
@@ -35,11 +35,11 @@ public class Rsp1CompositeParameters extends CompositeParameters
{
- private RspDuoTunerParameters mTunerBParameters;
- private ControlParameters mControlBParameters;
+ private final RspDuoTunerParameters mTunerBParameters;
+ private final ControlParameters mControlBParameters;
/**
* Constructs an instance from the foreign memory segment
*
* @param version for constructing the correct version structure.
- * @param memorySegment for the composite structure in foreign memory
+ * @param deviceParams structure in foreign memory
* @param arena for allocating additional memory segments for the sub-structures.
*/
- public RspDuoCompositeParameters(Version version, MemorySegment memorySegment, Arena arena)
+ public RspDuoCompositeParameters(Version version, MemorySegment deviceParams, Arena arena)
{
- super(version, DeviceType.RSPduo, memorySegment, arena);
+ super(version, DeviceType.RSPduo, deviceParams, arena);
- MemorySegment memoryAddressRxB = sdrplay_api_DeviceParamsT.rxChannelB$get(memorySegment);
- MemorySegment memorySegmentRxB = sdrplay_api_RxChannelParamsT.ofAddress(memoryAddressRxB, arena.scope());
- mTunerBParameters = (RspDuoTunerParameters) TunerParametersFactory.create(version, DeviceType.RSPduo, memorySegmentRxB);
+ MemorySegment addressRxChannelB = sdrplay_api_DeviceParamsT.rxChannelB(deviceParams);
+ MemorySegment rxChannelB = addressRxChannelB.reinterpret(sdrplay_api_RxChannelParamsT.sizeof(), arena, null);
+ mTunerBParameters = (RspDuoTunerParameters) TunerParametersFactory.create(version, DeviceType.RSPduo, rxChannelB);
- MemorySegment tunerBControlParametersMemorySegment = sdrplay_api_RxChannelParamsT.ctrlParams$slice(memorySegmentRxB);
- mControlBParameters = new ControlParameters(tunerBControlParametersMemorySegment);
+ MemorySegment rxChannelBCtrlParams = sdrplay_api_RxChannelParamsT.ctrlParams(rxChannelB);
+ mControlBParameters = new ControlParameters(rxChannelBCtrlParams);
}
/**
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/RspDxCompositeParameters.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/RspDxCompositeParameters.java
index 3048f346..c177c90a 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/RspDxCompositeParameters.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/parameter/composite/RspDxCompositeParameters.java
@@ -35,11 +35,11 @@ public class RspDxCompositeParameters extends CompositeParameters {
- return new Rsp1TunerParameters(tunerParametersMemorySegment);
+ return new Rsp1TunerParameters(tunerParams);
}
//RSP1A and RSP1B share the same tuner parameters structures
case RSP1A, RSP1B -> {
- MemorySegment rsp1AMemorySegment = sdrplay_api_RxChannelParamsT.rsp1aTunerParams$slice(memorySegment);
- return new Rsp1aTunerParameters(memorySegment, rsp1AMemorySegment);
+ MemorySegment rsp1aTunerParams = sdrplay_api_RxChannelParamsT.rsp1aTunerParams(rxChannelParams);
+ return new Rsp1aTunerParameters(rxChannelParams, rsp1aTunerParams);
}
case RSP2 -> {
- MemorySegment rsp2MemorySegment = sdrplay_api_RxChannelParamsT.rsp2TunerParams$slice(memorySegment);
- return new Rsp2TunerParameters(memorySegment, rsp2MemorySegment);
+ MemorySegment rsp2TunerParams = sdrplay_api_RxChannelParamsT.rsp2TunerParams(rxChannelParams);
+ return new Rsp2TunerParameters(rxChannelParams, rsp2TunerParams);
}
case RSPduo -> {
if(version.gte(Version.V3_14))
{
- MemorySegment rspDuoMemorySegment = io.github.dsheirer.source.tuner.sdrplay.api.v3_14.sdrplay_api_RxChannelParamsT.rspDuoTunerParams$slice(memorySegment);
- return new RspDuoTunerParametersV3_14(memorySegment, rspDuoMemorySegment);
+ MemorySegment rspDuoTunerParams = io.github.dsheirer.source.tuner.sdrplay.api.v3_15.sdrplay_api_RxChannelParamsT.rspDuoTunerParams(rxChannelParams);
+ return new RspDuoTunerParametersV3_14(rxChannelParams, rspDuoTunerParams);
}
else if(version.gte(Version.V3_07))
{
- MemorySegment rspDuoMemorySegment = sdrplay_api_RxChannelParamsT.rspDuoTunerParams$slice(memorySegment);
- return new RspDuoTunerParametersV3_07(memorySegment, rspDuoMemorySegment);
+ MemorySegment rspDuoTunerParams = sdrplay_api_RxChannelParamsT.rspDuoTunerParams(rxChannelParams);
+ return new RspDuoTunerParametersV3_07(rxChannelParams, rspDuoTunerParams);
}
else
{
@@ -70,8 +70,8 @@ public class TunerParametersFactory
}
}
case RSPdx, RSPdxR2 -> {
- MemorySegment rspDxMemorySegment = sdrplay_api_RxChannelParamsT.rspDxTunerParams$slice(memorySegment);
- return new RspDxTunerParameters(memorySegment, rspDxMemorySegment);
+ MemorySegment rspDxTunerParams = sdrplay_api_RxChannelParamsT.rspDxTunerParams(rxChannelParams);
+ return new RspDxTunerParameters(rxChannelParams, rspDxTunerParams);
}
default -> throw new IllegalArgumentException("Unrecognized device type: " + deviceType);
}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/Constants$root.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/Constants$root.java
deleted file mode 100644
index b103da3a..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/Constants$root.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import static java.lang.foreign.ValueLayout.ADDRESS;
-import static java.lang.foreign.ValueLayout.JAVA_BOOLEAN;
-import static java.lang.foreign.ValueLayout.JAVA_BYTE;
-import static java.lang.foreign.ValueLayout.JAVA_DOUBLE;
-import static java.lang.foreign.ValueLayout.JAVA_FLOAT;
-import static java.lang.foreign.ValueLayout.JAVA_INT;
-import static java.lang.foreign.ValueLayout.JAVA_LONG;
-import static java.lang.foreign.ValueLayout.JAVA_SHORT;
-import static java.lang.foreign.ValueLayout.OfAddress;
-import static java.lang.foreign.ValueLayout.OfBoolean;
-import static java.lang.foreign.ValueLayout.OfByte;
-import static java.lang.foreign.ValueLayout.OfDouble;
-import static java.lang.foreign.ValueLayout.OfFloat;
-import static java.lang.foreign.ValueLayout.OfInt;
-import static java.lang.foreign.ValueLayout.OfLong;
-import static java.lang.foreign.ValueLayout.OfShort;
-final class Constants$root {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private Constants$root() {}
- static final OfBoolean C_BOOL$LAYOUT = JAVA_BOOLEAN;
- static final OfByte C_CHAR$LAYOUT = JAVA_BYTE;
- static final OfShort C_SHORT$LAYOUT = JAVA_SHORT;
- static final OfInt C_INT$LAYOUT = JAVA_INT;
- static final OfLong C_LONG$LAYOUT = JAVA_LONG;
- static final OfLong C_LONG_LONG$LAYOUT = JAVA_LONG;
- static final OfFloat C_FLOAT$LAYOUT = JAVA_FLOAT;
- static final OfDouble C_DOUBLE$LAYOUT = JAVA_DOUBLE;
- static final OfAddress C_POINTER$LAYOUT = ADDRESS.withBitAlignment(64).asUnbounded();
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/RuntimeHelper.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/RuntimeHelper.java
deleted file mode 100644
index 76a18ffe..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/RuntimeHelper.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-// Generated by jextract
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.foreign.GroupLayout;
-import java.lang.foreign.Linker;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.SymbolLookup;
-import java.lang.foreign.ValueLayout;
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodType;
-
-import static java.lang.foreign.ValueLayout.ADDRESS;
-import static java.lang.foreign.ValueLayout.JAVA_DOUBLE;
-import static java.lang.foreign.ValueLayout.JAVA_LONG;
-
-final class RuntimeHelper {
-
- private static final Linker LINKER = Linker.nativeLinker();
- private static final ClassLoader LOADER = RuntimeHelper.class.getClassLoader();
- private static final MethodHandles.Lookup MH_LOOKUP = MethodHandles.lookup();
- private static final SymbolLookup SYMBOL_LOOKUP;
- private static final SegmentAllocator THROWING_ALLOCATOR = (x, y) -> { throw new AssertionError("should not reach here"); };
-
- final static SegmentAllocator CONSTANT_ALLOCATOR =
- (size, align) -> MemorySegment.allocateNative(size, align, SegmentScope.auto());
-
- static {
-// System.loadLibrary("libsdrplay_api");
- SymbolLookup loaderLookup = SymbolLookup.loaderLookup();
- SYMBOL_LOOKUP = name -> loaderLookup.find(name).or(() -> LINKER.defaultLookup().find(name));
- }
-
- // Suppresses default constructor, ensuring non-instantiability.
- private RuntimeHelper() {}
-
- static T requireNonNull(T obj, String symbolName) {
- if (obj == null) {
- throw new UnsatisfiedLinkError("unresolved symbol: " + symbolName);
- }
- return obj;
- }
-
- static MemorySegment lookupGlobalVariable(String name, MemoryLayout layout) {
- return SYMBOL_LOOKUP.find(name).map(symbol -> MemorySegment.ofAddress(symbol.address(), layout.byteSize(), symbol.scope())).orElse(null);
- }
-
- static MethodHandle downcallHandle(String name, FunctionDescriptor fdesc) {
- return SYMBOL_LOOKUP.find(name).
- map(addr -> LINKER.downcallHandle(addr, fdesc)).
- orElse(null);
- }
-
- static MethodHandle downcallHandle(FunctionDescriptor fdesc) {
- return LINKER.downcallHandle(fdesc);
- }
-
- static MethodHandle downcallHandleVariadic(String name, FunctionDescriptor fdesc) {
- return SYMBOL_LOOKUP.find(name).
- map(addr -> VarargsInvoker.make(addr, fdesc)).
- orElse(null);
- }
-
- static MethodHandle upcallHandle(Class> fi, String name, FunctionDescriptor fdesc) {
- try {
- return MH_LOOKUP.findVirtual(fi, name, fdesc.toMethodType());
- } catch (Throwable ex) {
- throw new AssertionError(ex);
- }
- }
-
- static MemorySegment upcallStub(MethodHandle fiHandle, Z z, FunctionDescriptor fdesc, SegmentScope scope) {
- try {
- fiHandle = fiHandle.bindTo(z);
- return LINKER.upcallStub(fiHandle, fdesc, scope);
- } catch (Throwable ex) {
- throw new AssertionError(ex);
- }
- }
-
- static MemorySegment asArray(MemorySegment addr, MemoryLayout layout, int numElements, SegmentScope scope) {
- return MemorySegment.ofAddress(addr.address(), numElements * layout.byteSize(), scope);
- }
-
- // Internals only below this point
-
- private static final class VarargsInvoker {
- private static final MethodHandle INVOKE_MH;
- private final MemorySegment symbol;
- private final FunctionDescriptor function;
-
- private VarargsInvoker(MemorySegment symbol, FunctionDescriptor function) {
- this.symbol = symbol;
- this.function = function;
- }
-
- static {
- try {
- INVOKE_MH = MethodHandles.lookup().findVirtual(VarargsInvoker.class, "invoke", MethodType.methodType(Object.class, SegmentAllocator.class, Object[].class));
- } catch (ReflectiveOperationException e) {
- throw new RuntimeException(e);
- }
- }
-
- static MethodHandle make(MemorySegment symbol, FunctionDescriptor function) {
- VarargsInvoker invoker = new VarargsInvoker(symbol, function);
- MethodHandle handle = INVOKE_MH.bindTo(invoker).asCollector(Object[].class, function.argumentLayouts().size() + 1);
- MethodType mtype = MethodType.methodType(function.returnLayout().isPresent() ? carrier(function.returnLayout().get(), true) : void.class);
- for (MemoryLayout layout : function.argumentLayouts()) {
- mtype = mtype.appendParameterTypes(carrier(layout, false));
- }
- mtype = mtype.appendParameterTypes(Object[].class);
- boolean needsAllocator = function.returnLayout().isPresent() &&
- function.returnLayout().get() instanceof GroupLayout;
- if (needsAllocator) {
- mtype = mtype.insertParameterTypes(0, SegmentAllocator.class);
- } else {
- handle = MethodHandles.insertArguments(handle, 0, THROWING_ALLOCATOR);
- }
- return handle.asType(mtype);
- }
-
- static Class> carrier(MemoryLayout layout, boolean ret) {
- if (layout instanceof ValueLayout valueLayout) {
- return valueLayout.carrier();
- } else if (layout instanceof GroupLayout) {
- return MemorySegment.class;
- } else {
- throw new AssertionError("Cannot get here!");
- }
- }
-
- private Object invoke(SegmentAllocator allocator, Object[] args) throws Throwable {
- // one trailing Object[]
- int nNamedArgs = function.argumentLayouts().size();
- assert(args.length == nNamedArgs + 1);
- // The last argument is the array of vararg collector
- Object[] unnamedArgs = (Object[]) args[args.length - 1];
-
- int argsCount = nNamedArgs + unnamedArgs.length;
- Class>[] argTypes = new Class>[argsCount];
- MemoryLayout[] argLayouts = new MemoryLayout[nNamedArgs + unnamedArgs.length];
-
- int pos = 0;
- for (pos = 0; pos < nNamedArgs; pos++) {
- argLayouts[pos] = function.argumentLayouts().get(pos);
- }
-
- assert pos == nNamedArgs;
- for (Object o: unnamedArgs) {
- argLayouts[pos] = variadicLayout(normalize(o.getClass()));
- pos++;
- }
- assert pos == argsCount;
-
- FunctionDescriptor f = (function.returnLayout().isEmpty()) ?
- FunctionDescriptor.ofVoid(argLayouts) :
- FunctionDescriptor.of(function.returnLayout().get(), argLayouts);
- MethodHandle mh = LINKER.downcallHandle(symbol, f);
- boolean needsAllocator = function.returnLayout().isPresent() &&
- function.returnLayout().get() instanceof GroupLayout;
- if (needsAllocator) {
- mh = mh.bindTo(allocator);
- }
- // flatten argument list so that it can be passed to an asSpreader MH
- Object[] allArgs = new Object[nNamedArgs + unnamedArgs.length];
- System.arraycopy(args, 0, allArgs, 0, nNamedArgs);
- System.arraycopy(unnamedArgs, 0, allArgs, nNamedArgs, unnamedArgs.length);
-
- return mh.asSpreader(Object[].class, argsCount).invoke(allArgs);
- }
-
- private static Class> unboxIfNeeded(Class> clazz) {
- if (clazz == Boolean.class) {
- return boolean.class;
- } else if (clazz == Void.class) {
- return void.class;
- } else if (clazz == Byte.class) {
- return byte.class;
- } else if (clazz == Character.class) {
- return char.class;
- } else if (clazz == Short.class) {
- return short.class;
- } else if (clazz == Integer.class) {
- return int.class;
- } else if (clazz == Long.class) {
- return long.class;
- } else if (clazz == Float.class) {
- return float.class;
- } else if (clazz == Double.class) {
- return double.class;
- } else {
- return clazz;
- }
- }
-
- private Class> promote(Class> c) {
- if (c == byte.class || c == char.class || c == short.class || c == int.class) {
- return long.class;
- } else if (c == float.class) {
- return double.class;
- } else {
- return c;
- }
- }
-
- private Class> normalize(Class> c) {
- c = unboxIfNeeded(c);
- if (c.isPrimitive()) {
- return promote(c);
- }
- if (c == MemorySegment.class) {
- return MemorySegment.class;
- }
- throw new IllegalArgumentException("Invalid type for ABI: " + c.getTypeName());
- }
-
- private MemoryLayout variadicLayout(Class> c) {
- if (c == long.class) {
- return JAVA_LONG;
- } else if (c == double.class) {
- return JAVA_DOUBLE;
- } else if (c == MemorySegment.class) {
- return ADDRESS;
- } else {
- throw new IllegalArgumentException("Unhandled variadic argument class: " + c);
- }
- }
- }
-}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$0.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$0.java
deleted file mode 100644
index 9e8f22be..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$0.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$0 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$0() {}
- static final FunctionDescriptor sdrplay_api_StreamCallback_t$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_StreamCallback_t_UP$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_StreamCallback_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_StreamCallback_t.class, "apply", constants$0.sdrplay_api_StreamCallback_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_StreamCallback_t_DOWN$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_StreamCallback_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$0.sdrplay_api_StreamCallback_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_EventCallback_t$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_EventCallback_t_UP$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_EventCallback_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_EventCallback_t.class, "apply", constants$0.sdrplay_api_EventCallback_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_EventCallback_t_DOWN$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_EventCallback_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$0.sdrplay_api_EventCallback_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Open_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_Open_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Open_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Open_t.class, "apply", constants$0.sdrplay_api_Open_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Open_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Open_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$0.sdrplay_api_Open_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$1.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$1.java
deleted file mode 100644
index 76be2317..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$1.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$1 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$1() {}
- static final FunctionDescriptor sdrplay_api_Close_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_Close_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Close_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Close_t.class, "apply", constants$1.sdrplay_api_Close_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Close_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Close_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$1.sdrplay_api_Close_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_ApiVersion_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_ApiVersion_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ApiVersion_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_ApiVersion_t.class, "apply", constants$1.sdrplay_api_ApiVersion_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_ApiVersion_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ApiVersion_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$1.sdrplay_api_ApiVersion_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_LockDeviceApi_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_LockDeviceApi_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_LockDeviceApi_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_LockDeviceApi_t.class, "apply", constants$1.sdrplay_api_LockDeviceApi_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_LockDeviceApi_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_LockDeviceApi_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$1.sdrplay_api_LockDeviceApi_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$10.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$10.java
deleted file mode 100644
index 643d21a4..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$10.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$10 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$10() {}
- static final FunctionDescriptor sdrplay_api_SwapRspDuoMode$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoMode$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_SwapRspDuoMode",
- constants$10.sdrplay_api_SwapRspDuoMode$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$2.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$2.java
deleted file mode 100644
index c9169c9d..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$2.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$2 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$2() {}
- static final FunctionDescriptor sdrplay_api_UnlockDeviceApi_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_UnlockDeviceApi_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_UnlockDeviceApi_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_UnlockDeviceApi_t.class, "apply", constants$2.sdrplay_api_UnlockDeviceApi_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_UnlockDeviceApi_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_UnlockDeviceApi_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$2.sdrplay_api_UnlockDeviceApi_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetDevices_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_GetDevices_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDevices_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_GetDevices_t.class, "apply", constants$2.sdrplay_api_GetDevices_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_GetDevices_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDevices_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$2.sdrplay_api_GetDevices_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_SelectDevice_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_SelectDevice_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_SelectDevice_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_SelectDevice_t.class, "apply", constants$2.sdrplay_api_SelectDevice_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_SelectDevice_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_SelectDevice_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$2.sdrplay_api_SelectDevice_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$3.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$3.java
deleted file mode 100644
index 3de44f6e..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$3.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$3 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$3() {}
- static final FunctionDescriptor sdrplay_api_ReleaseDevice_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_ReleaseDevice_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ReleaseDevice_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_ReleaseDevice_t.class, "apply", constants$3.sdrplay_api_ReleaseDevice_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_ReleaseDevice_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ReleaseDevice_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$3.sdrplay_api_ReleaseDevice_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetErrorString_t$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_GetErrorString_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetErrorString_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_GetErrorString_t.class, "apply", constants$3.sdrplay_api_GetErrorString_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_GetErrorString_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetErrorString_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$3.sdrplay_api_GetErrorString_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetLastError_t$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_GetLastError_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetLastError_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_GetLastError_t.class, "apply", constants$3.sdrplay_api_GetLastError_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_GetLastError_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetLastError_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$3.sdrplay_api_GetLastError_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$4.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$4.java
deleted file mode 100644
index 5c7575d8..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$4.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$4 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$4() {}
- static final FunctionDescriptor sdrplay_api_DisableHeartbeat_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_DisableHeartbeat_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_DisableHeartbeat_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_DisableHeartbeat_t.class, "apply", constants$4.sdrplay_api_DisableHeartbeat_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_DisableHeartbeat_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_DisableHeartbeat_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$4.sdrplay_api_DisableHeartbeat_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_DebugEnable_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_DebugEnable_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_DebugEnable_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_DebugEnable_t.class, "apply", constants$4.sdrplay_api_DebugEnable_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_DebugEnable_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_DebugEnable_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$4.sdrplay_api_DebugEnable_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetDeviceParams_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_GetDeviceParams_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDeviceParams_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_GetDeviceParams_t.class, "apply", constants$4.sdrplay_api_GetDeviceParams_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_GetDeviceParams_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDeviceParams_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$4.sdrplay_api_GetDeviceParams_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$5.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$5.java
deleted file mode 100644
index 80bdf67f..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$5.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$5 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$5() {}
- static final FunctionDescriptor sdrplay_api_Init_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_Init_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Init_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Init_t.class, "apply", constants$5.sdrplay_api_Init_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Init_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Init_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$5.sdrplay_api_Init_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Uninit_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_Uninit_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Uninit_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Uninit_t.class, "apply", constants$5.sdrplay_api_Uninit_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Uninit_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Uninit_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$5.sdrplay_api_Uninit_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Update_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_Update_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_Update_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Update_t.class, "apply", constants$5.sdrplay_api_Update_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Update_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_Update_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$5.sdrplay_api_Update_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$6.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$6.java
deleted file mode 100644
index 7c97f565..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$6.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$6 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$6() {}
- static final FunctionDescriptor sdrplay_api_SwapRspDuoActiveTuner_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoActiveTuner_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoActiveTuner_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_SwapRspDuoActiveTuner_t.class, "apply", constants$6.sdrplay_api_SwapRspDuoActiveTuner_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_SwapRspDuoActiveTuner_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoActiveTuner_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$6.sdrplay_api_SwapRspDuoActiveTuner_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t.class, "apply", constants$6.sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$6.sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoMode_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoMode_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoMode_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_SwapRspDuoMode_t.class, "apply", constants$6.sdrplay_api_SwapRspDuoMode_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_SwapRspDuoMode_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoMode_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$6.sdrplay_api_SwapRspDuoMode_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$7.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$7.java
deleted file mode 100644
index e57dc731..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$7.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$7 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$7() {}
- static final FunctionDescriptor sdrplay_api_Open$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Open$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_Open",
- constants$7.sdrplay_api_Open$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Close$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Close$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_Close",
- constants$7.sdrplay_api_Close$FUNC
- );
- static final FunctionDescriptor sdrplay_api_ApiVersion$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ApiVersion$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_ApiVersion",
- constants$7.sdrplay_api_ApiVersion$FUNC
- );
- static final FunctionDescriptor sdrplay_api_LockDeviceApi$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_LockDeviceApi$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_LockDeviceApi",
- constants$7.sdrplay_api_LockDeviceApi$FUNC
- );
- static final FunctionDescriptor sdrplay_api_UnlockDeviceApi$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_UnlockDeviceApi$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_UnlockDeviceApi",
- constants$7.sdrplay_api_UnlockDeviceApi$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetDevices$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDevices$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_GetDevices",
- constants$7.sdrplay_api_GetDevices$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$8.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$8.java
deleted file mode 100644
index 63590973..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$8.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$8 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$8() {}
- static final FunctionDescriptor sdrplay_api_SelectDevice$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_SelectDevice$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_SelectDevice",
- constants$8.sdrplay_api_SelectDevice$FUNC
- );
- static final FunctionDescriptor sdrplay_api_ReleaseDevice$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ReleaseDevice$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_ReleaseDevice",
- constants$8.sdrplay_api_ReleaseDevice$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetErrorString$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetErrorString$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_GetErrorString",
- constants$8.sdrplay_api_GetErrorString$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetLastError$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetLastError$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_GetLastError",
- constants$8.sdrplay_api_GetLastError$FUNC
- );
- static final FunctionDescriptor sdrplay_api_DisableHeartbeat$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_DisableHeartbeat$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_DisableHeartbeat",
- constants$8.sdrplay_api_DisableHeartbeat$FUNC
- );
- static final FunctionDescriptor sdrplay_api_DebugEnable$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_DebugEnable$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_DebugEnable",
- constants$8.sdrplay_api_DebugEnable$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$9.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$9.java
deleted file mode 100644
index 6d310837..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/constants$9.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$9 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$9() {}
- static final FunctionDescriptor sdrplay_api_GetDeviceParams$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDeviceParams$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_GetDeviceParams",
- constants$9.sdrplay_api_GetDeviceParams$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Init$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Init$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_Init",
- constants$9.sdrplay_api_Init$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Uninit$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Uninit$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_Uninit",
- constants$9.sdrplay_api_Uninit$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Update$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_Update$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_Update",
- constants$9.sdrplay_api_Update$FUNC
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoActiveTuner$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoActiveTuner$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_SwapRspDuoActiveTuner",
- constants$9.sdrplay_api_SwapRspDuoActiveTuner$FUNC
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoDualTunerModeSampleRate$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoDualTunerModeSampleRate$MH = RuntimeHelper.downcallHandle(
- "sdrplay_api_SwapRspDuoDualTunerModeSampleRate",
- constants$9.sdrplay_api_SwapRspDuoDualTunerModeSampleRate$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_AgcT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_AgcT.java
index bc79d8e8..05558d16 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_AgcT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_AgcT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,15 +21,19 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfInt;
+import static java.lang.foreign.ValueLayout.OfShort;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_AgcControlT enable;
* int setPoint_dBfs;
@@ -38,225 +42,382 @@ import java.lang.invoke.VarHandle;
* unsigned short decay_delay_ms;
* unsigned short decay_threshold_dB;
* int syncUpdate;
- * };
+ * }
* }
*/
public class sdrplay_api_AgcT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("enable"),
- Constants$root.C_INT$LAYOUT.withName("setPoint_dBfs"),
- Constants$root.C_SHORT$LAYOUT.withName("attack_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_delay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_threshold_dB"),
- Constants$root.C_INT$LAYOUT.withName("syncUpdate")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_AgcT.$struct$LAYOUT;
+ sdrplay_api_AgcT() {
+ // Should not be called directly
}
- static final VarHandle enable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("enable"));
- public static VarHandle enable$VH() {
- return sdrplay_api_AgcT.enable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("enable"),
+ sdrplay_api_h.C_INT.withName("setPoint_dBfs"),
+ sdrplay_api_h.C_SHORT.withName("attack_ms"),
+ sdrplay_api_h.C_SHORT.withName("decay_ms"),
+ sdrplay_api_h.C_SHORT.withName("decay_delay_ms"),
+ sdrplay_api_h.C_SHORT.withName("decay_threshold_dB"),
+ sdrplay_api_h.C_INT.withName("syncUpdate")
+ ).withName("$anon$36:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt enable$LAYOUT = (OfInt)$LAYOUT.select(groupElement("enable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcControlT enable
+ * }
+ */
+ public static final OfInt enable$layout() {
+ return enable$LAYOUT;
+ }
+
+ private static final long enable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcControlT enable
+ * }
+ */
+ public static final long enable$offset() {
+ return enable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_AgcControlT enable;
+ * {@snippet lang=c :
+ * sdrplay_api_AgcControlT enable
* }
*/
- public static int enable$get(MemorySegment seg) {
- return (int)sdrplay_api_AgcT.enable$VH.get(seg);
+ public static int enable(MemorySegment struct) {
+ return struct.get(enable$LAYOUT, enable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_AgcControlT enable;
+ * {@snippet lang=c :
+ * sdrplay_api_AgcControlT enable
* }
*/
- public static void enable$set(MemorySegment seg, int x) {
- sdrplay_api_AgcT.enable$VH.set(seg, x);
+ public static void enable(MemorySegment struct, int fieldValue) {
+ struct.set(enable$LAYOUT, enable$OFFSET, fieldValue);
}
- public static int enable$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_AgcT.enable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt setPoint_dBfs$LAYOUT = (OfInt)$LAYOUT.select(groupElement("setPoint_dBfs"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int setPoint_dBfs
+ * }
+ */
+ public static final OfInt setPoint_dBfs$layout() {
+ return setPoint_dBfs$LAYOUT;
}
- public static void enable$set(MemorySegment seg, long index, int x) {
- sdrplay_api_AgcT.enable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle setPoint_dBfs$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("setPoint_dBfs"));
- public static VarHandle setPoint_dBfs$VH() {
- return sdrplay_api_AgcT.setPoint_dBfs$VH;
+
+ private static final long setPoint_dBfs$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int setPoint_dBfs
+ * }
+ */
+ public static final long setPoint_dBfs$offset() {
+ return setPoint_dBfs$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int setPoint_dBfs;
+ * {@snippet lang=c :
+ * int setPoint_dBfs
* }
*/
- public static int setPoint_dBfs$get(MemorySegment seg) {
- return (int)sdrplay_api_AgcT.setPoint_dBfs$VH.get(seg);
+ public static int setPoint_dBfs(MemorySegment struct) {
+ return struct.get(setPoint_dBfs$LAYOUT, setPoint_dBfs$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int setPoint_dBfs;
+ * {@snippet lang=c :
+ * int setPoint_dBfs
* }
*/
- public static void setPoint_dBfs$set(MemorySegment seg, int x) {
- sdrplay_api_AgcT.setPoint_dBfs$VH.set(seg, x);
+ public static void setPoint_dBfs(MemorySegment struct, int fieldValue) {
+ struct.set(setPoint_dBfs$LAYOUT, setPoint_dBfs$OFFSET, fieldValue);
}
- public static int setPoint_dBfs$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_AgcT.setPoint_dBfs$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfShort attack_ms$LAYOUT = (OfShort)$LAYOUT.select(groupElement("attack_ms"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned short attack_ms
+ * }
+ */
+ public static final OfShort attack_ms$layout() {
+ return attack_ms$LAYOUT;
}
- public static void setPoint_dBfs$set(MemorySegment seg, long index, int x) {
- sdrplay_api_AgcT.setPoint_dBfs$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle attack_ms$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("attack_ms"));
- public static VarHandle attack_ms$VH() {
- return sdrplay_api_AgcT.attack_ms$VH;
+
+ private static final long attack_ms$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned short attack_ms
+ * }
+ */
+ public static final long attack_ms$offset() {
+ return attack_ms$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned short attack_ms;
+ * {@snippet lang=c :
+ * unsigned short attack_ms
* }
*/
- public static short attack_ms$get(MemorySegment seg) {
- return (short)sdrplay_api_AgcT.attack_ms$VH.get(seg);
+ public static short attack_ms(MemorySegment struct) {
+ return struct.get(attack_ms$LAYOUT, attack_ms$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned short attack_ms;
+ * {@snippet lang=c :
+ * unsigned short attack_ms
* }
*/
- public static void attack_ms$set(MemorySegment seg, short x) {
- sdrplay_api_AgcT.attack_ms$VH.set(seg, x);
+ public static void attack_ms(MemorySegment struct, short fieldValue) {
+ struct.set(attack_ms$LAYOUT, attack_ms$OFFSET, fieldValue);
}
- public static short attack_ms$get(MemorySegment seg, long index) {
- return (short)sdrplay_api_AgcT.attack_ms$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfShort decay_ms$LAYOUT = (OfShort)$LAYOUT.select(groupElement("decay_ms"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned short decay_ms
+ * }
+ */
+ public static final OfShort decay_ms$layout() {
+ return decay_ms$LAYOUT;
}
- public static void attack_ms$set(MemorySegment seg, long index, short x) {
- sdrplay_api_AgcT.attack_ms$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle decay_ms$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("decay_ms"));
- public static VarHandle decay_ms$VH() {
- return sdrplay_api_AgcT.decay_ms$VH;
+
+ private static final long decay_ms$OFFSET = 10;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned short decay_ms
+ * }
+ */
+ public static final long decay_ms$offset() {
+ return decay_ms$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned short decay_ms;
+ * {@snippet lang=c :
+ * unsigned short decay_ms
* }
*/
- public static short decay_ms$get(MemorySegment seg) {
- return (short)sdrplay_api_AgcT.decay_ms$VH.get(seg);
+ public static short decay_ms(MemorySegment struct) {
+ return struct.get(decay_ms$LAYOUT, decay_ms$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned short decay_ms;
+ * {@snippet lang=c :
+ * unsigned short decay_ms
* }
*/
- public static void decay_ms$set(MemorySegment seg, short x) {
- sdrplay_api_AgcT.decay_ms$VH.set(seg, x);
+ public static void decay_ms(MemorySegment struct, short fieldValue) {
+ struct.set(decay_ms$LAYOUT, decay_ms$OFFSET, fieldValue);
}
- public static short decay_ms$get(MemorySegment seg, long index) {
- return (short)sdrplay_api_AgcT.decay_ms$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfShort decay_delay_ms$LAYOUT = (OfShort)$LAYOUT.select(groupElement("decay_delay_ms"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned short decay_delay_ms
+ * }
+ */
+ public static final OfShort decay_delay_ms$layout() {
+ return decay_delay_ms$LAYOUT;
}
- public static void decay_ms$set(MemorySegment seg, long index, short x) {
- sdrplay_api_AgcT.decay_ms$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle decay_delay_ms$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("decay_delay_ms"));
- public static VarHandle decay_delay_ms$VH() {
- return sdrplay_api_AgcT.decay_delay_ms$VH;
+
+ private static final long decay_delay_ms$OFFSET = 12;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned short decay_delay_ms
+ * }
+ */
+ public static final long decay_delay_ms$offset() {
+ return decay_delay_ms$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned short decay_delay_ms;
+ * {@snippet lang=c :
+ * unsigned short decay_delay_ms
* }
*/
- public static short decay_delay_ms$get(MemorySegment seg) {
- return (short)sdrplay_api_AgcT.decay_delay_ms$VH.get(seg);
+ public static short decay_delay_ms(MemorySegment struct) {
+ return struct.get(decay_delay_ms$LAYOUT, decay_delay_ms$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned short decay_delay_ms;
+ * {@snippet lang=c :
+ * unsigned short decay_delay_ms
* }
*/
- public static void decay_delay_ms$set(MemorySegment seg, short x) {
- sdrplay_api_AgcT.decay_delay_ms$VH.set(seg, x);
+ public static void decay_delay_ms(MemorySegment struct, short fieldValue) {
+ struct.set(decay_delay_ms$LAYOUT, decay_delay_ms$OFFSET, fieldValue);
}
- public static short decay_delay_ms$get(MemorySegment seg, long index) {
- return (short)sdrplay_api_AgcT.decay_delay_ms$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfShort decay_threshold_dB$LAYOUT = (OfShort)$LAYOUT.select(groupElement("decay_threshold_dB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned short decay_threshold_dB
+ * }
+ */
+ public static final OfShort decay_threshold_dB$layout() {
+ return decay_threshold_dB$LAYOUT;
}
- public static void decay_delay_ms$set(MemorySegment seg, long index, short x) {
- sdrplay_api_AgcT.decay_delay_ms$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle decay_threshold_dB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("decay_threshold_dB"));
- public static VarHandle decay_threshold_dB$VH() {
- return sdrplay_api_AgcT.decay_threshold_dB$VH;
+
+ private static final long decay_threshold_dB$OFFSET = 14;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned short decay_threshold_dB
+ * }
+ */
+ public static final long decay_threshold_dB$offset() {
+ return decay_threshold_dB$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned short decay_threshold_dB;
+ * {@snippet lang=c :
+ * unsigned short decay_threshold_dB
* }
*/
- public static short decay_threshold_dB$get(MemorySegment seg) {
- return (short)sdrplay_api_AgcT.decay_threshold_dB$VH.get(seg);
+ public static short decay_threshold_dB(MemorySegment struct) {
+ return struct.get(decay_threshold_dB$LAYOUT, decay_threshold_dB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned short decay_threshold_dB;
+ * {@snippet lang=c :
+ * unsigned short decay_threshold_dB
* }
*/
- public static void decay_threshold_dB$set(MemorySegment seg, short x) {
- sdrplay_api_AgcT.decay_threshold_dB$VH.set(seg, x);
+ public static void decay_threshold_dB(MemorySegment struct, short fieldValue) {
+ struct.set(decay_threshold_dB$LAYOUT, decay_threshold_dB$OFFSET, fieldValue);
}
- public static short decay_threshold_dB$get(MemorySegment seg, long index) {
- return (short)sdrplay_api_AgcT.decay_threshold_dB$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt syncUpdate$LAYOUT = (OfInt)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int syncUpdate
+ * }
+ */
+ public static final OfInt syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void decay_threshold_dB$set(MemorySegment seg, long index, short x) {
- sdrplay_api_AgcT.decay_threshold_dB$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle syncUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("syncUpdate"));
- public static VarHandle syncUpdate$VH() {
- return sdrplay_api_AgcT.syncUpdate$VH;
+
+ private static final long syncUpdate$OFFSET = 16;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int syncUpdate;
+ * {@snippet lang=c :
+ * int syncUpdate
* }
*/
- public static int syncUpdate$get(MemorySegment seg) {
- return (int)sdrplay_api_AgcT.syncUpdate$VH.get(seg);
+ public static int syncUpdate(MemorySegment struct) {
+ return struct.get(syncUpdate$LAYOUT, syncUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int syncUpdate;
+ * {@snippet lang=c :
+ * int syncUpdate
* }
*/
- public static void syncUpdate$set(MemorySegment seg, int x) {
- sdrplay_api_AgcT.syncUpdate$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, int fieldValue) {
+ struct.set(syncUpdate$LAYOUT, syncUpdate$OFFSET, fieldValue);
}
- public static int syncUpdate$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_AgcT.syncUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void syncUpdate$set(MemorySegment seg, long index, int x) {
- sdrplay_api_AgcT.syncUpdate$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ApiVersion_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ApiVersion_t.java
index d378d6cb..e7fb49ce 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ApiVersion_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ApiVersion_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_ApiVersion_t)(float* apiVer);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_ApiVersion_t)(float *)
* }
*/
-public interface sdrplay_api_ApiVersion_t {
+public class sdrplay_api_ApiVersion_t {
- int apply(java.lang.foreign.MemorySegment currentSampleRate);
- static MemorySegment allocate(sdrplay_api_ApiVersion_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$1.sdrplay_api_ApiVersion_t_UP$MH, fi, constants$1.sdrplay_api_ApiVersion_t$FUNC, scope);
+ sdrplay_api_ApiVersion_t() {
+ // Should not be called directly
}
- static sdrplay_api_ApiVersion_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _currentSampleRate) -> {
- try {
- return (int)constants$1.sdrplay_api_ApiVersion_t_DOWN$MH.invokeExact(symbol, _currentSampleRate);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment apiVer);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_ApiVersion_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_ApiVersion_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment apiVer) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, apiVer);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_CallbackFnsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_CallbackFnsT.java
index 341af08d..1a80f9f5 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_CallbackFnsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_CallbackFnsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,131 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.AddressLayout;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_StreamCallback_t StreamACbFn;
* sdrplay_api_StreamCallback_t StreamBCbFn;
* sdrplay_api_EventCallback_t EventCbFn;
- * };
+ * }
* }
*/
public class sdrplay_api_CallbackFnsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_POINTER$LAYOUT.withName("StreamACbFn"),
- Constants$root.C_POINTER$LAYOUT.withName("StreamBCbFn"),
- Constants$root.C_POINTER$LAYOUT.withName("EventCbFn")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_CallbackFnsT.$struct$LAYOUT;
+ sdrplay_api_CallbackFnsT() {
+ // Should not be called directly
}
- static final VarHandle StreamACbFn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("StreamACbFn"));
- public static VarHandle StreamACbFn$VH() {
- return sdrplay_api_CallbackFnsT.StreamACbFn$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_POINTER.withName("StreamACbFn"),
+ sdrplay_api_h.C_POINTER.withName("StreamBCbFn"),
+ sdrplay_api_h.C_POINTER.withName("EventCbFn")
+ ).withName("$anon$71:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final AddressLayout StreamACbFn$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("StreamACbFn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamACbFn
+ * }
+ */
+ public static final AddressLayout StreamACbFn$layout() {
+ return StreamACbFn$LAYOUT;
+ }
+
+ private static final long StreamACbFn$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamACbFn
+ * }
+ */
+ public static final long StreamACbFn$offset() {
+ return StreamACbFn$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_StreamCallback_t StreamACbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamACbFn
* }
*/
- public static MemorySegment StreamACbFn$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.StreamACbFn$VH.get(seg);
+ public static MemorySegment StreamACbFn(MemorySegment struct) {
+ return struct.get(StreamACbFn$LAYOUT, StreamACbFn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_StreamCallback_t StreamACbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamACbFn
* }
*/
- public static void StreamACbFn$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_CallbackFnsT.StreamACbFn$VH.set(seg, x);
+ public static void StreamACbFn(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(StreamACbFn$LAYOUT, StreamACbFn$OFFSET, fieldValue);
}
- public static MemorySegment StreamACbFn$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.StreamACbFn$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout StreamBCbFn$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("StreamBCbFn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamBCbFn
+ * }
+ */
+ public static final AddressLayout StreamBCbFn$layout() {
+ return StreamBCbFn$LAYOUT;
}
- public static void StreamACbFn$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_CallbackFnsT.StreamACbFn$VH.set(seg.asSlice(index*sizeof()), x);
- }
- public static sdrplay_api_StreamCallback_t StreamACbFn(MemorySegment segment, SegmentScope scope) {
- return sdrplay_api_StreamCallback_t.ofAddress(StreamACbFn$get(segment), scope);
- }
- static final VarHandle StreamBCbFn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("StreamBCbFn"));
- public static VarHandle StreamBCbFn$VH() {
- return sdrplay_api_CallbackFnsT.StreamBCbFn$VH;
+
+ private static final long StreamBCbFn$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamBCbFn
+ * }
+ */
+ public static final long StreamBCbFn$offset() {
+ return StreamBCbFn$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_StreamCallback_t StreamBCbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamBCbFn
* }
*/
- public static MemorySegment StreamBCbFn$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.StreamBCbFn$VH.get(seg);
+ public static MemorySegment StreamBCbFn(MemorySegment struct) {
+ return struct.get(StreamBCbFn$LAYOUT, StreamBCbFn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_StreamCallback_t StreamBCbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamBCbFn
* }
*/
- public static void StreamBCbFn$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_CallbackFnsT.StreamBCbFn$VH.set(seg, x);
+ public static void StreamBCbFn(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(StreamBCbFn$LAYOUT, StreamBCbFn$OFFSET, fieldValue);
}
- public static MemorySegment StreamBCbFn$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.StreamBCbFn$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout EventCbFn$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("EventCbFn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_EventCallback_t EventCbFn
+ * }
+ */
+ public static final AddressLayout EventCbFn$layout() {
+ return EventCbFn$LAYOUT;
}
- public static void StreamBCbFn$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_CallbackFnsT.StreamBCbFn$VH.set(seg.asSlice(index*sizeof()), x);
- }
- public static sdrplay_api_StreamCallback_t StreamBCbFn(MemorySegment segment, SegmentScope scope) {
- return sdrplay_api_StreamCallback_t.ofAddress(StreamBCbFn$get(segment), scope);
- }
- static final VarHandle EventCbFn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("EventCbFn"));
- public static VarHandle EventCbFn$VH() {
- return sdrplay_api_CallbackFnsT.EventCbFn$VH;
+
+ private static final long EventCbFn$OFFSET = 16;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_EventCallback_t EventCbFn
+ * }
+ */
+ public static final long EventCbFn$offset() {
+ return EventCbFn$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_EventCallback_t EventCbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_EventCallback_t EventCbFn
* }
*/
- public static MemorySegment EventCbFn$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.EventCbFn$VH.get(seg);
+ public static MemorySegment EventCbFn(MemorySegment struct) {
+ return struct.get(EventCbFn$LAYOUT, EventCbFn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_EventCallback_t EventCbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_EventCallback_t EventCbFn
* }
*/
- public static void EventCbFn$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_CallbackFnsT.EventCbFn$VH.set(seg, x);
+ public static void EventCbFn(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(EventCbFn$LAYOUT, EventCbFn$OFFSET, fieldValue);
}
- public static MemorySegment EventCbFn$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.EventCbFn$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void EventCbFn$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_CallbackFnsT.EventCbFn$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static sdrplay_api_EventCallback_t EventCbFn(MemorySegment segment, SegmentScope scope) {
- return sdrplay_api_EventCallback_t.ofAddress(EventCbFn$get(segment), scope);
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Close_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Close_t.java
index f4e9feb8..bc00f12e 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Close_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Close_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,61 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_Close_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_Close_t)(void)
* }
*/
-public interface sdrplay_api_Close_t {
+public class sdrplay_api_Close_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_Close_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$1.sdrplay_api_Close_t_UP$MH, fi, constants$1.sdrplay_api_Close_t$FUNC, scope);
+ sdrplay_api_Close_t() {
+ // Should not be called directly
}
- static sdrplay_api_Close_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$1.sdrplay_api_Close_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_Close_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_Close_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ControlParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ControlParamsT.java
index 9e52f1e5..f313b315 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ControlParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ControlParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,93 +21,265 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_DcOffsetT dcOffset;
* sdrplay_api_DecimationT decimation;
* sdrplay_api_AgcT agc;
* sdrplay_api_AdsbModeT adsbMode;
- * };
+ * }
* }
*/
public class sdrplay_api_ControlParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("DCenable"),
- Constants$root.C_CHAR$LAYOUT.withName("IQenable")
- ).withName("dcOffset"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("enable"),
- Constants$root.C_CHAR$LAYOUT.withName("decimationFactor"),
- Constants$root.C_CHAR$LAYOUT.withName("wideBandSignal")
- ).withName("decimation"),
- MemoryLayout.paddingLayout(24),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("enable"),
- Constants$root.C_INT$LAYOUT.withName("setPoint_dBfs"),
- Constants$root.C_SHORT$LAYOUT.withName("attack_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_delay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_threshold_dB"),
- Constants$root.C_INT$LAYOUT.withName("syncUpdate")
- ).withName("agc"),
- Constants$root.C_INT$LAYOUT.withName("adsbMode")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_ControlParamsT.$struct$LAYOUT;
+ sdrplay_api_ControlParamsT() {
+ // Should not be called directly
}
- public static MemorySegment dcOffset$slice(MemorySegment seg) {
- return seg.asSlice(0, 2);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_DcOffsetT.layout().withName("dcOffset"),
+ sdrplay_api_DecimationT.layout().withName("decimation"),
+ MemoryLayout.paddingLayout(3),
+ sdrplay_api_AgcT.layout().withName("agc"),
+ sdrplay_api_h.C_INT.withName("adsbMode")
+ ).withName("$anon$47:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- public static MemorySegment decimation$slice(MemorySegment seg) {
- return seg.asSlice(2, 3);
+
+ private static final GroupLayout dcOffset$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("dcOffset"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetT dcOffset
+ * }
+ */
+ public static final GroupLayout dcOffset$layout() {
+ return dcOffset$LAYOUT;
}
- public static MemorySegment agc$slice(MemorySegment seg) {
- return seg.asSlice(8, 20);
- }
- static final VarHandle adsbMode$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("adsbMode"));
- public static VarHandle adsbMode$VH() {
- return sdrplay_api_ControlParamsT.adsbMode$VH;
+
+ private static final long dcOffset$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetT dcOffset
+ * }
+ */
+ public static final long dcOffset$offset() {
+ return dcOffset$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_AdsbModeT adsbMode;
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetT dcOffset
* }
*/
- public static int adsbMode$get(MemorySegment seg) {
- return (int)sdrplay_api_ControlParamsT.adsbMode$VH.get(seg);
+ public static MemorySegment dcOffset(MemorySegment struct) {
+ return struct.asSlice(dcOffset$OFFSET, dcOffset$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_AdsbModeT adsbMode;
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetT dcOffset
* }
*/
- public static void adsbMode$set(MemorySegment seg, int x) {
- sdrplay_api_ControlParamsT.adsbMode$VH.set(seg, x);
+ public static void dcOffset(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, dcOffset$OFFSET, dcOffset$LAYOUT.byteSize());
}
- public static int adsbMode$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_ControlParamsT.adsbMode$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout decimation$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("decimation"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DecimationT decimation
+ * }
+ */
+ public static final GroupLayout decimation$layout() {
+ return decimation$LAYOUT;
}
- public static void adsbMode$set(MemorySegment seg, long index, int x) {
- sdrplay_api_ControlParamsT.adsbMode$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long decimation$OFFSET = 2;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DecimationT decimation
+ * }
+ */
+ public static final long decimation$offset() {
+ return decimation$OFFSET;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DecimationT decimation
+ * }
+ */
+ public static MemorySegment decimation(MemorySegment struct) {
+ return struct.asSlice(decimation$OFFSET, decimation$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DecimationT decimation
+ * }
+ */
+ public static void decimation(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, decimation$OFFSET, decimation$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout agc$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("agc"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcT agc
+ * }
+ */
+ public static final GroupLayout agc$layout() {
+ return agc$LAYOUT;
+ }
+
+ private static final long agc$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcT agc
+ * }
+ */
+ public static final long agc$offset() {
+ return agc$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcT agc
+ * }
+ */
+ public static MemorySegment agc(MemorySegment struct) {
+ return struct.asSlice(agc$OFFSET, agc$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcT agc
+ * }
+ */
+ public static void agc(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, agc$OFFSET, agc$LAYOUT.byteSize());
+ }
+
+ private static final OfInt adsbMode$LAYOUT = (OfInt)$LAYOUT.select(groupElement("adsbMode"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AdsbModeT adsbMode
+ * }
+ */
+ public static final OfInt adsbMode$layout() {
+ return adsbMode$LAYOUT;
+ }
+
+ private static final long adsbMode$OFFSET = 28;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AdsbModeT adsbMode
+ * }
+ */
+ public static final long adsbMode$offset() {
+ return adsbMode$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AdsbModeT adsbMode
+ * }
+ */
+ public static int adsbMode(MemorySegment struct) {
+ return struct.get(adsbMode$LAYOUT, adsbMode$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AdsbModeT adsbMode
+ * }
+ */
+ public static void adsbMode(MemorySegment struct, int fieldValue) {
+ struct.set(adsbMode$LAYOUT, adsbMode$OFFSET, fieldValue);
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DcOffsetT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DcOffsetT.java
index 07d4eb51..e7894dc7 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DcOffsetT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DcOffsetT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,92 +21,172 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char DCenable;
* unsigned char IQenable;
- * };
+ * }
* }
*/
public class sdrplay_api_DcOffsetT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("DCenable"),
- Constants$root.C_CHAR$LAYOUT.withName("IQenable")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DcOffsetT.$struct$LAYOUT;
+ sdrplay_api_DcOffsetT() {
+ // Should not be called directly
}
- static final VarHandle DCenable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("DCenable"));
- public static VarHandle DCenable$VH() {
- return sdrplay_api_DcOffsetT.DCenable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("DCenable"),
+ sdrplay_api_h.C_CHAR.withName("IQenable")
+ ).withName("$anon$23:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte DCenable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("DCenable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char DCenable
+ * }
+ */
+ public static final OfByte DCenable$layout() {
+ return DCenable$LAYOUT;
+ }
+
+ private static final long DCenable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char DCenable
+ * }
+ */
+ public static final long DCenable$offset() {
+ return DCenable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char DCenable;
+ * {@snippet lang=c :
+ * unsigned char DCenable
* }
*/
- public static byte DCenable$get(MemorySegment seg) {
- return (byte)sdrplay_api_DcOffsetT.DCenable$VH.get(seg);
+ public static byte DCenable(MemorySegment struct) {
+ return struct.get(DCenable$LAYOUT, DCenable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char DCenable;
+ * {@snippet lang=c :
+ * unsigned char DCenable
* }
*/
- public static void DCenable$set(MemorySegment seg, byte x) {
- sdrplay_api_DcOffsetT.DCenable$VH.set(seg, x);
+ public static void DCenable(MemorySegment struct, byte fieldValue) {
+ struct.set(DCenable$LAYOUT, DCenable$OFFSET, fieldValue);
}
- public static byte DCenable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DcOffsetT.DCenable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte IQenable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("IQenable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char IQenable
+ * }
+ */
+ public static final OfByte IQenable$layout() {
+ return IQenable$LAYOUT;
}
- public static void DCenable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DcOffsetT.DCenable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle IQenable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("IQenable"));
- public static VarHandle IQenable$VH() {
- return sdrplay_api_DcOffsetT.IQenable$VH;
+
+ private static final long IQenable$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char IQenable
+ * }
+ */
+ public static final long IQenable$offset() {
+ return IQenable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char IQenable;
+ * {@snippet lang=c :
+ * unsigned char IQenable
* }
*/
- public static byte IQenable$get(MemorySegment seg) {
- return (byte)sdrplay_api_DcOffsetT.IQenable$VH.get(seg);
+ public static byte IQenable(MemorySegment struct) {
+ return struct.get(IQenable$LAYOUT, IQenable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char IQenable;
+ * {@snippet lang=c :
+ * unsigned char IQenable
* }
*/
- public static void IQenable$set(MemorySegment seg, byte x) {
- sdrplay_api_DcOffsetT.IQenable$VH.set(seg, x);
+ public static void IQenable(MemorySegment struct, byte fieldValue) {
+ struct.set(IQenable$LAYOUT, IQenable$OFFSET, fieldValue);
}
- public static byte IQenable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DcOffsetT.IQenable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void IQenable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DcOffsetT.IQenable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DcOffsetTunerT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DcOffsetTunerT.java
index 842a7d43..9f66a02f 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DcOffsetTunerT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DcOffsetTunerT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,153 +21,266 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char dcCal;
* unsigned char speedUp;
* int trackTime;
* int refreshRateTime;
- * };
+ * }
* }
*/
public class sdrplay_api_DcOffsetTunerT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("dcCal"),
- Constants$root.C_CHAR$LAYOUT.withName("speedUp"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("trackTime"),
- Constants$root.C_INT$LAYOUT.withName("refreshRateTime")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DcOffsetTunerT.$struct$LAYOUT;
+ sdrplay_api_DcOffsetTunerT() {
+ // Should not be called directly
}
- static final VarHandle dcCal$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("dcCal"));
- public static VarHandle dcCal$VH() {
- return sdrplay_api_DcOffsetTunerT.dcCal$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("dcCal"),
+ sdrplay_api_h.C_CHAR.withName("speedUp"),
+ MemoryLayout.paddingLayout(2),
+ sdrplay_api_h.C_INT.withName("trackTime"),
+ sdrplay_api_h.C_INT.withName("refreshRateTime")
+ ).withName("$anon$75:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte dcCal$LAYOUT = (OfByte)$LAYOUT.select(groupElement("dcCal"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char dcCal
+ * }
+ */
+ public static final OfByte dcCal$layout() {
+ return dcCal$LAYOUT;
+ }
+
+ private static final long dcCal$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char dcCal
+ * }
+ */
+ public static final long dcCal$offset() {
+ return dcCal$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char dcCal;
+ * {@snippet lang=c :
+ * unsigned char dcCal
* }
*/
- public static byte dcCal$get(MemorySegment seg) {
- return (byte)sdrplay_api_DcOffsetTunerT.dcCal$VH.get(seg);
+ public static byte dcCal(MemorySegment struct) {
+ return struct.get(dcCal$LAYOUT, dcCal$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char dcCal;
+ * {@snippet lang=c :
+ * unsigned char dcCal
* }
*/
- public static void dcCal$set(MemorySegment seg, byte x) {
- sdrplay_api_DcOffsetTunerT.dcCal$VH.set(seg, x);
+ public static void dcCal(MemorySegment struct, byte fieldValue) {
+ struct.set(dcCal$LAYOUT, dcCal$OFFSET, fieldValue);
}
- public static byte dcCal$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DcOffsetTunerT.dcCal$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte speedUp$LAYOUT = (OfByte)$LAYOUT.select(groupElement("speedUp"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char speedUp
+ * }
+ */
+ public static final OfByte speedUp$layout() {
+ return speedUp$LAYOUT;
}
- public static void dcCal$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DcOffsetTunerT.dcCal$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle speedUp$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("speedUp"));
- public static VarHandle speedUp$VH() {
- return sdrplay_api_DcOffsetTunerT.speedUp$VH;
+
+ private static final long speedUp$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char speedUp
+ * }
+ */
+ public static final long speedUp$offset() {
+ return speedUp$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char speedUp;
+ * {@snippet lang=c :
+ * unsigned char speedUp
* }
*/
- public static byte speedUp$get(MemorySegment seg) {
- return (byte)sdrplay_api_DcOffsetTunerT.speedUp$VH.get(seg);
+ public static byte speedUp(MemorySegment struct) {
+ return struct.get(speedUp$LAYOUT, speedUp$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char speedUp;
+ * {@snippet lang=c :
+ * unsigned char speedUp
* }
*/
- public static void speedUp$set(MemorySegment seg, byte x) {
- sdrplay_api_DcOffsetTunerT.speedUp$VH.set(seg, x);
+ public static void speedUp(MemorySegment struct, byte fieldValue) {
+ struct.set(speedUp$LAYOUT, speedUp$OFFSET, fieldValue);
}
- public static byte speedUp$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DcOffsetTunerT.speedUp$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt trackTime$LAYOUT = (OfInt)$LAYOUT.select(groupElement("trackTime"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int trackTime
+ * }
+ */
+ public static final OfInt trackTime$layout() {
+ return trackTime$LAYOUT;
}
- public static void speedUp$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DcOffsetTunerT.speedUp$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle trackTime$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("trackTime"));
- public static VarHandle trackTime$VH() {
- return sdrplay_api_DcOffsetTunerT.trackTime$VH;
+
+ private static final long trackTime$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int trackTime
+ * }
+ */
+ public static final long trackTime$offset() {
+ return trackTime$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int trackTime;
+ * {@snippet lang=c :
+ * int trackTime
* }
*/
- public static int trackTime$get(MemorySegment seg) {
- return (int)sdrplay_api_DcOffsetTunerT.trackTime$VH.get(seg);
+ public static int trackTime(MemorySegment struct) {
+ return struct.get(trackTime$LAYOUT, trackTime$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int trackTime;
+ * {@snippet lang=c :
+ * int trackTime
* }
*/
- public static void trackTime$set(MemorySegment seg, int x) {
- sdrplay_api_DcOffsetTunerT.trackTime$VH.set(seg, x);
+ public static void trackTime(MemorySegment struct, int fieldValue) {
+ struct.set(trackTime$LAYOUT, trackTime$OFFSET, fieldValue);
}
- public static int trackTime$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DcOffsetTunerT.trackTime$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt refreshRateTime$LAYOUT = (OfInt)$LAYOUT.select(groupElement("refreshRateTime"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int refreshRateTime
+ * }
+ */
+ public static final OfInt refreshRateTime$layout() {
+ return refreshRateTime$LAYOUT;
}
- public static void trackTime$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DcOffsetTunerT.trackTime$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle refreshRateTime$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("refreshRateTime"));
- public static VarHandle refreshRateTime$VH() {
- return sdrplay_api_DcOffsetTunerT.refreshRateTime$VH;
+
+ private static final long refreshRateTime$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int refreshRateTime
+ * }
+ */
+ public static final long refreshRateTime$offset() {
+ return refreshRateTime$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int refreshRateTime;
+ * {@snippet lang=c :
+ * int refreshRateTime
* }
*/
- public static int refreshRateTime$get(MemorySegment seg) {
- return (int)sdrplay_api_DcOffsetTunerT.refreshRateTime$VH.get(seg);
+ public static int refreshRateTime(MemorySegment struct) {
+ return struct.get(refreshRateTime$LAYOUT, refreshRateTime$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int refreshRateTime;
+ * {@snippet lang=c :
+ * int refreshRateTime
* }
*/
- public static void refreshRateTime$set(MemorySegment seg, int x) {
- sdrplay_api_DcOffsetTunerT.refreshRateTime$VH.set(seg, x);
+ public static void refreshRateTime(MemorySegment struct, int fieldValue) {
+ struct.set(refreshRateTime$LAYOUT, refreshRateTime$OFFSET, fieldValue);
}
- public static int refreshRateTime$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DcOffsetTunerT.refreshRateTime$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void refreshRateTime$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DcOffsetTunerT.refreshRateTime$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DebugEnable_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DebugEnable_t.java
index 727fe05d..3011524c 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DebugEnable_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DebugEnable_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,64 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_DebugEnable_t)(void* dev,enum dbgLvl);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_DebugEnable_t)(HANDLE, sdrplay_api_DbgLvl_t)
* }
*/
-public interface sdrplay_api_DebugEnable_t {
+public class sdrplay_api_DebugEnable_t {
- int apply(java.lang.foreign.MemorySegment dev, int dbgLvl);
- static MemorySegment allocate(sdrplay_api_DebugEnable_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$4.sdrplay_api_DebugEnable_t_UP$MH, fi, constants$4.sdrplay_api_DebugEnable_t$FUNC, scope);
+ sdrplay_api_DebugEnable_t() {
+ // Should not be called directly
}
- static sdrplay_api_DebugEnable_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev, int _dbgLvl) -> {
- try {
- return (int)constants$4.sdrplay_api_DebugEnable_t_DOWN$MH.invokeExact(symbol, _dev, _dbgLvl);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev, int dbgLvl);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_DebugEnable_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_DebugEnable_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev, int dbgLvl) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev, dbgLvl);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DecimationT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DecimationT.java
index 86c7e78b..e7d089dc 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DecimationT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DecimationT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char enable;
* unsigned char decimationFactor;
* unsigned char wideBandSignal;
- * };
+ * }
* }
*/
public class sdrplay_api_DecimationT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("enable"),
- Constants$root.C_CHAR$LAYOUT.withName("decimationFactor"),
- Constants$root.C_CHAR$LAYOUT.withName("wideBandSignal")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DecimationT.$struct$LAYOUT;
+ sdrplay_api_DecimationT() {
+ // Should not be called directly
}
- static final VarHandle enable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("enable"));
- public static VarHandle enable$VH() {
- return sdrplay_api_DecimationT.enable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("enable"),
+ sdrplay_api_h.C_CHAR.withName("decimationFactor"),
+ sdrplay_api_h.C_CHAR.withName("wideBandSignal")
+ ).withName("$anon$29:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte enable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("enable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char enable
+ * }
+ */
+ public static final OfByte enable$layout() {
+ return enable$LAYOUT;
+ }
+
+ private static final long enable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char enable
+ * }
+ */
+ public static final long enable$offset() {
+ return enable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char enable;
+ * {@snippet lang=c :
+ * unsigned char enable
* }
*/
- public static byte enable$get(MemorySegment seg) {
- return (byte)sdrplay_api_DecimationT.enable$VH.get(seg);
+ public static byte enable(MemorySegment struct) {
+ return struct.get(enable$LAYOUT, enable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char enable;
+ * {@snippet lang=c :
+ * unsigned char enable
* }
*/
- public static void enable$set(MemorySegment seg, byte x) {
- sdrplay_api_DecimationT.enable$VH.set(seg, x);
+ public static void enable(MemorySegment struct, byte fieldValue) {
+ struct.set(enable$LAYOUT, enable$OFFSET, fieldValue);
}
- public static byte enable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DecimationT.enable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte decimationFactor$LAYOUT = (OfByte)$LAYOUT.select(groupElement("decimationFactor"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char decimationFactor
+ * }
+ */
+ public static final OfByte decimationFactor$layout() {
+ return decimationFactor$LAYOUT;
}
- public static void enable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DecimationT.enable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle decimationFactor$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("decimationFactor"));
- public static VarHandle decimationFactor$VH() {
- return sdrplay_api_DecimationT.decimationFactor$VH;
+
+ private static final long decimationFactor$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char decimationFactor
+ * }
+ */
+ public static final long decimationFactor$offset() {
+ return decimationFactor$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char decimationFactor;
+ * {@snippet lang=c :
+ * unsigned char decimationFactor
* }
*/
- public static byte decimationFactor$get(MemorySegment seg) {
- return (byte)sdrplay_api_DecimationT.decimationFactor$VH.get(seg);
+ public static byte decimationFactor(MemorySegment struct) {
+ return struct.get(decimationFactor$LAYOUT, decimationFactor$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char decimationFactor;
+ * {@snippet lang=c :
+ * unsigned char decimationFactor
* }
*/
- public static void decimationFactor$set(MemorySegment seg, byte x) {
- sdrplay_api_DecimationT.decimationFactor$VH.set(seg, x);
+ public static void decimationFactor(MemorySegment struct, byte fieldValue) {
+ struct.set(decimationFactor$LAYOUT, decimationFactor$OFFSET, fieldValue);
}
- public static byte decimationFactor$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DecimationT.decimationFactor$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte wideBandSignal$LAYOUT = (OfByte)$LAYOUT.select(groupElement("wideBandSignal"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char wideBandSignal
+ * }
+ */
+ public static final OfByte wideBandSignal$layout() {
+ return wideBandSignal$LAYOUT;
}
- public static void decimationFactor$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DecimationT.decimationFactor$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle wideBandSignal$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("wideBandSignal"));
- public static VarHandle wideBandSignal$VH() {
- return sdrplay_api_DecimationT.wideBandSignal$VH;
+
+ private static final long wideBandSignal$OFFSET = 2;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char wideBandSignal
+ * }
+ */
+ public static final long wideBandSignal$offset() {
+ return wideBandSignal$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char wideBandSignal;
+ * {@snippet lang=c :
+ * unsigned char wideBandSignal
* }
*/
- public static byte wideBandSignal$get(MemorySegment seg) {
- return (byte)sdrplay_api_DecimationT.wideBandSignal$VH.get(seg);
+ public static byte wideBandSignal(MemorySegment struct) {
+ return struct.get(wideBandSignal$LAYOUT, wideBandSignal$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char wideBandSignal;
+ * {@snippet lang=c :
+ * unsigned char wideBandSignal
* }
*/
- public static void wideBandSignal$set(MemorySegment seg, byte x) {
- sdrplay_api_DecimationT.wideBandSignal$VH.set(seg, x);
+ public static void wideBandSignal(MemorySegment struct, byte fieldValue) {
+ struct.set(wideBandSignal$LAYOUT, wideBandSignal$OFFSET, fieldValue);
}
- public static byte wideBandSignal$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DecimationT.wideBandSignal$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void wideBandSignal$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DecimationT.wideBandSignal$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DevParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DevParamsT.java
index 83ffe2fd..3664bd85 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DevParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DevParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,15 +21,19 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfDouble;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* double ppm;
* sdrplay_api_FsFreqT fsFreq;
@@ -41,166 +45,519 @@ import java.lang.invoke.VarHandle;
* sdrplay_api_Rsp2ParamsT rsp2Params;
* sdrplay_api_RspDuoParamsT rspDuoParams;
* sdrplay_api_RspDxParamsT rspDxParams;
- * };
+ * }
* }
*/
public class sdrplay_api_DevParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("ppm"),
- MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("fsHz"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("reCal"),
- MemoryLayout.paddingLayout(48)
- ).withName("fsFreq"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("sampleNum"),
- Constants$root.C_INT$LAYOUT.withName("period")
- ).withName("syncUpdate"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("resetGainUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("resetRfUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("resetFsUpdate")
- ).withName("resetFlags"),
- MemoryLayout.paddingLayout(8),
- Constants$root.C_INT$LAYOUT.withName("mode"),
- Constants$root.C_INT$LAYOUT.withName("samplesPerPkt"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable")
- ).withName("rsp1aParams"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("extRefOutputEn")
- ).withName("rsp2Params"),
- MemoryLayout.paddingLayout(8),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("extRefOutputEn")
- ).withName("rspDuoParams"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("hdrEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("antennaSel"),
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable"),
- MemoryLayout.paddingLayout(16)
- ).withName("rspDxParams")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DevParamsT.$struct$LAYOUT;
+ sdrplay_api_DevParamsT() {
+ // Should not be called directly
}
- static final VarHandle ppm$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("ppm"));
- public static VarHandle ppm$VH() {
- return sdrplay_api_DevParamsT.ppm$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_DOUBLE.withName("ppm"),
+ sdrplay_api_FsFreqT.layout().withName("fsFreq"),
+ sdrplay_api_SyncUpdateT.layout().withName("syncUpdate"),
+ sdrplay_api_ResetFlagsT.layout().withName("resetFlags"),
+ MemoryLayout.paddingLayout(1),
+ sdrplay_api_h.C_INT.withName("mode"),
+ sdrplay_api_h.C_INT.withName("samplesPerPkt"),
+ sdrplay_api_Rsp1aParamsT.layout().withName("rsp1aParams"),
+ sdrplay_api_Rsp2ParamsT.layout().withName("rsp2Params"),
+ MemoryLayout.paddingLayout(1),
+ sdrplay_api_RspDuoParamsT.layout().withName("rspDuoParams"),
+ sdrplay_api_RspDxParamsT.layout().withName("rspDxParams")
+ ).withName("$anon$37:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfDouble ppm$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("ppm"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double ppm
+ * }
+ */
+ public static final OfDouble ppm$layout() {
+ return ppm$LAYOUT;
+ }
+
+ private static final long ppm$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double ppm
+ * }
+ */
+ public static final long ppm$offset() {
+ return ppm$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * double ppm;
+ * {@snippet lang=c :
+ * double ppm
* }
*/
- public static double ppm$get(MemorySegment seg) {
- return (double)sdrplay_api_DevParamsT.ppm$VH.get(seg);
+ public static double ppm(MemorySegment struct) {
+ return struct.get(ppm$LAYOUT, ppm$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double ppm;
+ * {@snippet lang=c :
+ * double ppm
* }
*/
- public static void ppm$set(MemorySegment seg, double x) {
- sdrplay_api_DevParamsT.ppm$VH.set(seg, x);
+ public static void ppm(MemorySegment struct, double fieldValue) {
+ struct.set(ppm$LAYOUT, ppm$OFFSET, fieldValue);
}
- public static double ppm$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_DevParamsT.ppm$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout fsFreq$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("fsFreq"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_FsFreqT fsFreq
+ * }
+ */
+ public static final GroupLayout fsFreq$layout() {
+ return fsFreq$LAYOUT;
}
- public static void ppm$set(MemorySegment seg, long index, double x) {
- sdrplay_api_DevParamsT.ppm$VH.set(seg.asSlice(index*sizeof()), x);
- }
- public static MemorySegment fsFreq$slice(MemorySegment seg) {
- return seg.asSlice(8, 16);
- }
- public static MemorySegment syncUpdate$slice(MemorySegment seg) {
- return seg.asSlice(24, 8);
- }
- public static MemorySegment resetFlags$slice(MemorySegment seg) {
- return seg.asSlice(32, 3);
- }
- static final VarHandle mode$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("mode"));
- public static VarHandle mode$VH() {
- return sdrplay_api_DevParamsT.mode$VH;
+
+ private static final long fsFreq$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_FsFreqT fsFreq
+ * }
+ */
+ public static final long fsFreq$offset() {
+ return fsFreq$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_TransferModeT mode;
+ * {@snippet lang=c :
+ * sdrplay_api_FsFreqT fsFreq
* }
*/
- public static int mode$get(MemorySegment seg) {
- return (int)sdrplay_api_DevParamsT.mode$VH.get(seg);
+ public static MemorySegment fsFreq(MemorySegment struct) {
+ return struct.asSlice(fsFreq$OFFSET, fsFreq$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_TransferModeT mode;
+ * {@snippet lang=c :
+ * sdrplay_api_FsFreqT fsFreq
* }
*/
- public static void mode$set(MemorySegment seg, int x) {
- sdrplay_api_DevParamsT.mode$VH.set(seg, x);
+ public static void fsFreq(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, fsFreq$OFFSET, fsFreq$LAYOUT.byteSize());
}
- public static int mode$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DevParamsT.mode$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout syncUpdate$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_SyncUpdateT syncUpdate
+ * }
+ */
+ public static final GroupLayout syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void mode$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DevParamsT.mode$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle samplesPerPkt$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("samplesPerPkt"));
- public static VarHandle samplesPerPkt$VH() {
- return sdrplay_api_DevParamsT.samplesPerPkt$VH;
+
+ private static final long syncUpdate$OFFSET = 24;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_SyncUpdateT syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int samplesPerPkt;
+ * {@snippet lang=c :
+ * sdrplay_api_SyncUpdateT syncUpdate
* }
*/
- public static int samplesPerPkt$get(MemorySegment seg) {
- return (int)sdrplay_api_DevParamsT.samplesPerPkt$VH.get(seg);
+ public static MemorySegment syncUpdate(MemorySegment struct) {
+ return struct.asSlice(syncUpdate$OFFSET, syncUpdate$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int samplesPerPkt;
+ * {@snippet lang=c :
+ * sdrplay_api_SyncUpdateT syncUpdate
* }
*/
- public static void samplesPerPkt$set(MemorySegment seg, int x) {
- sdrplay_api_DevParamsT.samplesPerPkt$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, syncUpdate$OFFSET, syncUpdate$LAYOUT.byteSize());
}
- public static int samplesPerPkt$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DevParamsT.samplesPerPkt$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout resetFlags$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("resetFlags"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ResetFlagsT resetFlags
+ * }
+ */
+ public static final GroupLayout resetFlags$layout() {
+ return resetFlags$LAYOUT;
}
- public static void samplesPerPkt$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DevParamsT.samplesPerPkt$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long resetFlags$OFFSET = 32;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ResetFlagsT resetFlags
+ * }
+ */
+ public static final long resetFlags$offset() {
+ return resetFlags$OFFSET;
}
- public static MemorySegment rsp1aParams$slice(MemorySegment seg) {
- return seg.asSlice(44, 2);
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ResetFlagsT resetFlags
+ * }
+ */
+ public static MemorySegment resetFlags(MemorySegment struct) {
+ return struct.asSlice(resetFlags$OFFSET, resetFlags$LAYOUT.byteSize());
}
- public static MemorySegment rsp2Params$slice(MemorySegment seg) {
- return seg.asSlice(46, 1);
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ResetFlagsT resetFlags
+ * }
+ */
+ public static void resetFlags(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, resetFlags$OFFSET, resetFlags$LAYOUT.byteSize());
}
- public static MemorySegment rspDuoParams$slice(MemorySegment seg) {
- return seg.asSlice(48, 4);
+
+ private static final OfInt mode$LAYOUT = (OfInt)$LAYOUT.select(groupElement("mode"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TransferModeT mode
+ * }
+ */
+ public static final OfInt mode$layout() {
+ return mode$LAYOUT;
}
- public static MemorySegment rspDxParams$slice(MemorySegment seg) {
- return seg.asSlice(52, 12);
+
+ private static final long mode$OFFSET = 36;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TransferModeT mode
+ * }
+ */
+ public static final long mode$offset() {
+ return mode$OFFSET;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TransferModeT mode
+ * }
+ */
+ public static int mode(MemorySegment struct) {
+ return struct.get(mode$LAYOUT, mode$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TransferModeT mode
+ * }
+ */
+ public static void mode(MemorySegment struct, int fieldValue) {
+ struct.set(mode$LAYOUT, mode$OFFSET, fieldValue);
+ }
+
+ private static final OfInt samplesPerPkt$LAYOUT = (OfInt)$LAYOUT.select(groupElement("samplesPerPkt"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int samplesPerPkt
+ * }
+ */
+ public static final OfInt samplesPerPkt$layout() {
+ return samplesPerPkt$LAYOUT;
+ }
+
+ private static final long samplesPerPkt$OFFSET = 40;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int samplesPerPkt
+ * }
+ */
+ public static final long samplesPerPkt$offset() {
+ return samplesPerPkt$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * unsigned int samplesPerPkt
+ * }
+ */
+ public static int samplesPerPkt(MemorySegment struct) {
+ return struct.get(samplesPerPkt$LAYOUT, samplesPerPkt$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * unsigned int samplesPerPkt
+ * }
+ */
+ public static void samplesPerPkt(MemorySegment struct, int fieldValue) {
+ struct.set(samplesPerPkt$LAYOUT, samplesPerPkt$OFFSET, fieldValue);
+ }
+
+ private static final GroupLayout rsp1aParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rsp1aParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aParamsT rsp1aParams
+ * }
+ */
+ public static final GroupLayout rsp1aParams$layout() {
+ return rsp1aParams$LAYOUT;
+ }
+
+ private static final long rsp1aParams$OFFSET = 44;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aParamsT rsp1aParams
+ * }
+ */
+ public static final long rsp1aParams$offset() {
+ return rsp1aParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aParamsT rsp1aParams
+ * }
+ */
+ public static MemorySegment rsp1aParams(MemorySegment struct) {
+ return struct.asSlice(rsp1aParams$OFFSET, rsp1aParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aParamsT rsp1aParams
+ * }
+ */
+ public static void rsp1aParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rsp1aParams$OFFSET, rsp1aParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rsp2Params$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rsp2Params"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2ParamsT rsp2Params
+ * }
+ */
+ public static final GroupLayout rsp2Params$layout() {
+ return rsp2Params$LAYOUT;
+ }
+
+ private static final long rsp2Params$OFFSET = 46;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2ParamsT rsp2Params
+ * }
+ */
+ public static final long rsp2Params$offset() {
+ return rsp2Params$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2ParamsT rsp2Params
+ * }
+ */
+ public static MemorySegment rsp2Params(MemorySegment struct) {
+ return struct.asSlice(rsp2Params$OFFSET, rsp2Params$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2ParamsT rsp2Params
+ * }
+ */
+ public static void rsp2Params(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rsp2Params$OFFSET, rsp2Params$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rspDuoParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rspDuoParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoParamsT rspDuoParams
+ * }
+ */
+ public static final GroupLayout rspDuoParams$layout() {
+ return rspDuoParams$LAYOUT;
+ }
+
+ private static final long rspDuoParams$OFFSET = 48;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoParamsT rspDuoParams
+ * }
+ */
+ public static final long rspDuoParams$offset() {
+ return rspDuoParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoParamsT rspDuoParams
+ * }
+ */
+ public static MemorySegment rspDuoParams(MemorySegment struct) {
+ return struct.asSlice(rspDuoParams$OFFSET, rspDuoParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoParamsT rspDuoParams
+ * }
+ */
+ public static void rspDuoParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rspDuoParams$OFFSET, rspDuoParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rspDxParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rspDxParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxParamsT rspDxParams
+ * }
+ */
+ public static final GroupLayout rspDxParams$layout() {
+ return rspDxParams$LAYOUT;
+ }
+
+ private static final long rspDxParams$OFFSET = 52;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxParamsT rspDxParams
+ * }
+ */
+ public static final long rspDxParams$offset() {
+ return rspDxParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxParamsT rspDxParams
+ * }
+ */
+ public static MemorySegment rspDxParams(MemorySegment struct) {
+ return struct.asSlice(rspDxParams$OFFSET, rspDxParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxParamsT rspDxParams
+ * }
+ */
+ public static void rspDxParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rspDxParams$OFFSET, rspDxParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DeviceParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DeviceParamsT.java
index f9e872f5..bda26c2b 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DeviceParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DeviceParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.AddressLayout;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
- * sdrplay_api_DevParamsT* devParams;
- * sdrplay_api_RxChannelParamsT* rxChannelA;
- * sdrplay_api_RxChannelParamsT* rxChannelB;
- * };
+ * sdrplay_api_DevParamsT *devParams;
+ * sdrplay_api_RxChannelParamsT *rxChannelA;
+ * sdrplay_api_RxChannelParamsT *rxChannelB;
+ * }
* }
*/
public class sdrplay_api_DeviceParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_POINTER$LAYOUT.withName("devParams"),
- Constants$root.C_POINTER$LAYOUT.withName("rxChannelA"),
- Constants$root.C_POINTER$LAYOUT.withName("rxChannelB")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DeviceParamsT.$struct$LAYOUT;
+ sdrplay_api_DeviceParamsT() {
+ // Should not be called directly
}
- static final VarHandle devParams$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("devParams"));
- public static VarHandle devParams$VH() {
- return sdrplay_api_DeviceParamsT.devParams$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_POINTER.withName("devParams"),
+ sdrplay_api_h.C_POINTER.withName("rxChannelA"),
+ sdrplay_api_h.C_POINTER.withName("rxChannelB")
+ ).withName("$anon$153:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final AddressLayout devParams$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("devParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DevParamsT *devParams
+ * }
+ */
+ public static final AddressLayout devParams$layout() {
+ return devParams$LAYOUT;
+ }
+
+ private static final long devParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DevParamsT *devParams
+ * }
+ */
+ public static final long devParams$offset() {
+ return devParams$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_DevParamsT* devParams;
+ * {@snippet lang=c :
+ * sdrplay_api_DevParamsT *devParams
* }
*/
- public static MemorySegment devParams$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.devParams$VH.get(seg);
+ public static MemorySegment devParams(MemorySegment struct) {
+ return struct.get(devParams$LAYOUT, devParams$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_DevParamsT* devParams;
+ * {@snippet lang=c :
+ * sdrplay_api_DevParamsT *devParams
* }
*/
- public static void devParams$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_DeviceParamsT.devParams$VH.set(seg, x);
+ public static void devParams(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(devParams$LAYOUT, devParams$OFFSET, fieldValue);
}
- public static MemorySegment devParams$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.devParams$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout rxChannelA$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("rxChannelA"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelA
+ * }
+ */
+ public static final AddressLayout rxChannelA$layout() {
+ return rxChannelA$LAYOUT;
}
- public static void devParams$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_DeviceParamsT.devParams$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rxChannelA$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rxChannelA"));
- public static VarHandle rxChannelA$VH() {
- return sdrplay_api_DeviceParamsT.rxChannelA$VH;
+
+ private static final long rxChannelA$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelA
+ * }
+ */
+ public static final long rxChannelA$offset() {
+ return rxChannelA$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RxChannelParamsT* rxChannelA;
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelA
* }
*/
- public static MemorySegment rxChannelA$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.rxChannelA$VH.get(seg);
+ public static MemorySegment rxChannelA(MemorySegment struct) {
+ return struct.get(rxChannelA$LAYOUT, rxChannelA$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RxChannelParamsT* rxChannelA;
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelA
* }
*/
- public static void rxChannelA$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_DeviceParamsT.rxChannelA$VH.set(seg, x);
+ public static void rxChannelA(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(rxChannelA$LAYOUT, rxChannelA$OFFSET, fieldValue);
}
- public static MemorySegment rxChannelA$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.rxChannelA$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout rxChannelB$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("rxChannelB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelB
+ * }
+ */
+ public static final AddressLayout rxChannelB$layout() {
+ return rxChannelB$LAYOUT;
}
- public static void rxChannelA$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_DeviceParamsT.rxChannelA$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rxChannelB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rxChannelB"));
- public static VarHandle rxChannelB$VH() {
- return sdrplay_api_DeviceParamsT.rxChannelB$VH;
+
+ private static final long rxChannelB$OFFSET = 16;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelB
+ * }
+ */
+ public static final long rxChannelB$offset() {
+ return rxChannelB$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RxChannelParamsT* rxChannelB;
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelB
* }
*/
- public static MemorySegment rxChannelB$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.rxChannelB$VH.get(seg);
+ public static MemorySegment rxChannelB(MemorySegment struct) {
+ return struct.get(rxChannelB$LAYOUT, rxChannelB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RxChannelParamsT* rxChannelB;
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelB
* }
*/
- public static void rxChannelB$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_DeviceParamsT.rxChannelB$VH.set(seg, x);
+ public static void rxChannelB(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(rxChannelB$LAYOUT, rxChannelB$OFFSET, fieldValue);
}
- public static MemorySegment rxChannelB$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.rxChannelB$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void rxChannelB$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_DeviceParamsT.rxChannelB$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DeviceT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DeviceT.java
index a4d68f06..b7a5b39b 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DeviceT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DeviceT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,15 +21,24 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.AddressLayout;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
+import java.lang.foreign.SequenceLayout;
import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.MemoryLayout.PathElement.sequenceElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfDouble;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* char SerNo[64];
* unsigned char hwVer;
@@ -37,173 +46,372 @@ import java.lang.invoke.VarHandle;
* sdrplay_api_RspDuoModeT rspDuoMode;
* double rspDuoSampleFreq;
* HANDLE dev;
- * };
+ * }
* }
*/
public class sdrplay_api_DeviceT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- MemoryLayout.sequenceLayout(64, Constants$root.C_CHAR$LAYOUT).withName("SerNo"),
- Constants$root.C_CHAR$LAYOUT.withName("hwVer"),
- MemoryLayout.paddingLayout(24),
- Constants$root.C_INT$LAYOUT.withName("tuner"),
- Constants$root.C_INT$LAYOUT.withName("rspDuoMode"),
- MemoryLayout.paddingLayout(32),
- Constants$root.C_DOUBLE$LAYOUT.withName("rspDuoSampleFreq"),
- Constants$root.C_POINTER$LAYOUT.withName("dev")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DeviceT.$struct$LAYOUT;
+ sdrplay_api_DeviceT() {
+ // Should not be called directly
}
- public static MemorySegment SerNo$slice(MemorySegment seg) {
- return seg.asSlice(0, 64);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ MemoryLayout.sequenceLayout(64, sdrplay_api_h.C_CHAR).withName("SerNo"),
+ sdrplay_api_h.C_CHAR.withName("hwVer"),
+ MemoryLayout.paddingLayout(3),
+ sdrplay_api_h.C_INT.withName("tuner"),
+ sdrplay_api_h.C_INT.withName("rspDuoMode"),
+ MemoryLayout.paddingLayout(4),
+ sdrplay_api_h.C_DOUBLE.withName("rspDuoSampleFreq"),
+ sdrplay_api_h.C_POINTER.withName("dev")
+ ).withName("$anon$142:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- static final VarHandle hwVer$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("hwVer"));
- public static VarHandle hwVer$VH() {
- return sdrplay_api_DeviceT.hwVer$VH;
+
+ private static final SequenceLayout SerNo$LAYOUT = (SequenceLayout)$LAYOUT.select(groupElement("SerNo"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static final SequenceLayout SerNo$layout() {
+ return SerNo$LAYOUT;
}
+
+ private static final long SerNo$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static final long SerNo$offset() {
+ return SerNo$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char hwVer;
+ * {@snippet lang=c :
+ * char SerNo[64]
* }
*/
- public static byte hwVer$get(MemorySegment seg) {
- return (byte)sdrplay_api_DeviceT.hwVer$VH.get(seg);
+ public static MemorySegment SerNo(MemorySegment struct) {
+ return struct.asSlice(SerNo$OFFSET, SerNo$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char hwVer;
+ * {@snippet lang=c :
+ * char SerNo[64]
* }
*/
- public static void hwVer$set(MemorySegment seg, byte x) {
- sdrplay_api_DeviceT.hwVer$VH.set(seg, x);
+ public static void SerNo(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, SerNo$OFFSET, SerNo$LAYOUT.byteSize());
}
- public static byte hwVer$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DeviceT.hwVer$VH.get(seg.asSlice(index*sizeof()));
+
+ private static long[] SerNo$DIMS = { 64 };
+
+ /**
+ * Dimensions for array field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static long[] SerNo$dimensions() {
+ return SerNo$DIMS;
}
- public static void hwVer$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DeviceT.hwVer$VH.set(seg.asSlice(index*sizeof()), x);
+ private static final VarHandle SerNo$ELEM_HANDLE = SerNo$LAYOUT.varHandle(sequenceElement());
+
+ /**
+ * Indexed getter for field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static byte SerNo(MemorySegment struct, long index0) {
+ return (byte)SerNo$ELEM_HANDLE.get(struct, 0L, index0);
}
- static final VarHandle tuner$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("tuner"));
- public static VarHandle tuner$VH() {
- return sdrplay_api_DeviceT.tuner$VH;
+
+ /**
+ * Indexed setter for field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static void SerNo(MemorySegment struct, long index0, byte fieldValue) {
+ SerNo$ELEM_HANDLE.set(struct, 0L, index0, fieldValue);
}
+
+ private static final OfByte hwVer$LAYOUT = (OfByte)$LAYOUT.select(groupElement("hwVer"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char hwVer
+ * }
+ */
+ public static final OfByte hwVer$layout() {
+ return hwVer$LAYOUT;
+ }
+
+ private static final long hwVer$OFFSET = 64;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char hwVer
+ * }
+ */
+ public static final long hwVer$offset() {
+ return hwVer$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_TunerSelectT tuner;
+ * {@snippet lang=c :
+ * unsigned char hwVer
* }
*/
- public static int tuner$get(MemorySegment seg) {
- return (int)sdrplay_api_DeviceT.tuner$VH.get(seg);
+ public static byte hwVer(MemorySegment struct) {
+ return struct.get(hwVer$LAYOUT, hwVer$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_TunerSelectT tuner;
+ * {@snippet lang=c :
+ * unsigned char hwVer
* }
*/
- public static void tuner$set(MemorySegment seg, int x) {
- sdrplay_api_DeviceT.tuner$VH.set(seg, x);
+ public static void hwVer(MemorySegment struct, byte fieldValue) {
+ struct.set(hwVer$LAYOUT, hwVer$OFFSET, fieldValue);
}
- public static int tuner$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DeviceT.tuner$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt tuner$LAYOUT = (OfInt)$LAYOUT.select(groupElement("tuner"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TunerSelectT tuner
+ * }
+ */
+ public static final OfInt tuner$layout() {
+ return tuner$LAYOUT;
}
- public static void tuner$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DeviceT.tuner$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rspDuoMode$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rspDuoMode"));
- public static VarHandle rspDuoMode$VH() {
- return sdrplay_api_DeviceT.rspDuoMode$VH;
+
+ private static final long tuner$OFFSET = 68;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TunerSelectT tuner
+ * }
+ */
+ public static final long tuner$offset() {
+ return tuner$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RspDuoModeT rspDuoMode;
+ * {@snippet lang=c :
+ * sdrplay_api_TunerSelectT tuner
* }
*/
- public static int rspDuoMode$get(MemorySegment seg) {
- return (int)sdrplay_api_DeviceT.rspDuoMode$VH.get(seg);
+ public static int tuner(MemorySegment struct) {
+ return struct.get(tuner$LAYOUT, tuner$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RspDuoModeT rspDuoMode;
+ * {@snippet lang=c :
+ * sdrplay_api_TunerSelectT tuner
* }
*/
- public static void rspDuoMode$set(MemorySegment seg, int x) {
- sdrplay_api_DeviceT.rspDuoMode$VH.set(seg, x);
+ public static void tuner(MemorySegment struct, int fieldValue) {
+ struct.set(tuner$LAYOUT, tuner$OFFSET, fieldValue);
}
- public static int rspDuoMode$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DeviceT.rspDuoMode$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt rspDuoMode$LAYOUT = (OfInt)$LAYOUT.select(groupElement("rspDuoMode"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeT rspDuoMode
+ * }
+ */
+ public static final OfInt rspDuoMode$layout() {
+ return rspDuoMode$LAYOUT;
}
- public static void rspDuoMode$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DeviceT.rspDuoMode$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rspDuoSampleFreq$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rspDuoSampleFreq"));
- public static VarHandle rspDuoSampleFreq$VH() {
- return sdrplay_api_DeviceT.rspDuoSampleFreq$VH;
+
+ private static final long rspDuoMode$OFFSET = 72;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeT rspDuoMode
+ * }
+ */
+ public static final long rspDuoMode$offset() {
+ return rspDuoMode$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * double rspDuoSampleFreq;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeT rspDuoMode
* }
*/
- public static double rspDuoSampleFreq$get(MemorySegment seg) {
- return (double)sdrplay_api_DeviceT.rspDuoSampleFreq$VH.get(seg);
+ public static int rspDuoMode(MemorySegment struct) {
+ return struct.get(rspDuoMode$LAYOUT, rspDuoMode$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double rspDuoSampleFreq;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeT rspDuoMode
* }
*/
- public static void rspDuoSampleFreq$set(MemorySegment seg, double x) {
- sdrplay_api_DeviceT.rspDuoSampleFreq$VH.set(seg, x);
+ public static void rspDuoMode(MemorySegment struct, int fieldValue) {
+ struct.set(rspDuoMode$LAYOUT, rspDuoMode$OFFSET, fieldValue);
}
- public static double rspDuoSampleFreq$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_DeviceT.rspDuoSampleFreq$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfDouble rspDuoSampleFreq$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("rspDuoSampleFreq"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double rspDuoSampleFreq
+ * }
+ */
+ public static final OfDouble rspDuoSampleFreq$layout() {
+ return rspDuoSampleFreq$LAYOUT;
}
- public static void rspDuoSampleFreq$set(MemorySegment seg, long index, double x) {
- sdrplay_api_DeviceT.rspDuoSampleFreq$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle dev$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("dev"));
- public static VarHandle dev$VH() {
- return sdrplay_api_DeviceT.dev$VH;
+
+ private static final long rspDuoSampleFreq$OFFSET = 80;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double rspDuoSampleFreq
+ * }
+ */
+ public static final long rspDuoSampleFreq$offset() {
+ return rspDuoSampleFreq$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * HANDLE dev;
+ * {@snippet lang=c :
+ * double rspDuoSampleFreq
* }
*/
- public static MemorySegment dev$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceT.dev$VH.get(seg);
+ public static double rspDuoSampleFreq(MemorySegment struct) {
+ return struct.get(rspDuoSampleFreq$LAYOUT, rspDuoSampleFreq$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * HANDLE dev;
+ * {@snippet lang=c :
+ * double rspDuoSampleFreq
* }
*/
- public static void dev$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_DeviceT.dev$VH.set(seg, x);
+ public static void rspDuoSampleFreq(MemorySegment struct, double fieldValue) {
+ struct.set(rspDuoSampleFreq$LAYOUT, rspDuoSampleFreq$OFFSET, fieldValue);
}
- public static MemorySegment dev$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceT.dev$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout dev$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("dev"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * HANDLE dev
+ * }
+ */
+ public static final AddressLayout dev$layout() {
+ return dev$LAYOUT;
}
- public static void dev$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_DeviceT.dev$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long dev$OFFSET = 88;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * HANDLE dev
+ * }
+ */
+ public static final long dev$offset() {
+ return dev$OFFSET;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * HANDLE dev
+ * }
+ */
+ public static MemorySegment dev(MemorySegment struct) {
+ return struct.get(dev$LAYOUT, dev$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * HANDLE dev
+ * }
+ */
+ public static void dev(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(dev$LAYOUT, dev$OFFSET, fieldValue);
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DisableHeartbeat_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DisableHeartbeat_t.java
index 31c651a2..ecde690b 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DisableHeartbeat_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_DisableHeartbeat_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,61 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_DisableHeartbeat_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_DisableHeartbeat_t)(void)
* }
*/
-public interface sdrplay_api_DisableHeartbeat_t {
+public class sdrplay_api_DisableHeartbeat_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_DisableHeartbeat_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$4.sdrplay_api_DisableHeartbeat_t_UP$MH, fi, constants$4.sdrplay_api_DisableHeartbeat_t$FUNC, scope);
+ sdrplay_api_DisableHeartbeat_t() {
+ // Should not be called directly
}
- static sdrplay_api_DisableHeartbeat_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$4.sdrplay_api_DisableHeartbeat_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_DisableHeartbeat_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_DisableHeartbeat_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ErrorInfoT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ErrorInfoT.java
index 3b15c34d..ac3725a4 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ErrorInfoT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ErrorInfoT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,77 +21,366 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
+import java.lang.foreign.SequenceLayout;
import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.MemoryLayout.PathElement.sequenceElement;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* char file[256];
* char function[256];
* int line;
* char message[1024];
- * };
+ * }
* }
*/
public class sdrplay_api_ErrorInfoT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- MemoryLayout.sequenceLayout(256, Constants$root.C_CHAR$LAYOUT).withName("file"),
- MemoryLayout.sequenceLayout(256, Constants$root.C_CHAR$LAYOUT).withName("function"),
- Constants$root.C_INT$LAYOUT.withName("line"),
- MemoryLayout.sequenceLayout(1024, Constants$root.C_CHAR$LAYOUT).withName("message")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_ErrorInfoT.$struct$LAYOUT;
+ sdrplay_api_ErrorInfoT() {
+ // Should not be called directly
}
- public static MemorySegment file$slice(MemorySegment seg) {
- return seg.asSlice(0, 256);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ MemoryLayout.sequenceLayout(256, sdrplay_api_h.C_CHAR).withName("file"),
+ MemoryLayout.sequenceLayout(256, sdrplay_api_h.C_CHAR).withName("function"),
+ sdrplay_api_h.C_INT.withName("line"),
+ MemoryLayout.sequenceLayout(1024, sdrplay_api_h.C_CHAR).withName("message")
+ ).withName("$anon$161:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- public static MemorySegment function$slice(MemorySegment seg) {
- return seg.asSlice(256, 256);
+
+ private static final SequenceLayout file$LAYOUT = (SequenceLayout)$LAYOUT.select(groupElement("file"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static final SequenceLayout file$layout() {
+ return file$LAYOUT;
}
- static final VarHandle line$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("line"));
- public static VarHandle line$VH() {
- return sdrplay_api_ErrorInfoT.line$VH;
+
+ private static final long file$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static final long file$offset() {
+ return file$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int line;
+ * {@snippet lang=c :
+ * char file[256]
* }
*/
- public static int line$get(MemorySegment seg) {
- return (int)sdrplay_api_ErrorInfoT.line$VH.get(seg);
+ public static MemorySegment file(MemorySegment struct) {
+ return struct.asSlice(file$OFFSET, file$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * int line;
+ * {@snippet lang=c :
+ * char file[256]
* }
*/
- public static void line$set(MemorySegment seg, int x) {
- sdrplay_api_ErrorInfoT.line$VH.set(seg, x);
+ public static void file(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, file$OFFSET, file$LAYOUT.byteSize());
}
- public static int line$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_ErrorInfoT.line$VH.get(seg.asSlice(index*sizeof()));
+
+ private static long[] file$DIMS = { 256 };
+
+ /**
+ * Dimensions for array field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static long[] file$dimensions() {
+ return file$DIMS;
}
- public static void line$set(MemorySegment seg, long index, int x) {
- sdrplay_api_ErrorInfoT.line$VH.set(seg.asSlice(index*sizeof()), x);
+ private static final VarHandle file$ELEM_HANDLE = file$LAYOUT.varHandle(sequenceElement());
+
+ /**
+ * Indexed getter for field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static byte file(MemorySegment struct, long index0) {
+ return (byte)file$ELEM_HANDLE.get(struct, 0L, index0);
}
- public static MemorySegment message$slice(MemorySegment seg) {
- return seg.asSlice(516, 1024);
+
+ /**
+ * Indexed setter for field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static void file(MemorySegment struct, long index0, byte fieldValue) {
+ file$ELEM_HANDLE.set(struct, 0L, index0, fieldValue);
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ private static final SequenceLayout function$LAYOUT = (SequenceLayout)$LAYOUT.select(groupElement("function"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static final SequenceLayout function$layout() {
+ return function$LAYOUT;
+ }
+
+ private static final long function$OFFSET = 256;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static final long function$offset() {
+ return function$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static MemorySegment function(MemorySegment struct) {
+ return struct.asSlice(function$OFFSET, function$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static void function(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, function$OFFSET, function$LAYOUT.byteSize());
+ }
+
+ private static long[] function$DIMS = { 256 };
+
+ /**
+ * Dimensions for array field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static long[] function$dimensions() {
+ return function$DIMS;
+ }
+ private static final VarHandle function$ELEM_HANDLE = function$LAYOUT.varHandle(sequenceElement());
+
+ /**
+ * Indexed getter for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static byte function(MemorySegment struct, long index0) {
+ return (byte)function$ELEM_HANDLE.get(struct, 0L, index0);
+ }
+
+ /**
+ * Indexed setter for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static void function(MemorySegment struct, long index0, byte fieldValue) {
+ function$ELEM_HANDLE.set(struct, 0L, index0, fieldValue);
+ }
+
+ private static final OfInt line$LAYOUT = (OfInt)$LAYOUT.select(groupElement("line"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int line
+ * }
+ */
+ public static final OfInt line$layout() {
+ return line$LAYOUT;
+ }
+
+ private static final long line$OFFSET = 512;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int line
+ * }
+ */
+ public static final long line$offset() {
+ return line$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * int line
+ * }
+ */
+ public static int line(MemorySegment struct) {
+ return struct.get(line$LAYOUT, line$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * int line
+ * }
+ */
+ public static void line(MemorySegment struct, int fieldValue) {
+ struct.set(line$LAYOUT, line$OFFSET, fieldValue);
+ }
+
+ private static final SequenceLayout message$LAYOUT = (SequenceLayout)$LAYOUT.select(groupElement("message"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static final SequenceLayout message$layout() {
+ return message$LAYOUT;
+ }
+
+ private static final long message$OFFSET = 516;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static final long message$offset() {
+ return message$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static MemorySegment message(MemorySegment struct) {
+ return struct.asSlice(message$OFFSET, message$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static void message(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, message$OFFSET, message$LAYOUT.byteSize());
+ }
+
+ private static long[] message$DIMS = { 1024 };
+
+ /**
+ * Dimensions for array field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static long[] message$dimensions() {
+ return message$DIMS;
+ }
+ private static final VarHandle message$ELEM_HANDLE = message$LAYOUT.varHandle(sequenceElement());
+
+ /**
+ * Indexed getter for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static byte message(MemorySegment struct, long index0) {
+ return (byte)message$ELEM_HANDLE.get(struct, 0L, index0);
+ }
+
+ /**
+ * Indexed setter for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static void message(MemorySegment struct, long index0, byte fieldValue) {
+ message$ELEM_HANDLE.set(struct, 0L, index0, fieldValue);
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_EventCallback_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_EventCallback_t.java
index f1b92479..5f0d31a3 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_EventCallback_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_EventCallback_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,65 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * void (*sdrplay_api_EventCallback_t)(enum eventId,enum tuner,union * params,void* cbContext);
+ * {@snippet lang=c :
+ * typedef void (*sdrplay_api_EventCallback_t)(sdrplay_api_EventT, sdrplay_api_TunerSelectT, sdrplay_api_EventParamsT *, void *)
* }
*/
-public interface sdrplay_api_EventCallback_t {
+public class sdrplay_api_EventCallback_t {
- void apply(int eventId, int tuner, java.lang.foreign.MemorySegment params, java.lang.foreign.MemorySegment cbContext);
- static MemorySegment allocate(sdrplay_api_EventCallback_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$0.sdrplay_api_EventCallback_t_UP$MH, fi, constants$0.sdrplay_api_EventCallback_t$FUNC, scope);
+ sdrplay_api_EventCallback_t() {
+ // Should not be called directly
}
- static sdrplay_api_EventCallback_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (int _eventId, int _tuner, java.lang.foreign.MemorySegment _params, java.lang.foreign.MemorySegment _cbContext) -> {
- try {
- constants$0.sdrplay_api_EventCallback_t_DOWN$MH.invokeExact(symbol, _eventId, _tuner, _params, _cbContext);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ void apply(int eventId, int tuner, MemorySegment params, MemorySegment cbContext);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.ofVoid(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_EventCallback_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_EventCallback_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static void invoke(MemorySegment funcPtr,int eventId, int tuner, MemorySegment params, MemorySegment cbContext) {
+ try {
+ DOWN$MH.invokeExact(funcPtr, eventId, tuner, params, cbContext);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_EventParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_EventParamsT.java
index 2172ce88..ca131745 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_EventParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_EventParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,54 +21,217 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.UnionLayout;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
/**
- * {@snippet :
+ * {@snippet lang=c :
* union {
* sdrplay_api_GainCbParamT gainParams;
* sdrplay_api_PowerOverloadCbParamT powerOverloadParams;
* sdrplay_api_RspDuoModeCbParamT rspDuoModeParams;
- * };
+ * }
* }
*/
public class sdrplay_api_EventParamsT {
- static final UnionLayout $union$LAYOUT = MemoryLayout.unionLayout(
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("gRdB"),
- Constants$root.C_INT$LAYOUT.withName("lnaGRdB"),
- Constants$root.C_DOUBLE$LAYOUT.withName("currGain")
- ).withName("gainParams"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("powerOverloadChangeType")
- ).withName("powerOverloadParams"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("modeChangeType")
- ).withName("rspDuoModeParams")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_EventParamsT.$union$LAYOUT;
+ sdrplay_api_EventParamsT() {
+ // Should not be called directly
}
- public static MemorySegment gainParams$slice(MemorySegment seg) {
- return seg.asSlice(0, 16);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.unionLayout(
+ sdrplay_api_GainCbParamT.layout().withName("gainParams"),
+ sdrplay_api_PowerOverloadCbParamT.layout().withName("powerOverloadParams"),
+ sdrplay_api_RspDuoModeCbParamT.layout().withName("rspDuoModeParams")
+ ).withName("$anon$49:9");
+
+ /**
+ * The layout of this union
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- public static MemorySegment powerOverloadParams$slice(MemorySegment seg) {
- return seg.asSlice(0, 4);
+
+ private static final GroupLayout gainParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("gainParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainCbParamT gainParams
+ * }
+ */
+ public static final GroupLayout gainParams$layout() {
+ return gainParams$LAYOUT;
}
- public static MemorySegment rspDuoModeParams$slice(MemorySegment seg) {
- return seg.asSlice(0, 4);
+
+ private static final long gainParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainCbParamT gainParams
+ * }
+ */
+ public static final long gainParams$offset() {
+ return gainParams$OFFSET;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainCbParamT gainParams
+ * }
+ */
+ public static MemorySegment gainParams(MemorySegment union) {
+ return union.asSlice(gainParams$OFFSET, gainParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainCbParamT gainParams
+ * }
+ */
+ public static void gainParams(MemorySegment union, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, union, gainParams$OFFSET, gainParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout powerOverloadParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("powerOverloadParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbParamT powerOverloadParams
+ * }
+ */
+ public static final GroupLayout powerOverloadParams$layout() {
+ return powerOverloadParams$LAYOUT;
+ }
+
+ private static final long powerOverloadParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbParamT powerOverloadParams
+ * }
+ */
+ public static final long powerOverloadParams$offset() {
+ return powerOverloadParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbParamT powerOverloadParams
+ * }
+ */
+ public static MemorySegment powerOverloadParams(MemorySegment union) {
+ return union.asSlice(powerOverloadParams$OFFSET, powerOverloadParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbParamT powerOverloadParams
+ * }
+ */
+ public static void powerOverloadParams(MemorySegment union, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, union, powerOverloadParams$OFFSET, powerOverloadParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rspDuoModeParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rspDuoModeParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbParamT rspDuoModeParams
+ * }
+ */
+ public static final GroupLayout rspDuoModeParams$layout() {
+ return rspDuoModeParams$LAYOUT;
+ }
+
+ private static final long rspDuoModeParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbParamT rspDuoModeParams
+ * }
+ */
+ public static final long rspDuoModeParams$offset() {
+ return rspDuoModeParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbParamT rspDuoModeParams
+ * }
+ */
+ public static MemorySegment rspDuoModeParams(MemorySegment union) {
+ return union.asSlice(rspDuoModeParams$OFFSET, rspDuoModeParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbParamT rspDuoModeParams
+ * }
+ */
+ public static void rspDuoModeParams(MemorySegment union, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, union, rspDuoModeParams$OFFSET, rspDuoModeParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this union
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_FsFreqT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_FsFreqT.java
index 92ba1bc9..d2e84540 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_FsFreqT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_FsFreqT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,123 +21,220 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfDouble;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* double fsHz;
* unsigned char syncUpdate;
* unsigned char reCal;
- * };
+ * }
* }
*/
public class sdrplay_api_FsFreqT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("fsHz"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("reCal"),
- MemoryLayout.paddingLayout(48)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_FsFreqT.$struct$LAYOUT;
+ sdrplay_api_FsFreqT() {
+ // Should not be called directly
}
- static final VarHandle fsHz$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("fsHz"));
- public static VarHandle fsHz$VH() {
- return sdrplay_api_FsFreqT.fsHz$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_DOUBLE.withName("fsHz"),
+ sdrplay_api_h.C_CHAR.withName("syncUpdate"),
+ sdrplay_api_h.C_CHAR.withName("reCal"),
+ MemoryLayout.paddingLayout(6)
+ ).withName("$anon$17:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfDouble fsHz$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("fsHz"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double fsHz
+ * }
+ */
+ public static final OfDouble fsHz$layout() {
+ return fsHz$LAYOUT;
+ }
+
+ private static final long fsHz$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double fsHz
+ * }
+ */
+ public static final long fsHz$offset() {
+ return fsHz$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * double fsHz;
+ * {@snippet lang=c :
+ * double fsHz
* }
*/
- public static double fsHz$get(MemorySegment seg) {
- return (double)sdrplay_api_FsFreqT.fsHz$VH.get(seg);
+ public static double fsHz(MemorySegment struct) {
+ return struct.get(fsHz$LAYOUT, fsHz$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double fsHz;
+ * {@snippet lang=c :
+ * double fsHz
* }
*/
- public static void fsHz$set(MemorySegment seg, double x) {
- sdrplay_api_FsFreqT.fsHz$VH.set(seg, x);
+ public static void fsHz(MemorySegment struct, double fieldValue) {
+ struct.set(fsHz$LAYOUT, fsHz$OFFSET, fieldValue);
}
- public static double fsHz$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_FsFreqT.fsHz$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte syncUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final OfByte syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void fsHz$set(MemorySegment seg, long index, double x) {
- sdrplay_api_FsFreqT.fsHz$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle syncUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("syncUpdate"));
- public static VarHandle syncUpdate$VH() {
- return sdrplay_api_FsFreqT.syncUpdate$VH;
+
+ private static final long syncUpdate$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static byte syncUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_FsFreqT.syncUpdate$VH.get(seg);
+ public static byte syncUpdate(MemorySegment struct) {
+ return struct.get(syncUpdate$LAYOUT, syncUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static void syncUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_FsFreqT.syncUpdate$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(syncUpdate$LAYOUT, syncUpdate$OFFSET, fieldValue);
}
- public static byte syncUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_FsFreqT.syncUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte reCal$LAYOUT = (OfByte)$LAYOUT.select(groupElement("reCal"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char reCal
+ * }
+ */
+ public static final OfByte reCal$layout() {
+ return reCal$LAYOUT;
}
- public static void syncUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_FsFreqT.syncUpdate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle reCal$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("reCal"));
- public static VarHandle reCal$VH() {
- return sdrplay_api_FsFreqT.reCal$VH;
+
+ private static final long reCal$OFFSET = 9;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char reCal
+ * }
+ */
+ public static final long reCal$offset() {
+ return reCal$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char reCal;
+ * {@snippet lang=c :
+ * unsigned char reCal
* }
*/
- public static byte reCal$get(MemorySegment seg) {
- return (byte)sdrplay_api_FsFreqT.reCal$VH.get(seg);
+ public static byte reCal(MemorySegment struct) {
+ return struct.get(reCal$LAYOUT, reCal$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char reCal;
+ * {@snippet lang=c :
+ * unsigned char reCal
* }
*/
- public static void reCal$set(MemorySegment seg, byte x) {
- sdrplay_api_FsFreqT.reCal$VH.set(seg, x);
+ public static void reCal(MemorySegment struct, byte fieldValue) {
+ struct.set(reCal$LAYOUT, reCal$OFFSET, fieldValue);
}
- public static byte reCal$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_FsFreqT.reCal$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void reCal$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_FsFreqT.reCal$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainCbParamT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainCbParamT.java
index 4858d523..1b3c7e75 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainCbParamT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainCbParamT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,219 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfDouble;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned int gRdB;
* unsigned int lnaGRdB;
* double currGain;
- * };
+ * }
* }
*/
public class sdrplay_api_GainCbParamT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("gRdB"),
- Constants$root.C_INT$LAYOUT.withName("lnaGRdB"),
- Constants$root.C_DOUBLE$LAYOUT.withName("currGain")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_GainCbParamT.$struct$LAYOUT;
+ sdrplay_api_GainCbParamT() {
+ // Should not be called directly
}
- static final VarHandle gRdB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("gRdB"));
- public static VarHandle gRdB$VH() {
- return sdrplay_api_GainCbParamT.gRdB$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("gRdB"),
+ sdrplay_api_h.C_INT.withName("lnaGRdB"),
+ sdrplay_api_h.C_DOUBLE.withName("currGain")
+ ).withName("$anon$31:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt gRdB$LAYOUT = (OfInt)$LAYOUT.select(groupElement("gRdB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int gRdB
+ * }
+ */
+ public static final OfInt gRdB$layout() {
+ return gRdB$LAYOUT;
+ }
+
+ private static final long gRdB$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int gRdB
+ * }
+ */
+ public static final long gRdB$offset() {
+ return gRdB$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int gRdB;
+ * {@snippet lang=c :
+ * unsigned int gRdB
* }
*/
- public static int gRdB$get(MemorySegment seg) {
- return (int)sdrplay_api_GainCbParamT.gRdB$VH.get(seg);
+ public static int gRdB(MemorySegment struct) {
+ return struct.get(gRdB$LAYOUT, gRdB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int gRdB;
+ * {@snippet lang=c :
+ * unsigned int gRdB
* }
*/
- public static void gRdB$set(MemorySegment seg, int x) {
- sdrplay_api_GainCbParamT.gRdB$VH.set(seg, x);
+ public static void gRdB(MemorySegment struct, int fieldValue) {
+ struct.set(gRdB$LAYOUT, gRdB$OFFSET, fieldValue);
}
- public static int gRdB$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_GainCbParamT.gRdB$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt lnaGRdB$LAYOUT = (OfInt)$LAYOUT.select(groupElement("lnaGRdB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int lnaGRdB
+ * }
+ */
+ public static final OfInt lnaGRdB$layout() {
+ return lnaGRdB$LAYOUT;
}
- public static void gRdB$set(MemorySegment seg, long index, int x) {
- sdrplay_api_GainCbParamT.gRdB$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle lnaGRdB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("lnaGRdB"));
- public static VarHandle lnaGRdB$VH() {
- return sdrplay_api_GainCbParamT.lnaGRdB$VH;
+
+ private static final long lnaGRdB$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int lnaGRdB
+ * }
+ */
+ public static final long lnaGRdB$offset() {
+ return lnaGRdB$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int lnaGRdB;
+ * {@snippet lang=c :
+ * unsigned int lnaGRdB
* }
*/
- public static int lnaGRdB$get(MemorySegment seg) {
- return (int)sdrplay_api_GainCbParamT.lnaGRdB$VH.get(seg);
+ public static int lnaGRdB(MemorySegment struct) {
+ return struct.get(lnaGRdB$LAYOUT, lnaGRdB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int lnaGRdB;
+ * {@snippet lang=c :
+ * unsigned int lnaGRdB
* }
*/
- public static void lnaGRdB$set(MemorySegment seg, int x) {
- sdrplay_api_GainCbParamT.lnaGRdB$VH.set(seg, x);
+ public static void lnaGRdB(MemorySegment struct, int fieldValue) {
+ struct.set(lnaGRdB$LAYOUT, lnaGRdB$OFFSET, fieldValue);
}
- public static int lnaGRdB$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_GainCbParamT.lnaGRdB$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfDouble currGain$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("currGain"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double currGain
+ * }
+ */
+ public static final OfDouble currGain$layout() {
+ return currGain$LAYOUT;
}
- public static void lnaGRdB$set(MemorySegment seg, long index, int x) {
- sdrplay_api_GainCbParamT.lnaGRdB$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle currGain$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("currGain"));
- public static VarHandle currGain$VH() {
- return sdrplay_api_GainCbParamT.currGain$VH;
+
+ private static final long currGain$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double currGain
+ * }
+ */
+ public static final long currGain$offset() {
+ return currGain$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * double currGain;
+ * {@snippet lang=c :
+ * double currGain
* }
*/
- public static double currGain$get(MemorySegment seg) {
- return (double)sdrplay_api_GainCbParamT.currGain$VH.get(seg);
+ public static double currGain(MemorySegment struct) {
+ return struct.get(currGain$LAYOUT, currGain$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double currGain;
+ * {@snippet lang=c :
+ * double currGain
* }
*/
- public static void currGain$set(MemorySegment seg, double x) {
- sdrplay_api_GainCbParamT.currGain$VH.set(seg, x);
+ public static void currGain(MemorySegment struct, double fieldValue) {
+ struct.set(currGain$LAYOUT, currGain$OFFSET, fieldValue);
}
- public static double currGain$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_GainCbParamT.currGain$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void currGain$set(MemorySegment seg, long index, double x) {
- sdrplay_api_GainCbParamT.currGain$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainT.java
index 7eb4d119..60d428db 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,162 +21,312 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* int gRdB;
* unsigned char LNAstate;
* unsigned char syncUpdate;
* sdrplay_api_MinGainReductionT minGr;
* sdrplay_api_GainValuesT gainVals;
- * };
+ * }
* }
*/
public class sdrplay_api_GainT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("gRdB"),
- Constants$root.C_CHAR$LAYOUT.withName("LNAstate"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("minGr"),
- MemoryLayout.structLayout(
- Constants$root.C_FLOAT$LAYOUT.withName("curr"),
- Constants$root.C_FLOAT$LAYOUT.withName("max"),
- Constants$root.C_FLOAT$LAYOUT.withName("min")
- ).withName("gainVals")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_GainT.$struct$LAYOUT;
+ sdrplay_api_GainT() {
+ // Should not be called directly
}
- static final VarHandle gRdB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("gRdB"));
- public static VarHandle gRdB$VH() {
- return sdrplay_api_GainT.gRdB$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("gRdB"),
+ sdrplay_api_h.C_CHAR.withName("LNAstate"),
+ sdrplay_api_h.C_CHAR.withName("syncUpdate"),
+ MemoryLayout.paddingLayout(2),
+ sdrplay_api_h.C_INT.withName("minGr"),
+ sdrplay_api_GainValuesT.layout().withName("gainVals")
+ ).withName("$anon$60:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt gRdB$LAYOUT = (OfInt)$LAYOUT.select(groupElement("gRdB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int gRdB
+ * }
+ */
+ public static final OfInt gRdB$layout() {
+ return gRdB$LAYOUT;
+ }
+
+ private static final long gRdB$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int gRdB
+ * }
+ */
+ public static final long gRdB$offset() {
+ return gRdB$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * int gRdB;
+ * {@snippet lang=c :
+ * int gRdB
* }
*/
- public static int gRdB$get(MemorySegment seg) {
- return (int)sdrplay_api_GainT.gRdB$VH.get(seg);
+ public static int gRdB(MemorySegment struct) {
+ return struct.get(gRdB$LAYOUT, gRdB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int gRdB;
+ * {@snippet lang=c :
+ * int gRdB
* }
*/
- public static void gRdB$set(MemorySegment seg, int x) {
- sdrplay_api_GainT.gRdB$VH.set(seg, x);
+ public static void gRdB(MemorySegment struct, int fieldValue) {
+ struct.set(gRdB$LAYOUT, gRdB$OFFSET, fieldValue);
}
- public static int gRdB$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_GainT.gRdB$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte LNAstate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("LNAstate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char LNAstate
+ * }
+ */
+ public static final OfByte LNAstate$layout() {
+ return LNAstate$LAYOUT;
}
- public static void gRdB$set(MemorySegment seg, long index, int x) {
- sdrplay_api_GainT.gRdB$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle LNAstate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("LNAstate"));
- public static VarHandle LNAstate$VH() {
- return sdrplay_api_GainT.LNAstate$VH;
+
+ private static final long LNAstate$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char LNAstate
+ * }
+ */
+ public static final long LNAstate$offset() {
+ return LNAstate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char LNAstate;
+ * {@snippet lang=c :
+ * unsigned char LNAstate
* }
*/
- public static byte LNAstate$get(MemorySegment seg) {
- return (byte)sdrplay_api_GainT.LNAstate$VH.get(seg);
+ public static byte LNAstate(MemorySegment struct) {
+ return struct.get(LNAstate$LAYOUT, LNAstate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char LNAstate;
+ * {@snippet lang=c :
+ * unsigned char LNAstate
* }
*/
- public static void LNAstate$set(MemorySegment seg, byte x) {
- sdrplay_api_GainT.LNAstate$VH.set(seg, x);
+ public static void LNAstate(MemorySegment struct, byte fieldValue) {
+ struct.set(LNAstate$LAYOUT, LNAstate$OFFSET, fieldValue);
}
- public static byte LNAstate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_GainT.LNAstate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte syncUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final OfByte syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void LNAstate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_GainT.LNAstate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle syncUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("syncUpdate"));
- public static VarHandle syncUpdate$VH() {
- return sdrplay_api_GainT.syncUpdate$VH;
+
+ private static final long syncUpdate$OFFSET = 5;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static byte syncUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_GainT.syncUpdate$VH.get(seg);
+ public static byte syncUpdate(MemorySegment struct) {
+ return struct.get(syncUpdate$LAYOUT, syncUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static void syncUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_GainT.syncUpdate$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(syncUpdate$LAYOUT, syncUpdate$OFFSET, fieldValue);
}
- public static byte syncUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_GainT.syncUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt minGr$LAYOUT = (OfInt)$LAYOUT.select(groupElement("minGr"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_MinGainReductionT minGr
+ * }
+ */
+ public static final OfInt minGr$layout() {
+ return minGr$LAYOUT;
}
- public static void syncUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_GainT.syncUpdate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle minGr$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("minGr"));
- public static VarHandle minGr$VH() {
- return sdrplay_api_GainT.minGr$VH;
+
+ private static final long minGr$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_MinGainReductionT minGr
+ * }
+ */
+ public static final long minGr$offset() {
+ return minGr$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_MinGainReductionT minGr;
+ * {@snippet lang=c :
+ * sdrplay_api_MinGainReductionT minGr
* }
*/
- public static int minGr$get(MemorySegment seg) {
- return (int)sdrplay_api_GainT.minGr$VH.get(seg);
+ public static int minGr(MemorySegment struct) {
+ return struct.get(minGr$LAYOUT, minGr$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_MinGainReductionT minGr;
+ * {@snippet lang=c :
+ * sdrplay_api_MinGainReductionT minGr
* }
*/
- public static void minGr$set(MemorySegment seg, int x) {
- sdrplay_api_GainT.minGr$VH.set(seg, x);
+ public static void minGr(MemorySegment struct, int fieldValue) {
+ struct.set(minGr$LAYOUT, minGr$OFFSET, fieldValue);
}
- public static int minGr$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_GainT.minGr$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout gainVals$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("gainVals"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainValuesT gainVals
+ * }
+ */
+ public static final GroupLayout gainVals$layout() {
+ return gainVals$LAYOUT;
}
- public static void minGr$set(MemorySegment seg, long index, int x) {
- sdrplay_api_GainT.minGr$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long gainVals$OFFSET = 12;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainValuesT gainVals
+ * }
+ */
+ public static final long gainVals$offset() {
+ return gainVals$OFFSET;
}
- public static MemorySegment gainVals$slice(MemorySegment seg) {
- return seg.asSlice(12, 12);
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainValuesT gainVals
+ * }
+ */
+ public static MemorySegment gainVals(MemorySegment struct) {
+ return struct.asSlice(gainVals$OFFSET, gainVals$LAYOUT.byteSize());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainValuesT gainVals
+ * }
+ */
+ public static void gainVals(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, gainVals$OFFSET, gainVals$LAYOUT.byteSize());
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainValuesT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainValuesT.java
index e8a2526d..4847603e 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainValuesT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GainValuesT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfFloat;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* float curr;
* float max;
* float min;
- * };
+ * }
* }
*/
public class sdrplay_api_GainValuesT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_FLOAT$LAYOUT.withName("curr"),
- Constants$root.C_FLOAT$LAYOUT.withName("max"),
- Constants$root.C_FLOAT$LAYOUT.withName("min")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_GainValuesT.$struct$LAYOUT;
+ sdrplay_api_GainValuesT() {
+ // Should not be called directly
}
- static final VarHandle curr$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("curr"));
- public static VarHandle curr$VH() {
- return sdrplay_api_GainValuesT.curr$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_FLOAT.withName("curr"),
+ sdrplay_api_h.C_FLOAT.withName("max"),
+ sdrplay_api_h.C_FLOAT.withName("min")
+ ).withName("$anon$53:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfFloat curr$LAYOUT = (OfFloat)$LAYOUT.select(groupElement("curr"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * float curr
+ * }
+ */
+ public static final OfFloat curr$layout() {
+ return curr$LAYOUT;
+ }
+
+ private static final long curr$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * float curr
+ * }
+ */
+ public static final long curr$offset() {
+ return curr$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * float curr;
+ * {@snippet lang=c :
+ * float curr
* }
*/
- public static float curr$get(MemorySegment seg) {
- return (float)sdrplay_api_GainValuesT.curr$VH.get(seg);
+ public static float curr(MemorySegment struct) {
+ return struct.get(curr$LAYOUT, curr$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * float curr;
+ * {@snippet lang=c :
+ * float curr
* }
*/
- public static void curr$set(MemorySegment seg, float x) {
- sdrplay_api_GainValuesT.curr$VH.set(seg, x);
+ public static void curr(MemorySegment struct, float fieldValue) {
+ struct.set(curr$LAYOUT, curr$OFFSET, fieldValue);
}
- public static float curr$get(MemorySegment seg, long index) {
- return (float)sdrplay_api_GainValuesT.curr$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfFloat max$LAYOUT = (OfFloat)$LAYOUT.select(groupElement("max"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * float max
+ * }
+ */
+ public static final OfFloat max$layout() {
+ return max$LAYOUT;
}
- public static void curr$set(MemorySegment seg, long index, float x) {
- sdrplay_api_GainValuesT.curr$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle max$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("max"));
- public static VarHandle max$VH() {
- return sdrplay_api_GainValuesT.max$VH;
+
+ private static final long max$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * float max
+ * }
+ */
+ public static final long max$offset() {
+ return max$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * float max;
+ * {@snippet lang=c :
+ * float max
* }
*/
- public static float max$get(MemorySegment seg) {
- return (float)sdrplay_api_GainValuesT.max$VH.get(seg);
+ public static float max(MemorySegment struct) {
+ return struct.get(max$LAYOUT, max$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * float max;
+ * {@snippet lang=c :
+ * float max
* }
*/
- public static void max$set(MemorySegment seg, float x) {
- sdrplay_api_GainValuesT.max$VH.set(seg, x);
+ public static void max(MemorySegment struct, float fieldValue) {
+ struct.set(max$LAYOUT, max$OFFSET, fieldValue);
}
- public static float max$get(MemorySegment seg, long index) {
- return (float)sdrplay_api_GainValuesT.max$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfFloat min$LAYOUT = (OfFloat)$LAYOUT.select(groupElement("min"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * float min
+ * }
+ */
+ public static final OfFloat min$layout() {
+ return min$LAYOUT;
}
- public static void max$set(MemorySegment seg, long index, float x) {
- sdrplay_api_GainValuesT.max$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle min$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("min"));
- public static VarHandle min$VH() {
- return sdrplay_api_GainValuesT.min$VH;
+
+ private static final long min$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * float min
+ * }
+ */
+ public static final long min$offset() {
+ return min$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * float min;
+ * {@snippet lang=c :
+ * float min
* }
*/
- public static float min$get(MemorySegment seg) {
- return (float)sdrplay_api_GainValuesT.min$VH.get(seg);
+ public static float min(MemorySegment struct) {
+ return struct.get(min$LAYOUT, min$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * float min;
+ * {@snippet lang=c :
+ * float min
* }
*/
- public static void min$set(MemorySegment seg, float x) {
- sdrplay_api_GainValuesT.min$VH.set(seg, x);
+ public static void min(MemorySegment struct, float fieldValue) {
+ struct.set(min$LAYOUT, min$OFFSET, fieldValue);
}
- public static float min$get(MemorySegment seg, long index) {
- return (float)sdrplay_api_GainValuesT.min$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void min$set(MemorySegment seg, long index, float x) {
- sdrplay_api_GainValuesT.min$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetDeviceParams_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetDeviceParams_t.java
index 3e426d75..1d2605d7 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetDeviceParams_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetDeviceParams_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,64 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_GetDeviceParams_t)(void* dev,struct ** deviceParams);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_GetDeviceParams_t)(HANDLE, sdrplay_api_DeviceParamsT **)
* }
*/
-public interface sdrplay_api_GetDeviceParams_t {
+public class sdrplay_api_GetDeviceParams_t {
- int apply(java.lang.foreign.MemorySegment dev, java.lang.foreign.MemorySegment deviceParams);
- static MemorySegment allocate(sdrplay_api_GetDeviceParams_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$4.sdrplay_api_GetDeviceParams_t_UP$MH, fi, constants$4.sdrplay_api_GetDeviceParams_t$FUNC, scope);
+ sdrplay_api_GetDeviceParams_t() {
+ // Should not be called directly
}
- static sdrplay_api_GetDeviceParams_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev, java.lang.foreign.MemorySegment _deviceParams) -> {
- try {
- return (int)constants$4.sdrplay_api_GetDeviceParams_t_DOWN$MH.invokeExact(symbol, _dev, _deviceParams);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev, MemorySegment deviceParams);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_GetDeviceParams_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_GetDeviceParams_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev, MemorySegment deviceParams) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev, deviceParams);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetDevices_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetDevices_t.java
index 4972d282..cae0ac9e 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetDevices_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetDevices_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,65 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_GetDevices_t)(struct * devices,unsigned int* numDevs,unsigned int maxDevs);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_GetDevices_t)(sdrplay_api_DeviceT *, unsigned int *, unsigned int)
* }
*/
-public interface sdrplay_api_GetDevices_t {
+public class sdrplay_api_GetDevices_t {
- int apply(java.lang.foreign.MemorySegment devices, java.lang.foreign.MemorySegment numDevs, int maxDevs);
- static MemorySegment allocate(sdrplay_api_GetDevices_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$2.sdrplay_api_GetDevices_t_UP$MH, fi, constants$2.sdrplay_api_GetDevices_t$FUNC, scope);
+ sdrplay_api_GetDevices_t() {
+ // Should not be called directly
}
- static sdrplay_api_GetDevices_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _devices, java.lang.foreign.MemorySegment _numDevs, int _maxDevs) -> {
- try {
- return (int)constants$2.sdrplay_api_GetDevices_t_DOWN$MH.invokeExact(symbol, _devices, _numDevs, _maxDevs);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment devices, MemorySegment numDevs, int maxDevs);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_GetDevices_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_GetDevices_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment devices, MemorySegment numDevs, int maxDevs) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, devices, numDevs, maxDevs);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetErrorString_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetErrorString_t.java
index dc6889cf..6c4f3529 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetErrorString_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetErrorString_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * char* (*sdrplay_api_GetErrorString_t)(enum err);
+ * {@snippet lang=c :
+ * typedef const char *(*sdrplay_api_GetErrorString_t)(sdrplay_api_ErrT)
* }
*/
-public interface sdrplay_api_GetErrorString_t {
+public class sdrplay_api_GetErrorString_t {
- java.lang.foreign.MemorySegment apply(int err);
- static MemorySegment allocate(sdrplay_api_GetErrorString_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$3.sdrplay_api_GetErrorString_t_UP$MH, fi, constants$3.sdrplay_api_GetErrorString_t$FUNC, scope);
+ sdrplay_api_GetErrorString_t() {
+ // Should not be called directly
}
- static sdrplay_api_GetErrorString_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (int _err) -> {
- try {
- return (java.lang.foreign.MemorySegment)constants$3.sdrplay_api_GetErrorString_t_DOWN$MH.invokeExact(symbol, _err);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ MemorySegment apply(int err);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_GetErrorString_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_GetErrorString_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static MemorySegment invoke(MemorySegment funcPtr,int err) {
+ try {
+ return (MemorySegment) DOWN$MH.invokeExact(funcPtr, err);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetLastError_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetLastError_t.java
index 1b0d1ac1..a73dad14 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetLastError_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_GetLastError_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * struct * (*sdrplay_api_GetLastError_t)(struct * device);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrorInfoT *(*sdrplay_api_GetLastError_t)(sdrplay_api_DeviceT *)
* }
*/
-public interface sdrplay_api_GetLastError_t {
+public class sdrplay_api_GetLastError_t {
- java.lang.foreign.MemorySegment apply(java.lang.foreign.MemorySegment device);
- static MemorySegment allocate(sdrplay_api_GetLastError_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$3.sdrplay_api_GetLastError_t_UP$MH, fi, constants$3.sdrplay_api_GetLastError_t$FUNC, scope);
+ sdrplay_api_GetLastError_t() {
+ // Should not be called directly
}
- static sdrplay_api_GetLastError_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _device) -> {
- try {
- return (java.lang.foreign.MemorySegment)constants$3.sdrplay_api_GetLastError_t_DOWN$MH.invokeExact(symbol, _device);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ MemorySegment apply(MemorySegment device);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_GetLastError_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_GetLastError_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static MemorySegment invoke(MemorySegment funcPtr,MemorySegment device) {
+ try {
+ return (MemorySegment) DOWN$MH.invokeExact(funcPtr, device);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Init_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Init_t.java
index 90c043b7..a5ba0030 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Init_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Init_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,65 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_Init_t)(void* dev,struct * callbackFns,void* cbContext);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_Init_t)(HANDLE, sdrplay_api_CallbackFnsT *, void *)
* }
*/
-public interface sdrplay_api_Init_t {
+public class sdrplay_api_Init_t {
- int apply(java.lang.foreign.MemorySegment dev, java.lang.foreign.MemorySegment callbackFns, java.lang.foreign.MemorySegment cbContext);
- static MemorySegment allocate(sdrplay_api_Init_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$5.sdrplay_api_Init_t_UP$MH, fi, constants$5.sdrplay_api_Init_t$FUNC, scope);
+ sdrplay_api_Init_t() {
+ // Should not be called directly
}
- static sdrplay_api_Init_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev, java.lang.foreign.MemorySegment _callbackFns, java.lang.foreign.MemorySegment _cbContext) -> {
- try {
- return (int)constants$5.sdrplay_api_Init_t_DOWN$MH.invokeExact(symbol, _dev, _callbackFns, _cbContext);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev, MemorySegment callbackFns, MemorySegment cbContext);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_Init_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_Init_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev, MemorySegment callbackFns, MemorySegment cbContext) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev, callbackFns, cbContext);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_LockDeviceApi_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_LockDeviceApi_t.java
index f2239c61..44fce499 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_LockDeviceApi_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_LockDeviceApi_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,61 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_LockDeviceApi_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_LockDeviceApi_t)(void)
* }
*/
-public interface sdrplay_api_LockDeviceApi_t {
+public class sdrplay_api_LockDeviceApi_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_LockDeviceApi_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$1.sdrplay_api_LockDeviceApi_t_UP$MH, fi, constants$1.sdrplay_api_LockDeviceApi_t$FUNC, scope);
+ sdrplay_api_LockDeviceApi_t() {
+ // Should not be called directly
}
- static sdrplay_api_LockDeviceApi_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$1.sdrplay_api_LockDeviceApi_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_LockDeviceApi_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_LockDeviceApi_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Open_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Open_t.java
index 64e2910f..f3f33417 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Open_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Open_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,61 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_Open_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_Open_t)(void)
* }
*/
-public interface sdrplay_api_Open_t {
+public class sdrplay_api_Open_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_Open_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$0.sdrplay_api_Open_t_UP$MH, fi, constants$0.sdrplay_api_Open_t$FUNC, scope);
+ sdrplay_api_Open_t() {
+ // Should not be called directly
}
- static sdrplay_api_Open_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$0.sdrplay_api_Open_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_Open_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_Open_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_PowerOverloadCbParamT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_PowerOverloadCbParamT.java
index 4cb9257e..db34076b 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_PowerOverloadCbParamT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_PowerOverloadCbParamT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,62 +21,126 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType;
- * };
+ * }
* }
*/
public class sdrplay_api_PowerOverloadCbParamT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("powerOverloadChangeType")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_PowerOverloadCbParamT.$struct$LAYOUT;
+ sdrplay_api_PowerOverloadCbParamT() {
+ // Should not be called directly
}
- static final VarHandle powerOverloadChangeType$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("powerOverloadChangeType"));
- public static VarHandle powerOverloadChangeType$VH() {
- return sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("powerOverloadChangeType")
+ ).withName("$anon$38:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt powerOverloadChangeType$LAYOUT = (OfInt)$LAYOUT.select(groupElement("powerOverloadChangeType"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType
+ * }
+ */
+ public static final OfInt powerOverloadChangeType$layout() {
+ return powerOverloadChangeType$LAYOUT;
+ }
+
+ private static final long powerOverloadChangeType$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType
+ * }
+ */
+ public static final long powerOverloadChangeType$offset() {
+ return powerOverloadChangeType$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType;
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType
* }
*/
- public static int powerOverloadChangeType$get(MemorySegment seg) {
- return (int)sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH.get(seg);
+ public static int powerOverloadChangeType(MemorySegment struct) {
+ return struct.get(powerOverloadChangeType$LAYOUT, powerOverloadChangeType$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType;
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType
* }
*/
- public static void powerOverloadChangeType$set(MemorySegment seg, int x) {
- sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH.set(seg, x);
+ public static void powerOverloadChangeType(MemorySegment struct, int fieldValue) {
+ struct.set(powerOverloadChangeType$LAYOUT, powerOverloadChangeType$OFFSET, fieldValue);
}
- public static int powerOverloadChangeType$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void powerOverloadChangeType$set(MemorySegment seg, long index, int x) {
- sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ReleaseDevice_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ReleaseDevice_t.java
index 2395afbe..7e19244a 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ReleaseDevice_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ReleaseDevice_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_ReleaseDevice_t)(struct * device);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_ReleaseDevice_t)(sdrplay_api_DeviceT *)
* }
*/
-public interface sdrplay_api_ReleaseDevice_t {
+public class sdrplay_api_ReleaseDevice_t {
- int apply(java.lang.foreign.MemorySegment currentSampleRate);
- static MemorySegment allocate(sdrplay_api_ReleaseDevice_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$3.sdrplay_api_ReleaseDevice_t_UP$MH, fi, constants$3.sdrplay_api_ReleaseDevice_t$FUNC, scope);
+ sdrplay_api_ReleaseDevice_t() {
+ // Should not be called directly
}
- static sdrplay_api_ReleaseDevice_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _currentSampleRate) -> {
- try {
- return (int)constants$3.sdrplay_api_ReleaseDevice_t_DOWN$MH.invokeExact(symbol, _currentSampleRate);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment device);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_ReleaseDevice_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_ReleaseDevice_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment device) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, device);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ResetFlagsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ResetFlagsT.java
index 4dfad563..f02f9672 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ResetFlagsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_ResetFlagsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char resetGainUpdate;
* unsigned char resetRfUpdate;
* unsigned char resetFsUpdate;
- * };
+ * }
* }
*/
public class sdrplay_api_ResetFlagsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("resetGainUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("resetRfUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("resetFsUpdate")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_ResetFlagsT.$struct$LAYOUT;
+ sdrplay_api_ResetFlagsT() {
+ // Should not be called directly
}
- static final VarHandle resetGainUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("resetGainUpdate"));
- public static VarHandle resetGainUpdate$VH() {
- return sdrplay_api_ResetFlagsT.resetGainUpdate$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("resetGainUpdate"),
+ sdrplay_api_h.C_CHAR.withName("resetRfUpdate"),
+ sdrplay_api_h.C_CHAR.withName("resetFsUpdate")
+ ).withName("$anon$30:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte resetGainUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("resetGainUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char resetGainUpdate
+ * }
+ */
+ public static final OfByte resetGainUpdate$layout() {
+ return resetGainUpdate$LAYOUT;
+ }
+
+ private static final long resetGainUpdate$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char resetGainUpdate
+ * }
+ */
+ public static final long resetGainUpdate$offset() {
+ return resetGainUpdate$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char resetGainUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetGainUpdate
* }
*/
- public static byte resetGainUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_ResetFlagsT.resetGainUpdate$VH.get(seg);
+ public static byte resetGainUpdate(MemorySegment struct) {
+ return struct.get(resetGainUpdate$LAYOUT, resetGainUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char resetGainUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetGainUpdate
* }
*/
- public static void resetGainUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_ResetFlagsT.resetGainUpdate$VH.set(seg, x);
+ public static void resetGainUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(resetGainUpdate$LAYOUT, resetGainUpdate$OFFSET, fieldValue);
}
- public static byte resetGainUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_ResetFlagsT.resetGainUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte resetRfUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("resetRfUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char resetRfUpdate
+ * }
+ */
+ public static final OfByte resetRfUpdate$layout() {
+ return resetRfUpdate$LAYOUT;
}
- public static void resetGainUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_ResetFlagsT.resetGainUpdate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle resetRfUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("resetRfUpdate"));
- public static VarHandle resetRfUpdate$VH() {
- return sdrplay_api_ResetFlagsT.resetRfUpdate$VH;
+
+ private static final long resetRfUpdate$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char resetRfUpdate
+ * }
+ */
+ public static final long resetRfUpdate$offset() {
+ return resetRfUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char resetRfUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetRfUpdate
* }
*/
- public static byte resetRfUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_ResetFlagsT.resetRfUpdate$VH.get(seg);
+ public static byte resetRfUpdate(MemorySegment struct) {
+ return struct.get(resetRfUpdate$LAYOUT, resetRfUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char resetRfUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetRfUpdate
* }
*/
- public static void resetRfUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_ResetFlagsT.resetRfUpdate$VH.set(seg, x);
+ public static void resetRfUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(resetRfUpdate$LAYOUT, resetRfUpdate$OFFSET, fieldValue);
}
- public static byte resetRfUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_ResetFlagsT.resetRfUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte resetFsUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("resetFsUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char resetFsUpdate
+ * }
+ */
+ public static final OfByte resetFsUpdate$layout() {
+ return resetFsUpdate$LAYOUT;
}
- public static void resetRfUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_ResetFlagsT.resetRfUpdate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle resetFsUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("resetFsUpdate"));
- public static VarHandle resetFsUpdate$VH() {
- return sdrplay_api_ResetFlagsT.resetFsUpdate$VH;
+
+ private static final long resetFsUpdate$OFFSET = 2;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char resetFsUpdate
+ * }
+ */
+ public static final long resetFsUpdate$offset() {
+ return resetFsUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char resetFsUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetFsUpdate
* }
*/
- public static byte resetFsUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_ResetFlagsT.resetFsUpdate$VH.get(seg);
+ public static byte resetFsUpdate(MemorySegment struct) {
+ return struct.get(resetFsUpdate$LAYOUT, resetFsUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char resetFsUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetFsUpdate
* }
*/
- public static void resetFsUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_ResetFlagsT.resetFsUpdate$VH.set(seg, x);
+ public static void resetFsUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(resetFsUpdate$LAYOUT, resetFsUpdate$OFFSET, fieldValue);
}
- public static byte resetFsUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_ResetFlagsT.resetFsUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void resetFsUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_ResetFlagsT.resetFsUpdate$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RfFreqT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RfFreqT.java
index 97a37772..450fa5a8 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RfFreqT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RfFreqT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,93 +21,174 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfDouble;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* double rfHz;
* unsigned char syncUpdate;
- * };
+ * }
* }
*/
public class sdrplay_api_RfFreqT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("rfHz"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- MemoryLayout.paddingLayout(56)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_RfFreqT.$struct$LAYOUT;
+ sdrplay_api_RfFreqT() {
+ // Should not be called directly
}
- static final VarHandle rfHz$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfHz"));
- public static VarHandle rfHz$VH() {
- return sdrplay_api_RfFreqT.rfHz$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_DOUBLE.withName("rfHz"),
+ sdrplay_api_h.C_CHAR.withName("syncUpdate"),
+ MemoryLayout.paddingLayout(7)
+ ).withName("$anon$69:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfDouble rfHz$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("rfHz"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double rfHz
+ * }
+ */
+ public static final OfDouble rfHz$layout() {
+ return rfHz$LAYOUT;
+ }
+
+ private static final long rfHz$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double rfHz
+ * }
+ */
+ public static final long rfHz$offset() {
+ return rfHz$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * double rfHz;
+ * {@snippet lang=c :
+ * double rfHz
* }
*/
- public static double rfHz$get(MemorySegment seg) {
- return (double)sdrplay_api_RfFreqT.rfHz$VH.get(seg);
+ public static double rfHz(MemorySegment struct) {
+ return struct.get(rfHz$LAYOUT, rfHz$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double rfHz;
+ * {@snippet lang=c :
+ * double rfHz
* }
*/
- public static void rfHz$set(MemorySegment seg, double x) {
- sdrplay_api_RfFreqT.rfHz$VH.set(seg, x);
+ public static void rfHz(MemorySegment struct, double fieldValue) {
+ struct.set(rfHz$LAYOUT, rfHz$OFFSET, fieldValue);
}
- public static double rfHz$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_RfFreqT.rfHz$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte syncUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final OfByte syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void rfHz$set(MemorySegment seg, long index, double x) {
- sdrplay_api_RfFreqT.rfHz$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle syncUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("syncUpdate"));
- public static VarHandle syncUpdate$VH() {
- return sdrplay_api_RfFreqT.syncUpdate$VH;
+
+ private static final long syncUpdate$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static byte syncUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_RfFreqT.syncUpdate$VH.get(seg);
+ public static byte syncUpdate(MemorySegment struct) {
+ return struct.get(syncUpdate$LAYOUT, syncUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static void syncUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_RfFreqT.syncUpdate$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(syncUpdate$LAYOUT, syncUpdate$OFFSET, fieldValue);
}
- public static byte syncUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RfFreqT.syncUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void syncUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RfFreqT.syncUpdate$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp1aParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp1aParamsT.java
index 6ba81eae..dbaf54df 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp1aParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp1aParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,92 +21,172 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char rfNotchEnable;
* unsigned char rfDabNotchEnable;
- * };
+ * }
* }
*/
public class sdrplay_api_Rsp1aParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_Rsp1aParamsT.$struct$LAYOUT;
+ sdrplay_api_Rsp1aParamsT() {
+ // Should not be called directly
}
- static final VarHandle rfNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfNotchEnable"));
- public static VarHandle rfNotchEnable$VH() {
- return sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("rfNotchEnable"),
+ sdrplay_api_h.C_CHAR.withName("rfDabNotchEnable")
+ ).withName("$anon$11:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte rfNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final OfByte rfNotchEnable$layout() {
+ return rfNotchEnable$LAYOUT;
+ }
+
+ private static final long rfNotchEnable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final long rfNotchEnable$offset() {
+ return rfNotchEnable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static byte rfNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH.get(seg);
+ public static byte rfNotchEnable(MemorySegment struct) {
+ return struct.get(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static void rfNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH.set(seg, x);
+ public static void rfNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET, fieldValue);
}
- public static byte rfNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte rfDabNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfDabNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
+ * }
+ */
+ public static final OfByte rfDabNotchEnable$layout() {
+ return rfDabNotchEnable$LAYOUT;
}
- public static void rfNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rfDabNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfDabNotchEnable"));
- public static VarHandle rfDabNotchEnable$VH() {
- return sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH;
+
+ private static final long rfDabNotchEnable$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
+ * }
+ */
+ public static final long rfDabNotchEnable$offset() {
+ return rfDabNotchEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfDabNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
* }
*/
- public static byte rfDabNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH.get(seg);
+ public static byte rfDabNotchEnable(MemorySegment struct) {
+ return struct.get(rfDabNotchEnable$LAYOUT, rfDabNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfDabNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
* }
*/
- public static void rfDabNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH.set(seg, x);
+ public static void rfDabNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfDabNotchEnable$LAYOUT, rfDabNotchEnable$OFFSET, fieldValue);
}
- public static byte rfDabNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void rfDabNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp1aTunerParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp1aTunerParamsT.java
index 7f788ae6..77d1051e 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp1aTunerParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp1aTunerParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,62 +21,126 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char biasTEnable;
- * };
+ * }
* }
*/
public class sdrplay_api_Rsp1aTunerParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_Rsp1aTunerParamsT.$struct$LAYOUT;
+ sdrplay_api_Rsp1aTunerParamsT() {
+ // Should not be called directly
}
- static final VarHandle biasTEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("biasTEnable"));
- public static VarHandle biasTEnable$VH() {
- return sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("biasTEnable")
+ ).withName("$anon$17:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte biasTEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("biasTEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final OfByte biasTEnable$layout() {
+ return biasTEnable$LAYOUT;
+ }
+
+ private static final long biasTEnable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final long biasTEnable$offset() {
+ return biasTEnable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static byte biasTEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH.get(seg);
+ public static byte biasTEnable(MemorySegment struct) {
+ return struct.get(biasTEnable$LAYOUT, biasTEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static void biasTEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH.set(seg, x);
+ public static void biasTEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(biasTEnable$LAYOUT, biasTEnable$OFFSET, fieldValue);
}
- public static byte biasTEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void biasTEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp2ParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp2ParamsT.java
index e5795abb..2d8f6c04 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp2ParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp2ParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,62 +21,122 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char extRefOutputEn;
- * };
+ * }
* }
*/
public class sdrplay_api_Rsp2ParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("extRefOutputEn")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_Rsp2ParamsT.$struct$LAYOUT;
+ sdrplay_api_Rsp2ParamsT() {
+ // Should not be called directly
}
- static final VarHandle extRefOutputEn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("extRefOutputEn"));
- public static VarHandle extRefOutputEn$VH() {
- return sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("extRefOutputEn")
+ ).withName("$anon$22:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte extRefOutputEn$LAYOUT = (OfByte)$LAYOUT.select(groupElement("extRefOutputEn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char extRefOutputEn
+ * }
+ */
+ public static final OfByte extRefOutputEn$layout() {
+ return extRefOutputEn$LAYOUT;
+ }
+
+ private static final long extRefOutputEn$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char extRefOutputEn
+ * }
+ */
+ public static final long extRefOutputEn$offset() {
+ return extRefOutputEn$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char extRefOutputEn;
+ * {@snippet lang=c :
+ * unsigned char extRefOutputEn
* }
*/
- public static byte extRefOutputEn$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH.get(seg);
+ public static byte extRefOutputEn(MemorySegment struct) {
+ return struct.get(extRefOutputEn$LAYOUT, extRefOutputEn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char extRefOutputEn;
+ * {@snippet lang=c :
+ * unsigned char extRefOutputEn
* }
*/
- public static void extRefOutputEn$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH.set(seg, x);
+ public static void extRefOutputEn(MemorySegment struct, byte fieldValue) {
+ struct.set(extRefOutputEn$LAYOUT, extRefOutputEn$OFFSET, fieldValue);
}
- public static byte extRefOutputEn$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void extRefOutputEn$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp2TunerParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp2TunerParamsT.java
index fa851065..4782664c 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp2TunerParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Rsp2TunerParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,154 +21,262 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char biasTEnable;
* sdrplay_api_Rsp2_AmPortSelectT amPortSel;
* sdrplay_api_Rsp2_AntennaSelectT antennaSel;
* unsigned char rfNotchEnable;
- * };
+ * }
* }
*/
public class sdrplay_api_Rsp2TunerParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable"),
- MemoryLayout.paddingLayout(24),
- Constants$root.C_INT$LAYOUT.withName("amPortSel"),
- Constants$root.C_INT$LAYOUT.withName("antennaSel"),
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- MemoryLayout.paddingLayout(24)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_Rsp2TunerParamsT.$struct$LAYOUT;
+ sdrplay_api_Rsp2TunerParamsT() {
+ // Should not be called directly
}
- static final VarHandle biasTEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("biasTEnable"));
- public static VarHandle biasTEnable$VH() {
- return sdrplay_api_Rsp2TunerParamsT.biasTEnable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("biasTEnable"),
+ MemoryLayout.paddingLayout(3),
+ sdrplay_api_h.C_INT.withName("amPortSel"),
+ sdrplay_api_h.C_INT.withName("antennaSel"),
+ sdrplay_api_h.C_CHAR.withName("rfNotchEnable"),
+ MemoryLayout.paddingLayout(3)
+ ).withName("$anon$27:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte biasTEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("biasTEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final OfByte biasTEnable$layout() {
+ return biasTEnable$LAYOUT;
+ }
+
+ private static final long biasTEnable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final long biasTEnable$offset() {
+ return biasTEnable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static byte biasTEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp2TunerParamsT.biasTEnable$VH.get(seg);
+ public static byte biasTEnable(MemorySegment struct) {
+ return struct.get(biasTEnable$LAYOUT, biasTEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static void biasTEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp2TunerParamsT.biasTEnable$VH.set(seg, x);
+ public static void biasTEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(biasTEnable$LAYOUT, biasTEnable$OFFSET, fieldValue);
}
- public static byte biasTEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp2TunerParamsT.biasTEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt amPortSel$LAYOUT = (OfInt)$LAYOUT.select(groupElement("amPortSel"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2_AmPortSelectT amPortSel
+ * }
+ */
+ public static final OfInt amPortSel$layout() {
+ return amPortSel$LAYOUT;
}
- public static void biasTEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp2TunerParamsT.biasTEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle amPortSel$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("amPortSel"));
- public static VarHandle amPortSel$VH() {
- return sdrplay_api_Rsp2TunerParamsT.amPortSel$VH;
+
+ private static final long amPortSel$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2_AmPortSelectT amPortSel
+ * }
+ */
+ public static final long amPortSel$offset() {
+ return amPortSel$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_Rsp2_AmPortSelectT amPortSel;
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2_AmPortSelectT amPortSel
* }
*/
- public static int amPortSel$get(MemorySegment seg) {
- return (int)sdrplay_api_Rsp2TunerParamsT.amPortSel$VH.get(seg);
+ public static int amPortSel(MemorySegment struct) {
+ return struct.get(amPortSel$LAYOUT, amPortSel$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_Rsp2_AmPortSelectT amPortSel;
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2_AmPortSelectT amPortSel
* }
*/
- public static void amPortSel$set(MemorySegment seg, int x) {
- sdrplay_api_Rsp2TunerParamsT.amPortSel$VH.set(seg, x);
+ public static void amPortSel(MemorySegment struct, int fieldValue) {
+ struct.set(amPortSel$LAYOUT, amPortSel$OFFSET, fieldValue);
}
- public static int amPortSel$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_Rsp2TunerParamsT.amPortSel$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt antennaSel$LAYOUT = (OfInt)$LAYOUT.select(groupElement("antennaSel"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2_AntennaSelectT antennaSel
+ * }
+ */
+ public static final OfInt antennaSel$layout() {
+ return antennaSel$LAYOUT;
}
- public static void amPortSel$set(MemorySegment seg, long index, int x) {
- sdrplay_api_Rsp2TunerParamsT.amPortSel$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle antennaSel$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("antennaSel"));
- public static VarHandle antennaSel$VH() {
- return sdrplay_api_Rsp2TunerParamsT.antennaSel$VH;
+
+ private static final long antennaSel$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2_AntennaSelectT antennaSel
+ * }
+ */
+ public static final long antennaSel$offset() {
+ return antennaSel$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_Rsp2_AntennaSelectT antennaSel;
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2_AntennaSelectT antennaSel
* }
*/
- public static int antennaSel$get(MemorySegment seg) {
- return (int)sdrplay_api_Rsp2TunerParamsT.antennaSel$VH.get(seg);
+ public static int antennaSel(MemorySegment struct) {
+ return struct.get(antennaSel$LAYOUT, antennaSel$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_Rsp2_AntennaSelectT antennaSel;
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2_AntennaSelectT antennaSel
* }
*/
- public static void antennaSel$set(MemorySegment seg, int x) {
- sdrplay_api_Rsp2TunerParamsT.antennaSel$VH.set(seg, x);
+ public static void antennaSel(MemorySegment struct, int fieldValue) {
+ struct.set(antennaSel$LAYOUT, antennaSel$OFFSET, fieldValue);
}
- public static int antennaSel$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_Rsp2TunerParamsT.antennaSel$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte rfNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final OfByte rfNotchEnable$layout() {
+ return rfNotchEnable$LAYOUT;
}
- public static void antennaSel$set(MemorySegment seg, long index, int x) {
- sdrplay_api_Rsp2TunerParamsT.antennaSel$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rfNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfNotchEnable"));
- public static VarHandle rfNotchEnable$VH() {
- return sdrplay_api_Rsp2TunerParamsT.rfNotchEnable$VH;
+
+ private static final long rfNotchEnable$OFFSET = 12;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final long rfNotchEnable$offset() {
+ return rfNotchEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static byte rfNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp2TunerParamsT.rfNotchEnable$VH.get(seg);
+ public static byte rfNotchEnable(MemorySegment struct) {
+ return struct.get(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static void rfNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp2TunerParamsT.rfNotchEnable$VH.set(seg, x);
+ public static void rfNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET, fieldValue);
}
- public static byte rfNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp2TunerParamsT.rfNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void rfNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp2TunerParamsT.rfNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoModeCbParamT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoModeCbParamT.java
index eb27e169..def8c8aa 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoModeCbParamT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoModeCbParamT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,62 +21,122 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_RspDuoModeCbEventIdT modeChangeType;
- * };
+ * }
* }
*/
public class sdrplay_api_RspDuoModeCbParamT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("modeChangeType")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_RspDuoModeCbParamT.$struct$LAYOUT;
+ sdrplay_api_RspDuoModeCbParamT() {
+ // Should not be called directly
}
- static final VarHandle modeChangeType$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("modeChangeType"));
- public static VarHandle modeChangeType$VH() {
- return sdrplay_api_RspDuoModeCbParamT.modeChangeType$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("modeChangeType")
+ ).withName("$anon$43:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt modeChangeType$LAYOUT = (OfInt)$LAYOUT.select(groupElement("modeChangeType"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbEventIdT modeChangeType
+ * }
+ */
+ public static final OfInt modeChangeType$layout() {
+ return modeChangeType$LAYOUT;
+ }
+
+ private static final long modeChangeType$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbEventIdT modeChangeType
+ * }
+ */
+ public static final long modeChangeType$offset() {
+ return modeChangeType$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RspDuoModeCbEventIdT modeChangeType;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbEventIdT modeChangeType
* }
*/
- public static int modeChangeType$get(MemorySegment seg) {
- return (int)sdrplay_api_RspDuoModeCbParamT.modeChangeType$VH.get(seg);
+ public static int modeChangeType(MemorySegment struct) {
+ return struct.get(modeChangeType$LAYOUT, modeChangeType$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RspDuoModeCbEventIdT modeChangeType;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbEventIdT modeChangeType
* }
*/
- public static void modeChangeType$set(MemorySegment seg, int x) {
- sdrplay_api_RspDuoModeCbParamT.modeChangeType$VH.set(seg, x);
+ public static void modeChangeType(MemorySegment struct, int fieldValue) {
+ struct.set(modeChangeType$LAYOUT, modeChangeType$OFFSET, fieldValue);
}
- public static int modeChangeType$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_RspDuoModeCbParamT.modeChangeType$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void modeChangeType$set(MemorySegment seg, long index, int x) {
- sdrplay_api_RspDuoModeCbParamT.modeChangeType$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoParamsT.java
index db8af509..e405b7ca 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,62 +21,122 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* int extRefOutputEn;
- * };
+ * }
* }
*/
public class sdrplay_api_RspDuoParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("extRefOutputEn")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_RspDuoParamsT.$struct$LAYOUT;
+ sdrplay_api_RspDuoParamsT() {
+ // Should not be called directly
}
- static final VarHandle extRefOutputEn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("extRefOutputEn"));
- public static VarHandle extRefOutputEn$VH() {
- return sdrplay_api_RspDuoParamsT.extRefOutputEn$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("extRefOutputEn")
+ ).withName("$anon$26:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt extRefOutputEn$LAYOUT = (OfInt)$LAYOUT.select(groupElement("extRefOutputEn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int extRefOutputEn
+ * }
+ */
+ public static final OfInt extRefOutputEn$layout() {
+ return extRefOutputEn$LAYOUT;
+ }
+
+ private static final long extRefOutputEn$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int extRefOutputEn
+ * }
+ */
+ public static final long extRefOutputEn$offset() {
+ return extRefOutputEn$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * int extRefOutputEn;
+ * {@snippet lang=c :
+ * int extRefOutputEn
* }
*/
- public static int extRefOutputEn$get(MemorySegment seg) {
- return (int)sdrplay_api_RspDuoParamsT.extRefOutputEn$VH.get(seg);
+ public static int extRefOutputEn(MemorySegment struct) {
+ return struct.get(extRefOutputEn$LAYOUT, extRefOutputEn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int extRefOutputEn;
+ * {@snippet lang=c :
+ * int extRefOutputEn
* }
*/
- public static void extRefOutputEn$set(MemorySegment seg, int x) {
- sdrplay_api_RspDuoParamsT.extRefOutputEn$VH.set(seg, x);
+ public static void extRefOutputEn(MemorySegment struct, int fieldValue) {
+ struct.set(extRefOutputEn$LAYOUT, extRefOutputEn$OFFSET, fieldValue);
}
- public static int extRefOutputEn$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_RspDuoParamsT.extRefOutputEn$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void extRefOutputEn$set(MemorySegment seg, long index, int x) {
- sdrplay_api_RspDuoParamsT.extRefOutputEn$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoTunerParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoTunerParamsT.java
index c07ded90..82538861 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoTunerParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDuoTunerParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,184 +21,308 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char biasTEnable;
* sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel;
* unsigned char tuner1AmNotchEnable;
* unsigned char rfNotchEnable;
* unsigned char rfDabNotchEnable;
- * };
+ * }
* }
*/
public class sdrplay_api_RspDuoTunerParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable"),
- MemoryLayout.paddingLayout(24),
- Constants$root.C_INT$LAYOUT.withName("tuner1AmPortSel"),
- Constants$root.C_CHAR$LAYOUT.withName("tuner1AmNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable"),
- MemoryLayout.paddingLayout(8)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_RspDuoTunerParamsT.$struct$LAYOUT;
+ sdrplay_api_RspDuoTunerParamsT() {
+ // Should not be called directly
}
- static final VarHandle biasTEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("biasTEnable"));
- public static VarHandle biasTEnable$VH() {
- return sdrplay_api_RspDuoTunerParamsT.biasTEnable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("biasTEnable"),
+ MemoryLayout.paddingLayout(3),
+ sdrplay_api_h.C_INT.withName("tuner1AmPortSel"),
+ sdrplay_api_h.C_CHAR.withName("tuner1AmNotchEnable"),
+ sdrplay_api_h.C_CHAR.withName("rfNotchEnable"),
+ sdrplay_api_h.C_CHAR.withName("rfDabNotchEnable"),
+ MemoryLayout.paddingLayout(1)
+ ).withName("$anon$31:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte biasTEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("biasTEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final OfByte biasTEnable$layout() {
+ return biasTEnable$LAYOUT;
+ }
+
+ private static final long biasTEnable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final long biasTEnable$offset() {
+ return biasTEnable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static byte biasTEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_RspDuoTunerParamsT.biasTEnable$VH.get(seg);
+ public static byte biasTEnable(MemorySegment struct) {
+ return struct.get(biasTEnable$LAYOUT, biasTEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static void biasTEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_RspDuoTunerParamsT.biasTEnable$VH.set(seg, x);
+ public static void biasTEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(biasTEnable$LAYOUT, biasTEnable$OFFSET, fieldValue);
}
- public static byte biasTEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RspDuoTunerParamsT.biasTEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt tuner1AmPortSel$LAYOUT = (OfInt)$LAYOUT.select(groupElement("tuner1AmPortSel"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel
+ * }
+ */
+ public static final OfInt tuner1AmPortSel$layout() {
+ return tuner1AmPortSel$LAYOUT;
}
- public static void biasTEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RspDuoTunerParamsT.biasTEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle tuner1AmPortSel$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("tuner1AmPortSel"));
- public static VarHandle tuner1AmPortSel$VH() {
- return sdrplay_api_RspDuoTunerParamsT.tuner1AmPortSel$VH;
+
+ private static final long tuner1AmPortSel$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel
+ * }
+ */
+ public static final long tuner1AmPortSel$offset() {
+ return tuner1AmPortSel$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel
* }
*/
- public static int tuner1AmPortSel$get(MemorySegment seg) {
- return (int)sdrplay_api_RspDuoTunerParamsT.tuner1AmPortSel$VH.get(seg);
+ public static int tuner1AmPortSel(MemorySegment struct) {
+ return struct.get(tuner1AmPortSel$LAYOUT, tuner1AmPortSel$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel
* }
*/
- public static void tuner1AmPortSel$set(MemorySegment seg, int x) {
- sdrplay_api_RspDuoTunerParamsT.tuner1AmPortSel$VH.set(seg, x);
+ public static void tuner1AmPortSel(MemorySegment struct, int fieldValue) {
+ struct.set(tuner1AmPortSel$LAYOUT, tuner1AmPortSel$OFFSET, fieldValue);
}
- public static int tuner1AmPortSel$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_RspDuoTunerParamsT.tuner1AmPortSel$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte tuner1AmNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("tuner1AmNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char tuner1AmNotchEnable
+ * }
+ */
+ public static final OfByte tuner1AmNotchEnable$layout() {
+ return tuner1AmNotchEnable$LAYOUT;
}
- public static void tuner1AmPortSel$set(MemorySegment seg, long index, int x) {
- sdrplay_api_RspDuoTunerParamsT.tuner1AmPortSel$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle tuner1AmNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("tuner1AmNotchEnable"));
- public static VarHandle tuner1AmNotchEnable$VH() {
- return sdrplay_api_RspDuoTunerParamsT.tuner1AmNotchEnable$VH;
+
+ private static final long tuner1AmNotchEnable$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char tuner1AmNotchEnable
+ * }
+ */
+ public static final long tuner1AmNotchEnable$offset() {
+ return tuner1AmNotchEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char tuner1AmNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char tuner1AmNotchEnable
* }
*/
- public static byte tuner1AmNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_RspDuoTunerParamsT.tuner1AmNotchEnable$VH.get(seg);
+ public static byte tuner1AmNotchEnable(MemorySegment struct) {
+ return struct.get(tuner1AmNotchEnable$LAYOUT, tuner1AmNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char tuner1AmNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char tuner1AmNotchEnable
* }
*/
- public static void tuner1AmNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_RspDuoTunerParamsT.tuner1AmNotchEnable$VH.set(seg, x);
+ public static void tuner1AmNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(tuner1AmNotchEnable$LAYOUT, tuner1AmNotchEnable$OFFSET, fieldValue);
}
- public static byte tuner1AmNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RspDuoTunerParamsT.tuner1AmNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte rfNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final OfByte rfNotchEnable$layout() {
+ return rfNotchEnable$LAYOUT;
}
- public static void tuner1AmNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RspDuoTunerParamsT.tuner1AmNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rfNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfNotchEnable"));
- public static VarHandle rfNotchEnable$VH() {
- return sdrplay_api_RspDuoTunerParamsT.rfNotchEnable$VH;
+
+ private static final long rfNotchEnable$OFFSET = 9;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final long rfNotchEnable$offset() {
+ return rfNotchEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static byte rfNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_RspDuoTunerParamsT.rfNotchEnable$VH.get(seg);
+ public static byte rfNotchEnable(MemorySegment struct) {
+ return struct.get(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static void rfNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_RspDuoTunerParamsT.rfNotchEnable$VH.set(seg, x);
+ public static void rfNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET, fieldValue);
}
- public static byte rfNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RspDuoTunerParamsT.rfNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte rfDabNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfDabNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
+ * }
+ */
+ public static final OfByte rfDabNotchEnable$layout() {
+ return rfDabNotchEnable$LAYOUT;
}
- public static void rfNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RspDuoTunerParamsT.rfNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rfDabNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfDabNotchEnable"));
- public static VarHandle rfDabNotchEnable$VH() {
- return sdrplay_api_RspDuoTunerParamsT.rfDabNotchEnable$VH;
+
+ private static final long rfDabNotchEnable$OFFSET = 10;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
+ * }
+ */
+ public static final long rfDabNotchEnable$offset() {
+ return rfDabNotchEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfDabNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
* }
*/
- public static byte rfDabNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_RspDuoTunerParamsT.rfDabNotchEnable$VH.get(seg);
+ public static byte rfDabNotchEnable(MemorySegment struct) {
+ return struct.get(rfDabNotchEnable$LAYOUT, rfDabNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfDabNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
* }
*/
- public static void rfDabNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_RspDuoTunerParamsT.rfDabNotchEnable$VH.set(seg, x);
+ public static void rfDabNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfDabNotchEnable$LAYOUT, rfDabNotchEnable$OFFSET, fieldValue);
}
- public static byte rfDabNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RspDuoTunerParamsT.rfDabNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void rfDabNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RspDuoTunerParamsT.rfDabNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDxParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDxParamsT.java
index b08a6e91..5df47a6a 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDxParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDxParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,184 +21,308 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char hdrEnable;
* unsigned char biasTEnable;
* sdrplay_api_RspDx_AntennaSelectT antennaSel;
* unsigned char rfNotchEnable;
* unsigned char rfDabNotchEnable;
- * };
+ * }
* }
*/
public class sdrplay_api_RspDxParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("hdrEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("antennaSel"),
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable"),
- MemoryLayout.paddingLayout(16)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_RspDxParamsT.$struct$LAYOUT;
+ sdrplay_api_RspDxParamsT() {
+ // Should not be called directly
}
- static final VarHandle hdrEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("hdrEnable"));
- public static VarHandle hdrEnable$VH() {
- return sdrplay_api_RspDxParamsT.hdrEnable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("hdrEnable"),
+ sdrplay_api_h.C_CHAR.withName("biasTEnable"),
+ MemoryLayout.paddingLayout(2),
+ sdrplay_api_h.C_INT.withName("antennaSel"),
+ sdrplay_api_h.C_CHAR.withName("rfNotchEnable"),
+ sdrplay_api_h.C_CHAR.withName("rfDabNotchEnable"),
+ MemoryLayout.paddingLayout(2)
+ ).withName("$anon$31:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte hdrEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("hdrEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char hdrEnable
+ * }
+ */
+ public static final OfByte hdrEnable$layout() {
+ return hdrEnable$LAYOUT;
+ }
+
+ private static final long hdrEnable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char hdrEnable
+ * }
+ */
+ public static final long hdrEnable$offset() {
+ return hdrEnable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char hdrEnable;
+ * {@snippet lang=c :
+ * unsigned char hdrEnable
* }
*/
- public static byte hdrEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_RspDxParamsT.hdrEnable$VH.get(seg);
+ public static byte hdrEnable(MemorySegment struct) {
+ return struct.get(hdrEnable$LAYOUT, hdrEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char hdrEnable;
+ * {@snippet lang=c :
+ * unsigned char hdrEnable
* }
*/
- public static void hdrEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_RspDxParamsT.hdrEnable$VH.set(seg, x);
+ public static void hdrEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(hdrEnable$LAYOUT, hdrEnable$OFFSET, fieldValue);
}
- public static byte hdrEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RspDxParamsT.hdrEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte biasTEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("biasTEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final OfByte biasTEnable$layout() {
+ return biasTEnable$LAYOUT;
}
- public static void hdrEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RspDxParamsT.hdrEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle biasTEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("biasTEnable"));
- public static VarHandle biasTEnable$VH() {
- return sdrplay_api_RspDxParamsT.biasTEnable$VH;
+
+ private static final long biasTEnable$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final long biasTEnable$offset() {
+ return biasTEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static byte biasTEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_RspDxParamsT.biasTEnable$VH.get(seg);
+ public static byte biasTEnable(MemorySegment struct) {
+ return struct.get(biasTEnable$LAYOUT, biasTEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static void biasTEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_RspDxParamsT.biasTEnable$VH.set(seg, x);
+ public static void biasTEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(biasTEnable$LAYOUT, biasTEnable$OFFSET, fieldValue);
}
- public static byte biasTEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RspDxParamsT.biasTEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt antennaSel$LAYOUT = (OfInt)$LAYOUT.select(groupElement("antennaSel"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDx_AntennaSelectT antennaSel
+ * }
+ */
+ public static final OfInt antennaSel$layout() {
+ return antennaSel$LAYOUT;
}
- public static void biasTEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RspDxParamsT.biasTEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle antennaSel$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("antennaSel"));
- public static VarHandle antennaSel$VH() {
- return sdrplay_api_RspDxParamsT.antennaSel$VH;
+
+ private static final long antennaSel$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDx_AntennaSelectT antennaSel
+ * }
+ */
+ public static final long antennaSel$offset() {
+ return antennaSel$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RspDx_AntennaSelectT antennaSel;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDx_AntennaSelectT antennaSel
* }
*/
- public static int antennaSel$get(MemorySegment seg) {
- return (int)sdrplay_api_RspDxParamsT.antennaSel$VH.get(seg);
+ public static int antennaSel(MemorySegment struct) {
+ return struct.get(antennaSel$LAYOUT, antennaSel$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RspDx_AntennaSelectT antennaSel;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDx_AntennaSelectT antennaSel
* }
*/
- public static void antennaSel$set(MemorySegment seg, int x) {
- sdrplay_api_RspDxParamsT.antennaSel$VH.set(seg, x);
+ public static void antennaSel(MemorySegment struct, int fieldValue) {
+ struct.set(antennaSel$LAYOUT, antennaSel$OFFSET, fieldValue);
}
- public static int antennaSel$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_RspDxParamsT.antennaSel$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte rfNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final OfByte rfNotchEnable$layout() {
+ return rfNotchEnable$LAYOUT;
}
- public static void antennaSel$set(MemorySegment seg, long index, int x) {
- sdrplay_api_RspDxParamsT.antennaSel$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rfNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfNotchEnable"));
- public static VarHandle rfNotchEnable$VH() {
- return sdrplay_api_RspDxParamsT.rfNotchEnable$VH;
+
+ private static final long rfNotchEnable$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final long rfNotchEnable$offset() {
+ return rfNotchEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static byte rfNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_RspDxParamsT.rfNotchEnable$VH.get(seg);
+ public static byte rfNotchEnable(MemorySegment struct) {
+ return struct.get(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static void rfNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_RspDxParamsT.rfNotchEnable$VH.set(seg, x);
+ public static void rfNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET, fieldValue);
}
- public static byte rfNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RspDxParamsT.rfNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte rfDabNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfDabNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
+ * }
+ */
+ public static final OfByte rfDabNotchEnable$layout() {
+ return rfDabNotchEnable$LAYOUT;
}
- public static void rfNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RspDxParamsT.rfNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rfDabNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfDabNotchEnable"));
- public static VarHandle rfDabNotchEnable$VH() {
- return sdrplay_api_RspDxParamsT.rfDabNotchEnable$VH;
+
+ private static final long rfDabNotchEnable$OFFSET = 9;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
+ * }
+ */
+ public static final long rfDabNotchEnable$offset() {
+ return rfDabNotchEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfDabNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
* }
*/
- public static byte rfDabNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_RspDxParamsT.rfDabNotchEnable$VH.get(seg);
+ public static byte rfDabNotchEnable(MemorySegment struct) {
+ return struct.get(rfDabNotchEnable$LAYOUT, rfDabNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfDabNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
* }
*/
- public static void rfDabNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_RspDxParamsT.rfDabNotchEnable$VH.set(seg, x);
+ public static void rfDabNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfDabNotchEnable$LAYOUT, rfDabNotchEnable$OFFSET, fieldValue);
}
- public static byte rfDabNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RspDxParamsT.rfDabNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void rfDabNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RspDxParamsT.rfDabNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDxTunerParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDxTunerParamsT.java
index cb28007b..167ac3ad 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDxTunerParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RspDxTunerParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,58 +21,122 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.invoke.VarHandle;
import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_RspDx_HdrModeBwT hdrBw;
- * };
+ * }
* }
*/
public class sdrplay_api_RspDxTunerParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("hdrBw")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_RspDxTunerParamsT.$struct$LAYOUT;
+ sdrplay_api_RspDxTunerParamsT() {
+ // Should not be called directly
}
- static final VarHandle hdrBw$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("hdrBw"));
- public static VarHandle hdrBw$VH() {
- return sdrplay_api_RspDxTunerParamsT.hdrBw$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("hdrBw")
+ ).withName("$anon$40:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt hdrBw$LAYOUT = (OfInt)$LAYOUT.select(groupElement("hdrBw"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDx_HdrModeBwT hdrBw
+ * }
+ */
+ public static final OfInt hdrBw$layout() {
+ return hdrBw$LAYOUT;
+ }
+
+ private static final long hdrBw$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDx_HdrModeBwT hdrBw
+ * }
+ */
+ public static final long hdrBw$offset() {
+ return hdrBw$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RspDx_HdrModeBwT hdrBw;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDx_HdrModeBwT hdrBw
* }
*/
- public static int hdrBw$get(MemorySegment seg) {
- return (int)sdrplay_api_RspDxTunerParamsT.hdrBw$VH.get(seg);
+ public static int hdrBw(MemorySegment struct) {
+ return struct.get(hdrBw$LAYOUT, hdrBw$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RspDx_HdrModeBwT hdrBw;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDx_HdrModeBwT hdrBw
* }
*/
- public static void hdrBw$set(MemorySegment seg, int x) {
- sdrplay_api_RspDxTunerParamsT.hdrBw$VH.set(seg, x);
+ public static void hdrBw(MemorySegment struct, int fieldValue) {
+ struct.set(hdrBw$LAYOUT, hdrBw$OFFSET, fieldValue);
}
- public static int hdrBw$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_RspDxTunerParamsT.hdrBw$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void hdrBw$set(MemorySegment seg, long index, int x) {
- sdrplay_api_RspDxTunerParamsT.hdrBw$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RxChannelParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RxChannelParamsT.java
index 77eda097..e4f0f43e 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RxChannelParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_RxChannelParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,9 +22,12 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_TunerParamsT tunerParams;
* sdrplay_api_ControlParamsT ctrlParams;
@@ -32,118 +35,339 @@ import java.lang.foreign.*;
* sdrplay_api_Rsp2TunerParamsT rsp2TunerParams;
* sdrplay_api_RspDuoTunerParamsT rspDuoTunerParams;
* sdrplay_api_RspDxTunerParamsT rspDxTunerParams;
- * };
+ * }
* }
*/
public class sdrplay_api_RxChannelParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("bwType"),
- Constants$root.C_INT$LAYOUT.withName("ifType"),
- Constants$root.C_INT$LAYOUT.withName("loMode"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("gRdB"),
- Constants$root.C_CHAR$LAYOUT.withName("LNAstate"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("minGr"),
- MemoryLayout.structLayout(
- Constants$root.C_FLOAT$LAYOUT.withName("curr"),
- Constants$root.C_FLOAT$LAYOUT.withName("max"),
- Constants$root.C_FLOAT$LAYOUT.withName("min")
- ).withName("gainVals")
- ).withName("gain"),
- MemoryLayout.paddingLayout(32),
- MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("rfHz"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- MemoryLayout.paddingLayout(56)
- ).withName("rfFreq"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("dcCal"),
- Constants$root.C_CHAR$LAYOUT.withName("speedUp"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("trackTime"),
- Constants$root.C_INT$LAYOUT.withName("refreshRateTime")
- ).withName("dcOffsetTuner"),
- MemoryLayout.paddingLayout(32)
- ).withName("tunerParams"),
- MemoryLayout.structLayout(
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("DCenable"),
- Constants$root.C_CHAR$LAYOUT.withName("IQenable")
- ).withName("dcOffset"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("enable"),
- Constants$root.C_CHAR$LAYOUT.withName("decimationFactor"),
- Constants$root.C_CHAR$LAYOUT.withName("wideBandSignal")
- ).withName("decimation"),
- MemoryLayout.paddingLayout(24),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("enable"),
- Constants$root.C_INT$LAYOUT.withName("setPoint_dBfs"),
- Constants$root.C_SHORT$LAYOUT.withName("attack_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_delay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_threshold_dB"),
- Constants$root.C_INT$LAYOUT.withName("syncUpdate")
- ).withName("agc"),
- Constants$root.C_INT$LAYOUT.withName("adsbMode")
- ).withName("ctrlParams"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable")
- ).withName("rsp1aTunerParams"),
- MemoryLayout.paddingLayout(24),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable"),
- MemoryLayout.paddingLayout(24),
- Constants$root.C_INT$LAYOUT.withName("amPortSel"),
- Constants$root.C_INT$LAYOUT.withName("antennaSel"),
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- MemoryLayout.paddingLayout(24)
- ).withName("rsp2TunerParams"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable"),
- MemoryLayout.paddingLayout(24),
- Constants$root.C_INT$LAYOUT.withName("tuner1AmPortSel"),
- Constants$root.C_CHAR$LAYOUT.withName("tuner1AmNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable"),
- MemoryLayout.paddingLayout(8)
- ).withName("rspDuoTunerParams"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("hdrBw")
- ).withName("rspDxTunerParams"),
- MemoryLayout.paddingLayout(32)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_RxChannelParamsT.$struct$LAYOUT;
+ sdrplay_api_RxChannelParamsT() {
+ // Should not be called directly
}
- public static MemorySegment tunerParams$slice(MemorySegment seg) {
- return seg.asSlice(0, 72);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_TunerParamsT.layout().withName("tunerParams"),
+ sdrplay_api_ControlParamsT.layout().withName("ctrlParams"),
+ sdrplay_api_Rsp1aTunerParamsT.layout().withName("rsp1aTunerParams"),
+ MemoryLayout.paddingLayout(3),
+ sdrplay_api_Rsp2TunerParamsT.layout().withName("rsp2TunerParams"),
+ sdrplay_api_RspDuoTunerParamsT.layout().withName("rspDuoTunerParams"),
+ sdrplay_api_RspDxTunerParamsT.layout().withName("rspDxTunerParams"),
+ MemoryLayout.paddingLayout(4)
+ ).withName("$anon$11:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- public static MemorySegment ctrlParams$slice(MemorySegment seg) {
- return seg.asSlice(72, 32);
+
+ private static final GroupLayout tunerParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("tunerParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TunerParamsT tunerParams
+ * }
+ */
+ public static final GroupLayout tunerParams$layout() {
+ return tunerParams$LAYOUT;
}
- public static MemorySegment rsp1aTunerParams$slice(MemorySegment seg) {
- return seg.asSlice(104, 1);
+
+ private static final long tunerParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TunerParamsT tunerParams
+ * }
+ */
+ public static final long tunerParams$offset() {
+ return tunerParams$OFFSET;
}
- public static MemorySegment rsp2TunerParams$slice(MemorySegment seg) {
- return seg.asSlice(108, 16);
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TunerParamsT tunerParams
+ * }
+ */
+ public static MemorySegment tunerParams(MemorySegment struct) {
+ return struct.asSlice(tunerParams$OFFSET, tunerParams$LAYOUT.byteSize());
}
- public static MemorySegment rspDuoTunerParams$slice(MemorySegment seg) {
- return seg.asSlice(124, 12);
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TunerParamsT tunerParams
+ * }
+ */
+ public static void tunerParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, tunerParams$OFFSET, tunerParams$LAYOUT.byteSize());
}
- public static MemorySegment rspDxTunerParams$slice(MemorySegment seg) {
- return seg.asSlice(136, 4);
+
+ private static final GroupLayout ctrlParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("ctrlParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ControlParamsT ctrlParams
+ * }
+ */
+ public static final GroupLayout ctrlParams$layout() {
+ return ctrlParams$LAYOUT;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ private static final long ctrlParams$OFFSET = 72;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ControlParamsT ctrlParams
+ * }
+ */
+ public static final long ctrlParams$offset() {
+ return ctrlParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ControlParamsT ctrlParams
+ * }
+ */
+ public static MemorySegment ctrlParams(MemorySegment struct) {
+ return struct.asSlice(ctrlParams$OFFSET, ctrlParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ControlParamsT ctrlParams
+ * }
+ */
+ public static void ctrlParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, ctrlParams$OFFSET, ctrlParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rsp1aTunerParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rsp1aTunerParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aTunerParamsT rsp1aTunerParams
+ * }
+ */
+ public static final GroupLayout rsp1aTunerParams$layout() {
+ return rsp1aTunerParams$LAYOUT;
+ }
+
+ private static final long rsp1aTunerParams$OFFSET = 104;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aTunerParamsT rsp1aTunerParams
+ * }
+ */
+ public static final long rsp1aTunerParams$offset() {
+ return rsp1aTunerParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aTunerParamsT rsp1aTunerParams
+ * }
+ */
+ public static MemorySegment rsp1aTunerParams(MemorySegment struct) {
+ return struct.asSlice(rsp1aTunerParams$OFFSET, rsp1aTunerParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aTunerParamsT rsp1aTunerParams
+ * }
+ */
+ public static void rsp1aTunerParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rsp1aTunerParams$OFFSET, rsp1aTunerParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rsp2TunerParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rsp2TunerParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2TunerParamsT rsp2TunerParams
+ * }
+ */
+ public static final GroupLayout rsp2TunerParams$layout() {
+ return rsp2TunerParams$LAYOUT;
+ }
+
+ private static final long rsp2TunerParams$OFFSET = 108;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2TunerParamsT rsp2TunerParams
+ * }
+ */
+ public static final long rsp2TunerParams$offset() {
+ return rsp2TunerParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2TunerParamsT rsp2TunerParams
+ * }
+ */
+ public static MemorySegment rsp2TunerParams(MemorySegment struct) {
+ return struct.asSlice(rsp2TunerParams$OFFSET, rsp2TunerParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2TunerParamsT rsp2TunerParams
+ * }
+ */
+ public static void rsp2TunerParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rsp2TunerParams$OFFSET, rsp2TunerParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rspDuoTunerParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rspDuoTunerParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoTunerParamsT rspDuoTunerParams
+ * }
+ */
+ public static final GroupLayout rspDuoTunerParams$layout() {
+ return rspDuoTunerParams$LAYOUT;
+ }
+
+ private static final long rspDuoTunerParams$OFFSET = 124;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoTunerParamsT rspDuoTunerParams
+ * }
+ */
+ public static final long rspDuoTunerParams$offset() {
+ return rspDuoTunerParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoTunerParamsT rspDuoTunerParams
+ * }
+ */
+ public static MemorySegment rspDuoTunerParams(MemorySegment struct) {
+ return struct.asSlice(rspDuoTunerParams$OFFSET, rspDuoTunerParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoTunerParamsT rspDuoTunerParams
+ * }
+ */
+ public static void rspDuoTunerParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rspDuoTunerParams$OFFSET, rspDuoTunerParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rspDxTunerParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rspDxTunerParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxTunerParamsT rspDxTunerParams
+ * }
+ */
+ public static final GroupLayout rspDxTunerParams$layout() {
+ return rspDxTunerParams$LAYOUT;
+ }
+
+ private static final long rspDxTunerParams$OFFSET = 136;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxTunerParamsT rspDxTunerParams
+ * }
+ */
+ public static final long rspDxTunerParams$offset() {
+ return rspDxTunerParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxTunerParamsT rspDxTunerParams
+ * }
+ */
+ public static MemorySegment rspDxTunerParams(MemorySegment struct) {
+ return struct.asSlice(rspDxTunerParams$OFFSET, rspDxTunerParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxTunerParamsT rspDxTunerParams
+ * }
+ */
+ public static void rspDxTunerParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rspDxTunerParams$OFFSET, rspDxTunerParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SelectDevice_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SelectDevice_t.java
index a272a0d9..f6d93c4f 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SelectDevice_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SelectDevice_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,29 +21,60 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.invoke.*;
import java.lang.foreign.*;
/**
- * {@snippet :
- * enum (*sdrplay_api_SelectDevice_t)(struct * device);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_SelectDevice_t)(sdrplay_api_DeviceT *)
* }
*/
-public interface sdrplay_api_SelectDevice_t {
+public class sdrplay_api_SelectDevice_t {
- int apply(java.lang.foreign.MemorySegment currentSampleRate);
- static MemorySegment allocate(sdrplay_api_SelectDevice_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$2.sdrplay_api_SelectDevice_t_UP$MH, fi, constants$2.sdrplay_api_SelectDevice_t$FUNC, scope);
+ sdrplay_api_SelectDevice_t() {
+ // Should not be called directly
}
- static sdrplay_api_SelectDevice_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _currentSampleRate) -> {
- try {
- return (int)constants$2.sdrplay_api_SelectDevice_t_DOWN$MH.invokeExact(symbol, _currentSampleRate);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment device);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_SelectDevice_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_SelectDevice_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment device) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, device);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_StreamCallback_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_StreamCallback_t.java
index 1fb93396..823949d7 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_StreamCallback_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_StreamCallback_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,29 +21,64 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.invoke.*;
import java.lang.foreign.*;
/**
- * {@snippet :
- * void (*sdrplay_api_StreamCallback_t)(short* xi,short* xq,struct * params,unsigned int numSamples,unsigned int reset,void* cbContext);
+ * {@snippet lang=c :
+ * typedef void (*sdrplay_api_StreamCallback_t)(short *, short *, sdrplay_api_StreamCbParamsT *, unsigned int, unsigned int, void *)
* }
*/
-public interface sdrplay_api_StreamCallback_t {
+public class sdrplay_api_StreamCallback_t {
- void apply(java.lang.foreign.MemorySegment xi, java.lang.foreign.MemorySegment xq, java.lang.foreign.MemorySegment params, int numSamples, int reset, java.lang.foreign.MemorySegment cbContext);
- static MemorySegment allocate(sdrplay_api_StreamCallback_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$0.sdrplay_api_StreamCallback_t_UP$MH, fi, constants$0.sdrplay_api_StreamCallback_t$FUNC, scope);
+ sdrplay_api_StreamCallback_t() {
+ // Should not be called directly
}
- static sdrplay_api_StreamCallback_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _xi, java.lang.foreign.MemorySegment _xq, java.lang.foreign.MemorySegment _params, int _numSamples, int _reset, java.lang.foreign.MemorySegment _cbContext) -> {
- try {
- constants$0.sdrplay_api_StreamCallback_t_DOWN$MH.invokeExact(symbol, _xi, _xq, _params, _numSamples, _reset, _cbContext);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ void apply(MemorySegment xi, MemorySegment xq, MemorySegment params, int numSamples, int reset, MemorySegment cbContext);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.ofVoid(
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_StreamCallback_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_StreamCallback_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static void invoke(MemorySegment funcPtr,MemorySegment xi, MemorySegment xq, MemorySegment params, int numSamples, int reset, MemorySegment cbContext) {
+ try {
+ DOWN$MH.invokeExact(funcPtr, xi, xq, params, numSamples, reset, cbContext);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_StreamCbParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_StreamCbParamsT.java
index 71c50698..ac468322 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_StreamCbParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_StreamCbParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,178 +21,306 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.invoke.VarHandle;
import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned int firstSampleNum;
* int grChanged;
* int rfChanged;
* int fsChanged;
* unsigned int numSamples;
- * };
+ * }
* }
*/
public class sdrplay_api_StreamCbParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("firstSampleNum"),
- Constants$root.C_INT$LAYOUT.withName("grChanged"),
- Constants$root.C_INT$LAYOUT.withName("rfChanged"),
- Constants$root.C_INT$LAYOUT.withName("fsChanged"),
- Constants$root.C_INT$LAYOUT.withName("numSamples")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_StreamCbParamsT.$struct$LAYOUT;
+ sdrplay_api_StreamCbParamsT() {
+ // Should not be called directly
}
- static final VarHandle firstSampleNum$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("firstSampleNum"));
- public static VarHandle firstSampleNum$VH() {
- return sdrplay_api_StreamCbParamsT.firstSampleNum$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("firstSampleNum"),
+ sdrplay_api_h.C_INT.withName("grChanged"),
+ sdrplay_api_h.C_INT.withName("rfChanged"),
+ sdrplay_api_h.C_INT.withName("fsChanged"),
+ sdrplay_api_h.C_INT.withName("numSamples")
+ ).withName("$anon$57:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt firstSampleNum$LAYOUT = (OfInt)$LAYOUT.select(groupElement("firstSampleNum"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int firstSampleNum
+ * }
+ */
+ public static final OfInt firstSampleNum$layout() {
+ return firstSampleNum$LAYOUT;
+ }
+
+ private static final long firstSampleNum$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int firstSampleNum
+ * }
+ */
+ public static final long firstSampleNum$offset() {
+ return firstSampleNum$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int firstSampleNum;
+ * {@snippet lang=c :
+ * unsigned int firstSampleNum
* }
*/
- public static int firstSampleNum$get(MemorySegment seg) {
- return (int)sdrplay_api_StreamCbParamsT.firstSampleNum$VH.get(seg);
+ public static int firstSampleNum(MemorySegment struct) {
+ return struct.get(firstSampleNum$LAYOUT, firstSampleNum$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int firstSampleNum;
+ * {@snippet lang=c :
+ * unsigned int firstSampleNum
* }
*/
- public static void firstSampleNum$set(MemorySegment seg, int x) {
- sdrplay_api_StreamCbParamsT.firstSampleNum$VH.set(seg, x);
+ public static void firstSampleNum(MemorySegment struct, int fieldValue) {
+ struct.set(firstSampleNum$LAYOUT, firstSampleNum$OFFSET, fieldValue);
}
- public static int firstSampleNum$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_StreamCbParamsT.firstSampleNum$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt grChanged$LAYOUT = (OfInt)$LAYOUT.select(groupElement("grChanged"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int grChanged
+ * }
+ */
+ public static final OfInt grChanged$layout() {
+ return grChanged$LAYOUT;
}
- public static void firstSampleNum$set(MemorySegment seg, long index, int x) {
- sdrplay_api_StreamCbParamsT.firstSampleNum$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle grChanged$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("grChanged"));
- public static VarHandle grChanged$VH() {
- return sdrplay_api_StreamCbParamsT.grChanged$VH;
+
+ private static final long grChanged$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int grChanged
+ * }
+ */
+ public static final long grChanged$offset() {
+ return grChanged$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int grChanged;
+ * {@snippet lang=c :
+ * int grChanged
* }
*/
- public static int grChanged$get(MemorySegment seg) {
- return (int)sdrplay_api_StreamCbParamsT.grChanged$VH.get(seg);
+ public static int grChanged(MemorySegment struct) {
+ return struct.get(grChanged$LAYOUT, grChanged$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int grChanged;
+ * {@snippet lang=c :
+ * int grChanged
* }
*/
- public static void grChanged$set(MemorySegment seg, int x) {
- sdrplay_api_StreamCbParamsT.grChanged$VH.set(seg, x);
+ public static void grChanged(MemorySegment struct, int fieldValue) {
+ struct.set(grChanged$LAYOUT, grChanged$OFFSET, fieldValue);
}
- public static int grChanged$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_StreamCbParamsT.grChanged$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt rfChanged$LAYOUT = (OfInt)$LAYOUT.select(groupElement("rfChanged"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int rfChanged
+ * }
+ */
+ public static final OfInt rfChanged$layout() {
+ return rfChanged$LAYOUT;
}
- public static void grChanged$set(MemorySegment seg, long index, int x) {
- sdrplay_api_StreamCbParamsT.grChanged$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rfChanged$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfChanged"));
- public static VarHandle rfChanged$VH() {
- return sdrplay_api_StreamCbParamsT.rfChanged$VH;
+
+ private static final long rfChanged$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int rfChanged
+ * }
+ */
+ public static final long rfChanged$offset() {
+ return rfChanged$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int rfChanged;
+ * {@snippet lang=c :
+ * int rfChanged
* }
*/
- public static int rfChanged$get(MemorySegment seg) {
- return (int)sdrplay_api_StreamCbParamsT.rfChanged$VH.get(seg);
+ public static int rfChanged(MemorySegment struct) {
+ return struct.get(rfChanged$LAYOUT, rfChanged$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int rfChanged;
+ * {@snippet lang=c :
+ * int rfChanged
* }
*/
- public static void rfChanged$set(MemorySegment seg, int x) {
- sdrplay_api_StreamCbParamsT.rfChanged$VH.set(seg, x);
+ public static void rfChanged(MemorySegment struct, int fieldValue) {
+ struct.set(rfChanged$LAYOUT, rfChanged$OFFSET, fieldValue);
}
- public static int rfChanged$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_StreamCbParamsT.rfChanged$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt fsChanged$LAYOUT = (OfInt)$LAYOUT.select(groupElement("fsChanged"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int fsChanged
+ * }
+ */
+ public static final OfInt fsChanged$layout() {
+ return fsChanged$LAYOUT;
}
- public static void rfChanged$set(MemorySegment seg, long index, int x) {
- sdrplay_api_StreamCbParamsT.rfChanged$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle fsChanged$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("fsChanged"));
- public static VarHandle fsChanged$VH() {
- return sdrplay_api_StreamCbParamsT.fsChanged$VH;
+
+ private static final long fsChanged$OFFSET = 12;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int fsChanged
+ * }
+ */
+ public static final long fsChanged$offset() {
+ return fsChanged$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int fsChanged;
+ * {@snippet lang=c :
+ * int fsChanged
* }
*/
- public static int fsChanged$get(MemorySegment seg) {
- return (int)sdrplay_api_StreamCbParamsT.fsChanged$VH.get(seg);
+ public static int fsChanged(MemorySegment struct) {
+ return struct.get(fsChanged$LAYOUT, fsChanged$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int fsChanged;
+ * {@snippet lang=c :
+ * int fsChanged
* }
*/
- public static void fsChanged$set(MemorySegment seg, int x) {
- sdrplay_api_StreamCbParamsT.fsChanged$VH.set(seg, x);
+ public static void fsChanged(MemorySegment struct, int fieldValue) {
+ struct.set(fsChanged$LAYOUT, fsChanged$OFFSET, fieldValue);
}
- public static int fsChanged$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_StreamCbParamsT.fsChanged$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt numSamples$LAYOUT = (OfInt)$LAYOUT.select(groupElement("numSamples"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int numSamples
+ * }
+ */
+ public static final OfInt numSamples$layout() {
+ return numSamples$LAYOUT;
}
- public static void fsChanged$set(MemorySegment seg, long index, int x) {
- sdrplay_api_StreamCbParamsT.fsChanged$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle numSamples$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("numSamples"));
- public static VarHandle numSamples$VH() {
- return sdrplay_api_StreamCbParamsT.numSamples$VH;
+
+ private static final long numSamples$OFFSET = 16;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int numSamples
+ * }
+ */
+ public static final long numSamples$offset() {
+ return numSamples$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int numSamples;
+ * {@snippet lang=c :
+ * unsigned int numSamples
* }
*/
- public static int numSamples$get(MemorySegment seg) {
- return (int)sdrplay_api_StreamCbParamsT.numSamples$VH.get(seg);
+ public static int numSamples(MemorySegment struct) {
+ return struct.get(numSamples$LAYOUT, numSamples$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int numSamples;
+ * {@snippet lang=c :
+ * unsigned int numSamples
* }
*/
- public static void numSamples$set(MemorySegment seg, int x) {
- sdrplay_api_StreamCbParamsT.numSamples$VH.set(seg, x);
+ public static void numSamples(MemorySegment struct, int fieldValue) {
+ struct.set(numSamples$LAYOUT, numSamples$OFFSET, fieldValue);
}
- public static int numSamples$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_StreamCbParamsT.numSamples$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void numSamples$set(MemorySegment seg, long index, int x) {
- sdrplay_api_StreamCbParamsT.numSamples$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoActiveTuner_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoActiveTuner_t.java
index 0114308b..302a9922 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoActiveTuner_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoActiveTuner_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,29 +21,62 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.invoke.*;
import java.lang.foreign.*;
/**
- * {@snippet :
- * enum (*sdrplay_api_SwapRspDuoActiveTuner_t)(void* dev,enum * tuner,enum tuner1AmPortSel);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoActiveTuner_t)(HANDLE, sdrplay_api_TunerSelectT *, sdrplay_api_RspDuo_AmPortSelectT)
* }
*/
-public interface sdrplay_api_SwapRspDuoActiveTuner_t {
+public class sdrplay_api_SwapRspDuoActiveTuner_t {
- int apply(java.lang.foreign.MemorySegment dev, java.lang.foreign.MemorySegment tuner, int tuner1AmPortSel);
- static MemorySegment allocate(sdrplay_api_SwapRspDuoActiveTuner_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$6.sdrplay_api_SwapRspDuoActiveTuner_t_UP$MH, fi, constants$6.sdrplay_api_SwapRspDuoActiveTuner_t$FUNC, scope);
+ sdrplay_api_SwapRspDuoActiveTuner_t() {
+ // Should not be called directly
}
- static sdrplay_api_SwapRspDuoActiveTuner_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev, java.lang.foreign.MemorySegment _tuner, int _tuner1AmPortSel) -> {
- try {
- return (int)constants$6.sdrplay_api_SwapRspDuoActiveTuner_t_DOWN$MH.invokeExact(symbol, _dev, _tuner, _tuner1AmPortSel);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev, MemorySegment tuner, int tuner1AmPortSel);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_SwapRspDuoActiveTuner_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_SwapRspDuoActiveTuner_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev, MemorySegment tuner, int tuner1AmPortSel) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev, tuner, tuner1AmPortSel);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t.java
index 255dddc2..2f1fee7a 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,29 +21,60 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.invoke.*;
import java.lang.foreign.*;
/**
- * {@snippet :
- * enum (*sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t)(double* currentSampleRate);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t)(double *)
* }
*/
-public interface sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t {
+public class sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t {
- int apply(java.lang.foreign.MemorySegment currentSampleRate);
- static MemorySegment allocate(sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$6.sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_UP$MH, fi, constants$6.sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t$FUNC, scope);
+ sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t() {
+ // Should not be called directly
}
- static sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _currentSampleRate) -> {
- try {
- return (int)constants$6.sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_DOWN$MH.invokeExact(symbol, _currentSampleRate);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment currentSampleRate);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment currentSampleRate) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, currentSampleRate);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoMode_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoMode_t.java
index af607c17..040537b6 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoMode_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SwapRspDuoMode_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,29 +21,67 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.invoke.*;
import java.lang.foreign.*;
/**
- * {@snippet :
- * enum (*sdrplay_api_SwapRspDuoMode_t)(struct * currDevice,struct ** deviceParams,enum rspDuoMode,double sampleRate,enum tuner,enum bwType,enum ifType,enum tuner1AmPortSel);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_SwapRspDuoMode_t)(sdrplay_api_DeviceT *, sdrplay_api_DeviceParamsT **, sdrplay_api_RspDuoModeT, double, sdrplay_api_TunerSelectT, sdrplay_api_Bw_MHzT, sdrplay_api_If_kHzT, sdrplay_api_RspDuo_AmPortSelectT)
* }
*/
-public interface sdrplay_api_SwapRspDuoMode_t {
+public class sdrplay_api_SwapRspDuoMode_t {
- int apply(java.lang.foreign.MemorySegment currDevice, java.lang.foreign.MemorySegment deviceParams, int rspDuoMode, double sampleRate, int tuner, int bwType, int ifType, int tuner1AmPortSel);
- static MemorySegment allocate(sdrplay_api_SwapRspDuoMode_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$6.sdrplay_api_SwapRspDuoMode_t_UP$MH, fi, constants$6.sdrplay_api_SwapRspDuoMode_t$FUNC, scope);
+ sdrplay_api_SwapRspDuoMode_t() {
+ // Should not be called directly
}
- static sdrplay_api_SwapRspDuoMode_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _currDevice, java.lang.foreign.MemorySegment _deviceParams, int _rspDuoMode, double _sampleRate, int _tuner, int _bwType, int _ifType, int _tuner1AmPortSel) -> {
- try {
- return (int)constants$6.sdrplay_api_SwapRspDuoMode_t_DOWN$MH.invokeExact(symbol, _currDevice, _deviceParams, _rspDuoMode, _sampleRate, _tuner, _bwType, _ifType, _tuner1AmPortSel);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment currDevice, MemorySegment deviceParams, int rspDuoMode, double sampleRate, int tuner, int bwType, int ifType, int tuner1AmPortSel);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_DOUBLE,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_SwapRspDuoMode_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_SwapRspDuoMode_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment currDevice, MemorySegment deviceParams, int rspDuoMode, double sampleRate, int tuner, int bwType, int ifType, int tuner1AmPortSel) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, currDevice, deviceParams, rspDuoMode, sampleRate, tuner, bwType, ifType, tuner1AmPortSel);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SyncUpdateT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SyncUpdateT.java
index 46c63a6e..e6765eed 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SyncUpdateT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_SyncUpdateT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,88 +21,168 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.invoke.VarHandle;
import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned int sampleNum;
* unsigned int period;
- * };
+ * }
* }
*/
public class sdrplay_api_SyncUpdateT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("sampleNum"),
- Constants$root.C_INT$LAYOUT.withName("period")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_SyncUpdateT.$struct$LAYOUT;
+ sdrplay_api_SyncUpdateT() {
+ // Should not be called directly
}
- static final VarHandle sampleNum$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("sampleNum"));
- public static VarHandle sampleNum$VH() {
- return sdrplay_api_SyncUpdateT.sampleNum$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("sampleNum"),
+ sdrplay_api_h.C_INT.withName("period")
+ ).withName("$anon$24:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt sampleNum$LAYOUT = (OfInt)$LAYOUT.select(groupElement("sampleNum"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int sampleNum
+ * }
+ */
+ public static final OfInt sampleNum$layout() {
+ return sampleNum$LAYOUT;
+ }
+
+ private static final long sampleNum$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int sampleNum
+ * }
+ */
+ public static final long sampleNum$offset() {
+ return sampleNum$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int sampleNum;
+ * {@snippet lang=c :
+ * unsigned int sampleNum
* }
*/
- public static int sampleNum$get(MemorySegment seg) {
- return (int)sdrplay_api_SyncUpdateT.sampleNum$VH.get(seg);
+ public static int sampleNum(MemorySegment struct) {
+ return struct.get(sampleNum$LAYOUT, sampleNum$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int sampleNum;
+ * {@snippet lang=c :
+ * unsigned int sampleNum
* }
*/
- public static void sampleNum$set(MemorySegment seg, int x) {
- sdrplay_api_SyncUpdateT.sampleNum$VH.set(seg, x);
+ public static void sampleNum(MemorySegment struct, int fieldValue) {
+ struct.set(sampleNum$LAYOUT, sampleNum$OFFSET, fieldValue);
}
- public static int sampleNum$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_SyncUpdateT.sampleNum$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt period$LAYOUT = (OfInt)$LAYOUT.select(groupElement("period"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int period
+ * }
+ */
+ public static final OfInt period$layout() {
+ return period$LAYOUT;
}
- public static void sampleNum$set(MemorySegment seg, long index, int x) {
- sdrplay_api_SyncUpdateT.sampleNum$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle period$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("period"));
- public static VarHandle period$VH() {
- return sdrplay_api_SyncUpdateT.period$VH;
+
+ private static final long period$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int period
+ * }
+ */
+ public static final long period$offset() {
+ return period$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int period;
+ * {@snippet lang=c :
+ * unsigned int period
* }
*/
- public static int period$get(MemorySegment seg) {
- return (int)sdrplay_api_SyncUpdateT.period$VH.get(seg);
+ public static int period(MemorySegment struct) {
+ return struct.get(period$LAYOUT, period$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int period;
+ * {@snippet lang=c :
+ * unsigned int period
* }
*/
- public static void period$set(MemorySegment seg, int x) {
- sdrplay_api_SyncUpdateT.period$VH.set(seg, x);
+ public static void period(MemorySegment struct, int fieldValue) {
+ struct.set(period$LAYOUT, period$OFFSET, fieldValue);
}
- public static int period$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_SyncUpdateT.period$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void period$set(MemorySegment seg, long index, int x) {
- sdrplay_api_SyncUpdateT.period$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_TunerParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_TunerParamsT.java
index f01ce3fa..e33730e8 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_TunerParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_TunerParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,11 +21,14 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
-import java.lang.invoke.VarHandle;
import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_Bw_MHzT bwType;
* sdrplay_api_If_kHzT ifType;
@@ -33,144 +36,339 @@ import java.lang.foreign.*;
* sdrplay_api_GainT gain;
* sdrplay_api_RfFreqT rfFreq;
* sdrplay_api_DcOffsetTunerT dcOffsetTuner;
- * };
+ * }
* }
*/
public class sdrplay_api_TunerParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("bwType"),
- Constants$root.C_INT$LAYOUT.withName("ifType"),
- Constants$root.C_INT$LAYOUT.withName("loMode"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("gRdB"),
- Constants$root.C_CHAR$LAYOUT.withName("LNAstate"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("minGr"),
- MemoryLayout.structLayout(
- Constants$root.C_FLOAT$LAYOUT.withName("curr"),
- Constants$root.C_FLOAT$LAYOUT.withName("max"),
- Constants$root.C_FLOAT$LAYOUT.withName("min")
- ).withName("gainVals")
- ).withName("gain"),
- MemoryLayout.paddingLayout(32),
- MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("rfHz"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- MemoryLayout.paddingLayout(56)
- ).withName("rfFreq"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("dcCal"),
- Constants$root.C_CHAR$LAYOUT.withName("speedUp"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("trackTime"),
- Constants$root.C_INT$LAYOUT.withName("refreshRateTime")
- ).withName("dcOffsetTuner"),
- MemoryLayout.paddingLayout(32)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_TunerParamsT.$struct$LAYOUT;
+ sdrplay_api_TunerParamsT() {
+ // Should not be called directly
}
- static final VarHandle bwType$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("bwType"));
- public static VarHandle bwType$VH() {
- return sdrplay_api_TunerParamsT.bwType$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("bwType"),
+ sdrplay_api_h.C_INT.withName("ifType"),
+ sdrplay_api_h.C_INT.withName("loMode"),
+ sdrplay_api_GainT.layout().withName("gain"),
+ MemoryLayout.paddingLayout(4),
+ sdrplay_api_RfFreqT.layout().withName("rfFreq"),
+ sdrplay_api_DcOffsetTunerT.layout().withName("dcOffsetTuner"),
+ MemoryLayout.paddingLayout(4)
+ ).withName("$anon$83:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt bwType$LAYOUT = (OfInt)$LAYOUT.select(groupElement("bwType"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Bw_MHzT bwType
+ * }
+ */
+ public static final OfInt bwType$layout() {
+ return bwType$LAYOUT;
+ }
+
+ private static final long bwType$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Bw_MHzT bwType
+ * }
+ */
+ public static final long bwType$offset() {
+ return bwType$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_Bw_MHzT bwType;
+ * {@snippet lang=c :
+ * sdrplay_api_Bw_MHzT bwType
* }
*/
- public static int bwType$get(MemorySegment seg) {
- return (int)sdrplay_api_TunerParamsT.bwType$VH.get(seg);
+ public static int bwType(MemorySegment struct) {
+ return struct.get(bwType$LAYOUT, bwType$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_Bw_MHzT bwType;
+ * {@snippet lang=c :
+ * sdrplay_api_Bw_MHzT bwType
* }
*/
- public static void bwType$set(MemorySegment seg, int x) {
- sdrplay_api_TunerParamsT.bwType$VH.set(seg, x);
+ public static void bwType(MemorySegment struct, int fieldValue) {
+ struct.set(bwType$LAYOUT, bwType$OFFSET, fieldValue);
}
- public static int bwType$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_TunerParamsT.bwType$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt ifType$LAYOUT = (OfInt)$LAYOUT.select(groupElement("ifType"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_If_kHzT ifType
+ * }
+ */
+ public static final OfInt ifType$layout() {
+ return ifType$LAYOUT;
}
- public static void bwType$set(MemorySegment seg, long index, int x) {
- sdrplay_api_TunerParamsT.bwType$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle ifType$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("ifType"));
- public static VarHandle ifType$VH() {
- return sdrplay_api_TunerParamsT.ifType$VH;
+
+ private static final long ifType$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_If_kHzT ifType
+ * }
+ */
+ public static final long ifType$offset() {
+ return ifType$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_If_kHzT ifType;
+ * {@snippet lang=c :
+ * sdrplay_api_If_kHzT ifType
* }
*/
- public static int ifType$get(MemorySegment seg) {
- return (int)sdrplay_api_TunerParamsT.ifType$VH.get(seg);
+ public static int ifType(MemorySegment struct) {
+ return struct.get(ifType$LAYOUT, ifType$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_If_kHzT ifType;
+ * {@snippet lang=c :
+ * sdrplay_api_If_kHzT ifType
* }
*/
- public static void ifType$set(MemorySegment seg, int x) {
- sdrplay_api_TunerParamsT.ifType$VH.set(seg, x);
+ public static void ifType(MemorySegment struct, int fieldValue) {
+ struct.set(ifType$LAYOUT, ifType$OFFSET, fieldValue);
}
- public static int ifType$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_TunerParamsT.ifType$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt loMode$LAYOUT = (OfInt)$LAYOUT.select(groupElement("loMode"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_LoModeT loMode
+ * }
+ */
+ public static final OfInt loMode$layout() {
+ return loMode$LAYOUT;
}
- public static void ifType$set(MemorySegment seg, long index, int x) {
- sdrplay_api_TunerParamsT.ifType$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle loMode$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("loMode"));
- public static VarHandle loMode$VH() {
- return sdrplay_api_TunerParamsT.loMode$VH;
+
+ private static final long loMode$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_LoModeT loMode
+ * }
+ */
+ public static final long loMode$offset() {
+ return loMode$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_LoModeT loMode;
+ * {@snippet lang=c :
+ * sdrplay_api_LoModeT loMode
* }
*/
- public static int loMode$get(MemorySegment seg) {
- return (int)sdrplay_api_TunerParamsT.loMode$VH.get(seg);
+ public static int loMode(MemorySegment struct) {
+ return struct.get(loMode$LAYOUT, loMode$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_LoModeT loMode;
+ * {@snippet lang=c :
+ * sdrplay_api_LoModeT loMode
* }
*/
- public static void loMode$set(MemorySegment seg, int x) {
- sdrplay_api_TunerParamsT.loMode$VH.set(seg, x);
+ public static void loMode(MemorySegment struct, int fieldValue) {
+ struct.set(loMode$LAYOUT, loMode$OFFSET, fieldValue);
}
- public static int loMode$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_TunerParamsT.loMode$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout gain$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("gain"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainT gain
+ * }
+ */
+ public static final GroupLayout gain$layout() {
+ return gain$LAYOUT;
}
- public static void loMode$set(MemorySegment seg, long index, int x) {
- sdrplay_api_TunerParamsT.loMode$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long gain$OFFSET = 12;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainT gain
+ * }
+ */
+ public static final long gain$offset() {
+ return gain$OFFSET;
}
- public static MemorySegment gain$slice(MemorySegment seg) {
- return seg.asSlice(12, 24);
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainT gain
+ * }
+ */
+ public static MemorySegment gain(MemorySegment struct) {
+ return struct.asSlice(gain$OFFSET, gain$LAYOUT.byteSize());
}
- public static MemorySegment rfFreq$slice(MemorySegment seg) {
- return seg.asSlice(40, 16);
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainT gain
+ * }
+ */
+ public static void gain(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, gain$OFFSET, gain$LAYOUT.byteSize());
}
- public static MemorySegment dcOffsetTuner$slice(MemorySegment seg) {
- return seg.asSlice(56, 12);
+
+ private static final GroupLayout rfFreq$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rfFreq"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RfFreqT rfFreq
+ * }
+ */
+ public static final GroupLayout rfFreq$layout() {
+ return rfFreq$LAYOUT;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ private static final long rfFreq$OFFSET = 40;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RfFreqT rfFreq
+ * }
+ */
+ public static final long rfFreq$offset() {
+ return rfFreq$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RfFreqT rfFreq
+ * }
+ */
+ public static MemorySegment rfFreq(MemorySegment struct) {
+ return struct.asSlice(rfFreq$OFFSET, rfFreq$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RfFreqT rfFreq
+ * }
+ */
+ public static void rfFreq(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rfFreq$OFFSET, rfFreq$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout dcOffsetTuner$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("dcOffsetTuner"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetTunerT dcOffsetTuner
+ * }
+ */
+ public static final GroupLayout dcOffsetTuner$layout() {
+ return dcOffsetTuner$LAYOUT;
+ }
+
+ private static final long dcOffsetTuner$OFFSET = 56;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetTunerT dcOffsetTuner
+ * }
+ */
+ public static final long dcOffsetTuner$offset() {
+ return dcOffsetTuner$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetTunerT dcOffsetTuner
+ * }
+ */
+ public static MemorySegment dcOffsetTuner(MemorySegment struct) {
+ return struct.asSlice(dcOffsetTuner$OFFSET, dcOffsetTuner$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetTunerT dcOffsetTuner
+ * }
+ */
+ public static void dcOffsetTuner(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, dcOffsetTuner$OFFSET, dcOffsetTuner$LAYOUT.byteSize());
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Uninit_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Uninit_t.java
index eb308331..302b639a 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Uninit_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Uninit_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,29 +21,60 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.invoke.*;
import java.lang.foreign.*;
/**
- * {@snippet :
- * enum (*sdrplay_api_Uninit_t)(void* dev);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_Uninit_t)(HANDLE)
* }
*/
-public interface sdrplay_api_Uninit_t {
+public class sdrplay_api_Uninit_t {
- int apply(java.lang.foreign.MemorySegment currentSampleRate);
- static MemorySegment allocate(sdrplay_api_Uninit_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$5.sdrplay_api_Uninit_t_UP$MH, fi, constants$5.sdrplay_api_Uninit_t$FUNC, scope);
+ sdrplay_api_Uninit_t() {
+ // Should not be called directly
}
- static sdrplay_api_Uninit_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _currentSampleRate) -> {
- try {
- return (int)constants$5.sdrplay_api_Uninit_t_DOWN$MH.invokeExact(symbol, _currentSampleRate);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_Uninit_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_Uninit_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_UnlockDeviceApi_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_UnlockDeviceApi_t.java
index ef50298d..bce38dad 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_UnlockDeviceApi_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_UnlockDeviceApi_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,29 +21,58 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.invoke.*;
import java.lang.foreign.*;
/**
- * {@snippet :
- * enum (*sdrplay_api_UnlockDeviceApi_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_UnlockDeviceApi_t)(void)
* }
*/
-public interface sdrplay_api_UnlockDeviceApi_t {
+public class sdrplay_api_UnlockDeviceApi_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_UnlockDeviceApi_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$2.sdrplay_api_UnlockDeviceApi_t_UP$MH, fi, constants$2.sdrplay_api_UnlockDeviceApi_t$FUNC, scope);
+ sdrplay_api_UnlockDeviceApi_t() {
+ // Should not be called directly
}
- static sdrplay_api_UnlockDeviceApi_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$2.sdrplay_api_UnlockDeviceApi_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_UnlockDeviceApi_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_UnlockDeviceApi_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Update_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Update_t.java
index 6c2f041a..c3c4e358 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Update_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_Update_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,29 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.invoke.*;
import java.lang.foreign.*;
/**
- * {@snippet :
- * enum (*sdrplay_api_Update_t)(void* dev,enum tuner,enum reasonForUpdate,enum reasonForUpdateExt1);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_Update_t)(HANDLE, sdrplay_api_TunerSelectT, sdrplay_api_ReasonForUpdateT, sdrplay_api_ReasonForUpdateExtension1T)
* }
*/
-public interface sdrplay_api_Update_t {
+public class sdrplay_api_Update_t {
- int apply(java.lang.foreign.MemorySegment dev, int tuner, int reasonForUpdate, int reasonForUpdateExt1);
- static MemorySegment allocate(sdrplay_api_Update_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$5.sdrplay_api_Update_t_UP$MH, fi, constants$5.sdrplay_api_Update_t$FUNC, scope);
+ sdrplay_api_Update_t() {
+ // Should not be called directly
}
- static sdrplay_api_Update_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev, int _tuner, int _reasonForUpdate, int _reasonForUpdateExt1) -> {
- try {
- return (int)constants$5.sdrplay_api_Update_t_DOWN$MH.invokeExact(symbol, _dev, _tuner, _reasonForUpdate, _reasonForUpdateExt1);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev, int tuner, int reasonForUpdate, int reasonForUpdateExt1);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_Update_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_Update_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev, int tuner, int reasonForUpdate, int reasonForUpdateExt1) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev, tuner, reasonForUpdate, reasonForUpdateExt1);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_h.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_h.java
index a5f87aca..dd6501a3 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_h.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_07/sdrplay_api_h.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,1656 +21,2695 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_07;
+import java.lang.foreign.AddressLayout;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.GroupLayout;
+import java.lang.foreign.Linker;
+import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
+import java.lang.foreign.PaddingLayout;
+import java.lang.foreign.SequenceLayout;
+import java.lang.foreign.StructLayout;
+import java.lang.foreign.SymbolLookup;
+import java.lang.foreign.ValueLayout;
import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.util.Arrays;
+import java.util.stream.Collectors;
-import static java.lang.foreign.ValueLayout.OfAddress;
-import static java.lang.foreign.ValueLayout.OfByte;
-import static java.lang.foreign.ValueLayout.OfDouble;
-import static java.lang.foreign.ValueLayout.OfFloat;
-import static java.lang.foreign.ValueLayout.OfInt;
-import static java.lang.foreign.ValueLayout.OfLong;
-import static java.lang.foreign.ValueLayout.OfShort;
-public class sdrplay_api_h {
+import static java.lang.foreign.ValueLayout.JAVA_BYTE;
- public static final OfByte C_CHAR = Constants$root.C_CHAR$LAYOUT;
- public static final OfShort C_SHORT = Constants$root.C_SHORT$LAYOUT;
- public static final OfInt C_INT = Constants$root.C_INT$LAYOUT;
- public static final OfLong C_LONG = Constants$root.C_LONG_LONG$LAYOUT;
- public static final OfLong C_LONG_LONG = Constants$root.C_LONG_LONG$LAYOUT;
- public static final OfFloat C_FLOAT = Constants$root.C_FLOAT$LAYOUT;
- public static final OfDouble C_DOUBLE = Constants$root.C_DOUBLE$LAYOUT;
- public static final OfAddress C_POINTER = Constants$root.C_POINTER$LAYOUT;
+public class sdrplay_api_h {
+
+ sdrplay_api_h() {
+ // Should not be called directly
+ }
+
+ static final Arena LIBRARY_ARENA = Arena.ofAuto();
+ static final boolean TRACE_DOWNCALLS = Boolean.getBoolean("jextract.trace.downcalls");
+
+ static void traceDowncall(String name, Object... args) {
+ String traceArgs = Arrays.stream(args)
+ .map(Object::toString)
+ .collect(Collectors.joining(", "));
+ System.out.printf("%s(%s)\n", name, traceArgs);
+ }
+
+ static MemorySegment findOrThrow(String symbol) {
+ return SYMBOL_LOOKUP.find(symbol)
+ .orElseThrow(() -> new UnsatisfiedLinkError("unresolved symbol: " + symbol));
+ }
+
+ static MethodHandle upcallHandle(Class> fi, String name, FunctionDescriptor fdesc) {
+ try {
+ return MethodHandles.lookup().findVirtual(fi, name, fdesc.toMethodType());
+ } catch (ReflectiveOperationException ex) {
+ throw new AssertionError(ex);
+ }
+ }
+
+ static MemoryLayout align(MemoryLayout layout, long align) {
+ return switch (layout) {
+ case PaddingLayout p -> p;
+ case ValueLayout v -> v.withByteAlignment(align);
+ case GroupLayout g -> {
+ MemoryLayout[] alignedMembers = g.memberLayouts().stream()
+ .map(m -> align(m, align)).toArray(MemoryLayout[]::new);
+ yield g instanceof StructLayout ?
+ MemoryLayout.structLayout(alignedMembers) : MemoryLayout.unionLayout(alignedMembers);
+ }
+ case SequenceLayout s -> MemoryLayout.sequenceLayout(s.elementCount(), align(s.elementLayout(), align));
+ };
+ }
+
+ //jextract auto-generated code modified to wrap with exception handler for systems that don't have the library
+ static SymbolLookup SYMBOL_LOOKUP;
+ static
+ {
+ try
+ {
+ SYMBOL_LOOKUP = SymbolLookup.libraryLookup(System.mapLibraryName("sdrplay_api"), LIBRARY_ARENA)
+ .or(SymbolLookup.loaderLookup())
+ .or(Linker.nativeLinker().defaultLookup());
+ }
+ catch(Exception e)
+ {
+ SYMBOL_LOOKUP = null;
+ }
+ }
+
+ public static final ValueLayout.OfBoolean C_BOOL = ValueLayout.JAVA_BOOLEAN;
+ public static final ValueLayout.OfByte C_CHAR = ValueLayout.JAVA_BYTE;
+ public static final ValueLayout.OfShort C_SHORT = ValueLayout.JAVA_SHORT;
+ public static final ValueLayout.OfInt C_INT = ValueLayout.JAVA_INT;
+ public static final ValueLayout.OfLong C_LONG_LONG = ValueLayout.JAVA_LONG;
+ public static final ValueLayout.OfFloat C_FLOAT = ValueLayout.JAVA_FLOAT;
+ public static final ValueLayout.OfDouble C_DOUBLE = ValueLayout.JAVA_DOUBLE;
+ public static final AddressLayout C_POINTER = ValueLayout.ADDRESS
+ .withTargetLayout(MemoryLayout.sequenceLayout(java.lang.Long.MAX_VALUE, JAVA_BYTE));
+ public static final ValueLayout.OfLong C_LONG = ValueLayout.JAVA_LONG;
+ private static final int RSPIA_NUM_LNA_STATES = (int)10L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPIA_NUM_LNA_STATES 10
* }
*/
public static int RSPIA_NUM_LNA_STATES() {
- return (int)10L;
+ return RSPIA_NUM_LNA_STATES;
}
+ private static final int RSPIA_NUM_LNA_STATES_AM = (int)7L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPIA_NUM_LNA_STATES_AM 7
* }
*/
public static int RSPIA_NUM_LNA_STATES_AM() {
- return (int)7L;
+ return RSPIA_NUM_LNA_STATES_AM;
}
+ private static final int RSPIA_NUM_LNA_STATES_LBAND = (int)9L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPIA_NUM_LNA_STATES_LBAND 9
* }
*/
public static int RSPIA_NUM_LNA_STATES_LBAND() {
- return (int)9L;
+ return RSPIA_NUM_LNA_STATES_LBAND;
}
+ private static final int RSPII_NUM_LNA_STATES = (int)9L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPII_NUM_LNA_STATES 9
* }
*/
public static int RSPII_NUM_LNA_STATES() {
- return (int)9L;
+ return RSPII_NUM_LNA_STATES;
}
+ private static final int RSPII_NUM_LNA_STATES_AMPORT = (int)5L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPII_NUM_LNA_STATES_AMPORT 5
* }
*/
public static int RSPII_NUM_LNA_STATES_AMPORT() {
- return (int)5L;
+ return RSPII_NUM_LNA_STATES_AMPORT;
}
+ private static final int RSPII_NUM_LNA_STATES_420MHZ = (int)6L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPII_NUM_LNA_STATES_420MHZ 6
* }
*/
public static int RSPII_NUM_LNA_STATES_420MHZ() {
- return (int)6L;
+ return RSPII_NUM_LNA_STATES_420MHZ;
}
+ private static final int RSPDUO_NUM_LNA_STATES = (int)10L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDUO_NUM_LNA_STATES 10
* }
*/
public static int RSPDUO_NUM_LNA_STATES() {
- return (int)10L;
+ return RSPDUO_NUM_LNA_STATES;
}
+ private static final int RSPDUO_NUM_LNA_STATES_AMPORT = (int)5L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDUO_NUM_LNA_STATES_AMPORT 5
* }
*/
public static int RSPDUO_NUM_LNA_STATES_AMPORT() {
- return (int)5L;
+ return RSPDUO_NUM_LNA_STATES_AMPORT;
}
+ private static final int RSPDUO_NUM_LNA_STATES_AM = (int)7L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDUO_NUM_LNA_STATES_AM 7
* }
*/
public static int RSPDUO_NUM_LNA_STATES_AM() {
- return (int)7L;
+ return RSPDUO_NUM_LNA_STATES_AM;
}
+ private static final int RSPDUO_NUM_LNA_STATES_LBAND = (int)9L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDUO_NUM_LNA_STATES_LBAND 9
* }
*/
public static int RSPDUO_NUM_LNA_STATES_LBAND() {
- return (int)9L;
+ return RSPDUO_NUM_LNA_STATES_LBAND;
}
+ private static final int RSPDX_NUM_LNA_STATES = (int)28L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDX_NUM_LNA_STATES 28
* }
*/
public static int RSPDX_NUM_LNA_STATES() {
- return (int)28L;
+ return RSPDX_NUM_LNA_STATES;
}
+ private static final int RSPDX_NUM_LNA_STATES_AMPORT2_0_12 = (int)19L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDX_NUM_LNA_STATES_AMPORT2_0_12 19
* }
*/
public static int RSPDX_NUM_LNA_STATES_AMPORT2_0_12() {
- return (int)19L;
+ return RSPDX_NUM_LNA_STATES_AMPORT2_0_12;
}
+ private static final int RSPDX_NUM_LNA_STATES_AMPORT2_12_60 = (int)20L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDX_NUM_LNA_STATES_AMPORT2_12_60 20
* }
*/
public static int RSPDX_NUM_LNA_STATES_AMPORT2_12_60() {
- return (int)20L;
+ return RSPDX_NUM_LNA_STATES_AMPORT2_12_60;
}
+ private static final int RSPDX_NUM_LNA_STATES_VHF_BAND3 = (int)27L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDX_NUM_LNA_STATES_VHF_BAND3 27
* }
*/
public static int RSPDX_NUM_LNA_STATES_VHF_BAND3() {
- return (int)27L;
+ return RSPDX_NUM_LNA_STATES_VHF_BAND3;
}
+ private static final int RSPDX_NUM_LNA_STATES_420MHZ = (int)21L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDX_NUM_LNA_STATES_420MHZ 21
* }
*/
public static int RSPDX_NUM_LNA_STATES_420MHZ() {
- return (int)21L;
+ return RSPDX_NUM_LNA_STATES_420MHZ;
}
+ private static final int RSPDX_NUM_LNA_STATES_LBAND = (int)19L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDX_NUM_LNA_STATES_LBAND 19
* }
*/
public static int RSPDX_NUM_LNA_STATES_LBAND() {
- return (int)19L;
+ return RSPDX_NUM_LNA_STATES_LBAND;
}
+ private static final int RSPDX_NUM_LNA_STATES_DX = (int)26L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define RSPDX_NUM_LNA_STATES_DX 26
* }
*/
public static int RSPDX_NUM_LNA_STATES_DX() {
- return (int)26L;
+ return RSPDX_NUM_LNA_STATES_DX;
}
+ private static final int sdrplay_api_Rsp2_ANTENNA_A = (int)5L;
/**
- * {@snippet :
- * enum .sdrplay_api_Rsp2_ANTENNA_A = 5;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Rsp2_ANTENNA_A = 5
* }
*/
public static int sdrplay_api_Rsp2_ANTENNA_A() {
- return (int)5L;
+ return sdrplay_api_Rsp2_ANTENNA_A;
}
+ private static final int sdrplay_api_Rsp2_ANTENNA_B = (int)6L;
/**
- * {@snippet :
- * enum .sdrplay_api_Rsp2_ANTENNA_B = 6;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Rsp2_ANTENNA_B = 6
* }
*/
public static int sdrplay_api_Rsp2_ANTENNA_B() {
- return (int)6L;
+ return sdrplay_api_Rsp2_ANTENNA_B;
}
+ private static final int sdrplay_api_Rsp2_AMPORT_1 = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_Rsp2_AMPORT_1 = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Rsp2_AMPORT_1 = 1
* }
*/
public static int sdrplay_api_Rsp2_AMPORT_1() {
- return (int)1L;
+ return sdrplay_api_Rsp2_AMPORT_1;
}
+ private static final int sdrplay_api_Rsp2_AMPORT_2 = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_Rsp2_AMPORT_2 = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Rsp2_AMPORT_2 = 0
* }
*/
public static int sdrplay_api_Rsp2_AMPORT_2() {
- return (int)0L;
+ return sdrplay_api_Rsp2_AMPORT_2;
}
+ private static final int sdrplay_api_RspDuoMode_Unknown = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDuoMode_Unknown = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDuoMode_Unknown = 0
* }
*/
public static int sdrplay_api_RspDuoMode_Unknown() {
- return (int)0L;
+ return sdrplay_api_RspDuoMode_Unknown;
}
+ private static final int sdrplay_api_RspDuoMode_Single_Tuner = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDuoMode_Single_Tuner = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDuoMode_Single_Tuner = 1
* }
*/
public static int sdrplay_api_RspDuoMode_Single_Tuner() {
- return (int)1L;
+ return sdrplay_api_RspDuoMode_Single_Tuner;
}
+ private static final int sdrplay_api_RspDuoMode_Dual_Tuner = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDuoMode_Dual_Tuner = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDuoMode_Dual_Tuner = 2
* }
*/
public static int sdrplay_api_RspDuoMode_Dual_Tuner() {
- return (int)2L;
+ return sdrplay_api_RspDuoMode_Dual_Tuner;
}
+ private static final int sdrplay_api_RspDuoMode_Master = (int)4L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDuoMode_Master = 4;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDuoMode_Master = 4
* }
*/
public static int sdrplay_api_RspDuoMode_Master() {
- return (int)4L;
+ return sdrplay_api_RspDuoMode_Master;
}
+ private static final int sdrplay_api_RspDuoMode_Slave = (int)8L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDuoMode_Slave = 8;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDuoMode_Slave = 8
* }
*/
public static int sdrplay_api_RspDuoMode_Slave() {
- return (int)8L;
+ return sdrplay_api_RspDuoMode_Slave;
}
+ private static final int sdrplay_api_RspDuo_AMPORT_1 = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDuo_AMPORT_1 = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDuo_AMPORT_1 = 1
* }
*/
public static int sdrplay_api_RspDuo_AMPORT_1() {
- return (int)1L;
+ return sdrplay_api_RspDuo_AMPORT_1;
}
+ private static final int sdrplay_api_RspDuo_AMPORT_2 = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDuo_AMPORT_2 = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDuo_AMPORT_2 = 0
* }
*/
public static int sdrplay_api_RspDuo_AMPORT_2() {
- return (int)0L;
+ return sdrplay_api_RspDuo_AMPORT_2;
}
+ private static final int sdrplay_api_BW_Undefined = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_Undefined = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_Undefined = 0
* }
*/
public static int sdrplay_api_BW_Undefined() {
- return (int)0L;
+ return sdrplay_api_BW_Undefined;
}
+ private static final int sdrplay_api_BW_0_200 = (int)200L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_0_200 = 200;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_0_200 = 200
* }
*/
public static int sdrplay_api_BW_0_200() {
- return (int)200L;
+ return sdrplay_api_BW_0_200;
}
+ private static final int sdrplay_api_BW_0_300 = (int)300L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_0_300 = 300;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_0_300 = 300
* }
*/
public static int sdrplay_api_BW_0_300() {
- return (int)300L;
+ return sdrplay_api_BW_0_300;
}
+ private static final int sdrplay_api_BW_0_600 = (int)600L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_0_600 = 600;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_0_600 = 600
* }
*/
public static int sdrplay_api_BW_0_600() {
- return (int)600L;
+ return sdrplay_api_BW_0_600;
}
+ private static final int sdrplay_api_BW_1_536 = (int)1536L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_1_536 = 1536;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_1_536 = 1536
* }
*/
public static int sdrplay_api_BW_1_536() {
- return (int)1536L;
+ return sdrplay_api_BW_1_536;
}
+ private static final int sdrplay_api_BW_5_000 = (int)5000L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_5_000 = 5000;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_5_000 = 5000
* }
*/
public static int sdrplay_api_BW_5_000() {
- return (int)5000L;
+ return sdrplay_api_BW_5_000;
}
+ private static final int sdrplay_api_BW_6_000 = (int)6000L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_6_000 = 6000;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_6_000 = 6000
* }
*/
public static int sdrplay_api_BW_6_000() {
- return (int)6000L;
+ return sdrplay_api_BW_6_000;
}
+ private static final int sdrplay_api_BW_7_000 = (int)7000L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_7_000 = 7000;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_7_000 = 7000
* }
*/
public static int sdrplay_api_BW_7_000() {
- return (int)7000L;
+ return sdrplay_api_BW_7_000;
}
+ private static final int sdrplay_api_BW_8_000 = (int)8000L;
/**
- * {@snippet :
- * enum .sdrplay_api_BW_8_000 = 8000;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BW_8_000 = 8000
* }
*/
public static int sdrplay_api_BW_8_000() {
- return (int)8000L;
+ return sdrplay_api_BW_8_000;
}
+ private static final int sdrplay_api_IF_Undefined = (int)-1L;
/**
- * {@snippet :
- * enum .sdrplay_api_IF_Undefined = -1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_IF_Undefined = -1
* }
*/
public static int sdrplay_api_IF_Undefined() {
- return (int)-1L;
+ return sdrplay_api_IF_Undefined;
}
+ private static final int sdrplay_api_IF_Zero = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_IF_Zero = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_IF_Zero = 0
* }
*/
public static int sdrplay_api_IF_Zero() {
- return (int)0L;
+ return sdrplay_api_IF_Zero;
}
+ private static final int sdrplay_api_IF_0_450 = (int)450L;
/**
- * {@snippet :
- * enum .sdrplay_api_IF_0_450 = 450;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_IF_0_450 = 450
* }
*/
public static int sdrplay_api_IF_0_450() {
- return (int)450L;
+ return sdrplay_api_IF_0_450;
}
+ private static final int sdrplay_api_IF_1_620 = (int)1620L;
/**
- * {@snippet :
- * enum .sdrplay_api_IF_1_620 = 1620;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_IF_1_620 = 1620
* }
*/
public static int sdrplay_api_IF_1_620() {
- return (int)1620L;
+ return sdrplay_api_IF_1_620;
}
+ private static final int sdrplay_api_IF_2_048 = (int)2048L;
/**
- * {@snippet :
- * enum .sdrplay_api_IF_2_048 = 2048;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_IF_2_048 = 2048
* }
*/
public static int sdrplay_api_IF_2_048() {
- return (int)2048L;
+ return sdrplay_api_IF_2_048;
}
+ private static final int sdrplay_api_LO_Undefined = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_LO_Undefined = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_LO_Undefined = 0
* }
*/
public static int sdrplay_api_LO_Undefined() {
- return (int)0L;
+ return sdrplay_api_LO_Undefined;
}
+ private static final int sdrplay_api_LO_Auto = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_LO_Auto = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_LO_Auto = 1
* }
*/
public static int sdrplay_api_LO_Auto() {
- return (int)1L;
+ return sdrplay_api_LO_Auto;
}
+ private static final int sdrplay_api_LO_120MHz = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_LO_120MHz = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_LO_120MHz = 2
* }
*/
public static int sdrplay_api_LO_120MHz() {
- return (int)2L;
+ return sdrplay_api_LO_120MHz;
}
+ private static final int sdrplay_api_LO_144MHz = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_LO_144MHz = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_LO_144MHz = 3
* }
*/
public static int sdrplay_api_LO_144MHz() {
- return (int)3L;
+ return sdrplay_api_LO_144MHz;
}
+ private static final int sdrplay_api_LO_168MHz = (int)4L;
/**
- * {@snippet :
- * enum .sdrplay_api_LO_168MHz = 4;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_LO_168MHz = 4
* }
*/
public static int sdrplay_api_LO_168MHz() {
- return (int)4L;
+ return sdrplay_api_LO_168MHz;
}
+ private static final int sdrplay_api_EXTENDED_MIN_GR = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_EXTENDED_MIN_GR = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_EXTENDED_MIN_GR = 0
* }
*/
public static int sdrplay_api_EXTENDED_MIN_GR() {
- return (int)0L;
+ return sdrplay_api_EXTENDED_MIN_GR;
}
+ private static final int sdrplay_api_NORMAL_MIN_GR = (int)20L;
/**
- * {@snippet :
- * enum .sdrplay_api_NORMAL_MIN_GR = 20;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_NORMAL_MIN_GR = 20
* }
*/
public static int sdrplay_api_NORMAL_MIN_GR() {
- return (int)20L;
+ return sdrplay_api_NORMAL_MIN_GR;
}
+ private static final int sdrplay_api_Tuner_Neither = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_Tuner_Neither = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Tuner_Neither = 0
* }
*/
public static int sdrplay_api_Tuner_Neither() {
- return (int)0L;
+ return sdrplay_api_Tuner_Neither;
}
+ private static final int sdrplay_api_Tuner_A = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_Tuner_A = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Tuner_A = 1
* }
*/
public static int sdrplay_api_Tuner_A() {
- return (int)1L;
+ return sdrplay_api_Tuner_A;
}
+ private static final int sdrplay_api_Tuner_B = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_Tuner_B = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Tuner_B = 2
* }
*/
public static int sdrplay_api_Tuner_B() {
- return (int)2L;
+ return sdrplay_api_Tuner_B;
}
+ private static final int sdrplay_api_Tuner_Both = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_Tuner_Both = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Tuner_Both = 3
* }
*/
public static int sdrplay_api_Tuner_Both() {
- return (int)3L;
+ return sdrplay_api_Tuner_Both;
}
+ private static final int sdrplay_api_RspDx_ANTENNA_A = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDx_ANTENNA_A = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDx_ANTENNA_A = 0
* }
*/
public static int sdrplay_api_RspDx_ANTENNA_A() {
- return (int)0L;
+ return sdrplay_api_RspDx_ANTENNA_A;
}
+ private static final int sdrplay_api_RspDx_ANTENNA_B = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDx_ANTENNA_B = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDx_ANTENNA_B = 1
* }
*/
public static int sdrplay_api_RspDx_ANTENNA_B() {
- return (int)1L;
+ return sdrplay_api_RspDx_ANTENNA_B;
}
+ private static final int sdrplay_api_RspDx_ANTENNA_C = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDx_ANTENNA_C = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDx_ANTENNA_C = 2
* }
*/
public static int sdrplay_api_RspDx_ANTENNA_C() {
- return (int)2L;
+ return sdrplay_api_RspDx_ANTENNA_C;
}
+ private static final int sdrplay_api_RspDx_HDRMODE_BW_0_200 = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDx_HDRMODE_BW_0_200 = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDx_HDRMODE_BW_0_200 = 0
* }
*/
public static int sdrplay_api_RspDx_HDRMODE_BW_0_200() {
- return (int)0L;
+ return sdrplay_api_RspDx_HDRMODE_BW_0_200;
}
+ private static final int sdrplay_api_RspDx_HDRMODE_BW_0_500 = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDx_HDRMODE_BW_0_500 = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDx_HDRMODE_BW_0_500 = 1
* }
*/
public static int sdrplay_api_RspDx_HDRMODE_BW_0_500() {
- return (int)1L;
+ return sdrplay_api_RspDx_HDRMODE_BW_0_500;
}
+ private static final int sdrplay_api_RspDx_HDRMODE_BW_1_200 = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDx_HDRMODE_BW_1_200 = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDx_HDRMODE_BW_1_200 = 2
* }
*/
public static int sdrplay_api_RspDx_HDRMODE_BW_1_200() {
- return (int)2L;
+ return sdrplay_api_RspDx_HDRMODE_BW_1_200;
}
+ private static final int sdrplay_api_RspDx_HDRMODE_BW_1_700 = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDx_HDRMODE_BW_1_700 = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDx_HDRMODE_BW_1_700 = 3
* }
*/
public static int sdrplay_api_RspDx_HDRMODE_BW_1_700() {
- return (int)3L;
+ return sdrplay_api_RspDx_HDRMODE_BW_1_700;
}
+ private static final int sdrplay_api_ISOCH = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_ISOCH = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_ISOCH = 0
* }
*/
public static int sdrplay_api_ISOCH() {
- return (int)0L;
+ return sdrplay_api_ISOCH;
}
+ private static final int sdrplay_api_BULK = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_BULK = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_BULK = 1
* }
*/
public static int sdrplay_api_BULK() {
- return (int)1L;
+ return sdrplay_api_BULK;
}
+ private static final int sdrplay_api_AGC_DISABLE = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_AGC_DISABLE = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_AGC_DISABLE = 0
* }
*/
public static int sdrplay_api_AGC_DISABLE() {
- return (int)0L;
+ return sdrplay_api_AGC_DISABLE;
}
+ private static final int sdrplay_api_AGC_100HZ = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_AGC_100HZ = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_AGC_100HZ = 1
* }
*/
public static int sdrplay_api_AGC_100HZ() {
- return (int)1L;
+ return sdrplay_api_AGC_100HZ;
}
+ private static final int sdrplay_api_AGC_50HZ = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_AGC_50HZ = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_AGC_50HZ = 2
* }
*/
public static int sdrplay_api_AGC_50HZ() {
- return (int)2L;
+ return sdrplay_api_AGC_50HZ;
}
+ private static final int sdrplay_api_AGC_5HZ = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_AGC_5HZ = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_AGC_5HZ = 3
* }
*/
public static int sdrplay_api_AGC_5HZ() {
- return (int)3L;
+ return sdrplay_api_AGC_5HZ;
}
+ private static final int sdrplay_api_AGC_CTRL_EN = (int)4L;
/**
- * {@snippet :
- * enum .sdrplay_api_AGC_CTRL_EN = 4;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_AGC_CTRL_EN = 4
* }
*/
public static int sdrplay_api_AGC_CTRL_EN() {
- return (int)4L;
+ return sdrplay_api_AGC_CTRL_EN;
}
+ private static final int sdrplay_api_ADSB_DECIMATION = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_ADSB_DECIMATION = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_ADSB_DECIMATION = 0
* }
*/
public static int sdrplay_api_ADSB_DECIMATION() {
- return (int)0L;
+ return sdrplay_api_ADSB_DECIMATION;
}
+ private static final int sdrplay_api_ADSB_NO_DECIMATION_LOWPASS = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_ADSB_NO_DECIMATION_LOWPASS = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_ADSB_NO_DECIMATION_LOWPASS = 1
* }
*/
public static int sdrplay_api_ADSB_NO_DECIMATION_LOWPASS() {
- return (int)1L;
+ return sdrplay_api_ADSB_NO_DECIMATION_LOWPASS;
}
+ private static final int sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ = 2
* }
*/
public static int sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ() {
- return (int)2L;
+ return sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_2MHZ;
}
+ private static final int sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ = 3
* }
*/
public static int sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ() {
- return (int)3L;
+ return sdrplay_api_ADSB_NO_DECIMATION_BANDPASS_3MHZ;
}
+ private static final int sdrplay_api_Overload_Detected = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_Overload_Detected = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Overload_Detected = 0
* }
*/
public static int sdrplay_api_Overload_Detected() {
- return (int)0L;
+ return sdrplay_api_Overload_Detected;
}
+ private static final int sdrplay_api_Overload_Corrected = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_Overload_Corrected = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Overload_Corrected = 1
* }
*/
public static int sdrplay_api_Overload_Corrected() {
- return (int)1L;
+ return sdrplay_api_Overload_Corrected;
}
+ private static final int sdrplay_api_MasterInitialised = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_MasterInitialised = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_MasterInitialised = 0
* }
*/
public static int sdrplay_api_MasterInitialised() {
- return (int)0L;
+ return sdrplay_api_MasterInitialised;
}
+ private static final int sdrplay_api_SlaveAttached = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_SlaveAttached = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_SlaveAttached = 1
* }
*/
public static int sdrplay_api_SlaveAttached() {
- return (int)1L;
+ return sdrplay_api_SlaveAttached;
}
+ private static final int sdrplay_api_SlaveDetached = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_SlaveDetached = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_SlaveDetached = 2
* }
*/
public static int sdrplay_api_SlaveDetached() {
- return (int)2L;
+ return sdrplay_api_SlaveDetached;
}
+ private static final int sdrplay_api_SlaveInitialised = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_SlaveInitialised = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_SlaveInitialised = 3
* }
*/
public static int sdrplay_api_SlaveInitialised() {
- return (int)3L;
+ return sdrplay_api_SlaveInitialised;
}
+ private static final int sdrplay_api_SlaveUninitialised = (int)4L;
/**
- * {@snippet :
- * enum .sdrplay_api_SlaveUninitialised = 4;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_SlaveUninitialised = 4
* }
*/
public static int sdrplay_api_SlaveUninitialised() {
- return (int)4L;
+ return sdrplay_api_SlaveUninitialised;
}
+ private static final int sdrplay_api_MasterDllDisappeared = (int)5L;
/**
- * {@snippet :
- * enum .sdrplay_api_MasterDllDisappeared = 5;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_MasterDllDisappeared = 5
* }
*/
public static int sdrplay_api_MasterDllDisappeared() {
- return (int)5L;
+ return sdrplay_api_MasterDllDisappeared;
}
+ private static final int sdrplay_api_SlaveDllDisappeared = (int)6L;
/**
- * {@snippet :
- * enum .sdrplay_api_SlaveDllDisappeared = 6;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_SlaveDllDisappeared = 6
* }
*/
public static int sdrplay_api_SlaveDllDisappeared() {
- return (int)6L;
+ return sdrplay_api_SlaveDllDisappeared;
}
+ private static final int sdrplay_api_GainChange = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_GainChange = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_GainChange = 0
* }
*/
public static int sdrplay_api_GainChange() {
- return (int)0L;
+ return sdrplay_api_GainChange;
}
+ private static final int sdrplay_api_PowerOverloadChange = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_PowerOverloadChange = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_PowerOverloadChange = 1
* }
*/
public static int sdrplay_api_PowerOverloadChange() {
- return (int)1L;
+ return sdrplay_api_PowerOverloadChange;
}
+ private static final int sdrplay_api_DeviceRemoved = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_DeviceRemoved = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_DeviceRemoved = 2
* }
*/
public static int sdrplay_api_DeviceRemoved() {
- return (int)2L;
+ return sdrplay_api_DeviceRemoved;
}
+ private static final int sdrplay_api_RspDuoModeChange = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_RspDuoModeChange = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RspDuoModeChange = 3
* }
*/
public static int sdrplay_api_RspDuoModeChange() {
- return (int)3L;
+ return sdrplay_api_RspDuoModeChange;
}
/**
- * {@snippet :
- * typedef void* HANDLE;
+ * {@snippet lang=c :
+ * typedef void *HANDLE
* }
*/
- public static final OfAddress HANDLE = Constants$root.C_POINTER$LAYOUT;
+ public static final AddressLayout HANDLE = sdrplay_api_h.C_POINTER;
+ private static final int sdrplay_api_Success = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_Success = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Success = 0
* }
*/
public static int sdrplay_api_Success() {
- return (int)0L;
+ return sdrplay_api_Success;
}
+ private static final int sdrplay_api_Fail = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_Fail = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Fail = 1
* }
*/
public static int sdrplay_api_Fail() {
- return (int)1L;
+ return sdrplay_api_Fail;
}
+ private static final int sdrplay_api_InvalidParam = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_InvalidParam = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_InvalidParam = 2
* }
*/
public static int sdrplay_api_InvalidParam() {
- return (int)2L;
+ return sdrplay_api_InvalidParam;
}
+ private static final int sdrplay_api_OutOfRange = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_OutOfRange = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_OutOfRange = 3
* }
*/
public static int sdrplay_api_OutOfRange() {
- return (int)3L;
+ return sdrplay_api_OutOfRange;
}
+ private static final int sdrplay_api_GainUpdateError = (int)4L;
/**
- * {@snippet :
- * enum .sdrplay_api_GainUpdateError = 4;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_GainUpdateError = 4
* }
*/
public static int sdrplay_api_GainUpdateError() {
- return (int)4L;
+ return sdrplay_api_GainUpdateError;
}
+ private static final int sdrplay_api_RfUpdateError = (int)5L;
/**
- * {@snippet :
- * enum .sdrplay_api_RfUpdateError = 5;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_RfUpdateError = 5
* }
*/
public static int sdrplay_api_RfUpdateError() {
- return (int)5L;
+ return sdrplay_api_RfUpdateError;
}
+ private static final int sdrplay_api_FsUpdateError = (int)6L;
/**
- * {@snippet :
- * enum .sdrplay_api_FsUpdateError = 6;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_FsUpdateError = 6
* }
*/
public static int sdrplay_api_FsUpdateError() {
- return (int)6L;
+ return sdrplay_api_FsUpdateError;
}
+ private static final int sdrplay_api_HwError = (int)7L;
/**
- * {@snippet :
- * enum .sdrplay_api_HwError = 7;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_HwError = 7
* }
*/
public static int sdrplay_api_HwError() {
- return (int)7L;
+ return sdrplay_api_HwError;
}
+ private static final int sdrplay_api_AliasingError = (int)8L;
/**
- * {@snippet :
- * enum .sdrplay_api_AliasingError = 8;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_AliasingError = 8
* }
*/
public static int sdrplay_api_AliasingError() {
- return (int)8L;
+ return sdrplay_api_AliasingError;
}
+ private static final int sdrplay_api_AlreadyInitialised = (int)9L;
/**
- * {@snippet :
- * enum .sdrplay_api_AlreadyInitialised = 9;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_AlreadyInitialised = 9
* }
*/
public static int sdrplay_api_AlreadyInitialised() {
- return (int)9L;
+ return sdrplay_api_AlreadyInitialised;
}
+ private static final int sdrplay_api_NotInitialised = (int)10L;
/**
- * {@snippet :
- * enum .sdrplay_api_NotInitialised = 10;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_NotInitialised = 10
* }
*/
public static int sdrplay_api_NotInitialised() {
- return (int)10L;
+ return sdrplay_api_NotInitialised;
}
+ private static final int sdrplay_api_NotEnabled = (int)11L;
/**
- * {@snippet :
- * enum .sdrplay_api_NotEnabled = 11;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_NotEnabled = 11
* }
*/
public static int sdrplay_api_NotEnabled() {
- return (int)11L;
+ return sdrplay_api_NotEnabled;
}
+ private static final int sdrplay_api_HwVerError = (int)12L;
/**
- * {@snippet :
- * enum .sdrplay_api_HwVerError = 12;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_HwVerError = 12
* }
*/
public static int sdrplay_api_HwVerError() {
- return (int)12L;
+ return sdrplay_api_HwVerError;
}
+ private static final int sdrplay_api_OutOfMemError = (int)13L;
/**
- * {@snippet :
- * enum .sdrplay_api_OutOfMemError = 13;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_OutOfMemError = 13
* }
*/
public static int sdrplay_api_OutOfMemError() {
- return (int)13L;
+ return sdrplay_api_OutOfMemError;
}
+ private static final int sdrplay_api_ServiceNotResponding = (int)14L;
/**
- * {@snippet :
- * enum .sdrplay_api_ServiceNotResponding = 14;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_ServiceNotResponding = 14
* }
*/
public static int sdrplay_api_ServiceNotResponding() {
- return (int)14L;
+ return sdrplay_api_ServiceNotResponding;
}
+ private static final int sdrplay_api_StartPending = (int)15L;
/**
- * {@snippet :
- * enum .sdrplay_api_StartPending = 15;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_StartPending = 15
* }
*/
public static int sdrplay_api_StartPending() {
- return (int)15L;
+ return sdrplay_api_StartPending;
}
+ private static final int sdrplay_api_StopPending = (int)16L;
/**
- * {@snippet :
- * enum .sdrplay_api_StopPending = 16;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_StopPending = 16
* }
*/
public static int sdrplay_api_StopPending() {
- return (int)16L;
+ return sdrplay_api_StopPending;
}
+ private static final int sdrplay_api_InvalidMode = (int)17L;
/**
- * {@snippet :
- * enum .sdrplay_api_InvalidMode = 17;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_InvalidMode = 17
* }
*/
public static int sdrplay_api_InvalidMode() {
- return (int)17L;
+ return sdrplay_api_InvalidMode;
}
+ private static final int sdrplay_api_FailedVerification1 = (int)18L;
/**
- * {@snippet :
- * enum .sdrplay_api_FailedVerification1 = 18;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_FailedVerification1 = 18
* }
*/
public static int sdrplay_api_FailedVerification1() {
- return (int)18L;
+ return sdrplay_api_FailedVerification1;
}
+ private static final int sdrplay_api_FailedVerification2 = (int)19L;
/**
- * {@snippet :
- * enum .sdrplay_api_FailedVerification2 = 19;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_FailedVerification2 = 19
* }
*/
public static int sdrplay_api_FailedVerification2() {
- return (int)19L;
+ return sdrplay_api_FailedVerification2;
}
+ private static final int sdrplay_api_FailedVerification3 = (int)20L;
/**
- * {@snippet :
- * enum .sdrplay_api_FailedVerification3 = 20;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_FailedVerification3 = 20
* }
*/
public static int sdrplay_api_FailedVerification3() {
- return (int)20L;
+ return sdrplay_api_FailedVerification3;
}
+ private static final int sdrplay_api_FailedVerification4 = (int)21L;
/**
- * {@snippet :
- * enum .sdrplay_api_FailedVerification4 = 21;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_FailedVerification4 = 21
* }
*/
public static int sdrplay_api_FailedVerification4() {
- return (int)21L;
+ return sdrplay_api_FailedVerification4;
}
+ private static final int sdrplay_api_FailedVerification5 = (int)22L;
/**
- * {@snippet :
- * enum .sdrplay_api_FailedVerification5 = 22;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_FailedVerification5 = 22
* }
*/
public static int sdrplay_api_FailedVerification5() {
- return (int)22L;
+ return sdrplay_api_FailedVerification5;
}
+ private static final int sdrplay_api_FailedVerification6 = (int)23L;
/**
- * {@snippet :
- * enum .sdrplay_api_FailedVerification6 = 23;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_FailedVerification6 = 23
* }
*/
public static int sdrplay_api_FailedVerification6() {
- return (int)23L;
+ return sdrplay_api_FailedVerification6;
}
+ private static final int sdrplay_api_InvalidServiceVersion = (int)24L;
/**
- * {@snippet :
- * enum .sdrplay_api_InvalidServiceVersion = 24;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_InvalidServiceVersion = 24
* }
*/
public static int sdrplay_api_InvalidServiceVersion() {
- return (int)24L;
+ return sdrplay_api_InvalidServiceVersion;
}
+ private static final int sdrplay_api_Update_None = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_None = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_None = 0
* }
*/
public static int sdrplay_api_Update_None() {
- return (int)0L;
+ return sdrplay_api_Update_None;
}
+ private static final int sdrplay_api_Update_Dev_Fs = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Dev_Fs = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Dev_Fs = 1
* }
*/
public static int sdrplay_api_Update_Dev_Fs() {
- return (int)1L;
+ return sdrplay_api_Update_Dev_Fs;
}
+ private static final int sdrplay_api_Update_Dev_Ppm = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Dev_Ppm = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Dev_Ppm = 2
* }
*/
public static int sdrplay_api_Update_Dev_Ppm() {
- return (int)2L;
+ return sdrplay_api_Update_Dev_Ppm;
}
+ private static final int sdrplay_api_Update_Dev_SyncUpdate = (int)4L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Dev_SyncUpdate = 4;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Dev_SyncUpdate = 4
* }
*/
public static int sdrplay_api_Update_Dev_SyncUpdate() {
- return (int)4L;
+ return sdrplay_api_Update_Dev_SyncUpdate;
}
+ private static final int sdrplay_api_Update_Dev_ResetFlags = (int)8L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Dev_ResetFlags = 8;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Dev_ResetFlags = 8
* }
*/
public static int sdrplay_api_Update_Dev_ResetFlags() {
- return (int)8L;
+ return sdrplay_api_Update_Dev_ResetFlags;
}
+ private static final int sdrplay_api_Update_Rsp1a_BiasTControl = (int)16L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Rsp1a_BiasTControl = 16;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Rsp1a_BiasTControl = 16
* }
*/
public static int sdrplay_api_Update_Rsp1a_BiasTControl() {
- return (int)16L;
+ return sdrplay_api_Update_Rsp1a_BiasTControl;
}
+ private static final int sdrplay_api_Update_Rsp1a_RfNotchControl = (int)32L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Rsp1a_RfNotchControl = 32;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Rsp1a_RfNotchControl = 32
* }
*/
public static int sdrplay_api_Update_Rsp1a_RfNotchControl() {
- return (int)32L;
+ return sdrplay_api_Update_Rsp1a_RfNotchControl;
}
+ private static final int sdrplay_api_Update_Rsp1a_RfDabNotchControl = (int)64L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Rsp1a_RfDabNotchControl = 64;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Rsp1a_RfDabNotchControl = 64
* }
*/
public static int sdrplay_api_Update_Rsp1a_RfDabNotchControl() {
- return (int)64L;
+ return sdrplay_api_Update_Rsp1a_RfDabNotchControl;
}
+ private static final int sdrplay_api_Update_Rsp2_BiasTControl = (int)128L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Rsp2_BiasTControl = 128;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Rsp2_BiasTControl = 128
* }
*/
public static int sdrplay_api_Update_Rsp2_BiasTControl() {
- return (int)128L;
+ return sdrplay_api_Update_Rsp2_BiasTControl;
}
+ private static final int sdrplay_api_Update_Rsp2_AmPortSelect = (int)256L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Rsp2_AmPortSelect = 256;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Rsp2_AmPortSelect = 256
* }
*/
public static int sdrplay_api_Update_Rsp2_AmPortSelect() {
- return (int)256L;
+ return sdrplay_api_Update_Rsp2_AmPortSelect;
}
+ private static final int sdrplay_api_Update_Rsp2_AntennaControl = (int)512L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Rsp2_AntennaControl = 512;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Rsp2_AntennaControl = 512
* }
*/
public static int sdrplay_api_Update_Rsp2_AntennaControl() {
- return (int)512L;
+ return sdrplay_api_Update_Rsp2_AntennaControl;
}
+ private static final int sdrplay_api_Update_Rsp2_RfNotchControl = (int)1024L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Rsp2_RfNotchControl = 1024;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Rsp2_RfNotchControl = 1024
* }
*/
public static int sdrplay_api_Update_Rsp2_RfNotchControl() {
- return (int)1024L;
+ return sdrplay_api_Update_Rsp2_RfNotchControl;
}
+ private static final int sdrplay_api_Update_Rsp2_ExtRefControl = (int)2048L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Rsp2_ExtRefControl = 2048;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Rsp2_ExtRefControl = 2048
* }
*/
public static int sdrplay_api_Update_Rsp2_ExtRefControl() {
- return (int)2048L;
+ return sdrplay_api_Update_Rsp2_ExtRefControl;
}
+ private static final int sdrplay_api_Update_RspDuo_ExtRefControl = (int)4096L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDuo_ExtRefControl = 4096;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDuo_ExtRefControl = 4096
* }
*/
public static int sdrplay_api_Update_RspDuo_ExtRefControl() {
- return (int)4096L;
+ return sdrplay_api_Update_RspDuo_ExtRefControl;
}
+ private static final int sdrplay_api_Update_Master_Spare_1 = (int)8192L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Master_Spare_1 = 8192;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Master_Spare_1 = 8192
* }
*/
public static int sdrplay_api_Update_Master_Spare_1() {
- return (int)8192L;
+ return sdrplay_api_Update_Master_Spare_1;
}
+ private static final int sdrplay_api_Update_Master_Spare_2 = (int)16384L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Master_Spare_2 = 16384;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Master_Spare_2 = 16384
* }
*/
public static int sdrplay_api_Update_Master_Spare_2() {
- return (int)16384L;
+ return sdrplay_api_Update_Master_Spare_2;
}
+ private static final int sdrplay_api_Update_Tuner_Gr = (int)32768L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Tuner_Gr = 32768;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Tuner_Gr = 32768
* }
*/
public static int sdrplay_api_Update_Tuner_Gr() {
- return (int)32768L;
+ return sdrplay_api_Update_Tuner_Gr;
}
+ private static final int sdrplay_api_Update_Tuner_GrLimits = (int)65536L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Tuner_GrLimits = 65536;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Tuner_GrLimits = 65536
* }
*/
public static int sdrplay_api_Update_Tuner_GrLimits() {
- return (int)65536L;
+ return sdrplay_api_Update_Tuner_GrLimits;
}
+ private static final int sdrplay_api_Update_Tuner_Frf = (int)131072L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Tuner_Frf = 131072;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Tuner_Frf = 131072
* }
*/
public static int sdrplay_api_Update_Tuner_Frf() {
- return (int)131072L;
+ return sdrplay_api_Update_Tuner_Frf;
}
+ private static final int sdrplay_api_Update_Tuner_BwType = (int)262144L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Tuner_BwType = 262144;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Tuner_BwType = 262144
* }
*/
public static int sdrplay_api_Update_Tuner_BwType() {
- return (int)262144L;
+ return sdrplay_api_Update_Tuner_BwType;
}
+ private static final int sdrplay_api_Update_Tuner_IfType = (int)524288L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Tuner_IfType = 524288;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Tuner_IfType = 524288
* }
*/
public static int sdrplay_api_Update_Tuner_IfType() {
- return (int)524288L;
+ return sdrplay_api_Update_Tuner_IfType;
}
+ private static final int sdrplay_api_Update_Tuner_DcOffset = (int)1048576L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Tuner_DcOffset = 1048576;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Tuner_DcOffset = 1048576
* }
*/
public static int sdrplay_api_Update_Tuner_DcOffset() {
- return (int)1048576L;
+ return sdrplay_api_Update_Tuner_DcOffset;
}
+ private static final int sdrplay_api_Update_Tuner_LoMode = (int)2097152L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Tuner_LoMode = 2097152;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Tuner_LoMode = 2097152
* }
*/
public static int sdrplay_api_Update_Tuner_LoMode() {
- return (int)2097152L;
+ return sdrplay_api_Update_Tuner_LoMode;
}
+ private static final int sdrplay_api_Update_Ctrl_DCoffsetIQimbalance = (int)4194304L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Ctrl_DCoffsetIQimbalance = 4194304;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Ctrl_DCoffsetIQimbalance = 4194304
* }
*/
public static int sdrplay_api_Update_Ctrl_DCoffsetIQimbalance() {
- return (int)4194304L;
+ return sdrplay_api_Update_Ctrl_DCoffsetIQimbalance;
}
+ private static final int sdrplay_api_Update_Ctrl_Decimation = (int)8388608L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Ctrl_Decimation = 8388608;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Ctrl_Decimation = 8388608
* }
*/
public static int sdrplay_api_Update_Ctrl_Decimation() {
- return (int)8388608L;
+ return sdrplay_api_Update_Ctrl_Decimation;
}
+ private static final int sdrplay_api_Update_Ctrl_Agc = (int)16777216L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Ctrl_Agc = 16777216;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Ctrl_Agc = 16777216
* }
*/
public static int sdrplay_api_Update_Ctrl_Agc() {
- return (int)16777216L;
+ return sdrplay_api_Update_Ctrl_Agc;
}
+ private static final int sdrplay_api_Update_Ctrl_AdsbMode = (int)33554432L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Ctrl_AdsbMode = 33554432;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Ctrl_AdsbMode = 33554432
* }
*/
public static int sdrplay_api_Update_Ctrl_AdsbMode() {
- return (int)33554432L;
+ return sdrplay_api_Update_Ctrl_AdsbMode;
}
+ private static final int sdrplay_api_Update_Ctrl_OverloadMsgAck = (int)67108864L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Ctrl_OverloadMsgAck = 67108864;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Ctrl_OverloadMsgAck = 67108864
* }
*/
public static int sdrplay_api_Update_Ctrl_OverloadMsgAck() {
- return (int)67108864L;
+ return sdrplay_api_Update_Ctrl_OverloadMsgAck;
}
+ private static final int sdrplay_api_Update_RspDuo_BiasTControl = (int)134217728L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDuo_BiasTControl = 134217728;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDuo_BiasTControl = 134217728
* }
*/
public static int sdrplay_api_Update_RspDuo_BiasTControl() {
- return (int)134217728L;
+ return sdrplay_api_Update_RspDuo_BiasTControl;
}
+ private static final int sdrplay_api_Update_RspDuo_AmPortSelect = (int)268435456L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDuo_AmPortSelect = 268435456;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDuo_AmPortSelect = 268435456
* }
*/
public static int sdrplay_api_Update_RspDuo_AmPortSelect() {
- return (int)268435456L;
+ return sdrplay_api_Update_RspDuo_AmPortSelect;
}
+ private static final int sdrplay_api_Update_RspDuo_Tuner1AmNotchControl = (int)536870912L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDuo_Tuner1AmNotchControl = 536870912;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDuo_Tuner1AmNotchControl = 536870912
* }
*/
public static int sdrplay_api_Update_RspDuo_Tuner1AmNotchControl() {
- return (int)536870912L;
+ return sdrplay_api_Update_RspDuo_Tuner1AmNotchControl;
}
+ private static final int sdrplay_api_Update_RspDuo_RfNotchControl = (int)1073741824L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDuo_RfNotchControl = 1073741824;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDuo_RfNotchControl = 1073741824
* }
*/
public static int sdrplay_api_Update_RspDuo_RfNotchControl() {
- return (int)1073741824L;
+ return sdrplay_api_Update_RspDuo_RfNotchControl;
}
+ private static final int sdrplay_api_Update_RspDuo_RfDabNotchControl = (int)-2147483648L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDuo_RfDabNotchControl = -2147483648;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDuo_RfDabNotchControl = -2147483648
* }
*/
public static int sdrplay_api_Update_RspDuo_RfDabNotchControl() {
- return (int)-2147483648L;
+ return sdrplay_api_Update_RspDuo_RfDabNotchControl;
}
+ private static final int sdrplay_api_Update_Ext1_None = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_Ext1_None = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_Ext1_None = 0
* }
*/
public static int sdrplay_api_Update_Ext1_None() {
- return (int)0L;
+ return sdrplay_api_Update_Ext1_None;
}
+ private static final int sdrplay_api_Update_RspDx_HdrEnable = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDx_HdrEnable = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDx_HdrEnable = 1
* }
*/
public static int sdrplay_api_Update_RspDx_HdrEnable() {
- return (int)1L;
+ return sdrplay_api_Update_RspDx_HdrEnable;
}
+ private static final int sdrplay_api_Update_RspDx_BiasTControl = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDx_BiasTControl = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDx_BiasTControl = 2
* }
*/
public static int sdrplay_api_Update_RspDx_BiasTControl() {
- return (int)2L;
+ return sdrplay_api_Update_RspDx_BiasTControl;
}
+ private static final int sdrplay_api_Update_RspDx_AntennaControl = (int)4L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDx_AntennaControl = 4;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDx_AntennaControl = 4
* }
*/
public static int sdrplay_api_Update_RspDx_AntennaControl() {
- return (int)4L;
+ return sdrplay_api_Update_RspDx_AntennaControl;
}
+ private static final int sdrplay_api_Update_RspDx_RfNotchControl = (int)8L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDx_RfNotchControl = 8;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDx_RfNotchControl = 8
* }
*/
public static int sdrplay_api_Update_RspDx_RfNotchControl() {
- return (int)8L;
+ return sdrplay_api_Update_RspDx_RfNotchControl;
}
+ private static final int sdrplay_api_Update_RspDx_RfDabNotchControl = (int)16L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDx_RfDabNotchControl = 16;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDx_RfDabNotchControl = 16
* }
*/
public static int sdrplay_api_Update_RspDx_RfDabNotchControl() {
- return (int)16L;
+ return sdrplay_api_Update_RspDx_RfDabNotchControl;
}
+ private static final int sdrplay_api_Update_RspDx_HdrBw = (int)32L;
/**
- * {@snippet :
- * enum .sdrplay_api_Update_RspDx_HdrBw = 32;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_Update_RspDx_HdrBw = 32
* }
*/
public static int sdrplay_api_Update_RspDx_HdrBw() {
- return (int)32L;
+ return sdrplay_api_Update_RspDx_HdrBw;
}
+ private static final int sdrplay_api_DbgLvl_Disable = (int)0L;
/**
- * {@snippet :
- * enum .sdrplay_api_DbgLvl_Disable = 0;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_DbgLvl_Disable = 0
* }
*/
public static int sdrplay_api_DbgLvl_Disable() {
- return (int)0L;
+ return sdrplay_api_DbgLvl_Disable;
}
+ private static final int sdrplay_api_DbgLvl_Verbose = (int)1L;
/**
- * {@snippet :
- * enum .sdrplay_api_DbgLvl_Verbose = 1;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_DbgLvl_Verbose = 1
* }
*/
public static int sdrplay_api_DbgLvl_Verbose() {
- return (int)1L;
+ return sdrplay_api_DbgLvl_Verbose;
}
+ private static final int sdrplay_api_DbgLvl_Warning = (int)2L;
/**
- * {@snippet :
- * enum .sdrplay_api_DbgLvl_Warning = 2;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_DbgLvl_Warning = 2
* }
*/
public static int sdrplay_api_DbgLvl_Warning() {
- return (int)2L;
+ return sdrplay_api_DbgLvl_Warning;
}
+ private static final int sdrplay_api_DbgLvl_Error = (int)3L;
/**
- * {@snippet :
- * enum .sdrplay_api_DbgLvl_Error = 3;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_DbgLvl_Error = 3
* }
*/
public static int sdrplay_api_DbgLvl_Error() {
- return (int)3L;
+ return sdrplay_api_DbgLvl_Error;
}
+ private static final int sdrplay_api_DbgLvl_Message = (int)4L;
/**
- * {@snippet :
- * enum .sdrplay_api_DbgLvl_Message = 4;
+ * {@snippet lang=c :
+ * enum .sdrplay_api_DbgLvl_Message = 4
* }
*/
public static int sdrplay_api_DbgLvl_Message() {
- return (int)4L;
+ return sdrplay_api_DbgLvl_Message;
}
- public static MethodHandle sdrplay_api_Open$MH() {
- return RuntimeHelper.requireNonNull(constants$7.sdrplay_api_Open$MH,"sdrplay_api_Open");
+
+ private static class sdrplay_api_Open {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_Open");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_Open();
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Open()
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_Open$descriptor() {
+ return sdrplay_api_Open.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Open()
+ * }
+ */
+ public static MethodHandle sdrplay_api_Open$handle() {
+ return sdrplay_api_Open.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Open()
+ * }
+ */
+ public static MemorySegment sdrplay_api_Open$address() {
+ return sdrplay_api_Open.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Open()
* }
*/
public static int sdrplay_api_Open() {
- var mh$ = sdrplay_api_Open$MH();
+ var mh$ = sdrplay_api_Open.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_Open");
+ }
return (int)mh$.invokeExact();
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_Close$MH() {
- return RuntimeHelper.requireNonNull(constants$7.sdrplay_api_Close$MH,"sdrplay_api_Close");
+
+ private static class sdrplay_api_Close {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_Close");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_Close();
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Close()
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_Close$descriptor() {
+ return sdrplay_api_Close.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Close()
+ * }
+ */
+ public static MethodHandle sdrplay_api_Close$handle() {
+ return sdrplay_api_Close.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Close()
+ * }
+ */
+ public static MemorySegment sdrplay_api_Close$address() {
+ return sdrplay_api_Close.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Close()
* }
*/
public static int sdrplay_api_Close() {
- var mh$ = sdrplay_api_Close$MH();
+ var mh$ = sdrplay_api_Close.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_Close");
+ }
return (int)mh$.invokeExact();
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_ApiVersion$MH() {
- return RuntimeHelper.requireNonNull(constants$7.sdrplay_api_ApiVersion$MH,"sdrplay_api_ApiVersion");
+
+ private static class sdrplay_api_ApiVersion {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_ApiVersion");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_ApiVersion(float* apiVer);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_ApiVersion(float *apiVer)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_ApiVersion$descriptor() {
+ return sdrplay_api_ApiVersion.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_ApiVersion(float *apiVer)
+ * }
+ */
+ public static MethodHandle sdrplay_api_ApiVersion$handle() {
+ return sdrplay_api_ApiVersion.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_ApiVersion(float *apiVer)
+ * }
+ */
+ public static MemorySegment sdrplay_api_ApiVersion$address() {
+ return sdrplay_api_ApiVersion.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_ApiVersion(float *apiVer)
* }
*/
public static int sdrplay_api_ApiVersion(MemorySegment apiVer) {
- var mh$ = sdrplay_api_ApiVersion$MH();
+ var mh$ = sdrplay_api_ApiVersion.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_ApiVersion", apiVer);
+ }
return (int)mh$.invokeExact(apiVer);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_LockDeviceApi$MH() {
- return RuntimeHelper.requireNonNull(constants$7.sdrplay_api_LockDeviceApi$MH,"sdrplay_api_LockDeviceApi");
+
+ private static class sdrplay_api_LockDeviceApi {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_LockDeviceApi");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_LockDeviceApi();
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_LockDeviceApi()
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_LockDeviceApi$descriptor() {
+ return sdrplay_api_LockDeviceApi.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_LockDeviceApi()
+ * }
+ */
+ public static MethodHandle sdrplay_api_LockDeviceApi$handle() {
+ return sdrplay_api_LockDeviceApi.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_LockDeviceApi()
+ * }
+ */
+ public static MemorySegment sdrplay_api_LockDeviceApi$address() {
+ return sdrplay_api_LockDeviceApi.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_LockDeviceApi()
* }
*/
public static int sdrplay_api_LockDeviceApi() {
- var mh$ = sdrplay_api_LockDeviceApi$MH();
+ var mh$ = sdrplay_api_LockDeviceApi.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_LockDeviceApi");
+ }
return (int)mh$.invokeExact();
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_UnlockDeviceApi$MH() {
- return RuntimeHelper.requireNonNull(constants$7.sdrplay_api_UnlockDeviceApi$MH,"sdrplay_api_UnlockDeviceApi");
+
+ private static class sdrplay_api_UnlockDeviceApi {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_UnlockDeviceApi");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_UnlockDeviceApi();
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_UnlockDeviceApi()
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_UnlockDeviceApi$descriptor() {
+ return sdrplay_api_UnlockDeviceApi.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_UnlockDeviceApi()
+ * }
+ */
+ public static MethodHandle sdrplay_api_UnlockDeviceApi$handle() {
+ return sdrplay_api_UnlockDeviceApi.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_UnlockDeviceApi()
+ * }
+ */
+ public static MemorySegment sdrplay_api_UnlockDeviceApi$address() {
+ return sdrplay_api_UnlockDeviceApi.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_UnlockDeviceApi()
* }
*/
public static int sdrplay_api_UnlockDeviceApi() {
- var mh$ = sdrplay_api_UnlockDeviceApi$MH();
+ var mh$ = sdrplay_api_UnlockDeviceApi.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_UnlockDeviceApi");
+ }
return (int)mh$.invokeExact();
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_GetDevices$MH() {
- return RuntimeHelper.requireNonNull(constants$7.sdrplay_api_GetDevices$MH,"sdrplay_api_GetDevices");
+
+ private static class sdrplay_api_GetDevices {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_GetDevices");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_GetDevices(sdrplay_api_DeviceT* devices, unsigned int* numDevs, unsigned int maxDevs);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_GetDevices(sdrplay_api_DeviceT *devices, unsigned int *numDevs, unsigned int maxDevs)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_GetDevices$descriptor() {
+ return sdrplay_api_GetDevices.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_GetDevices(sdrplay_api_DeviceT *devices, unsigned int *numDevs, unsigned int maxDevs)
+ * }
+ */
+ public static MethodHandle sdrplay_api_GetDevices$handle() {
+ return sdrplay_api_GetDevices.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_GetDevices(sdrplay_api_DeviceT *devices, unsigned int *numDevs, unsigned int maxDevs)
+ * }
+ */
+ public static MemorySegment sdrplay_api_GetDevices$address() {
+ return sdrplay_api_GetDevices.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_GetDevices(sdrplay_api_DeviceT *devices, unsigned int *numDevs, unsigned int maxDevs)
* }
*/
public static int sdrplay_api_GetDevices(MemorySegment devices, MemorySegment numDevs, int maxDevs) {
- var mh$ = sdrplay_api_GetDevices$MH();
+ var mh$ = sdrplay_api_GetDevices.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_GetDevices", devices, numDevs, maxDevs);
+ }
return (int)mh$.invokeExact(devices, numDevs, maxDevs);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_SelectDevice$MH() {
- return RuntimeHelper.requireNonNull(constants$8.sdrplay_api_SelectDevice$MH,"sdrplay_api_SelectDevice");
+
+ private static class sdrplay_api_SelectDevice {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_SelectDevice");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_SelectDevice(sdrplay_api_DeviceT* device);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SelectDevice(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_SelectDevice$descriptor() {
+ return sdrplay_api_SelectDevice.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SelectDevice(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static MethodHandle sdrplay_api_SelectDevice$handle() {
+ return sdrplay_api_SelectDevice.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SelectDevice(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static MemorySegment sdrplay_api_SelectDevice$address() {
+ return sdrplay_api_SelectDevice.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SelectDevice(sdrplay_api_DeviceT *device)
* }
*/
public static int sdrplay_api_SelectDevice(MemorySegment device) {
- var mh$ = sdrplay_api_SelectDevice$MH();
+ var mh$ = sdrplay_api_SelectDevice.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_SelectDevice", device);
+ }
return (int)mh$.invokeExact(device);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_ReleaseDevice$MH() {
- return RuntimeHelper.requireNonNull(constants$8.sdrplay_api_ReleaseDevice$MH,"sdrplay_api_ReleaseDevice");
+
+ private static class sdrplay_api_ReleaseDevice {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_ReleaseDevice");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_ReleaseDevice(sdrplay_api_DeviceT* device);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_ReleaseDevice(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_ReleaseDevice$descriptor() {
+ return sdrplay_api_ReleaseDevice.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_ReleaseDevice(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static MethodHandle sdrplay_api_ReleaseDevice$handle() {
+ return sdrplay_api_ReleaseDevice.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_ReleaseDevice(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static MemorySegment sdrplay_api_ReleaseDevice$address() {
+ return sdrplay_api_ReleaseDevice.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_ReleaseDevice(sdrplay_api_DeviceT *device)
* }
*/
public static int sdrplay_api_ReleaseDevice(MemorySegment device) {
- var mh$ = sdrplay_api_ReleaseDevice$MH();
+ var mh$ = sdrplay_api_ReleaseDevice.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_ReleaseDevice", device);
+ }
return (int)mh$.invokeExact(device);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_GetErrorString$MH() {
- return RuntimeHelper.requireNonNull(constants$8.sdrplay_api_GetErrorString$MH,"sdrplay_api_GetErrorString");
+
+ private static class sdrplay_api_GetErrorString {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_GetErrorString");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * char* sdrplay_api_GetErrorString(sdrplay_api_ErrT err);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * const char *sdrplay_api_GetErrorString(sdrplay_api_ErrT err)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_GetErrorString$descriptor() {
+ return sdrplay_api_GetErrorString.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * const char *sdrplay_api_GetErrorString(sdrplay_api_ErrT err)
+ * }
+ */
+ public static MethodHandle sdrplay_api_GetErrorString$handle() {
+ return sdrplay_api_GetErrorString.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * const char *sdrplay_api_GetErrorString(sdrplay_api_ErrT err)
+ * }
+ */
+ public static MemorySegment sdrplay_api_GetErrorString$address() {
+ return sdrplay_api_GetErrorString.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * const char *sdrplay_api_GetErrorString(sdrplay_api_ErrT err)
* }
*/
public static MemorySegment sdrplay_api_GetErrorString(int err) {
- var mh$ = sdrplay_api_GetErrorString$MH();
+ var mh$ = sdrplay_api_GetErrorString.HANDLE;
try {
- return (java.lang.foreign.MemorySegment)mh$.invokeExact(err);
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_GetErrorString", err);
+ }
+ return (MemorySegment)mh$.invokeExact(err);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_GetLastError$MH() {
- return RuntimeHelper.requireNonNull(constants$8.sdrplay_api_GetLastError$MH,"sdrplay_api_GetLastError");
+
+ private static class sdrplay_api_GetLastError {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_GetLastError");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrorInfoT* sdrplay_api_GetLastError(sdrplay_api_DeviceT* device);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrorInfoT *sdrplay_api_GetLastError(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_GetLastError$descriptor() {
+ return sdrplay_api_GetLastError.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrorInfoT *sdrplay_api_GetLastError(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static MethodHandle sdrplay_api_GetLastError$handle() {
+ return sdrplay_api_GetLastError.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrorInfoT *sdrplay_api_GetLastError(sdrplay_api_DeviceT *device)
+ * }
+ */
+ public static MemorySegment sdrplay_api_GetLastError$address() {
+ return sdrplay_api_GetLastError.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrorInfoT *sdrplay_api_GetLastError(sdrplay_api_DeviceT *device)
* }
*/
public static MemorySegment sdrplay_api_GetLastError(MemorySegment device) {
- var mh$ = sdrplay_api_GetLastError$MH();
+ var mh$ = sdrplay_api_GetLastError.HANDLE;
try {
- return (java.lang.foreign.MemorySegment)mh$.invokeExact(device);
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_GetLastError", device);
+ }
+ return (MemorySegment)mh$.invokeExact(device);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_DisableHeartbeat$MH() {
- return RuntimeHelper.requireNonNull(constants$8.sdrplay_api_DisableHeartbeat$MH,"sdrplay_api_DisableHeartbeat");
+
+ private static class sdrplay_api_DisableHeartbeat {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_DisableHeartbeat");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_DisableHeartbeat();
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_DisableHeartbeat()
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_DisableHeartbeat$descriptor() {
+ return sdrplay_api_DisableHeartbeat.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_DisableHeartbeat()
+ * }
+ */
+ public static MethodHandle sdrplay_api_DisableHeartbeat$handle() {
+ return sdrplay_api_DisableHeartbeat.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_DisableHeartbeat()
+ * }
+ */
+ public static MemorySegment sdrplay_api_DisableHeartbeat$address() {
+ return sdrplay_api_DisableHeartbeat.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_DisableHeartbeat()
* }
*/
public static int sdrplay_api_DisableHeartbeat() {
- var mh$ = sdrplay_api_DisableHeartbeat$MH();
+ var mh$ = sdrplay_api_DisableHeartbeat.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_DisableHeartbeat");
+ }
return (int)mh$.invokeExact();
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_DebugEnable$MH() {
- return RuntimeHelper.requireNonNull(constants$8.sdrplay_api_DebugEnable$MH,"sdrplay_api_DebugEnable");
+
+ private static class sdrplay_api_DebugEnable {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_DebugEnable");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_DebugEnable(HANDLE dev, sdrplay_api_DbgLvl_t enable);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_DebugEnable(HANDLE dev, sdrplay_api_DbgLvl_t enable)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_DebugEnable$descriptor() {
+ return sdrplay_api_DebugEnable.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_DebugEnable(HANDLE dev, sdrplay_api_DbgLvl_t enable)
+ * }
+ */
+ public static MethodHandle sdrplay_api_DebugEnable$handle() {
+ return sdrplay_api_DebugEnable.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_DebugEnable(HANDLE dev, sdrplay_api_DbgLvl_t enable)
+ * }
+ */
+ public static MemorySegment sdrplay_api_DebugEnable$address() {
+ return sdrplay_api_DebugEnable.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_DebugEnable(HANDLE dev, sdrplay_api_DbgLvl_t enable)
* }
*/
public static int sdrplay_api_DebugEnable(MemorySegment dev, int enable) {
- var mh$ = sdrplay_api_DebugEnable$MH();
+ var mh$ = sdrplay_api_DebugEnable.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_DebugEnable", dev, enable);
+ }
return (int)mh$.invokeExact(dev, enable);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_GetDeviceParams$MH() {
- return RuntimeHelper.requireNonNull(constants$9.sdrplay_api_GetDeviceParams$MH,"sdrplay_api_GetDeviceParams");
+
+ private static class sdrplay_api_GetDeviceParams {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_GetDeviceParams");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_GetDeviceParams(HANDLE dev, sdrplay_api_DeviceParamsT** deviceParams);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_GetDeviceParams(HANDLE dev, sdrplay_api_DeviceParamsT **deviceParams)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_GetDeviceParams$descriptor() {
+ return sdrplay_api_GetDeviceParams.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_GetDeviceParams(HANDLE dev, sdrplay_api_DeviceParamsT **deviceParams)
+ * }
+ */
+ public static MethodHandle sdrplay_api_GetDeviceParams$handle() {
+ return sdrplay_api_GetDeviceParams.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_GetDeviceParams(HANDLE dev, sdrplay_api_DeviceParamsT **deviceParams)
+ * }
+ */
+ public static MemorySegment sdrplay_api_GetDeviceParams$address() {
+ return sdrplay_api_GetDeviceParams.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_GetDeviceParams(HANDLE dev, sdrplay_api_DeviceParamsT **deviceParams)
* }
*/
public static int sdrplay_api_GetDeviceParams(MemorySegment dev, MemorySegment deviceParams) {
- var mh$ = sdrplay_api_GetDeviceParams$MH();
+ var mh$ = sdrplay_api_GetDeviceParams.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_GetDeviceParams", dev, deviceParams);
+ }
return (int)mh$.invokeExact(dev, deviceParams);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_Init$MH() {
- return RuntimeHelper.requireNonNull(constants$9.sdrplay_api_Init$MH,"sdrplay_api_Init");
+
+ private static class sdrplay_api_Init {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_Init");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_Init(HANDLE dev, sdrplay_api_CallbackFnsT* callbackFns, void* cbContext);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Init(HANDLE dev, sdrplay_api_CallbackFnsT *callbackFns, void *cbContext)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_Init$descriptor() {
+ return sdrplay_api_Init.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Init(HANDLE dev, sdrplay_api_CallbackFnsT *callbackFns, void *cbContext)
+ * }
+ */
+ public static MethodHandle sdrplay_api_Init$handle() {
+ return sdrplay_api_Init.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Init(HANDLE dev, sdrplay_api_CallbackFnsT *callbackFns, void *cbContext)
+ * }
+ */
+ public static MemorySegment sdrplay_api_Init$address() {
+ return sdrplay_api_Init.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Init(HANDLE dev, sdrplay_api_CallbackFnsT *callbackFns, void *cbContext)
* }
*/
public static int sdrplay_api_Init(MemorySegment dev, MemorySegment callbackFns, MemorySegment cbContext) {
- var mh$ = sdrplay_api_Init$MH();
+ var mh$ = sdrplay_api_Init.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_Init", dev, callbackFns, cbContext);
+ }
return (int)mh$.invokeExact(dev, callbackFns, cbContext);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_Uninit$MH() {
- return RuntimeHelper.requireNonNull(constants$9.sdrplay_api_Uninit$MH,"sdrplay_api_Uninit");
+
+ private static class sdrplay_api_Uninit {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_Uninit");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_Uninit(HANDLE dev);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Uninit(HANDLE dev)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_Uninit$descriptor() {
+ return sdrplay_api_Uninit.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Uninit(HANDLE dev)
+ * }
+ */
+ public static MethodHandle sdrplay_api_Uninit$handle() {
+ return sdrplay_api_Uninit.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Uninit(HANDLE dev)
+ * }
+ */
+ public static MemorySegment sdrplay_api_Uninit$address() {
+ return sdrplay_api_Uninit.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Uninit(HANDLE dev)
* }
*/
public static int sdrplay_api_Uninit(MemorySegment dev) {
- var mh$ = sdrplay_api_Uninit$MH();
+ var mh$ = sdrplay_api_Uninit.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_Uninit", dev);
+ }
return (int)mh$.invokeExact(dev);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_Update$MH() {
- return RuntimeHelper.requireNonNull(constants$9.sdrplay_api_Update$MH,"sdrplay_api_Update");
+
+ private static class sdrplay_api_Update {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_Update");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_Update(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Update(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_Update$descriptor() {
+ return sdrplay_api_Update.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Update(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1)
+ * }
+ */
+ public static MethodHandle sdrplay_api_Update$handle() {
+ return sdrplay_api_Update.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Update(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1)
+ * }
+ */
+ public static MemorySegment sdrplay_api_Update$address() {
+ return sdrplay_api_Update.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_Update(HANDLE dev, sdrplay_api_TunerSelectT tuner, sdrplay_api_ReasonForUpdateT reasonForUpdate, sdrplay_api_ReasonForUpdateExtension1T reasonForUpdateExt1)
* }
*/
public static int sdrplay_api_Update(MemorySegment dev, int tuner, int reasonForUpdate, int reasonForUpdateExt1) {
- var mh$ = sdrplay_api_Update$MH();
+ var mh$ = sdrplay_api_Update.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_Update", dev, tuner, reasonForUpdate, reasonForUpdateExt1);
+ }
return (int)mh$.invokeExact(dev, tuner, reasonForUpdate, reasonForUpdateExt1);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_SwapRspDuoActiveTuner$MH() {
- return RuntimeHelper.requireNonNull(constants$9.sdrplay_api_SwapRspDuoActiveTuner$MH,"sdrplay_api_SwapRspDuoActiveTuner");
+
+ private static class sdrplay_api_SwapRspDuoActiveTuner {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_SwapRspDuoActiveTuner");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_SwapRspDuoActiveTuner(HANDLE dev, sdrplay_api_TunerSelectT* currentTuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoActiveTuner(HANDLE dev, sdrplay_api_TunerSelectT *currentTuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_SwapRspDuoActiveTuner$descriptor() {
+ return sdrplay_api_SwapRspDuoActiveTuner.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoActiveTuner(HANDLE dev, sdrplay_api_TunerSelectT *currentTuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel)
+ * }
+ */
+ public static MethodHandle sdrplay_api_SwapRspDuoActiveTuner$handle() {
+ return sdrplay_api_SwapRspDuoActiveTuner.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoActiveTuner(HANDLE dev, sdrplay_api_TunerSelectT *currentTuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel)
+ * }
+ */
+ public static MemorySegment sdrplay_api_SwapRspDuoActiveTuner$address() {
+ return sdrplay_api_SwapRspDuoActiveTuner.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoActiveTuner(HANDLE dev, sdrplay_api_TunerSelectT *currentTuner, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel)
* }
*/
public static int sdrplay_api_SwapRspDuoActiveTuner(MemorySegment dev, MemorySegment currentTuner, int tuner1AmPortSel) {
- var mh$ = sdrplay_api_SwapRspDuoActiveTuner$MH();
+ var mh$ = sdrplay_api_SwapRspDuoActiveTuner.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_SwapRspDuoActiveTuner", dev, currentTuner, tuner1AmPortSel);
+ }
return (int)mh$.invokeExact(dev, currentTuner, tuner1AmPortSel);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_SwapRspDuoDualTunerModeSampleRate$MH() {
- return RuntimeHelper.requireNonNull(constants$9.sdrplay_api_SwapRspDuoDualTunerModeSampleRate$MH,"sdrplay_api_SwapRspDuoDualTunerModeSampleRate");
+
+ private static class sdrplay_api_SwapRspDuoDualTunerModeSampleRate {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_SwapRspDuoDualTunerModeSampleRate");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_SwapRspDuoDualTunerModeSampleRate(HANDLE dev, double* currentSampleRate);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoDualTunerModeSampleRate(HANDLE dev, double *currentSampleRate)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_SwapRspDuoDualTunerModeSampleRate$descriptor() {
+ return sdrplay_api_SwapRspDuoDualTunerModeSampleRate.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoDualTunerModeSampleRate(HANDLE dev, double *currentSampleRate)
+ * }
+ */
+ public static MethodHandle sdrplay_api_SwapRspDuoDualTunerModeSampleRate$handle() {
+ return sdrplay_api_SwapRspDuoDualTunerModeSampleRate.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoDualTunerModeSampleRate(HANDLE dev, double *currentSampleRate)
+ * }
+ */
+ public static MemorySegment sdrplay_api_SwapRspDuoDualTunerModeSampleRate$address() {
+ return sdrplay_api_SwapRspDuoDualTunerModeSampleRate.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoDualTunerModeSampleRate(HANDLE dev, double *currentSampleRate)
* }
*/
public static int sdrplay_api_SwapRspDuoDualTunerModeSampleRate(MemorySegment dev, MemorySegment currentSampleRate) {
- var mh$ = sdrplay_api_SwapRspDuoDualTunerModeSampleRate$MH();
+ var mh$ = sdrplay_api_SwapRspDuoDualTunerModeSampleRate.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_SwapRspDuoDualTunerModeSampleRate", dev, currentSampleRate);
+ }
return (int)mh$.invokeExact(dev, currentSampleRate);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
- public static MethodHandle sdrplay_api_SwapRspDuoMode$MH() {
- return RuntimeHelper.requireNonNull(constants$10.sdrplay_api_SwapRspDuoMode$MH,"sdrplay_api_SwapRspDuoMode");
+
+ private static class sdrplay_api_SwapRspDuoMode {
+ public static final FunctionDescriptor DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_DOUBLE,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT
+ );
+
+ public static final MemorySegment ADDR = sdrplay_api_h.findOrThrow("sdrplay_api_SwapRspDuoMode");
+
+ public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
}
+
/**
- * {@snippet :
- * sdrplay_api_ErrT sdrplay_api_SwapRspDuoMode(sdrplay_api_DeviceT* currDevice, sdrplay_api_DeviceParamsT** deviceParams, sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner, sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel);
+ * Function descriptor for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoMode(sdrplay_api_DeviceT *currDevice, sdrplay_api_DeviceParamsT **deviceParams, sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner, sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel)
+ * }
+ */
+ public static FunctionDescriptor sdrplay_api_SwapRspDuoMode$descriptor() {
+ return sdrplay_api_SwapRspDuoMode.DESC;
+ }
+
+ /**
+ * Downcall method handle for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoMode(sdrplay_api_DeviceT *currDevice, sdrplay_api_DeviceParamsT **deviceParams, sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner, sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel)
+ * }
+ */
+ public static MethodHandle sdrplay_api_SwapRspDuoMode$handle() {
+ return sdrplay_api_SwapRspDuoMode.HANDLE;
+ }
+
+ /**
+ * Address for:
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoMode(sdrplay_api_DeviceT *currDevice, sdrplay_api_DeviceParamsT **deviceParams, sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner, sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel)
+ * }
+ */
+ public static MemorySegment sdrplay_api_SwapRspDuoMode$address() {
+ return sdrplay_api_SwapRspDuoMode.ADDR;
+ }
+
+ /**
+ * {@snippet lang=c :
+ * sdrplay_api_ErrT sdrplay_api_SwapRspDuoMode(sdrplay_api_DeviceT *currDevice, sdrplay_api_DeviceParamsT **deviceParams, sdrplay_api_RspDuoModeT rspDuoMode, double sampleRate, sdrplay_api_TunerSelectT tuner, sdrplay_api_Bw_MHzT bwType, sdrplay_api_If_kHzT ifType, sdrplay_api_RspDuo_AmPortSelectT tuner1AmPortSel)
* }
*/
public static int sdrplay_api_SwapRspDuoMode(MemorySegment currDevice, MemorySegment deviceParams, int rspDuoMode, double sampleRate, int tuner, int bwType, int ifType, int tuner1AmPortSel) {
- var mh$ = sdrplay_api_SwapRspDuoMode$MH();
+ var mh$ = sdrplay_api_SwapRspDuoMode.HANDLE;
try {
+ if (TRACE_DOWNCALLS) {
+ traceDowncall("sdrplay_api_SwapRspDuoMode", currDevice, deviceParams, rspDuoMode, sampleRate, tuner, bwType, ifType, tuner1AmPortSel);
+ }
return (int)mh$.invokeExact(currDevice, deviceParams, rspDuoMode, sampleRate, tuner, bwType, ifType, tuner1AmPortSel);
} catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
+ throw new AssertionError("should not reach here", ex$);
}
}
+ private static final int MAX_BB_GR = (int)59L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define MAX_BB_GR 59
* }
*/
public static int MAX_BB_GR() {
- return (int)59L;
+ return MAX_BB_GR;
}
+ private static final float SDRPLAY_API_VERSION = 3.069999933242798f;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_API_VERSION 3.069999933242798
* }
*/
public static float SDRPLAY_API_VERSION() {
- return 3.069999933242798f;
+ return SDRPLAY_API_VERSION;
}
+ private static final int SDRPLAY_MAX_DEVICES = (int)16L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_MAX_DEVICES 16
* }
*/
public static int SDRPLAY_MAX_DEVICES() {
- return (int)16L;
+ return SDRPLAY_MAX_DEVICES;
}
+ private static final int SDRPLAY_MAX_TUNERS_PER_DEVICE = (int)2L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_MAX_TUNERS_PER_DEVICE 2
* }
*/
public static int SDRPLAY_MAX_TUNERS_PER_DEVICE() {
- return (int)2L;
+ return SDRPLAY_MAX_TUNERS_PER_DEVICE;
}
+ private static final int SDRPLAY_MAX_SER_NO_LEN = (int)64L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_MAX_SER_NO_LEN 64
* }
*/
public static int SDRPLAY_MAX_SER_NO_LEN() {
- return (int)64L;
+ return SDRPLAY_MAX_SER_NO_LEN;
}
+ private static final int SDRPLAY_MAX_ROOT_NM_LEN = (int)32L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_MAX_ROOT_NM_LEN 32
* }
*/
public static int SDRPLAY_MAX_ROOT_NM_LEN() {
- return (int)32L;
+ return SDRPLAY_MAX_ROOT_NM_LEN;
}
+ private static final int SDRPLAY_RSP1_ID = (int)1L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_RSP1_ID 1
* }
*/
public static int SDRPLAY_RSP1_ID() {
- return (int)1L;
+ return SDRPLAY_RSP1_ID;
}
+ private static final int SDRPLAY_RSP1A_ID = (int)255L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_RSP1A_ID 255
* }
*/
public static int SDRPLAY_RSP1A_ID() {
- return (int)255L;
+ return SDRPLAY_RSP1A_ID;
}
+ private static final int SDRPLAY_RSP2_ID = (int)2L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_RSP2_ID 2
* }
*/
public static int SDRPLAY_RSP2_ID() {
- return (int)2L;
+ return SDRPLAY_RSP2_ID;
}
+ private static final int SDRPLAY_RSPduo_ID = (int)3L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_RSPduo_ID 3
* }
*/
public static int SDRPLAY_RSPduo_ID() {
- return (int)3L;
+ return SDRPLAY_RSPduo_ID;
}
+ private static final int SDRPLAY_RSPdx_ID = (int)4L;
/**
- * {@snippet :
+ * {@snippet lang=c :
* #define SDRPLAY_RSPdx_ID 4
* }
*/
public static int SDRPLAY_RSPdx_ID() {
- return (int)4L;
+ return SDRPLAY_RSPdx_ID;
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/Constants$root.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/Constants$root.java
deleted file mode 100644
index b0f33aa2..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/Constants$root.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-
-import static java.lang.foreign.ValueLayout.ADDRESS;
-import static java.lang.foreign.ValueLayout.JAVA_BOOLEAN;
-import static java.lang.foreign.ValueLayout.JAVA_BYTE;
-import static java.lang.foreign.ValueLayout.JAVA_DOUBLE;
-import static java.lang.foreign.ValueLayout.JAVA_FLOAT;
-import static java.lang.foreign.ValueLayout.JAVA_INT;
-import static java.lang.foreign.ValueLayout.JAVA_LONG;
-import static java.lang.foreign.ValueLayout.JAVA_SHORT;
-import static java.lang.foreign.ValueLayout.OfAddress;
-import static java.lang.foreign.ValueLayout.OfBoolean;
-import static java.lang.foreign.ValueLayout.OfByte;
-import static java.lang.foreign.ValueLayout.OfDouble;
-import static java.lang.foreign.ValueLayout.OfFloat;
-import static java.lang.foreign.ValueLayout.OfInt;
-import static java.lang.foreign.ValueLayout.OfLong;
-import static java.lang.foreign.ValueLayout.OfShort;
-final class Constants$root {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private Constants$root() {}
- static final OfBoolean C_BOOL$LAYOUT = JAVA_BOOLEAN;
- static final OfByte C_CHAR$LAYOUT = JAVA_BYTE;
- static final OfShort C_SHORT$LAYOUT = JAVA_SHORT;
- static final OfInt C_INT$LAYOUT = JAVA_INT;
- static final OfLong C_LONG$LAYOUT = JAVA_LONG;
- static final OfLong C_LONG_LONG$LAYOUT = JAVA_LONG;
- static final OfFloat C_FLOAT$LAYOUT = JAVA_FLOAT;
- static final OfDouble C_DOUBLE$LAYOUT = JAVA_DOUBLE;
- static final OfAddress C_POINTER$LAYOUT = ADDRESS.withBitAlignment(64).asUnbounded();
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/RuntimeHelper.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/RuntimeHelper.java
deleted file mode 100644
index 4bc8f4e9..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/RuntimeHelper.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-// Generated by jextract
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.foreign.GroupLayout;
-import java.lang.foreign.Linker;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.SymbolLookup;
-import java.lang.foreign.ValueLayout;
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodType;
-
-import static java.lang.foreign.ValueLayout.ADDRESS;
-import static java.lang.foreign.ValueLayout.JAVA_DOUBLE;
-import static java.lang.foreign.ValueLayout.JAVA_LONG;
-
-final class RuntimeHelper {
-
- private static final Linker LINKER = Linker.nativeLinker();
- private static final ClassLoader LOADER = RuntimeHelper.class.getClassLoader();
- private static final MethodHandles.Lookup MH_LOOKUP = MethodHandles.lookup();
- private static final SymbolLookup SYMBOL_LOOKUP;
- private static final SegmentAllocator THROWING_ALLOCATOR = (x, y) -> { throw new AssertionError("should not reach here"); };
-
- final static SegmentAllocator CONSTANT_ALLOCATOR =
- (size, align) -> MemorySegment.allocateNative(size, align, SegmentScope.auto());
-
- static {
-// System.loadLibrary("libsdrplay_api");
- SymbolLookup loaderLookup = SymbolLookup.loaderLookup();
- SYMBOL_LOOKUP = name -> loaderLookup.find(name).or(() -> LINKER.defaultLookup().find(name));
- }
-
- // Suppresses default constructor, ensuring non-instantiability.
- private RuntimeHelper() {}
-
- static T requireNonNull(T obj, String symbolName) {
- if (obj == null) {
- throw new UnsatisfiedLinkError("unresolved symbol: " + symbolName);
- }
- return obj;
- }
-
- static MemorySegment lookupGlobalVariable(String name, MemoryLayout layout) {
- return SYMBOL_LOOKUP.find(name).map(symbol -> MemorySegment.ofAddress(symbol.address(), layout.byteSize(), symbol.scope())).orElse(null);
- }
-
- static MethodHandle downcallHandle(String name, FunctionDescriptor fdesc) {
- return SYMBOL_LOOKUP.find(name).
- map(addr -> LINKER.downcallHandle(addr, fdesc)).
- orElse(null);
- }
-
- static MethodHandle downcallHandle(FunctionDescriptor fdesc) {
- return LINKER.downcallHandle(fdesc);
- }
-
- static MethodHandle downcallHandleVariadic(String name, FunctionDescriptor fdesc) {
- return SYMBOL_LOOKUP.find(name).
- map(addr -> VarargsInvoker.make(addr, fdesc)).
- orElse(null);
- }
-
- static MethodHandle upcallHandle(Class> fi, String name, FunctionDescriptor fdesc) {
- try {
- return MH_LOOKUP.findVirtual(fi, name, fdesc.toMethodType());
- } catch (Throwable ex) {
- throw new AssertionError(ex);
- }
- }
-
- static MemorySegment upcallStub(MethodHandle fiHandle, Z z, FunctionDescriptor fdesc, SegmentScope scope) {
- try {
- fiHandle = fiHandle.bindTo(z);
- return LINKER.upcallStub(fiHandle, fdesc, scope);
- } catch (Throwable ex) {
- throw new AssertionError(ex);
- }
- }
-
- static MemorySegment asArray(MemorySegment addr, MemoryLayout layout, int numElements, SegmentScope scope) {
- return MemorySegment.ofAddress(addr.address(), numElements * layout.byteSize(), scope);
- }
-
- // Internals only below this point
-
- private static final class VarargsInvoker {
- private static final MethodHandle INVOKE_MH;
- private final MemorySegment symbol;
- private final FunctionDescriptor function;
-
- private VarargsInvoker(MemorySegment symbol, FunctionDescriptor function) {
- this.symbol = symbol;
- this.function = function;
- }
-
- static {
- try {
- INVOKE_MH = MethodHandles.lookup().findVirtual(VarargsInvoker.class, "invoke", MethodType.methodType(Object.class, SegmentAllocator.class, Object[].class));
- } catch (ReflectiveOperationException e) {
- throw new RuntimeException(e);
- }
- }
-
- static MethodHandle make(MemorySegment symbol, FunctionDescriptor function) {
- VarargsInvoker invoker = new VarargsInvoker(symbol, function);
- MethodHandle handle = INVOKE_MH.bindTo(invoker).asCollector(Object[].class, function.argumentLayouts().size() + 1);
- MethodType mtype = MethodType.methodType(function.returnLayout().isPresent() ? carrier(function.returnLayout().get(), true) : void.class);
- for (MemoryLayout layout : function.argumentLayouts()) {
- mtype = mtype.appendParameterTypes(carrier(layout, false));
- }
- mtype = mtype.appendParameterTypes(Object[].class);
- boolean needsAllocator = function.returnLayout().isPresent() &&
- function.returnLayout().get() instanceof GroupLayout;
- if (needsAllocator) {
- mtype = mtype.insertParameterTypes(0, SegmentAllocator.class);
- } else {
- handle = MethodHandles.insertArguments(handle, 0, THROWING_ALLOCATOR);
- }
- return handle.asType(mtype);
- }
-
- static Class> carrier(MemoryLayout layout, boolean ret) {
- if (layout instanceof ValueLayout valueLayout) {
- return valueLayout.carrier();
- } else if (layout instanceof GroupLayout) {
- return MemorySegment.class;
- } else {
- throw new AssertionError("Cannot get here!");
- }
- }
-
- private Object invoke(SegmentAllocator allocator, Object[] args) throws Throwable {
- // one trailing Object[]
- int nNamedArgs = function.argumentLayouts().size();
- assert(args.length == nNamedArgs + 1);
- // The last argument is the array of vararg collector
- Object[] unnamedArgs = (Object[]) args[args.length - 1];
-
- int argsCount = nNamedArgs + unnamedArgs.length;
- Class>[] argTypes = new Class>[argsCount];
- MemoryLayout[] argLayouts = new MemoryLayout[nNamedArgs + unnamedArgs.length];
-
- int pos = 0;
- for (pos = 0; pos < nNamedArgs; pos++) {
- argLayouts[pos] = function.argumentLayouts().get(pos);
- }
-
- assert pos == nNamedArgs;
- for (Object o: unnamedArgs) {
- argLayouts[pos] = variadicLayout(normalize(o.getClass()));
- pos++;
- }
- assert pos == argsCount;
-
- FunctionDescriptor f = (function.returnLayout().isEmpty()) ?
- FunctionDescriptor.ofVoid(argLayouts) :
- FunctionDescriptor.of(function.returnLayout().get(), argLayouts);
- MethodHandle mh = LINKER.downcallHandle(symbol, f);
- boolean needsAllocator = function.returnLayout().isPresent() &&
- function.returnLayout().get() instanceof GroupLayout;
- if (needsAllocator) {
- mh = mh.bindTo(allocator);
- }
- // flatten argument list so that it can be passed to an asSpreader MH
- Object[] allArgs = new Object[nNamedArgs + unnamedArgs.length];
- System.arraycopy(args, 0, allArgs, 0, nNamedArgs);
- System.arraycopy(unnamedArgs, 0, allArgs, nNamedArgs, unnamedArgs.length);
-
- return mh.asSpreader(Object[].class, argsCount).invoke(allArgs);
- }
-
- private static Class> unboxIfNeeded(Class> clazz) {
- if (clazz == Boolean.class) {
- return boolean.class;
- } else if (clazz == Void.class) {
- return void.class;
- } else if (clazz == Byte.class) {
- return byte.class;
- } else if (clazz == Character.class) {
- return char.class;
- } else if (clazz == Short.class) {
- return short.class;
- } else if (clazz == Integer.class) {
- return int.class;
- } else if (clazz == Long.class) {
- return long.class;
- } else if (clazz == Float.class) {
- return float.class;
- } else if (clazz == Double.class) {
- return double.class;
- } else {
- return clazz;
- }
- }
-
- private Class> promote(Class> c) {
- if (c == byte.class || c == char.class || c == short.class || c == int.class) {
- return long.class;
- } else if (c == float.class) {
- return double.class;
- } else {
- return c;
- }
- }
-
- private Class> normalize(Class> c) {
- c = unboxIfNeeded(c);
- if (c.isPrimitive()) {
- return promote(c);
- }
- if (c == MemorySegment.class) {
- return MemorySegment.class;
- }
- throw new IllegalArgumentException("Invalid type for ABI: " + c.getTypeName());
- }
-
- private MemoryLayout variadicLayout(Class> c) {
- if (c == long.class) {
- return JAVA_LONG;
- } else if (c == double.class) {
- return JAVA_DOUBLE;
- } else if (c == MemorySegment.class) {
- return ADDRESS;
- } else {
- throw new IllegalArgumentException("Unhandled variadic argument class: " + c);
- }
- }
- }
-}
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$0.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$0.java
deleted file mode 100644
index 55d95147..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$0.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$0 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$0() {}
- static final FunctionDescriptor sdrplay_api_StreamCallback_t$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_StreamCallback_t_UP$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_StreamCallback_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_StreamCallback_t.class, "apply", constants$0.sdrplay_api_StreamCallback_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_StreamCallback_t_DOWN$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_StreamCallback_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$0.sdrplay_api_StreamCallback_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_EventCallback_t$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_EventCallback_t_UP$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_EventCallback_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_EventCallback_t.class, "apply", constants$0.sdrplay_api_EventCallback_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_EventCallback_t_DOWN$FUNC = FunctionDescriptor.ofVoid(
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_EventCallback_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$0.sdrplay_api_EventCallback_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Open_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_Open_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Open_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Open_t.class, "apply", constants$0.sdrplay_api_Open_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Open_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Open_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$0.sdrplay_api_Open_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$1.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$1.java
deleted file mode 100644
index ea36af1a..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$1.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$1 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$1() {}
- static final FunctionDescriptor sdrplay_api_Close_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_Close_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Close_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Close_t.class, "apply", constants$1.sdrplay_api_Close_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Close_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_Close_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$1.sdrplay_api_Close_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_ApiVersion_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_ApiVersion_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ApiVersion_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_ApiVersion_t.class, "apply", constants$1.sdrplay_api_ApiVersion_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_ApiVersion_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ApiVersion_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$1.sdrplay_api_ApiVersion_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_LockDeviceApi_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_LockDeviceApi_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_LockDeviceApi_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_LockDeviceApi_t.class, "apply", constants$1.sdrplay_api_LockDeviceApi_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_LockDeviceApi_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_LockDeviceApi_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$1.sdrplay_api_LockDeviceApi_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$2.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$2.java
deleted file mode 100644
index bc5c0fb5..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$2.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$2 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$2() {}
- static final FunctionDescriptor sdrplay_api_UnlockDeviceApi_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_UnlockDeviceApi_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_UnlockDeviceApi_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_UnlockDeviceApi_t.class, "apply", constants$2.sdrplay_api_UnlockDeviceApi_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_UnlockDeviceApi_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_UnlockDeviceApi_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$2.sdrplay_api_UnlockDeviceApi_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetDevices_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_GetDevices_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDevices_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_GetDevices_t.class, "apply", constants$2.sdrplay_api_GetDevices_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_GetDevices_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDevices_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$2.sdrplay_api_GetDevices_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_SelectDevice_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_SelectDevice_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_SelectDevice_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_SelectDevice_t.class, "apply", constants$2.sdrplay_api_SelectDevice_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_SelectDevice_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_SelectDevice_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$2.sdrplay_api_SelectDevice_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$3.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$3.java
deleted file mode 100644
index 873be6a6..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$3.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$3 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$3() {}
- static final FunctionDescriptor sdrplay_api_ReleaseDevice_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_ReleaseDevice_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ReleaseDevice_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_ReleaseDevice_t.class, "apply", constants$3.sdrplay_api_ReleaseDevice_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_ReleaseDevice_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_ReleaseDevice_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$3.sdrplay_api_ReleaseDevice_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetErrorString_t$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_GetErrorString_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetErrorString_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_GetErrorString_t.class, "apply", constants$3.sdrplay_api_GetErrorString_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_GetErrorString_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetErrorString_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$3.sdrplay_api_GetErrorString_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetLastError_t$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_GetLastError_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetLastError_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_GetLastError_t.class, "apply", constants$3.sdrplay_api_GetLastError_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_GetLastError_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetLastError_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$3.sdrplay_api_GetLastError_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$4.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$4.java
deleted file mode 100644
index 028a9bcd..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$4.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$4 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$4() {}
- static final FunctionDescriptor sdrplay_api_DisableHeartbeat_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final FunctionDescriptor sdrplay_api_DisableHeartbeat_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_DisableHeartbeat_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_DisableHeartbeat_t.class, "apply", constants$4.sdrplay_api_DisableHeartbeat_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_DisableHeartbeat_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT);
- static final MethodHandle sdrplay_api_DisableHeartbeat_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$4.sdrplay_api_DisableHeartbeat_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_DebugEnable_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_DebugEnable_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_DebugEnable_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_DebugEnable_t.class, "apply", constants$4.sdrplay_api_DebugEnable_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_DebugEnable_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_DebugEnable_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$4.sdrplay_api_DebugEnable_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_GetDeviceParams_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_GetDeviceParams_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDeviceParams_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_GetDeviceParams_t.class, "apply", constants$4.sdrplay_api_GetDeviceParams_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_GetDeviceParams_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_GetDeviceParams_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$4.sdrplay_api_GetDeviceParams_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$5.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$5.java
deleted file mode 100644
index aad648b3..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$5.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$5 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$5() {}
- static final FunctionDescriptor sdrplay_api_Init_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_Init_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Init_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Init_t.class, "apply", constants$5.sdrplay_api_Init_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Init_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Init_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$5.sdrplay_api_Init_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Uninit_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_Uninit_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Uninit_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Uninit_t.class, "apply", constants$5.sdrplay_api_Uninit_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Uninit_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT
- );
- static final MethodHandle sdrplay_api_Uninit_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$5.sdrplay_api_Uninit_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_Update_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_Update_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_Update_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_Update_t.class, "apply", constants$5.sdrplay_api_Update_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_Update_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_Update_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$5.sdrplay_api_Update_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$6.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$6.java
deleted file mode 100644
index 3f1fee9a..00000000
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/constants$6.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * ****************************************************************************
- */
-
-// Generated by jextract
-
-package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-
-import java.lang.foreign.FunctionDescriptor;
-import java.lang.invoke.MethodHandle;
-
-final class constants$6 {
-
- // Suppresses default constructor, ensuring non-instantiability.
- private constants$6() {}
- static final FunctionDescriptor sdrplay_api_SwapRspDuoActiveTuner_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoActiveTuner_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoActiveTuner_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_SwapRspDuoActiveTuner_t.class, "apply", constants$6.sdrplay_api_SwapRspDuoActiveTuner_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_SwapRspDuoActiveTuner_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoActiveTuner_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$6.sdrplay_api_SwapRspDuoActiveTuner_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t.class, "apply", constants$6.sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$6.sdrplay_api_SwapRspDuoDualTunerModeSampleRate_t_DOWN$FUNC
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoMode_t$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final FunctionDescriptor sdrplay_api_SwapRspDuoMode_t_UP$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoMode_t_UP$MH = RuntimeHelper.upcallHandle(sdrplay_api_SwapRspDuoMode_t.class, "apply", constants$6.sdrplay_api_SwapRspDuoMode_t_UP$FUNC);
- static final FunctionDescriptor sdrplay_api_SwapRspDuoMode_t_DOWN$FUNC = FunctionDescriptor.of(Constants$root.C_INT$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_POINTER$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_DOUBLE$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT,
- Constants$root.C_INT$LAYOUT
- );
- static final MethodHandle sdrplay_api_SwapRspDuoMode_t_DOWN$MH = RuntimeHelper.downcallHandle(
- constants$6.sdrplay_api_SwapRspDuoMode_t_DOWN$FUNC
- );
-}
-
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_AgcT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_AgcT.java
index 2d78e25c..4ef29628 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_AgcT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_AgcT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,15 +21,19 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfInt;
+import static java.lang.foreign.ValueLayout.OfShort;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_AgcControlT enable;
* int setPoint_dBfs;
@@ -38,225 +42,382 @@ import java.lang.invoke.VarHandle;
* unsigned short decay_delay_ms;
* unsigned short decay_threshold_dB;
* int syncUpdate;
- * };
+ * }
* }
*/
public class sdrplay_api_AgcT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("enable"),
- Constants$root.C_INT$LAYOUT.withName("setPoint_dBfs"),
- Constants$root.C_SHORT$LAYOUT.withName("attack_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_delay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_threshold_dB"),
- Constants$root.C_INT$LAYOUT.withName("syncUpdate")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_AgcT.$struct$LAYOUT;
+ sdrplay_api_AgcT() {
+ // Should not be called directly
}
- static final VarHandle enable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("enable"));
- public static VarHandle enable$VH() {
- return sdrplay_api_AgcT.enable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("enable"),
+ sdrplay_api_h.C_INT.withName("setPoint_dBfs"),
+ sdrplay_api_h.C_SHORT.withName("attack_ms"),
+ sdrplay_api_h.C_SHORT.withName("decay_ms"),
+ sdrplay_api_h.C_SHORT.withName("decay_delay_ms"),
+ sdrplay_api_h.C_SHORT.withName("decay_threshold_dB"),
+ sdrplay_api_h.C_INT.withName("syncUpdate")
+ ).withName("$anon$36:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt enable$LAYOUT = (OfInt)$LAYOUT.select(groupElement("enable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcControlT enable
+ * }
+ */
+ public static final OfInt enable$layout() {
+ return enable$LAYOUT;
+ }
+
+ private static final long enable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcControlT enable
+ * }
+ */
+ public static final long enable$offset() {
+ return enable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_AgcControlT enable;
+ * {@snippet lang=c :
+ * sdrplay_api_AgcControlT enable
* }
*/
- public static int enable$get(MemorySegment seg) {
- return (int)sdrplay_api_AgcT.enable$VH.get(seg);
+ public static int enable(MemorySegment struct) {
+ return struct.get(enable$LAYOUT, enable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_AgcControlT enable;
+ * {@snippet lang=c :
+ * sdrplay_api_AgcControlT enable
* }
*/
- public static void enable$set(MemorySegment seg, int x) {
- sdrplay_api_AgcT.enable$VH.set(seg, x);
+ public static void enable(MemorySegment struct, int fieldValue) {
+ struct.set(enable$LAYOUT, enable$OFFSET, fieldValue);
}
- public static int enable$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_AgcT.enable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt setPoint_dBfs$LAYOUT = (OfInt)$LAYOUT.select(groupElement("setPoint_dBfs"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int setPoint_dBfs
+ * }
+ */
+ public static final OfInt setPoint_dBfs$layout() {
+ return setPoint_dBfs$LAYOUT;
}
- public static void enable$set(MemorySegment seg, long index, int x) {
- sdrplay_api_AgcT.enable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle setPoint_dBfs$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("setPoint_dBfs"));
- public static VarHandle setPoint_dBfs$VH() {
- return sdrplay_api_AgcT.setPoint_dBfs$VH;
+
+ private static final long setPoint_dBfs$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int setPoint_dBfs
+ * }
+ */
+ public static final long setPoint_dBfs$offset() {
+ return setPoint_dBfs$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int setPoint_dBfs;
+ * {@snippet lang=c :
+ * int setPoint_dBfs
* }
*/
- public static int setPoint_dBfs$get(MemorySegment seg) {
- return (int)sdrplay_api_AgcT.setPoint_dBfs$VH.get(seg);
+ public static int setPoint_dBfs(MemorySegment struct) {
+ return struct.get(setPoint_dBfs$LAYOUT, setPoint_dBfs$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int setPoint_dBfs;
+ * {@snippet lang=c :
+ * int setPoint_dBfs
* }
*/
- public static void setPoint_dBfs$set(MemorySegment seg, int x) {
- sdrplay_api_AgcT.setPoint_dBfs$VH.set(seg, x);
+ public static void setPoint_dBfs(MemorySegment struct, int fieldValue) {
+ struct.set(setPoint_dBfs$LAYOUT, setPoint_dBfs$OFFSET, fieldValue);
}
- public static int setPoint_dBfs$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_AgcT.setPoint_dBfs$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfShort attack_ms$LAYOUT = (OfShort)$LAYOUT.select(groupElement("attack_ms"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned short attack_ms
+ * }
+ */
+ public static final OfShort attack_ms$layout() {
+ return attack_ms$LAYOUT;
}
- public static void setPoint_dBfs$set(MemorySegment seg, long index, int x) {
- sdrplay_api_AgcT.setPoint_dBfs$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle attack_ms$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("attack_ms"));
- public static VarHandle attack_ms$VH() {
- return sdrplay_api_AgcT.attack_ms$VH;
+
+ private static final long attack_ms$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned short attack_ms
+ * }
+ */
+ public static final long attack_ms$offset() {
+ return attack_ms$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned short attack_ms;
+ * {@snippet lang=c :
+ * unsigned short attack_ms
* }
*/
- public static short attack_ms$get(MemorySegment seg) {
- return (short)sdrplay_api_AgcT.attack_ms$VH.get(seg);
+ public static short attack_ms(MemorySegment struct) {
+ return struct.get(attack_ms$LAYOUT, attack_ms$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned short attack_ms;
+ * {@snippet lang=c :
+ * unsigned short attack_ms
* }
*/
- public static void attack_ms$set(MemorySegment seg, short x) {
- sdrplay_api_AgcT.attack_ms$VH.set(seg, x);
+ public static void attack_ms(MemorySegment struct, short fieldValue) {
+ struct.set(attack_ms$LAYOUT, attack_ms$OFFSET, fieldValue);
}
- public static short attack_ms$get(MemorySegment seg, long index) {
- return (short)sdrplay_api_AgcT.attack_ms$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfShort decay_ms$LAYOUT = (OfShort)$LAYOUT.select(groupElement("decay_ms"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned short decay_ms
+ * }
+ */
+ public static final OfShort decay_ms$layout() {
+ return decay_ms$LAYOUT;
}
- public static void attack_ms$set(MemorySegment seg, long index, short x) {
- sdrplay_api_AgcT.attack_ms$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle decay_ms$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("decay_ms"));
- public static VarHandle decay_ms$VH() {
- return sdrplay_api_AgcT.decay_ms$VH;
+
+ private static final long decay_ms$OFFSET = 10;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned short decay_ms
+ * }
+ */
+ public static final long decay_ms$offset() {
+ return decay_ms$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned short decay_ms;
+ * {@snippet lang=c :
+ * unsigned short decay_ms
* }
*/
- public static short decay_ms$get(MemorySegment seg) {
- return (short)sdrplay_api_AgcT.decay_ms$VH.get(seg);
+ public static short decay_ms(MemorySegment struct) {
+ return struct.get(decay_ms$LAYOUT, decay_ms$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned short decay_ms;
+ * {@snippet lang=c :
+ * unsigned short decay_ms
* }
*/
- public static void decay_ms$set(MemorySegment seg, short x) {
- sdrplay_api_AgcT.decay_ms$VH.set(seg, x);
+ public static void decay_ms(MemorySegment struct, short fieldValue) {
+ struct.set(decay_ms$LAYOUT, decay_ms$OFFSET, fieldValue);
}
- public static short decay_ms$get(MemorySegment seg, long index) {
- return (short)sdrplay_api_AgcT.decay_ms$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfShort decay_delay_ms$LAYOUT = (OfShort)$LAYOUT.select(groupElement("decay_delay_ms"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned short decay_delay_ms
+ * }
+ */
+ public static final OfShort decay_delay_ms$layout() {
+ return decay_delay_ms$LAYOUT;
}
- public static void decay_ms$set(MemorySegment seg, long index, short x) {
- sdrplay_api_AgcT.decay_ms$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle decay_delay_ms$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("decay_delay_ms"));
- public static VarHandle decay_delay_ms$VH() {
- return sdrplay_api_AgcT.decay_delay_ms$VH;
+
+ private static final long decay_delay_ms$OFFSET = 12;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned short decay_delay_ms
+ * }
+ */
+ public static final long decay_delay_ms$offset() {
+ return decay_delay_ms$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned short decay_delay_ms;
+ * {@snippet lang=c :
+ * unsigned short decay_delay_ms
* }
*/
- public static short decay_delay_ms$get(MemorySegment seg) {
- return (short)sdrplay_api_AgcT.decay_delay_ms$VH.get(seg);
+ public static short decay_delay_ms(MemorySegment struct) {
+ return struct.get(decay_delay_ms$LAYOUT, decay_delay_ms$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned short decay_delay_ms;
+ * {@snippet lang=c :
+ * unsigned short decay_delay_ms
* }
*/
- public static void decay_delay_ms$set(MemorySegment seg, short x) {
- sdrplay_api_AgcT.decay_delay_ms$VH.set(seg, x);
+ public static void decay_delay_ms(MemorySegment struct, short fieldValue) {
+ struct.set(decay_delay_ms$LAYOUT, decay_delay_ms$OFFSET, fieldValue);
}
- public static short decay_delay_ms$get(MemorySegment seg, long index) {
- return (short)sdrplay_api_AgcT.decay_delay_ms$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfShort decay_threshold_dB$LAYOUT = (OfShort)$LAYOUT.select(groupElement("decay_threshold_dB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned short decay_threshold_dB
+ * }
+ */
+ public static final OfShort decay_threshold_dB$layout() {
+ return decay_threshold_dB$LAYOUT;
}
- public static void decay_delay_ms$set(MemorySegment seg, long index, short x) {
- sdrplay_api_AgcT.decay_delay_ms$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle decay_threshold_dB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("decay_threshold_dB"));
- public static VarHandle decay_threshold_dB$VH() {
- return sdrplay_api_AgcT.decay_threshold_dB$VH;
+
+ private static final long decay_threshold_dB$OFFSET = 14;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned short decay_threshold_dB
+ * }
+ */
+ public static final long decay_threshold_dB$offset() {
+ return decay_threshold_dB$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned short decay_threshold_dB;
+ * {@snippet lang=c :
+ * unsigned short decay_threshold_dB
* }
*/
- public static short decay_threshold_dB$get(MemorySegment seg) {
- return (short)sdrplay_api_AgcT.decay_threshold_dB$VH.get(seg);
+ public static short decay_threshold_dB(MemorySegment struct) {
+ return struct.get(decay_threshold_dB$LAYOUT, decay_threshold_dB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned short decay_threshold_dB;
+ * {@snippet lang=c :
+ * unsigned short decay_threshold_dB
* }
*/
- public static void decay_threshold_dB$set(MemorySegment seg, short x) {
- sdrplay_api_AgcT.decay_threshold_dB$VH.set(seg, x);
+ public static void decay_threshold_dB(MemorySegment struct, short fieldValue) {
+ struct.set(decay_threshold_dB$LAYOUT, decay_threshold_dB$OFFSET, fieldValue);
}
- public static short decay_threshold_dB$get(MemorySegment seg, long index) {
- return (short)sdrplay_api_AgcT.decay_threshold_dB$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt syncUpdate$LAYOUT = (OfInt)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int syncUpdate
+ * }
+ */
+ public static final OfInt syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void decay_threshold_dB$set(MemorySegment seg, long index, short x) {
- sdrplay_api_AgcT.decay_threshold_dB$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle syncUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("syncUpdate"));
- public static VarHandle syncUpdate$VH() {
- return sdrplay_api_AgcT.syncUpdate$VH;
+
+ private static final long syncUpdate$OFFSET = 16;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int syncUpdate;
+ * {@snippet lang=c :
+ * int syncUpdate
* }
*/
- public static int syncUpdate$get(MemorySegment seg) {
- return (int)sdrplay_api_AgcT.syncUpdate$VH.get(seg);
+ public static int syncUpdate(MemorySegment struct) {
+ return struct.get(syncUpdate$LAYOUT, syncUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int syncUpdate;
+ * {@snippet lang=c :
+ * int syncUpdate
* }
*/
- public static void syncUpdate$set(MemorySegment seg, int x) {
- sdrplay_api_AgcT.syncUpdate$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, int fieldValue) {
+ struct.set(syncUpdate$LAYOUT, syncUpdate$OFFSET, fieldValue);
}
- public static int syncUpdate$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_AgcT.syncUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void syncUpdate$set(MemorySegment seg, long index, int x) {
- sdrplay_api_AgcT.syncUpdate$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ApiVersion_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ApiVersion_t.java
index 2512382e..c2242733 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ApiVersion_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ApiVersion_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_ApiVersion_t)(float* apiVer);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_ApiVersion_t)(float *)
* }
*/
-public interface sdrplay_api_ApiVersion_t {
+public class sdrplay_api_ApiVersion_t {
- int apply(java.lang.foreign.MemorySegment dev);
- static MemorySegment allocate(sdrplay_api_ApiVersion_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$1.sdrplay_api_ApiVersion_t_UP$MH, fi, constants$1.sdrplay_api_ApiVersion_t$FUNC, scope);
+ sdrplay_api_ApiVersion_t() {
+ // Should not be called directly
}
- static sdrplay_api_ApiVersion_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev) -> {
- try {
- return (int)constants$1.sdrplay_api_ApiVersion_t_DOWN$MH.invokeExact(symbol, _dev);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment apiVer);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_ApiVersion_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_ApiVersion_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment apiVer) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, apiVer);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_CallbackFnsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_CallbackFnsT.java
index 4e8ef243..a9b9e2fb 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_CallbackFnsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_CallbackFnsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,131 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.AddressLayout;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_StreamCallback_t StreamACbFn;
* sdrplay_api_StreamCallback_t StreamBCbFn;
* sdrplay_api_EventCallback_t EventCbFn;
- * };
+ * }
* }
*/
public class sdrplay_api_CallbackFnsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_POINTER$LAYOUT.withName("StreamACbFn"),
- Constants$root.C_POINTER$LAYOUT.withName("StreamBCbFn"),
- Constants$root.C_POINTER$LAYOUT.withName("EventCbFn")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_CallbackFnsT.$struct$LAYOUT;
+ sdrplay_api_CallbackFnsT() {
+ // Should not be called directly
}
- static final VarHandle StreamACbFn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("StreamACbFn"));
- public static VarHandle StreamACbFn$VH() {
- return sdrplay_api_CallbackFnsT.StreamACbFn$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_POINTER.withName("StreamACbFn"),
+ sdrplay_api_h.C_POINTER.withName("StreamBCbFn"),
+ sdrplay_api_h.C_POINTER.withName("EventCbFn")
+ ).withName("$anon$71:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final AddressLayout StreamACbFn$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("StreamACbFn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamACbFn
+ * }
+ */
+ public static final AddressLayout StreamACbFn$layout() {
+ return StreamACbFn$LAYOUT;
+ }
+
+ private static final long StreamACbFn$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamACbFn
+ * }
+ */
+ public static final long StreamACbFn$offset() {
+ return StreamACbFn$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_StreamCallback_t StreamACbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamACbFn
* }
*/
- public static MemorySegment StreamACbFn$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.StreamACbFn$VH.get(seg);
+ public static MemorySegment StreamACbFn(MemorySegment struct) {
+ return struct.get(StreamACbFn$LAYOUT, StreamACbFn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_StreamCallback_t StreamACbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamACbFn
* }
*/
- public static void StreamACbFn$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_CallbackFnsT.StreamACbFn$VH.set(seg, x);
+ public static void StreamACbFn(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(StreamACbFn$LAYOUT, StreamACbFn$OFFSET, fieldValue);
}
- public static MemorySegment StreamACbFn$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.StreamACbFn$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout StreamBCbFn$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("StreamBCbFn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamBCbFn
+ * }
+ */
+ public static final AddressLayout StreamBCbFn$layout() {
+ return StreamBCbFn$LAYOUT;
}
- public static void StreamACbFn$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_CallbackFnsT.StreamACbFn$VH.set(seg.asSlice(index*sizeof()), x);
- }
- public static sdrplay_api_StreamCallback_t StreamACbFn(MemorySegment segment, SegmentScope scope) {
- return sdrplay_api_StreamCallback_t.ofAddress(StreamACbFn$get(segment), scope);
- }
- static final VarHandle StreamBCbFn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("StreamBCbFn"));
- public static VarHandle StreamBCbFn$VH() {
- return sdrplay_api_CallbackFnsT.StreamBCbFn$VH;
+
+ private static final long StreamBCbFn$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamBCbFn
+ * }
+ */
+ public static final long StreamBCbFn$offset() {
+ return StreamBCbFn$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_StreamCallback_t StreamBCbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamBCbFn
* }
*/
- public static MemorySegment StreamBCbFn$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.StreamBCbFn$VH.get(seg);
+ public static MemorySegment StreamBCbFn(MemorySegment struct) {
+ return struct.get(StreamBCbFn$LAYOUT, StreamBCbFn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_StreamCallback_t StreamBCbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_StreamCallback_t StreamBCbFn
* }
*/
- public static void StreamBCbFn$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_CallbackFnsT.StreamBCbFn$VH.set(seg, x);
+ public static void StreamBCbFn(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(StreamBCbFn$LAYOUT, StreamBCbFn$OFFSET, fieldValue);
}
- public static MemorySegment StreamBCbFn$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.StreamBCbFn$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout EventCbFn$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("EventCbFn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_EventCallback_t EventCbFn
+ * }
+ */
+ public static final AddressLayout EventCbFn$layout() {
+ return EventCbFn$LAYOUT;
}
- public static void StreamBCbFn$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_CallbackFnsT.StreamBCbFn$VH.set(seg.asSlice(index*sizeof()), x);
- }
- public static sdrplay_api_StreamCallback_t StreamBCbFn(MemorySegment segment, SegmentScope scope) {
- return sdrplay_api_StreamCallback_t.ofAddress(StreamBCbFn$get(segment), scope);
- }
- static final VarHandle EventCbFn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("EventCbFn"));
- public static VarHandle EventCbFn$VH() {
- return sdrplay_api_CallbackFnsT.EventCbFn$VH;
+
+ private static final long EventCbFn$OFFSET = 16;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_EventCallback_t EventCbFn
+ * }
+ */
+ public static final long EventCbFn$offset() {
+ return EventCbFn$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_EventCallback_t EventCbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_EventCallback_t EventCbFn
* }
*/
- public static MemorySegment EventCbFn$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.EventCbFn$VH.get(seg);
+ public static MemorySegment EventCbFn(MemorySegment struct) {
+ return struct.get(EventCbFn$LAYOUT, EventCbFn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_EventCallback_t EventCbFn;
+ * {@snippet lang=c :
+ * sdrplay_api_EventCallback_t EventCbFn
* }
*/
- public static void EventCbFn$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_CallbackFnsT.EventCbFn$VH.set(seg, x);
+ public static void EventCbFn(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(EventCbFn$LAYOUT, EventCbFn$OFFSET, fieldValue);
}
- public static MemorySegment EventCbFn$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_CallbackFnsT.EventCbFn$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void EventCbFn$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_CallbackFnsT.EventCbFn$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static sdrplay_api_EventCallback_t EventCbFn(MemorySegment segment, SegmentScope scope) {
- return sdrplay_api_EventCallback_t.ofAddress(EventCbFn$get(segment), scope);
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Close_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Close_t.java
index 660e0c28..c90f9403 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Close_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Close_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,61 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_Close_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_Close_t)(void)
* }
*/
-public interface sdrplay_api_Close_t {
+public class sdrplay_api_Close_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_Close_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$1.sdrplay_api_Close_t_UP$MH, fi, constants$1.sdrplay_api_Close_t$FUNC, scope);
+ sdrplay_api_Close_t() {
+ // Should not be called directly
}
- static sdrplay_api_Close_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$1.sdrplay_api_Close_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_Close_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_Close_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ControlParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ControlParamsT.java
index 9485f903..7f60a6a8 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ControlParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ControlParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,93 +21,265 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_DcOffsetT dcOffset;
* sdrplay_api_DecimationT decimation;
* sdrplay_api_AgcT agc;
* sdrplay_api_AdsbModeT adsbMode;
- * };
+ * }
* }
*/
public class sdrplay_api_ControlParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("DCenable"),
- Constants$root.C_CHAR$LAYOUT.withName("IQenable")
- ).withName("dcOffset"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("enable"),
- Constants$root.C_CHAR$LAYOUT.withName("decimationFactor"),
- Constants$root.C_CHAR$LAYOUT.withName("wideBandSignal")
- ).withName("decimation"),
- MemoryLayout.paddingLayout(24),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("enable"),
- Constants$root.C_INT$LAYOUT.withName("setPoint_dBfs"),
- Constants$root.C_SHORT$LAYOUT.withName("attack_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_delay_ms"),
- Constants$root.C_SHORT$LAYOUT.withName("decay_threshold_dB"),
- Constants$root.C_INT$LAYOUT.withName("syncUpdate")
- ).withName("agc"),
- Constants$root.C_INT$LAYOUT.withName("adsbMode")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_ControlParamsT.$struct$LAYOUT;
+ sdrplay_api_ControlParamsT() {
+ // Should not be called directly
}
- public static MemorySegment dcOffset$slice(MemorySegment seg) {
- return seg.asSlice(0, 2);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_DcOffsetT.layout().withName("dcOffset"),
+ sdrplay_api_DecimationT.layout().withName("decimation"),
+ MemoryLayout.paddingLayout(3),
+ sdrplay_api_AgcT.layout().withName("agc"),
+ sdrplay_api_h.C_INT.withName("adsbMode")
+ ).withName("$anon$47:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- public static MemorySegment decimation$slice(MemorySegment seg) {
- return seg.asSlice(2, 3);
+
+ private static final GroupLayout dcOffset$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("dcOffset"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetT dcOffset
+ * }
+ */
+ public static final GroupLayout dcOffset$layout() {
+ return dcOffset$LAYOUT;
}
- public static MemorySegment agc$slice(MemorySegment seg) {
- return seg.asSlice(8, 20);
- }
- static final VarHandle adsbMode$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("adsbMode"));
- public static VarHandle adsbMode$VH() {
- return sdrplay_api_ControlParamsT.adsbMode$VH;
+
+ private static final long dcOffset$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetT dcOffset
+ * }
+ */
+ public static final long dcOffset$offset() {
+ return dcOffset$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_AdsbModeT adsbMode;
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetT dcOffset
* }
*/
- public static int adsbMode$get(MemorySegment seg) {
- return (int)sdrplay_api_ControlParamsT.adsbMode$VH.get(seg);
+ public static MemorySegment dcOffset(MemorySegment struct) {
+ return struct.asSlice(dcOffset$OFFSET, dcOffset$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_AdsbModeT adsbMode;
+ * {@snippet lang=c :
+ * sdrplay_api_DcOffsetT dcOffset
* }
*/
- public static void adsbMode$set(MemorySegment seg, int x) {
- sdrplay_api_ControlParamsT.adsbMode$VH.set(seg, x);
+ public static void dcOffset(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, dcOffset$OFFSET, dcOffset$LAYOUT.byteSize());
}
- public static int adsbMode$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_ControlParamsT.adsbMode$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout decimation$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("decimation"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DecimationT decimation
+ * }
+ */
+ public static final GroupLayout decimation$layout() {
+ return decimation$LAYOUT;
}
- public static void adsbMode$set(MemorySegment seg, long index, int x) {
- sdrplay_api_ControlParamsT.adsbMode$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long decimation$OFFSET = 2;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DecimationT decimation
+ * }
+ */
+ public static final long decimation$offset() {
+ return decimation$OFFSET;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DecimationT decimation
+ * }
+ */
+ public static MemorySegment decimation(MemorySegment struct) {
+ return struct.asSlice(decimation$OFFSET, decimation$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DecimationT decimation
+ * }
+ */
+ public static void decimation(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, decimation$OFFSET, decimation$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout agc$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("agc"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcT agc
+ * }
+ */
+ public static final GroupLayout agc$layout() {
+ return agc$LAYOUT;
+ }
+
+ private static final long agc$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcT agc
+ * }
+ */
+ public static final long agc$offset() {
+ return agc$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcT agc
+ * }
+ */
+ public static MemorySegment agc(MemorySegment struct) {
+ return struct.asSlice(agc$OFFSET, agc$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AgcT agc
+ * }
+ */
+ public static void agc(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, agc$OFFSET, agc$LAYOUT.byteSize());
+ }
+
+ private static final OfInt adsbMode$LAYOUT = (OfInt)$LAYOUT.select(groupElement("adsbMode"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AdsbModeT adsbMode
+ * }
+ */
+ public static final OfInt adsbMode$layout() {
+ return adsbMode$LAYOUT;
+ }
+
+ private static final long adsbMode$OFFSET = 28;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AdsbModeT adsbMode
+ * }
+ */
+ public static final long adsbMode$offset() {
+ return adsbMode$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AdsbModeT adsbMode
+ * }
+ */
+ public static int adsbMode(MemorySegment struct) {
+ return struct.get(adsbMode$LAYOUT, adsbMode$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_AdsbModeT adsbMode
+ * }
+ */
+ public static void adsbMode(MemorySegment struct, int fieldValue) {
+ struct.set(adsbMode$LAYOUT, adsbMode$OFFSET, fieldValue);
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DcOffsetT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DcOffsetT.java
index b0c6cd08..49f555c1 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DcOffsetT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DcOffsetT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,92 +21,172 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char DCenable;
* unsigned char IQenable;
- * };
+ * }
* }
*/
public class sdrplay_api_DcOffsetT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("DCenable"),
- Constants$root.C_CHAR$LAYOUT.withName("IQenable")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DcOffsetT.$struct$LAYOUT;
+ sdrplay_api_DcOffsetT() {
+ // Should not be called directly
}
- static final VarHandle DCenable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("DCenable"));
- public static VarHandle DCenable$VH() {
- return sdrplay_api_DcOffsetT.DCenable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("DCenable"),
+ sdrplay_api_h.C_CHAR.withName("IQenable")
+ ).withName("$anon$23:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte DCenable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("DCenable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char DCenable
+ * }
+ */
+ public static final OfByte DCenable$layout() {
+ return DCenable$LAYOUT;
+ }
+
+ private static final long DCenable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char DCenable
+ * }
+ */
+ public static final long DCenable$offset() {
+ return DCenable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char DCenable;
+ * {@snippet lang=c :
+ * unsigned char DCenable
* }
*/
- public static byte DCenable$get(MemorySegment seg) {
- return (byte)sdrplay_api_DcOffsetT.DCenable$VH.get(seg);
+ public static byte DCenable(MemorySegment struct) {
+ return struct.get(DCenable$LAYOUT, DCenable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char DCenable;
+ * {@snippet lang=c :
+ * unsigned char DCenable
* }
*/
- public static void DCenable$set(MemorySegment seg, byte x) {
- sdrplay_api_DcOffsetT.DCenable$VH.set(seg, x);
+ public static void DCenable(MemorySegment struct, byte fieldValue) {
+ struct.set(DCenable$LAYOUT, DCenable$OFFSET, fieldValue);
}
- public static byte DCenable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DcOffsetT.DCenable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte IQenable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("IQenable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char IQenable
+ * }
+ */
+ public static final OfByte IQenable$layout() {
+ return IQenable$LAYOUT;
}
- public static void DCenable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DcOffsetT.DCenable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle IQenable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("IQenable"));
- public static VarHandle IQenable$VH() {
- return sdrplay_api_DcOffsetT.IQenable$VH;
+
+ private static final long IQenable$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char IQenable
+ * }
+ */
+ public static final long IQenable$offset() {
+ return IQenable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char IQenable;
+ * {@snippet lang=c :
+ * unsigned char IQenable
* }
*/
- public static byte IQenable$get(MemorySegment seg) {
- return (byte)sdrplay_api_DcOffsetT.IQenable$VH.get(seg);
+ public static byte IQenable(MemorySegment struct) {
+ return struct.get(IQenable$LAYOUT, IQenable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char IQenable;
+ * {@snippet lang=c :
+ * unsigned char IQenable
* }
*/
- public static void IQenable$set(MemorySegment seg, byte x) {
- sdrplay_api_DcOffsetT.IQenable$VH.set(seg, x);
+ public static void IQenable(MemorySegment struct, byte fieldValue) {
+ struct.set(IQenable$LAYOUT, IQenable$OFFSET, fieldValue);
}
- public static byte IQenable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DcOffsetT.IQenable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void IQenable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DcOffsetT.IQenable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DcOffsetTunerT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DcOffsetTunerT.java
index 6ab30f80..1178e9e3 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DcOffsetTunerT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DcOffsetTunerT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,153 +21,266 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char dcCal;
* unsigned char speedUp;
* int trackTime;
* int refreshRateTime;
- * };
+ * }
* }
*/
public class sdrplay_api_DcOffsetTunerT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("dcCal"),
- Constants$root.C_CHAR$LAYOUT.withName("speedUp"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("trackTime"),
- Constants$root.C_INT$LAYOUT.withName("refreshRateTime")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DcOffsetTunerT.$struct$LAYOUT;
+ sdrplay_api_DcOffsetTunerT() {
+ // Should not be called directly
}
- static final VarHandle dcCal$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("dcCal"));
- public static VarHandle dcCal$VH() {
- return sdrplay_api_DcOffsetTunerT.dcCal$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("dcCal"),
+ sdrplay_api_h.C_CHAR.withName("speedUp"),
+ MemoryLayout.paddingLayout(2),
+ sdrplay_api_h.C_INT.withName("trackTime"),
+ sdrplay_api_h.C_INT.withName("refreshRateTime")
+ ).withName("$anon$75:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte dcCal$LAYOUT = (OfByte)$LAYOUT.select(groupElement("dcCal"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char dcCal
+ * }
+ */
+ public static final OfByte dcCal$layout() {
+ return dcCal$LAYOUT;
+ }
+
+ private static final long dcCal$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char dcCal
+ * }
+ */
+ public static final long dcCal$offset() {
+ return dcCal$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char dcCal;
+ * {@snippet lang=c :
+ * unsigned char dcCal
* }
*/
- public static byte dcCal$get(MemorySegment seg) {
- return (byte)sdrplay_api_DcOffsetTunerT.dcCal$VH.get(seg);
+ public static byte dcCal(MemorySegment struct) {
+ return struct.get(dcCal$LAYOUT, dcCal$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char dcCal;
+ * {@snippet lang=c :
+ * unsigned char dcCal
* }
*/
- public static void dcCal$set(MemorySegment seg, byte x) {
- sdrplay_api_DcOffsetTunerT.dcCal$VH.set(seg, x);
+ public static void dcCal(MemorySegment struct, byte fieldValue) {
+ struct.set(dcCal$LAYOUT, dcCal$OFFSET, fieldValue);
}
- public static byte dcCal$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DcOffsetTunerT.dcCal$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte speedUp$LAYOUT = (OfByte)$LAYOUT.select(groupElement("speedUp"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char speedUp
+ * }
+ */
+ public static final OfByte speedUp$layout() {
+ return speedUp$LAYOUT;
}
- public static void dcCal$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DcOffsetTunerT.dcCal$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle speedUp$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("speedUp"));
- public static VarHandle speedUp$VH() {
- return sdrplay_api_DcOffsetTunerT.speedUp$VH;
+
+ private static final long speedUp$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char speedUp
+ * }
+ */
+ public static final long speedUp$offset() {
+ return speedUp$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char speedUp;
+ * {@snippet lang=c :
+ * unsigned char speedUp
* }
*/
- public static byte speedUp$get(MemorySegment seg) {
- return (byte)sdrplay_api_DcOffsetTunerT.speedUp$VH.get(seg);
+ public static byte speedUp(MemorySegment struct) {
+ return struct.get(speedUp$LAYOUT, speedUp$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char speedUp;
+ * {@snippet lang=c :
+ * unsigned char speedUp
* }
*/
- public static void speedUp$set(MemorySegment seg, byte x) {
- sdrplay_api_DcOffsetTunerT.speedUp$VH.set(seg, x);
+ public static void speedUp(MemorySegment struct, byte fieldValue) {
+ struct.set(speedUp$LAYOUT, speedUp$OFFSET, fieldValue);
}
- public static byte speedUp$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DcOffsetTunerT.speedUp$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt trackTime$LAYOUT = (OfInt)$LAYOUT.select(groupElement("trackTime"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int trackTime
+ * }
+ */
+ public static final OfInt trackTime$layout() {
+ return trackTime$LAYOUT;
}
- public static void speedUp$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DcOffsetTunerT.speedUp$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle trackTime$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("trackTime"));
- public static VarHandle trackTime$VH() {
- return sdrplay_api_DcOffsetTunerT.trackTime$VH;
+
+ private static final long trackTime$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int trackTime
+ * }
+ */
+ public static final long trackTime$offset() {
+ return trackTime$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int trackTime;
+ * {@snippet lang=c :
+ * int trackTime
* }
*/
- public static int trackTime$get(MemorySegment seg) {
- return (int)sdrplay_api_DcOffsetTunerT.trackTime$VH.get(seg);
+ public static int trackTime(MemorySegment struct) {
+ return struct.get(trackTime$LAYOUT, trackTime$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int trackTime;
+ * {@snippet lang=c :
+ * int trackTime
* }
*/
- public static void trackTime$set(MemorySegment seg, int x) {
- sdrplay_api_DcOffsetTunerT.trackTime$VH.set(seg, x);
+ public static void trackTime(MemorySegment struct, int fieldValue) {
+ struct.set(trackTime$LAYOUT, trackTime$OFFSET, fieldValue);
}
- public static int trackTime$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DcOffsetTunerT.trackTime$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt refreshRateTime$LAYOUT = (OfInt)$LAYOUT.select(groupElement("refreshRateTime"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int refreshRateTime
+ * }
+ */
+ public static final OfInt refreshRateTime$layout() {
+ return refreshRateTime$LAYOUT;
}
- public static void trackTime$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DcOffsetTunerT.trackTime$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle refreshRateTime$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("refreshRateTime"));
- public static VarHandle refreshRateTime$VH() {
- return sdrplay_api_DcOffsetTunerT.refreshRateTime$VH;
+
+ private static final long refreshRateTime$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int refreshRateTime
+ * }
+ */
+ public static final long refreshRateTime$offset() {
+ return refreshRateTime$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int refreshRateTime;
+ * {@snippet lang=c :
+ * int refreshRateTime
* }
*/
- public static int refreshRateTime$get(MemorySegment seg) {
- return (int)sdrplay_api_DcOffsetTunerT.refreshRateTime$VH.get(seg);
+ public static int refreshRateTime(MemorySegment struct) {
+ return struct.get(refreshRateTime$LAYOUT, refreshRateTime$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int refreshRateTime;
+ * {@snippet lang=c :
+ * int refreshRateTime
* }
*/
- public static void refreshRateTime$set(MemorySegment seg, int x) {
- sdrplay_api_DcOffsetTunerT.refreshRateTime$VH.set(seg, x);
+ public static void refreshRateTime(MemorySegment struct, int fieldValue) {
+ struct.set(refreshRateTime$LAYOUT, refreshRateTime$OFFSET, fieldValue);
}
- public static int refreshRateTime$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DcOffsetTunerT.refreshRateTime$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void refreshRateTime$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DcOffsetTunerT.refreshRateTime$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DebugEnable_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DebugEnable_t.java
index 0d75683c..c59c5f00 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DebugEnable_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DebugEnable_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,64 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_DebugEnable_t)(void* dev,enum dbgLvl);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_DebugEnable_t)(HANDLE, sdrplay_api_DbgLvl_t)
* }
*/
-public interface sdrplay_api_DebugEnable_t {
+public class sdrplay_api_DebugEnable_t {
- int apply(java.lang.foreign.MemorySegment dev, int dbgLvl);
- static MemorySegment allocate(sdrplay_api_DebugEnable_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$4.sdrplay_api_DebugEnable_t_UP$MH, fi, constants$4.sdrplay_api_DebugEnable_t$FUNC, scope);
+ sdrplay_api_DebugEnable_t() {
+ // Should not be called directly
}
- static sdrplay_api_DebugEnable_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev, int _dbgLvl) -> {
- try {
- return (int)constants$4.sdrplay_api_DebugEnable_t_DOWN$MH.invokeExact(symbol, _dev, _dbgLvl);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev, int dbgLvl);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_DebugEnable_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_DebugEnable_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev, int dbgLvl) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev, dbgLvl);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DecimationT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DecimationT.java
index e58fca3c..90262c73 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DecimationT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DecimationT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char enable;
* unsigned char decimationFactor;
* unsigned char wideBandSignal;
- * };
+ * }
* }
*/
public class sdrplay_api_DecimationT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("enable"),
- Constants$root.C_CHAR$LAYOUT.withName("decimationFactor"),
- Constants$root.C_CHAR$LAYOUT.withName("wideBandSignal")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DecimationT.$struct$LAYOUT;
+ sdrplay_api_DecimationT() {
+ // Should not be called directly
}
- static final VarHandle enable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("enable"));
- public static VarHandle enable$VH() {
- return sdrplay_api_DecimationT.enable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("enable"),
+ sdrplay_api_h.C_CHAR.withName("decimationFactor"),
+ sdrplay_api_h.C_CHAR.withName("wideBandSignal")
+ ).withName("$anon$29:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte enable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("enable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char enable
+ * }
+ */
+ public static final OfByte enable$layout() {
+ return enable$LAYOUT;
+ }
+
+ private static final long enable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char enable
+ * }
+ */
+ public static final long enable$offset() {
+ return enable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char enable;
+ * {@snippet lang=c :
+ * unsigned char enable
* }
*/
- public static byte enable$get(MemorySegment seg) {
- return (byte)sdrplay_api_DecimationT.enable$VH.get(seg);
+ public static byte enable(MemorySegment struct) {
+ return struct.get(enable$LAYOUT, enable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char enable;
+ * {@snippet lang=c :
+ * unsigned char enable
* }
*/
- public static void enable$set(MemorySegment seg, byte x) {
- sdrplay_api_DecimationT.enable$VH.set(seg, x);
+ public static void enable(MemorySegment struct, byte fieldValue) {
+ struct.set(enable$LAYOUT, enable$OFFSET, fieldValue);
}
- public static byte enable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DecimationT.enable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte decimationFactor$LAYOUT = (OfByte)$LAYOUT.select(groupElement("decimationFactor"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char decimationFactor
+ * }
+ */
+ public static final OfByte decimationFactor$layout() {
+ return decimationFactor$LAYOUT;
}
- public static void enable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DecimationT.enable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle decimationFactor$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("decimationFactor"));
- public static VarHandle decimationFactor$VH() {
- return sdrplay_api_DecimationT.decimationFactor$VH;
+
+ private static final long decimationFactor$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char decimationFactor
+ * }
+ */
+ public static final long decimationFactor$offset() {
+ return decimationFactor$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char decimationFactor;
+ * {@snippet lang=c :
+ * unsigned char decimationFactor
* }
*/
- public static byte decimationFactor$get(MemorySegment seg) {
- return (byte)sdrplay_api_DecimationT.decimationFactor$VH.get(seg);
+ public static byte decimationFactor(MemorySegment struct) {
+ return struct.get(decimationFactor$LAYOUT, decimationFactor$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char decimationFactor;
+ * {@snippet lang=c :
+ * unsigned char decimationFactor
* }
*/
- public static void decimationFactor$set(MemorySegment seg, byte x) {
- sdrplay_api_DecimationT.decimationFactor$VH.set(seg, x);
+ public static void decimationFactor(MemorySegment struct, byte fieldValue) {
+ struct.set(decimationFactor$LAYOUT, decimationFactor$OFFSET, fieldValue);
}
- public static byte decimationFactor$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DecimationT.decimationFactor$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte wideBandSignal$LAYOUT = (OfByte)$LAYOUT.select(groupElement("wideBandSignal"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char wideBandSignal
+ * }
+ */
+ public static final OfByte wideBandSignal$layout() {
+ return wideBandSignal$LAYOUT;
}
- public static void decimationFactor$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DecimationT.decimationFactor$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle wideBandSignal$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("wideBandSignal"));
- public static VarHandle wideBandSignal$VH() {
- return sdrplay_api_DecimationT.wideBandSignal$VH;
+
+ private static final long wideBandSignal$OFFSET = 2;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char wideBandSignal
+ * }
+ */
+ public static final long wideBandSignal$offset() {
+ return wideBandSignal$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char wideBandSignal;
+ * {@snippet lang=c :
+ * unsigned char wideBandSignal
* }
*/
- public static byte wideBandSignal$get(MemorySegment seg) {
- return (byte)sdrplay_api_DecimationT.wideBandSignal$VH.get(seg);
+ public static byte wideBandSignal(MemorySegment struct) {
+ return struct.get(wideBandSignal$LAYOUT, wideBandSignal$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char wideBandSignal;
+ * {@snippet lang=c :
+ * unsigned char wideBandSignal
* }
*/
- public static void wideBandSignal$set(MemorySegment seg, byte x) {
- sdrplay_api_DecimationT.wideBandSignal$VH.set(seg, x);
+ public static void wideBandSignal(MemorySegment struct, byte fieldValue) {
+ struct.set(wideBandSignal$LAYOUT, wideBandSignal$OFFSET, fieldValue);
}
- public static byte wideBandSignal$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DecimationT.wideBandSignal$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void wideBandSignal$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DecimationT.wideBandSignal$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DevParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DevParamsT.java
index 8579b376..3767288c 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DevParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DevParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,15 +21,19 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfDouble;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* double ppm;
* sdrplay_api_FsFreqT fsFreq;
@@ -41,166 +45,519 @@ import java.lang.invoke.VarHandle;
* sdrplay_api_Rsp2ParamsT rsp2Params;
* sdrplay_api_RspDuoParamsT rspDuoParams;
* sdrplay_api_RspDxParamsT rspDxParams;
- * };
+ * }
* }
*/
public class sdrplay_api_DevParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("ppm"),
- MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("fsHz"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("reCal"),
- MemoryLayout.paddingLayout(48)
- ).withName("fsFreq"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("sampleNum"),
- Constants$root.C_INT$LAYOUT.withName("period")
- ).withName("syncUpdate"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("resetGainUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("resetRfUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("resetFsUpdate")
- ).withName("resetFlags"),
- MemoryLayout.paddingLayout(8),
- Constants$root.C_INT$LAYOUT.withName("mode"),
- Constants$root.C_INT$LAYOUT.withName("samplesPerPkt"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable")
- ).withName("rsp1aParams"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("extRefOutputEn")
- ).withName("rsp2Params"),
- MemoryLayout.paddingLayout(8),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("extRefOutputEn")
- ).withName("rspDuoParams"),
- MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("hdrEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("antennaSel"),
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable"),
- MemoryLayout.paddingLayout(16)
- ).withName("rspDxParams")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DevParamsT.$struct$LAYOUT;
+ sdrplay_api_DevParamsT() {
+ // Should not be called directly
}
- static final VarHandle ppm$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("ppm"));
- public static VarHandle ppm$VH() {
- return sdrplay_api_DevParamsT.ppm$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_DOUBLE.withName("ppm"),
+ sdrplay_api_FsFreqT.layout().withName("fsFreq"),
+ sdrplay_api_SyncUpdateT.layout().withName("syncUpdate"),
+ sdrplay_api_ResetFlagsT.layout().withName("resetFlags"),
+ MemoryLayout.paddingLayout(1),
+ sdrplay_api_h.C_INT.withName("mode"),
+ sdrplay_api_h.C_INT.withName("samplesPerPkt"),
+ sdrplay_api_Rsp1aParamsT.layout().withName("rsp1aParams"),
+ sdrplay_api_Rsp2ParamsT.layout().withName("rsp2Params"),
+ MemoryLayout.paddingLayout(1),
+ sdrplay_api_RspDuoParamsT.layout().withName("rspDuoParams"),
+ sdrplay_api_RspDxParamsT.layout().withName("rspDxParams")
+ ).withName("$anon$37:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfDouble ppm$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("ppm"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double ppm
+ * }
+ */
+ public static final OfDouble ppm$layout() {
+ return ppm$LAYOUT;
+ }
+
+ private static final long ppm$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double ppm
+ * }
+ */
+ public static final long ppm$offset() {
+ return ppm$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * double ppm;
+ * {@snippet lang=c :
+ * double ppm
* }
*/
- public static double ppm$get(MemorySegment seg) {
- return (double)sdrplay_api_DevParamsT.ppm$VH.get(seg);
+ public static double ppm(MemorySegment struct) {
+ return struct.get(ppm$LAYOUT, ppm$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double ppm;
+ * {@snippet lang=c :
+ * double ppm
* }
*/
- public static void ppm$set(MemorySegment seg, double x) {
- sdrplay_api_DevParamsT.ppm$VH.set(seg, x);
+ public static void ppm(MemorySegment struct, double fieldValue) {
+ struct.set(ppm$LAYOUT, ppm$OFFSET, fieldValue);
}
- public static double ppm$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_DevParamsT.ppm$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout fsFreq$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("fsFreq"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_FsFreqT fsFreq
+ * }
+ */
+ public static final GroupLayout fsFreq$layout() {
+ return fsFreq$LAYOUT;
}
- public static void ppm$set(MemorySegment seg, long index, double x) {
- sdrplay_api_DevParamsT.ppm$VH.set(seg.asSlice(index*sizeof()), x);
- }
- public static MemorySegment fsFreq$slice(MemorySegment seg) {
- return seg.asSlice(8, 16);
- }
- public static MemorySegment syncUpdate$slice(MemorySegment seg) {
- return seg.asSlice(24, 8);
- }
- public static MemorySegment resetFlags$slice(MemorySegment seg) {
- return seg.asSlice(32, 3);
- }
- static final VarHandle mode$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("mode"));
- public static VarHandle mode$VH() {
- return sdrplay_api_DevParamsT.mode$VH;
+
+ private static final long fsFreq$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_FsFreqT fsFreq
+ * }
+ */
+ public static final long fsFreq$offset() {
+ return fsFreq$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_TransferModeT mode;
+ * {@snippet lang=c :
+ * sdrplay_api_FsFreqT fsFreq
* }
*/
- public static int mode$get(MemorySegment seg) {
- return (int)sdrplay_api_DevParamsT.mode$VH.get(seg);
+ public static MemorySegment fsFreq(MemorySegment struct) {
+ return struct.asSlice(fsFreq$OFFSET, fsFreq$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_TransferModeT mode;
+ * {@snippet lang=c :
+ * sdrplay_api_FsFreqT fsFreq
* }
*/
- public static void mode$set(MemorySegment seg, int x) {
- sdrplay_api_DevParamsT.mode$VH.set(seg, x);
+ public static void fsFreq(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, fsFreq$OFFSET, fsFreq$LAYOUT.byteSize());
}
- public static int mode$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DevParamsT.mode$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout syncUpdate$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_SyncUpdateT syncUpdate
+ * }
+ */
+ public static final GroupLayout syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void mode$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DevParamsT.mode$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle samplesPerPkt$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("samplesPerPkt"));
- public static VarHandle samplesPerPkt$VH() {
- return sdrplay_api_DevParamsT.samplesPerPkt$VH;
+
+ private static final long syncUpdate$OFFSET = 24;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_SyncUpdateT syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int samplesPerPkt;
+ * {@snippet lang=c :
+ * sdrplay_api_SyncUpdateT syncUpdate
* }
*/
- public static int samplesPerPkt$get(MemorySegment seg) {
- return (int)sdrplay_api_DevParamsT.samplesPerPkt$VH.get(seg);
+ public static MemorySegment syncUpdate(MemorySegment struct) {
+ return struct.asSlice(syncUpdate$OFFSET, syncUpdate$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int samplesPerPkt;
+ * {@snippet lang=c :
+ * sdrplay_api_SyncUpdateT syncUpdate
* }
*/
- public static void samplesPerPkt$set(MemorySegment seg, int x) {
- sdrplay_api_DevParamsT.samplesPerPkt$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, syncUpdate$OFFSET, syncUpdate$LAYOUT.byteSize());
}
- public static int samplesPerPkt$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DevParamsT.samplesPerPkt$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout resetFlags$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("resetFlags"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ResetFlagsT resetFlags
+ * }
+ */
+ public static final GroupLayout resetFlags$layout() {
+ return resetFlags$LAYOUT;
}
- public static void samplesPerPkt$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DevParamsT.samplesPerPkt$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long resetFlags$OFFSET = 32;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ResetFlagsT resetFlags
+ * }
+ */
+ public static final long resetFlags$offset() {
+ return resetFlags$OFFSET;
}
- public static MemorySegment rsp1aParams$slice(MemorySegment seg) {
- return seg.asSlice(44, 2);
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ResetFlagsT resetFlags
+ * }
+ */
+ public static MemorySegment resetFlags(MemorySegment struct) {
+ return struct.asSlice(resetFlags$OFFSET, resetFlags$LAYOUT.byteSize());
}
- public static MemorySegment rsp2Params$slice(MemorySegment seg) {
- return seg.asSlice(46, 1);
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_ResetFlagsT resetFlags
+ * }
+ */
+ public static void resetFlags(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, resetFlags$OFFSET, resetFlags$LAYOUT.byteSize());
}
- public static MemorySegment rspDuoParams$slice(MemorySegment seg) {
- return seg.asSlice(48, 4);
+
+ private static final OfInt mode$LAYOUT = (OfInt)$LAYOUT.select(groupElement("mode"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TransferModeT mode
+ * }
+ */
+ public static final OfInt mode$layout() {
+ return mode$LAYOUT;
}
- public static MemorySegment rspDxParams$slice(MemorySegment seg) {
- return seg.asSlice(52, 12);
+
+ private static final long mode$OFFSET = 36;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TransferModeT mode
+ * }
+ */
+ public static final long mode$offset() {
+ return mode$OFFSET;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TransferModeT mode
+ * }
+ */
+ public static int mode(MemorySegment struct) {
+ return struct.get(mode$LAYOUT, mode$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TransferModeT mode
+ * }
+ */
+ public static void mode(MemorySegment struct, int fieldValue) {
+ struct.set(mode$LAYOUT, mode$OFFSET, fieldValue);
+ }
+
+ private static final OfInt samplesPerPkt$LAYOUT = (OfInt)$LAYOUT.select(groupElement("samplesPerPkt"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int samplesPerPkt
+ * }
+ */
+ public static final OfInt samplesPerPkt$layout() {
+ return samplesPerPkt$LAYOUT;
+ }
+
+ private static final long samplesPerPkt$OFFSET = 40;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int samplesPerPkt
+ * }
+ */
+ public static final long samplesPerPkt$offset() {
+ return samplesPerPkt$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * unsigned int samplesPerPkt
+ * }
+ */
+ public static int samplesPerPkt(MemorySegment struct) {
+ return struct.get(samplesPerPkt$LAYOUT, samplesPerPkt$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * unsigned int samplesPerPkt
+ * }
+ */
+ public static void samplesPerPkt(MemorySegment struct, int fieldValue) {
+ struct.set(samplesPerPkt$LAYOUT, samplesPerPkt$OFFSET, fieldValue);
+ }
+
+ private static final GroupLayout rsp1aParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rsp1aParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aParamsT rsp1aParams
+ * }
+ */
+ public static final GroupLayout rsp1aParams$layout() {
+ return rsp1aParams$LAYOUT;
+ }
+
+ private static final long rsp1aParams$OFFSET = 44;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aParamsT rsp1aParams
+ * }
+ */
+ public static final long rsp1aParams$offset() {
+ return rsp1aParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aParamsT rsp1aParams
+ * }
+ */
+ public static MemorySegment rsp1aParams(MemorySegment struct) {
+ return struct.asSlice(rsp1aParams$OFFSET, rsp1aParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp1aParamsT rsp1aParams
+ * }
+ */
+ public static void rsp1aParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rsp1aParams$OFFSET, rsp1aParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rsp2Params$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rsp2Params"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2ParamsT rsp2Params
+ * }
+ */
+ public static final GroupLayout rsp2Params$layout() {
+ return rsp2Params$LAYOUT;
+ }
+
+ private static final long rsp2Params$OFFSET = 46;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2ParamsT rsp2Params
+ * }
+ */
+ public static final long rsp2Params$offset() {
+ return rsp2Params$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2ParamsT rsp2Params
+ * }
+ */
+ public static MemorySegment rsp2Params(MemorySegment struct) {
+ return struct.asSlice(rsp2Params$OFFSET, rsp2Params$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_Rsp2ParamsT rsp2Params
+ * }
+ */
+ public static void rsp2Params(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rsp2Params$OFFSET, rsp2Params$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rspDuoParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rspDuoParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoParamsT rspDuoParams
+ * }
+ */
+ public static final GroupLayout rspDuoParams$layout() {
+ return rspDuoParams$LAYOUT;
+ }
+
+ private static final long rspDuoParams$OFFSET = 48;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoParamsT rspDuoParams
+ * }
+ */
+ public static final long rspDuoParams$offset() {
+ return rspDuoParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoParamsT rspDuoParams
+ * }
+ */
+ public static MemorySegment rspDuoParams(MemorySegment struct) {
+ return struct.asSlice(rspDuoParams$OFFSET, rspDuoParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoParamsT rspDuoParams
+ * }
+ */
+ public static void rspDuoParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rspDuoParams$OFFSET, rspDuoParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rspDxParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rspDxParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxParamsT rspDxParams
+ * }
+ */
+ public static final GroupLayout rspDxParams$layout() {
+ return rspDxParams$LAYOUT;
+ }
+
+ private static final long rspDxParams$OFFSET = 52;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxParamsT rspDxParams
+ * }
+ */
+ public static final long rspDxParams$offset() {
+ return rspDxParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxParamsT rspDxParams
+ * }
+ */
+ public static MemorySegment rspDxParams(MemorySegment struct) {
+ return struct.asSlice(rspDxParams$OFFSET, rspDxParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDxParamsT rspDxParams
+ * }
+ */
+ public static void rspDxParams(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, rspDxParams$OFFSET, rspDxParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DeviceParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DeviceParamsT.java
index b5e09bd2..6af72cd3 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DeviceParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DeviceParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.AddressLayout;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
- * sdrplay_api_DevParamsT* devParams;
- * sdrplay_api_RxChannelParamsT* rxChannelA;
- * sdrplay_api_RxChannelParamsT* rxChannelB;
- * };
+ * sdrplay_api_DevParamsT *devParams;
+ * sdrplay_api_RxChannelParamsT *rxChannelA;
+ * sdrplay_api_RxChannelParamsT *rxChannelB;
+ * }
* }
*/
public class sdrplay_api_DeviceParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_POINTER$LAYOUT.withName("devParams"),
- Constants$root.C_POINTER$LAYOUT.withName("rxChannelA"),
- Constants$root.C_POINTER$LAYOUT.withName("rxChannelB")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DeviceParamsT.$struct$LAYOUT;
+ sdrplay_api_DeviceParamsT() {
+ // Should not be called directly
}
- static final VarHandle devParams$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("devParams"));
- public static VarHandle devParams$VH() {
- return sdrplay_api_DeviceParamsT.devParams$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_POINTER.withName("devParams"),
+ sdrplay_api_h.C_POINTER.withName("rxChannelA"),
+ sdrplay_api_h.C_POINTER.withName("rxChannelB")
+ ).withName("$anon$154:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final AddressLayout devParams$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("devParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DevParamsT *devParams
+ * }
+ */
+ public static final AddressLayout devParams$layout() {
+ return devParams$LAYOUT;
+ }
+
+ private static final long devParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_DevParamsT *devParams
+ * }
+ */
+ public static final long devParams$offset() {
+ return devParams$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_DevParamsT* devParams;
+ * {@snippet lang=c :
+ * sdrplay_api_DevParamsT *devParams
* }
*/
- public static MemorySegment devParams$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.devParams$VH.get(seg);
+ public static MemorySegment devParams(MemorySegment struct) {
+ return struct.get(devParams$LAYOUT, devParams$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_DevParamsT* devParams;
+ * {@snippet lang=c :
+ * sdrplay_api_DevParamsT *devParams
* }
*/
- public static void devParams$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_DeviceParamsT.devParams$VH.set(seg, x);
+ public static void devParams(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(devParams$LAYOUT, devParams$OFFSET, fieldValue);
}
- public static MemorySegment devParams$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.devParams$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout rxChannelA$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("rxChannelA"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelA
+ * }
+ */
+ public static final AddressLayout rxChannelA$layout() {
+ return rxChannelA$LAYOUT;
}
- public static void devParams$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_DeviceParamsT.devParams$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rxChannelA$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rxChannelA"));
- public static VarHandle rxChannelA$VH() {
- return sdrplay_api_DeviceParamsT.rxChannelA$VH;
+
+ private static final long rxChannelA$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelA
+ * }
+ */
+ public static final long rxChannelA$offset() {
+ return rxChannelA$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RxChannelParamsT* rxChannelA;
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelA
* }
*/
- public static MemorySegment rxChannelA$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.rxChannelA$VH.get(seg);
+ public static MemorySegment rxChannelA(MemorySegment struct) {
+ return struct.get(rxChannelA$LAYOUT, rxChannelA$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RxChannelParamsT* rxChannelA;
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelA
* }
*/
- public static void rxChannelA$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_DeviceParamsT.rxChannelA$VH.set(seg, x);
+ public static void rxChannelA(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(rxChannelA$LAYOUT, rxChannelA$OFFSET, fieldValue);
}
- public static MemorySegment rxChannelA$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.rxChannelA$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout rxChannelB$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("rxChannelB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelB
+ * }
+ */
+ public static final AddressLayout rxChannelB$layout() {
+ return rxChannelB$LAYOUT;
}
- public static void rxChannelA$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_DeviceParamsT.rxChannelA$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rxChannelB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rxChannelB"));
- public static VarHandle rxChannelB$VH() {
- return sdrplay_api_DeviceParamsT.rxChannelB$VH;
+
+ private static final long rxChannelB$OFFSET = 16;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelB
+ * }
+ */
+ public static final long rxChannelB$offset() {
+ return rxChannelB$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RxChannelParamsT* rxChannelB;
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelB
* }
*/
- public static MemorySegment rxChannelB$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.rxChannelB$VH.get(seg);
+ public static MemorySegment rxChannelB(MemorySegment struct) {
+ return struct.get(rxChannelB$LAYOUT, rxChannelB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RxChannelParamsT* rxChannelB;
+ * {@snippet lang=c :
+ * sdrplay_api_RxChannelParamsT *rxChannelB
* }
*/
- public static void rxChannelB$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_DeviceParamsT.rxChannelB$VH.set(seg, x);
+ public static void rxChannelB(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(rxChannelB$LAYOUT, rxChannelB$OFFSET, fieldValue);
}
- public static MemorySegment rxChannelB$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceParamsT.rxChannelB$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void rxChannelB$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_DeviceParamsT.rxChannelB$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DeviceT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DeviceT.java
index 8de869d1..a9d88b68 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DeviceT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DeviceT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,15 +21,24 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.AddressLayout;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
+import java.lang.foreign.SequenceLayout;
import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.MemoryLayout.PathElement.sequenceElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfDouble;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* char SerNo[64];
* unsigned char hwVer;
@@ -38,202 +47,417 @@ import java.lang.invoke.VarHandle;
* unsigned char valid;
* double rspDuoSampleFreq;
* HANDLE dev;
- * };
+ * }
* }
*/
public class sdrplay_api_DeviceT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- MemoryLayout.sequenceLayout(64, Constants$root.C_CHAR$LAYOUT).withName("SerNo"),
- Constants$root.C_CHAR$LAYOUT.withName("hwVer"),
- MemoryLayout.paddingLayout(24),
- Constants$root.C_INT$LAYOUT.withName("tuner"),
- Constants$root.C_INT$LAYOUT.withName("rspDuoMode"),
- Constants$root.C_CHAR$LAYOUT.withName("valid"),
- MemoryLayout.paddingLayout(24),
- Constants$root.C_DOUBLE$LAYOUT.withName("rspDuoSampleFreq"),
- Constants$root.C_POINTER$LAYOUT.withName("dev")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_DeviceT.$struct$LAYOUT;
+ sdrplay_api_DeviceT() {
+ // Should not be called directly
}
- public static MemorySegment SerNo$slice(MemorySegment seg) {
- return seg.asSlice(0, 64);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ MemoryLayout.sequenceLayout(64, sdrplay_api_h.C_CHAR).withName("SerNo"),
+ sdrplay_api_h.C_CHAR.withName("hwVer"),
+ MemoryLayout.paddingLayout(3),
+ sdrplay_api_h.C_INT.withName("tuner"),
+ sdrplay_api_h.C_INT.withName("rspDuoMode"),
+ sdrplay_api_h.C_CHAR.withName("valid"),
+ MemoryLayout.paddingLayout(3),
+ sdrplay_api_h.C_DOUBLE.withName("rspDuoSampleFreq"),
+ sdrplay_api_h.C_POINTER.withName("dev")
+ ).withName("$anon$142:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- static final VarHandle hwVer$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("hwVer"));
- public static VarHandle hwVer$VH() {
- return sdrplay_api_DeviceT.hwVer$VH;
+
+ private static final SequenceLayout SerNo$LAYOUT = (SequenceLayout)$LAYOUT.select(groupElement("SerNo"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static final SequenceLayout SerNo$layout() {
+ return SerNo$LAYOUT;
}
+
+ private static final long SerNo$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static final long SerNo$offset() {
+ return SerNo$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char hwVer;
+ * {@snippet lang=c :
+ * char SerNo[64]
* }
*/
- public static byte hwVer$get(MemorySegment seg) {
- return (byte)sdrplay_api_DeviceT.hwVer$VH.get(seg);
+ public static MemorySegment SerNo(MemorySegment struct) {
+ return struct.asSlice(SerNo$OFFSET, SerNo$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char hwVer;
+ * {@snippet lang=c :
+ * char SerNo[64]
* }
*/
- public static void hwVer$set(MemorySegment seg, byte x) {
- sdrplay_api_DeviceT.hwVer$VH.set(seg, x);
+ public static void SerNo(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, SerNo$OFFSET, SerNo$LAYOUT.byteSize());
}
- public static byte hwVer$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DeviceT.hwVer$VH.get(seg.asSlice(index*sizeof()));
+
+ private static long[] SerNo$DIMS = { 64 };
+
+ /**
+ * Dimensions for array field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static long[] SerNo$dimensions() {
+ return SerNo$DIMS;
}
- public static void hwVer$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DeviceT.hwVer$VH.set(seg.asSlice(index*sizeof()), x);
+ private static final VarHandle SerNo$ELEM_HANDLE = SerNo$LAYOUT.varHandle(sequenceElement());
+
+ /**
+ * Indexed getter for field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static byte SerNo(MemorySegment struct, long index0) {
+ return (byte)SerNo$ELEM_HANDLE.get(struct, 0L, index0);
}
- static final VarHandle tuner$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("tuner"));
- public static VarHandle tuner$VH() {
- return sdrplay_api_DeviceT.tuner$VH;
+
+ /**
+ * Indexed setter for field:
+ * {@snippet lang=c :
+ * char SerNo[64]
+ * }
+ */
+ public static void SerNo(MemorySegment struct, long index0, byte fieldValue) {
+ SerNo$ELEM_HANDLE.set(struct, 0L, index0, fieldValue);
}
+
+ private static final OfByte hwVer$LAYOUT = (OfByte)$LAYOUT.select(groupElement("hwVer"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char hwVer
+ * }
+ */
+ public static final OfByte hwVer$layout() {
+ return hwVer$LAYOUT;
+ }
+
+ private static final long hwVer$OFFSET = 64;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char hwVer
+ * }
+ */
+ public static final long hwVer$offset() {
+ return hwVer$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_TunerSelectT tuner;
+ * {@snippet lang=c :
+ * unsigned char hwVer
* }
*/
- public static int tuner$get(MemorySegment seg) {
- return (int)sdrplay_api_DeviceT.tuner$VH.get(seg);
+ public static byte hwVer(MemorySegment struct) {
+ return struct.get(hwVer$LAYOUT, hwVer$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_TunerSelectT tuner;
+ * {@snippet lang=c :
+ * unsigned char hwVer
* }
*/
- public static void tuner$set(MemorySegment seg, int x) {
- sdrplay_api_DeviceT.tuner$VH.set(seg, x);
+ public static void hwVer(MemorySegment struct, byte fieldValue) {
+ struct.set(hwVer$LAYOUT, hwVer$OFFSET, fieldValue);
}
- public static int tuner$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DeviceT.tuner$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt tuner$LAYOUT = (OfInt)$LAYOUT.select(groupElement("tuner"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TunerSelectT tuner
+ * }
+ */
+ public static final OfInt tuner$layout() {
+ return tuner$LAYOUT;
}
- public static void tuner$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DeviceT.tuner$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rspDuoMode$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rspDuoMode"));
- public static VarHandle rspDuoMode$VH() {
- return sdrplay_api_DeviceT.rspDuoMode$VH;
+
+ private static final long tuner$OFFSET = 68;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_TunerSelectT tuner
+ * }
+ */
+ public static final long tuner$offset() {
+ return tuner$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_RspDuoModeT rspDuoMode;
+ * {@snippet lang=c :
+ * sdrplay_api_TunerSelectT tuner
* }
*/
- public static int rspDuoMode$get(MemorySegment seg) {
- return (int)sdrplay_api_DeviceT.rspDuoMode$VH.get(seg);
+ public static int tuner(MemorySegment struct) {
+ return struct.get(tuner$LAYOUT, tuner$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_RspDuoModeT rspDuoMode;
+ * {@snippet lang=c :
+ * sdrplay_api_TunerSelectT tuner
* }
*/
- public static void rspDuoMode$set(MemorySegment seg, int x) {
- sdrplay_api_DeviceT.rspDuoMode$VH.set(seg, x);
+ public static void tuner(MemorySegment struct, int fieldValue) {
+ struct.set(tuner$LAYOUT, tuner$OFFSET, fieldValue);
}
- public static int rspDuoMode$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_DeviceT.rspDuoMode$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt rspDuoMode$LAYOUT = (OfInt)$LAYOUT.select(groupElement("rspDuoMode"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeT rspDuoMode
+ * }
+ */
+ public static final OfInt rspDuoMode$layout() {
+ return rspDuoMode$LAYOUT;
}
- public static void rspDuoMode$set(MemorySegment seg, long index, int x) {
- sdrplay_api_DeviceT.rspDuoMode$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle valid$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("valid"));
- public static VarHandle valid$VH() {
- return sdrplay_api_DeviceT.valid$VH;
+
+ private static final long rspDuoMode$OFFSET = 72;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeT rspDuoMode
+ * }
+ */
+ public static final long rspDuoMode$offset() {
+ return rspDuoMode$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char valid;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeT rspDuoMode
* }
*/
- public static byte valid$get(MemorySegment seg) {
- return (byte)sdrplay_api_DeviceT.valid$VH.get(seg);
+ public static int rspDuoMode(MemorySegment struct) {
+ return struct.get(rspDuoMode$LAYOUT, rspDuoMode$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char valid;
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeT rspDuoMode
* }
*/
- public static void valid$set(MemorySegment seg, byte x) {
- sdrplay_api_DeviceT.valid$VH.set(seg, x);
+ public static void rspDuoMode(MemorySegment struct, int fieldValue) {
+ struct.set(rspDuoMode$LAYOUT, rspDuoMode$OFFSET, fieldValue);
}
- public static byte valid$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_DeviceT.valid$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte valid$LAYOUT = (OfByte)$LAYOUT.select(groupElement("valid"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char valid
+ * }
+ */
+ public static final OfByte valid$layout() {
+ return valid$LAYOUT;
}
- public static void valid$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_DeviceT.valid$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rspDuoSampleFreq$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rspDuoSampleFreq"));
- public static VarHandle rspDuoSampleFreq$VH() {
- return sdrplay_api_DeviceT.rspDuoSampleFreq$VH;
+
+ private static final long valid$OFFSET = 76;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char valid
+ * }
+ */
+ public static final long valid$offset() {
+ return valid$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * double rspDuoSampleFreq;
+ * {@snippet lang=c :
+ * unsigned char valid
* }
*/
- public static double rspDuoSampleFreq$get(MemorySegment seg) {
- return (double)sdrplay_api_DeviceT.rspDuoSampleFreq$VH.get(seg);
+ public static byte valid(MemorySegment struct) {
+ return struct.get(valid$LAYOUT, valid$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double rspDuoSampleFreq;
+ * {@snippet lang=c :
+ * unsigned char valid
* }
*/
- public static void rspDuoSampleFreq$set(MemorySegment seg, double x) {
- sdrplay_api_DeviceT.rspDuoSampleFreq$VH.set(seg, x);
+ public static void valid(MemorySegment struct, byte fieldValue) {
+ struct.set(valid$LAYOUT, valid$OFFSET, fieldValue);
}
- public static double rspDuoSampleFreq$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_DeviceT.rspDuoSampleFreq$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfDouble rspDuoSampleFreq$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("rspDuoSampleFreq"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double rspDuoSampleFreq
+ * }
+ */
+ public static final OfDouble rspDuoSampleFreq$layout() {
+ return rspDuoSampleFreq$LAYOUT;
}
- public static void rspDuoSampleFreq$set(MemorySegment seg, long index, double x) {
- sdrplay_api_DeviceT.rspDuoSampleFreq$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle dev$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("dev"));
- public static VarHandle dev$VH() {
- return sdrplay_api_DeviceT.dev$VH;
+
+ private static final long rspDuoSampleFreq$OFFSET = 80;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double rspDuoSampleFreq
+ * }
+ */
+ public static final long rspDuoSampleFreq$offset() {
+ return rspDuoSampleFreq$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * HANDLE dev;
+ * {@snippet lang=c :
+ * double rspDuoSampleFreq
* }
*/
- public static MemorySegment dev$get(MemorySegment seg) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceT.dev$VH.get(seg);
+ public static double rspDuoSampleFreq(MemorySegment struct) {
+ return struct.get(rspDuoSampleFreq$LAYOUT, rspDuoSampleFreq$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * HANDLE dev;
+ * {@snippet lang=c :
+ * double rspDuoSampleFreq
* }
*/
- public static void dev$set(MemorySegment seg, MemorySegment x) {
- sdrplay_api_DeviceT.dev$VH.set(seg, x);
+ public static void rspDuoSampleFreq(MemorySegment struct, double fieldValue) {
+ struct.set(rspDuoSampleFreq$LAYOUT, rspDuoSampleFreq$OFFSET, fieldValue);
}
- public static MemorySegment dev$get(MemorySegment seg, long index) {
- return (java.lang.foreign.MemorySegment)sdrplay_api_DeviceT.dev$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final AddressLayout dev$LAYOUT = (AddressLayout)$LAYOUT.select(groupElement("dev"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * HANDLE dev
+ * }
+ */
+ public static final AddressLayout dev$layout() {
+ return dev$LAYOUT;
}
- public static void dev$set(MemorySegment seg, long index, MemorySegment x) {
- sdrplay_api_DeviceT.dev$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long dev$OFFSET = 88;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * HANDLE dev
+ * }
+ */
+ public static final long dev$offset() {
+ return dev$OFFSET;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * HANDLE dev
+ * }
+ */
+ public static MemorySegment dev(MemorySegment struct) {
+ return struct.get(dev$LAYOUT, dev$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * HANDLE dev
+ * }
+ */
+ public static void dev(MemorySegment struct, MemorySegment fieldValue) {
+ struct.set(dev$LAYOUT, dev$OFFSET, fieldValue);
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DisableHeartbeat_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DisableHeartbeat_t.java
index b4b49f5a..09922760 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DisableHeartbeat_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_DisableHeartbeat_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,61 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_DisableHeartbeat_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_DisableHeartbeat_t)(void)
* }
*/
-public interface sdrplay_api_DisableHeartbeat_t {
+public class sdrplay_api_DisableHeartbeat_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_DisableHeartbeat_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$4.sdrplay_api_DisableHeartbeat_t_UP$MH, fi, constants$4.sdrplay_api_DisableHeartbeat_t$FUNC, scope);
+ sdrplay_api_DisableHeartbeat_t() {
+ // Should not be called directly
}
- static sdrplay_api_DisableHeartbeat_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$4.sdrplay_api_DisableHeartbeat_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_DisableHeartbeat_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_DisableHeartbeat_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ErrorInfoT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ErrorInfoT.java
index 3717d215..d9fdeaab 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ErrorInfoT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ErrorInfoT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,77 +21,366 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
+import java.lang.foreign.SequenceLayout;
import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.MemoryLayout.PathElement.sequenceElement;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* char file[256];
* char function[256];
* int line;
* char message[1024];
- * };
+ * }
* }
*/
public class sdrplay_api_ErrorInfoT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- MemoryLayout.sequenceLayout(256, Constants$root.C_CHAR$LAYOUT).withName("file"),
- MemoryLayout.sequenceLayout(256, Constants$root.C_CHAR$LAYOUT).withName("function"),
- Constants$root.C_INT$LAYOUT.withName("line"),
- MemoryLayout.sequenceLayout(1024, Constants$root.C_CHAR$LAYOUT).withName("message")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_ErrorInfoT.$struct$LAYOUT;
+ sdrplay_api_ErrorInfoT() {
+ // Should not be called directly
}
- public static MemorySegment file$slice(MemorySegment seg) {
- return seg.asSlice(0, 256);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ MemoryLayout.sequenceLayout(256, sdrplay_api_h.C_CHAR).withName("file"),
+ MemoryLayout.sequenceLayout(256, sdrplay_api_h.C_CHAR).withName("function"),
+ sdrplay_api_h.C_INT.withName("line"),
+ MemoryLayout.sequenceLayout(1024, sdrplay_api_h.C_CHAR).withName("message")
+ ).withName("$anon$162:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- public static MemorySegment function$slice(MemorySegment seg) {
- return seg.asSlice(256, 256);
+
+ private static final SequenceLayout file$LAYOUT = (SequenceLayout)$LAYOUT.select(groupElement("file"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static final SequenceLayout file$layout() {
+ return file$LAYOUT;
}
- static final VarHandle line$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("line"));
- public static VarHandle line$VH() {
- return sdrplay_api_ErrorInfoT.line$VH;
+
+ private static final long file$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static final long file$offset() {
+ return file$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * int line;
+ * {@snippet lang=c :
+ * char file[256]
* }
*/
- public static int line$get(MemorySegment seg) {
- return (int)sdrplay_api_ErrorInfoT.line$VH.get(seg);
+ public static MemorySegment file(MemorySegment struct) {
+ return struct.asSlice(file$OFFSET, file$LAYOUT.byteSize());
}
+
/**
* Setter for field:
- * {@snippet :
- * int line;
+ * {@snippet lang=c :
+ * char file[256]
* }
*/
- public static void line$set(MemorySegment seg, int x) {
- sdrplay_api_ErrorInfoT.line$VH.set(seg, x);
+ public static void file(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, file$OFFSET, file$LAYOUT.byteSize());
}
- public static int line$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_ErrorInfoT.line$VH.get(seg.asSlice(index*sizeof()));
+
+ private static long[] file$DIMS = { 256 };
+
+ /**
+ * Dimensions for array field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static long[] file$dimensions() {
+ return file$DIMS;
}
- public static void line$set(MemorySegment seg, long index, int x) {
- sdrplay_api_ErrorInfoT.line$VH.set(seg.asSlice(index*sizeof()), x);
+ private static final VarHandle file$ELEM_HANDLE = file$LAYOUT.varHandle(sequenceElement());
+
+ /**
+ * Indexed getter for field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static byte file(MemorySegment struct, long index0) {
+ return (byte)file$ELEM_HANDLE.get(struct, 0L, index0);
}
- public static MemorySegment message$slice(MemorySegment seg) {
- return seg.asSlice(516, 1024);
+
+ /**
+ * Indexed setter for field:
+ * {@snippet lang=c :
+ * char file[256]
+ * }
+ */
+ public static void file(MemorySegment struct, long index0, byte fieldValue) {
+ file$ELEM_HANDLE.set(struct, 0L, index0, fieldValue);
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ private static final SequenceLayout function$LAYOUT = (SequenceLayout)$LAYOUT.select(groupElement("function"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static final SequenceLayout function$layout() {
+ return function$LAYOUT;
+ }
+
+ private static final long function$OFFSET = 256;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static final long function$offset() {
+ return function$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static MemorySegment function(MemorySegment struct) {
+ return struct.asSlice(function$OFFSET, function$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static void function(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, function$OFFSET, function$LAYOUT.byteSize());
+ }
+
+ private static long[] function$DIMS = { 256 };
+
+ /**
+ * Dimensions for array field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static long[] function$dimensions() {
+ return function$DIMS;
+ }
+ private static final VarHandle function$ELEM_HANDLE = function$LAYOUT.varHandle(sequenceElement());
+
+ /**
+ * Indexed getter for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static byte function(MemorySegment struct, long index0) {
+ return (byte)function$ELEM_HANDLE.get(struct, 0L, index0);
+ }
+
+ /**
+ * Indexed setter for field:
+ * {@snippet lang=c :
+ * char function[256]
+ * }
+ */
+ public static void function(MemorySegment struct, long index0, byte fieldValue) {
+ function$ELEM_HANDLE.set(struct, 0L, index0, fieldValue);
+ }
+
+ private static final OfInt line$LAYOUT = (OfInt)$LAYOUT.select(groupElement("line"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int line
+ * }
+ */
+ public static final OfInt line$layout() {
+ return line$LAYOUT;
+ }
+
+ private static final long line$OFFSET = 512;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int line
+ * }
+ */
+ public static final long line$offset() {
+ return line$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * int line
+ * }
+ */
+ public static int line(MemorySegment struct) {
+ return struct.get(line$LAYOUT, line$OFFSET);
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * int line
+ * }
+ */
+ public static void line(MemorySegment struct, int fieldValue) {
+ struct.set(line$LAYOUT, line$OFFSET, fieldValue);
+ }
+
+ private static final SequenceLayout message$LAYOUT = (SequenceLayout)$LAYOUT.select(groupElement("message"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static final SequenceLayout message$layout() {
+ return message$LAYOUT;
+ }
+
+ private static final long message$OFFSET = 516;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static final long message$offset() {
+ return message$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static MemorySegment message(MemorySegment struct) {
+ return struct.asSlice(message$OFFSET, message$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static void message(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, message$OFFSET, message$LAYOUT.byteSize());
+ }
+
+ private static long[] message$DIMS = { 1024 };
+
+ /**
+ * Dimensions for array field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static long[] message$dimensions() {
+ return message$DIMS;
+ }
+ private static final VarHandle message$ELEM_HANDLE = message$LAYOUT.varHandle(sequenceElement());
+
+ /**
+ * Indexed getter for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static byte message(MemorySegment struct, long index0) {
+ return (byte)message$ELEM_HANDLE.get(struct, 0L, index0);
+ }
+
+ /**
+ * Indexed setter for field:
+ * {@snippet lang=c :
+ * char message[1024]
+ * }
+ */
+ public static void message(MemorySegment struct, long index0, byte fieldValue) {
+ message$ELEM_HANDLE.set(struct, 0L, index0, fieldValue);
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_EventCallback_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_EventCallback_t.java
index ced870c0..40f66056 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_EventCallback_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_EventCallback_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,65 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * void (*sdrplay_api_EventCallback_t)(enum eventId,enum tuner,union * params,void* cbContext);
+ * {@snippet lang=c :
+ * typedef void (*sdrplay_api_EventCallback_t)(sdrplay_api_EventT, sdrplay_api_TunerSelectT, sdrplay_api_EventParamsT *, void *)
* }
*/
-public interface sdrplay_api_EventCallback_t {
+public class sdrplay_api_EventCallback_t {
- void apply(int eventId, int tuner, java.lang.foreign.MemorySegment params, java.lang.foreign.MemorySegment cbContext);
- static MemorySegment allocate(sdrplay_api_EventCallback_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$0.sdrplay_api_EventCallback_t_UP$MH, fi, constants$0.sdrplay_api_EventCallback_t$FUNC, scope);
+ sdrplay_api_EventCallback_t() {
+ // Should not be called directly
}
- static sdrplay_api_EventCallback_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (int _eventId, int _tuner, java.lang.foreign.MemorySegment _params, java.lang.foreign.MemorySegment _cbContext) -> {
- try {
- constants$0.sdrplay_api_EventCallback_t_DOWN$MH.invokeExact(symbol, _eventId, _tuner, _params, _cbContext);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ void apply(int eventId, int tuner, MemorySegment params, MemorySegment cbContext);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.ofVoid(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_EventCallback_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_EventCallback_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static void invoke(MemorySegment funcPtr,int eventId, int tuner, MemorySegment params, MemorySegment cbContext) {
+ try {
+ DOWN$MH.invokeExact(funcPtr, eventId, tuner, params, cbContext);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_EventParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_EventParamsT.java
index 2782c15a..736706cb 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_EventParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_EventParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,54 +21,217 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.UnionLayout;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
/**
- * {@snippet :
+ * {@snippet lang=c :
* union {
* sdrplay_api_GainCbParamT gainParams;
* sdrplay_api_PowerOverloadCbParamT powerOverloadParams;
* sdrplay_api_RspDuoModeCbParamT rspDuoModeParams;
- * };
+ * }
* }
*/
public class sdrplay_api_EventParamsT {
- static final UnionLayout $union$LAYOUT = MemoryLayout.unionLayout(
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("gRdB"),
- Constants$root.C_INT$LAYOUT.withName("lnaGRdB"),
- Constants$root.C_DOUBLE$LAYOUT.withName("currGain")
- ).withName("gainParams"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("powerOverloadChangeType")
- ).withName("powerOverloadParams"),
- MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("modeChangeType")
- ).withName("rspDuoModeParams")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_EventParamsT.$union$LAYOUT;
+ sdrplay_api_EventParamsT() {
+ // Should not be called directly
}
- public static MemorySegment gainParams$slice(MemorySegment seg) {
- return seg.asSlice(0, 16);
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.unionLayout(
+ sdrplay_api_GainCbParamT.layout().withName("gainParams"),
+ sdrplay_api_PowerOverloadCbParamT.layout().withName("powerOverloadParams"),
+ sdrplay_api_RspDuoModeCbParamT.layout().withName("rspDuoModeParams")
+ ).withName("$anon$49:9");
+
+ /**
+ * The layout of this union
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
- public static MemorySegment powerOverloadParams$slice(MemorySegment seg) {
- return seg.asSlice(0, 4);
+
+ private static final GroupLayout gainParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("gainParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainCbParamT gainParams
+ * }
+ */
+ public static final GroupLayout gainParams$layout() {
+ return gainParams$LAYOUT;
}
- public static MemorySegment rspDuoModeParams$slice(MemorySegment seg) {
- return seg.asSlice(0, 4);
+
+ private static final long gainParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainCbParamT gainParams
+ * }
+ */
+ public static final long gainParams$offset() {
+ return gainParams$OFFSET;
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainCbParamT gainParams
+ * }
+ */
+ public static MemorySegment gainParams(MemorySegment union) {
+ return union.asSlice(gainParams$OFFSET, gainParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainCbParamT gainParams
+ * }
+ */
+ public static void gainParams(MemorySegment union, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, union, gainParams$OFFSET, gainParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout powerOverloadParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("powerOverloadParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbParamT powerOverloadParams
+ * }
+ */
+ public static final GroupLayout powerOverloadParams$layout() {
+ return powerOverloadParams$LAYOUT;
+ }
+
+ private static final long powerOverloadParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbParamT powerOverloadParams
+ * }
+ */
+ public static final long powerOverloadParams$offset() {
+ return powerOverloadParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbParamT powerOverloadParams
+ * }
+ */
+ public static MemorySegment powerOverloadParams(MemorySegment union) {
+ return union.asSlice(powerOverloadParams$OFFSET, powerOverloadParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbParamT powerOverloadParams
+ * }
+ */
+ public static void powerOverloadParams(MemorySegment union, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, union, powerOverloadParams$OFFSET, powerOverloadParams$LAYOUT.byteSize());
+ }
+
+ private static final GroupLayout rspDuoModeParams$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("rspDuoModeParams"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbParamT rspDuoModeParams
+ * }
+ */
+ public static final GroupLayout rspDuoModeParams$layout() {
+ return rspDuoModeParams$LAYOUT;
+ }
+
+ private static final long rspDuoModeParams$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbParamT rspDuoModeParams
+ * }
+ */
+ public static final long rspDuoModeParams$offset() {
+ return rspDuoModeParams$OFFSET;
+ }
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbParamT rspDuoModeParams
+ * }
+ */
+ public static MemorySegment rspDuoModeParams(MemorySegment union) {
+ return union.asSlice(rspDuoModeParams$OFFSET, rspDuoModeParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_RspDuoModeCbParamT rspDuoModeParams
+ * }
+ */
+ public static void rspDuoModeParams(MemorySegment union, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, union, rspDuoModeParams$OFFSET, rspDuoModeParams$LAYOUT.byteSize());
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this union
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_FsFreqT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_FsFreqT.java
index 7f71a65c..3ef51f53 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_FsFreqT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_FsFreqT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,123 +21,220 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfDouble;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* double fsHz;
* unsigned char syncUpdate;
* unsigned char reCal;
- * };
+ * }
* }
*/
public class sdrplay_api_FsFreqT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("fsHz"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("reCal"),
- MemoryLayout.paddingLayout(48)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_FsFreqT.$struct$LAYOUT;
+ sdrplay_api_FsFreqT() {
+ // Should not be called directly
}
- static final VarHandle fsHz$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("fsHz"));
- public static VarHandle fsHz$VH() {
- return sdrplay_api_FsFreqT.fsHz$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_DOUBLE.withName("fsHz"),
+ sdrplay_api_h.C_CHAR.withName("syncUpdate"),
+ sdrplay_api_h.C_CHAR.withName("reCal"),
+ MemoryLayout.paddingLayout(6)
+ ).withName("$anon$17:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfDouble fsHz$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("fsHz"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double fsHz
+ * }
+ */
+ public static final OfDouble fsHz$layout() {
+ return fsHz$LAYOUT;
+ }
+
+ private static final long fsHz$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double fsHz
+ * }
+ */
+ public static final long fsHz$offset() {
+ return fsHz$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * double fsHz;
+ * {@snippet lang=c :
+ * double fsHz
* }
*/
- public static double fsHz$get(MemorySegment seg) {
- return (double)sdrplay_api_FsFreqT.fsHz$VH.get(seg);
+ public static double fsHz(MemorySegment struct) {
+ return struct.get(fsHz$LAYOUT, fsHz$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double fsHz;
+ * {@snippet lang=c :
+ * double fsHz
* }
*/
- public static void fsHz$set(MemorySegment seg, double x) {
- sdrplay_api_FsFreqT.fsHz$VH.set(seg, x);
+ public static void fsHz(MemorySegment struct, double fieldValue) {
+ struct.set(fsHz$LAYOUT, fsHz$OFFSET, fieldValue);
}
- public static double fsHz$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_FsFreqT.fsHz$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte syncUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final OfByte syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void fsHz$set(MemorySegment seg, long index, double x) {
- sdrplay_api_FsFreqT.fsHz$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle syncUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("syncUpdate"));
- public static VarHandle syncUpdate$VH() {
- return sdrplay_api_FsFreqT.syncUpdate$VH;
+
+ private static final long syncUpdate$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static byte syncUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_FsFreqT.syncUpdate$VH.get(seg);
+ public static byte syncUpdate(MemorySegment struct) {
+ return struct.get(syncUpdate$LAYOUT, syncUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static void syncUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_FsFreqT.syncUpdate$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(syncUpdate$LAYOUT, syncUpdate$OFFSET, fieldValue);
}
- public static byte syncUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_FsFreqT.syncUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte reCal$LAYOUT = (OfByte)$LAYOUT.select(groupElement("reCal"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char reCal
+ * }
+ */
+ public static final OfByte reCal$layout() {
+ return reCal$LAYOUT;
}
- public static void syncUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_FsFreqT.syncUpdate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle reCal$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("reCal"));
- public static VarHandle reCal$VH() {
- return sdrplay_api_FsFreqT.reCal$VH;
+
+ private static final long reCal$OFFSET = 9;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char reCal
+ * }
+ */
+ public static final long reCal$offset() {
+ return reCal$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char reCal;
+ * {@snippet lang=c :
+ * unsigned char reCal
* }
*/
- public static byte reCal$get(MemorySegment seg) {
- return (byte)sdrplay_api_FsFreqT.reCal$VH.get(seg);
+ public static byte reCal(MemorySegment struct) {
+ return struct.get(reCal$LAYOUT, reCal$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char reCal;
+ * {@snippet lang=c :
+ * unsigned char reCal
* }
*/
- public static void reCal$set(MemorySegment seg, byte x) {
- sdrplay_api_FsFreqT.reCal$VH.set(seg, x);
+ public static void reCal(MemorySegment struct, byte fieldValue) {
+ struct.set(reCal$LAYOUT, reCal$OFFSET, fieldValue);
}
- public static byte reCal$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_FsFreqT.reCal$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void reCal$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_FsFreqT.reCal$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainCbParamT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainCbParamT.java
index cfbf28bd..b47e6064 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainCbParamT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainCbParamT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,219 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfDouble;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned int gRdB;
* unsigned int lnaGRdB;
* double currGain;
- * };
+ * }
* }
*/
public class sdrplay_api_GainCbParamT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("gRdB"),
- Constants$root.C_INT$LAYOUT.withName("lnaGRdB"),
- Constants$root.C_DOUBLE$LAYOUT.withName("currGain")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_GainCbParamT.$struct$LAYOUT;
+ sdrplay_api_GainCbParamT() {
+ // Should not be called directly
}
- static final VarHandle gRdB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("gRdB"));
- public static VarHandle gRdB$VH() {
- return sdrplay_api_GainCbParamT.gRdB$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("gRdB"),
+ sdrplay_api_h.C_INT.withName("lnaGRdB"),
+ sdrplay_api_h.C_DOUBLE.withName("currGain")
+ ).withName("$anon$31:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt gRdB$LAYOUT = (OfInt)$LAYOUT.select(groupElement("gRdB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int gRdB
+ * }
+ */
+ public static final OfInt gRdB$layout() {
+ return gRdB$LAYOUT;
+ }
+
+ private static final long gRdB$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int gRdB
+ * }
+ */
+ public static final long gRdB$offset() {
+ return gRdB$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int gRdB;
+ * {@snippet lang=c :
+ * unsigned int gRdB
* }
*/
- public static int gRdB$get(MemorySegment seg) {
- return (int)sdrplay_api_GainCbParamT.gRdB$VH.get(seg);
+ public static int gRdB(MemorySegment struct) {
+ return struct.get(gRdB$LAYOUT, gRdB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int gRdB;
+ * {@snippet lang=c :
+ * unsigned int gRdB
* }
*/
- public static void gRdB$set(MemorySegment seg, int x) {
- sdrplay_api_GainCbParamT.gRdB$VH.set(seg, x);
+ public static void gRdB(MemorySegment struct, int fieldValue) {
+ struct.set(gRdB$LAYOUT, gRdB$OFFSET, fieldValue);
}
- public static int gRdB$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_GainCbParamT.gRdB$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt lnaGRdB$LAYOUT = (OfInt)$LAYOUT.select(groupElement("lnaGRdB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned int lnaGRdB
+ * }
+ */
+ public static final OfInt lnaGRdB$layout() {
+ return lnaGRdB$LAYOUT;
}
- public static void gRdB$set(MemorySegment seg, long index, int x) {
- sdrplay_api_GainCbParamT.gRdB$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle lnaGRdB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("lnaGRdB"));
- public static VarHandle lnaGRdB$VH() {
- return sdrplay_api_GainCbParamT.lnaGRdB$VH;
+
+ private static final long lnaGRdB$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned int lnaGRdB
+ * }
+ */
+ public static final long lnaGRdB$offset() {
+ return lnaGRdB$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned int lnaGRdB;
+ * {@snippet lang=c :
+ * unsigned int lnaGRdB
* }
*/
- public static int lnaGRdB$get(MemorySegment seg) {
- return (int)sdrplay_api_GainCbParamT.lnaGRdB$VH.get(seg);
+ public static int lnaGRdB(MemorySegment struct) {
+ return struct.get(lnaGRdB$LAYOUT, lnaGRdB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned int lnaGRdB;
+ * {@snippet lang=c :
+ * unsigned int lnaGRdB
* }
*/
- public static void lnaGRdB$set(MemorySegment seg, int x) {
- sdrplay_api_GainCbParamT.lnaGRdB$VH.set(seg, x);
+ public static void lnaGRdB(MemorySegment struct, int fieldValue) {
+ struct.set(lnaGRdB$LAYOUT, lnaGRdB$OFFSET, fieldValue);
}
- public static int lnaGRdB$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_GainCbParamT.lnaGRdB$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfDouble currGain$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("currGain"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double currGain
+ * }
+ */
+ public static final OfDouble currGain$layout() {
+ return currGain$LAYOUT;
}
- public static void lnaGRdB$set(MemorySegment seg, long index, int x) {
- sdrplay_api_GainCbParamT.lnaGRdB$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle currGain$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("currGain"));
- public static VarHandle currGain$VH() {
- return sdrplay_api_GainCbParamT.currGain$VH;
+
+ private static final long currGain$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double currGain
+ * }
+ */
+ public static final long currGain$offset() {
+ return currGain$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * double currGain;
+ * {@snippet lang=c :
+ * double currGain
* }
*/
- public static double currGain$get(MemorySegment seg) {
- return (double)sdrplay_api_GainCbParamT.currGain$VH.get(seg);
+ public static double currGain(MemorySegment struct) {
+ return struct.get(currGain$LAYOUT, currGain$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double currGain;
+ * {@snippet lang=c :
+ * double currGain
* }
*/
- public static void currGain$set(MemorySegment seg, double x) {
- sdrplay_api_GainCbParamT.currGain$VH.set(seg, x);
+ public static void currGain(MemorySegment struct, double fieldValue) {
+ struct.set(currGain$LAYOUT, currGain$OFFSET, fieldValue);
}
- public static double currGain$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_GainCbParamT.currGain$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void currGain$set(MemorySegment seg, long index, double x) {
- sdrplay_api_GainCbParamT.currGain$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainT.java
index 252dc2e7..233aa7d3 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,162 +21,312 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* int gRdB;
* unsigned char LNAstate;
* unsigned char syncUpdate;
* sdrplay_api_MinGainReductionT minGr;
* sdrplay_api_GainValuesT gainVals;
- * };
+ * }
* }
*/
public class sdrplay_api_GainT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("gRdB"),
- Constants$root.C_CHAR$LAYOUT.withName("LNAstate"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- MemoryLayout.paddingLayout(16),
- Constants$root.C_INT$LAYOUT.withName("minGr"),
- MemoryLayout.structLayout(
- Constants$root.C_FLOAT$LAYOUT.withName("curr"),
- Constants$root.C_FLOAT$LAYOUT.withName("max"),
- Constants$root.C_FLOAT$LAYOUT.withName("min")
- ).withName("gainVals")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_GainT.$struct$LAYOUT;
+ sdrplay_api_GainT() {
+ // Should not be called directly
}
- static final VarHandle gRdB$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("gRdB"));
- public static VarHandle gRdB$VH() {
- return sdrplay_api_GainT.gRdB$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("gRdB"),
+ sdrplay_api_h.C_CHAR.withName("LNAstate"),
+ sdrplay_api_h.C_CHAR.withName("syncUpdate"),
+ MemoryLayout.paddingLayout(2),
+ sdrplay_api_h.C_INT.withName("minGr"),
+ sdrplay_api_GainValuesT.layout().withName("gainVals")
+ ).withName("$anon$60:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt gRdB$LAYOUT = (OfInt)$LAYOUT.select(groupElement("gRdB"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * int gRdB
+ * }
+ */
+ public static final OfInt gRdB$layout() {
+ return gRdB$LAYOUT;
+ }
+
+ private static final long gRdB$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * int gRdB
+ * }
+ */
+ public static final long gRdB$offset() {
+ return gRdB$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * int gRdB;
+ * {@snippet lang=c :
+ * int gRdB
* }
*/
- public static int gRdB$get(MemorySegment seg) {
- return (int)sdrplay_api_GainT.gRdB$VH.get(seg);
+ public static int gRdB(MemorySegment struct) {
+ return struct.get(gRdB$LAYOUT, gRdB$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * int gRdB;
+ * {@snippet lang=c :
+ * int gRdB
* }
*/
- public static void gRdB$set(MemorySegment seg, int x) {
- sdrplay_api_GainT.gRdB$VH.set(seg, x);
+ public static void gRdB(MemorySegment struct, int fieldValue) {
+ struct.set(gRdB$LAYOUT, gRdB$OFFSET, fieldValue);
}
- public static int gRdB$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_GainT.gRdB$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte LNAstate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("LNAstate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char LNAstate
+ * }
+ */
+ public static final OfByte LNAstate$layout() {
+ return LNAstate$LAYOUT;
}
- public static void gRdB$set(MemorySegment seg, long index, int x) {
- sdrplay_api_GainT.gRdB$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle LNAstate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("LNAstate"));
- public static VarHandle LNAstate$VH() {
- return sdrplay_api_GainT.LNAstate$VH;
+
+ private static final long LNAstate$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char LNAstate
+ * }
+ */
+ public static final long LNAstate$offset() {
+ return LNAstate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char LNAstate;
+ * {@snippet lang=c :
+ * unsigned char LNAstate
* }
*/
- public static byte LNAstate$get(MemorySegment seg) {
- return (byte)sdrplay_api_GainT.LNAstate$VH.get(seg);
+ public static byte LNAstate(MemorySegment struct) {
+ return struct.get(LNAstate$LAYOUT, LNAstate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char LNAstate;
+ * {@snippet lang=c :
+ * unsigned char LNAstate
* }
*/
- public static void LNAstate$set(MemorySegment seg, byte x) {
- sdrplay_api_GainT.LNAstate$VH.set(seg, x);
+ public static void LNAstate(MemorySegment struct, byte fieldValue) {
+ struct.set(LNAstate$LAYOUT, LNAstate$OFFSET, fieldValue);
}
- public static byte LNAstate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_GainT.LNAstate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte syncUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final OfByte syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void LNAstate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_GainT.LNAstate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle syncUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("syncUpdate"));
- public static VarHandle syncUpdate$VH() {
- return sdrplay_api_GainT.syncUpdate$VH;
+
+ private static final long syncUpdate$OFFSET = 5;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static byte syncUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_GainT.syncUpdate$VH.get(seg);
+ public static byte syncUpdate(MemorySegment struct) {
+ return struct.get(syncUpdate$LAYOUT, syncUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static void syncUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_GainT.syncUpdate$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(syncUpdate$LAYOUT, syncUpdate$OFFSET, fieldValue);
}
- public static byte syncUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_GainT.syncUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfInt minGr$LAYOUT = (OfInt)$LAYOUT.select(groupElement("minGr"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_MinGainReductionT minGr
+ * }
+ */
+ public static final OfInt minGr$layout() {
+ return minGr$LAYOUT;
}
- public static void syncUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_GainT.syncUpdate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle minGr$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("minGr"));
- public static VarHandle minGr$VH() {
- return sdrplay_api_GainT.minGr$VH;
+
+ private static final long minGr$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_MinGainReductionT minGr
+ * }
+ */
+ public static final long minGr$offset() {
+ return minGr$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_MinGainReductionT minGr;
+ * {@snippet lang=c :
+ * sdrplay_api_MinGainReductionT minGr
* }
*/
- public static int minGr$get(MemorySegment seg) {
- return (int)sdrplay_api_GainT.minGr$VH.get(seg);
+ public static int minGr(MemorySegment struct) {
+ return struct.get(minGr$LAYOUT, minGr$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_MinGainReductionT minGr;
+ * {@snippet lang=c :
+ * sdrplay_api_MinGainReductionT minGr
* }
*/
- public static void minGr$set(MemorySegment seg, int x) {
- sdrplay_api_GainT.minGr$VH.set(seg, x);
+ public static void minGr(MemorySegment struct, int fieldValue) {
+ struct.set(minGr$LAYOUT, minGr$OFFSET, fieldValue);
}
- public static int minGr$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_GainT.minGr$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final GroupLayout gainVals$LAYOUT = (GroupLayout)$LAYOUT.select(groupElement("gainVals"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainValuesT gainVals
+ * }
+ */
+ public static final GroupLayout gainVals$layout() {
+ return gainVals$LAYOUT;
}
- public static void minGr$set(MemorySegment seg, long index, int x) {
- sdrplay_api_GainT.minGr$VH.set(seg.asSlice(index*sizeof()), x);
+
+ private static final long gainVals$OFFSET = 12;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainValuesT gainVals
+ * }
+ */
+ public static final long gainVals$offset() {
+ return gainVals$OFFSET;
}
- public static MemorySegment gainVals$slice(MemorySegment seg) {
- return seg.asSlice(12, 12);
+
+ /**
+ * Getter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainValuesT gainVals
+ * }
+ */
+ public static MemorySegment gainVals(MemorySegment struct) {
+ return struct.asSlice(gainVals$OFFSET, gainVals$LAYOUT.byteSize());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Setter for field:
+ * {@snippet lang=c :
+ * sdrplay_api_GainValuesT gainVals
+ * }
+ */
+ public static void gainVals(MemorySegment struct, MemorySegment fieldValue) {
+ MemorySegment.copy(fieldValue, 0L, struct, gainVals$OFFSET, gainVals$LAYOUT.byteSize());
+ }
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
+ }
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
+ }
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainValuesT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainValuesT.java
index b5e10d6c..0db1272c 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainValuesT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GainValuesT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfFloat;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* float curr;
* float max;
* float min;
- * };
+ * }
* }
*/
public class sdrplay_api_GainValuesT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_FLOAT$LAYOUT.withName("curr"),
- Constants$root.C_FLOAT$LAYOUT.withName("max"),
- Constants$root.C_FLOAT$LAYOUT.withName("min")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_GainValuesT.$struct$LAYOUT;
+ sdrplay_api_GainValuesT() {
+ // Should not be called directly
}
- static final VarHandle curr$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("curr"));
- public static VarHandle curr$VH() {
- return sdrplay_api_GainValuesT.curr$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_FLOAT.withName("curr"),
+ sdrplay_api_h.C_FLOAT.withName("max"),
+ sdrplay_api_h.C_FLOAT.withName("min")
+ ).withName("$anon$53:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfFloat curr$LAYOUT = (OfFloat)$LAYOUT.select(groupElement("curr"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * float curr
+ * }
+ */
+ public static final OfFloat curr$layout() {
+ return curr$LAYOUT;
+ }
+
+ private static final long curr$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * float curr
+ * }
+ */
+ public static final long curr$offset() {
+ return curr$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * float curr;
+ * {@snippet lang=c :
+ * float curr
* }
*/
- public static float curr$get(MemorySegment seg) {
- return (float)sdrplay_api_GainValuesT.curr$VH.get(seg);
+ public static float curr(MemorySegment struct) {
+ return struct.get(curr$LAYOUT, curr$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * float curr;
+ * {@snippet lang=c :
+ * float curr
* }
*/
- public static void curr$set(MemorySegment seg, float x) {
- sdrplay_api_GainValuesT.curr$VH.set(seg, x);
+ public static void curr(MemorySegment struct, float fieldValue) {
+ struct.set(curr$LAYOUT, curr$OFFSET, fieldValue);
}
- public static float curr$get(MemorySegment seg, long index) {
- return (float)sdrplay_api_GainValuesT.curr$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfFloat max$LAYOUT = (OfFloat)$LAYOUT.select(groupElement("max"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * float max
+ * }
+ */
+ public static final OfFloat max$layout() {
+ return max$LAYOUT;
}
- public static void curr$set(MemorySegment seg, long index, float x) {
- sdrplay_api_GainValuesT.curr$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle max$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("max"));
- public static VarHandle max$VH() {
- return sdrplay_api_GainValuesT.max$VH;
+
+ private static final long max$OFFSET = 4;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * float max
+ * }
+ */
+ public static final long max$offset() {
+ return max$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * float max;
+ * {@snippet lang=c :
+ * float max
* }
*/
- public static float max$get(MemorySegment seg) {
- return (float)sdrplay_api_GainValuesT.max$VH.get(seg);
+ public static float max(MemorySegment struct) {
+ return struct.get(max$LAYOUT, max$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * float max;
+ * {@snippet lang=c :
+ * float max
* }
*/
- public static void max$set(MemorySegment seg, float x) {
- sdrplay_api_GainValuesT.max$VH.set(seg, x);
+ public static void max(MemorySegment struct, float fieldValue) {
+ struct.set(max$LAYOUT, max$OFFSET, fieldValue);
}
- public static float max$get(MemorySegment seg, long index) {
- return (float)sdrplay_api_GainValuesT.max$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfFloat min$LAYOUT = (OfFloat)$LAYOUT.select(groupElement("min"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * float min
+ * }
+ */
+ public static final OfFloat min$layout() {
+ return min$LAYOUT;
}
- public static void max$set(MemorySegment seg, long index, float x) {
- sdrplay_api_GainValuesT.max$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle min$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("min"));
- public static VarHandle min$VH() {
- return sdrplay_api_GainValuesT.min$VH;
+
+ private static final long min$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * float min
+ * }
+ */
+ public static final long min$offset() {
+ return min$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * float min;
+ * {@snippet lang=c :
+ * float min
* }
*/
- public static float min$get(MemorySegment seg) {
- return (float)sdrplay_api_GainValuesT.min$VH.get(seg);
+ public static float min(MemorySegment struct) {
+ return struct.get(min$LAYOUT, min$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * float min;
+ * {@snippet lang=c :
+ * float min
* }
*/
- public static void min$set(MemorySegment seg, float x) {
- sdrplay_api_GainValuesT.min$VH.set(seg, x);
+ public static void min(MemorySegment struct, float fieldValue) {
+ struct.set(min$LAYOUT, min$OFFSET, fieldValue);
}
- public static float min$get(MemorySegment seg, long index) {
- return (float)sdrplay_api_GainValuesT.min$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void min$set(MemorySegment seg, long index, float x) {
- sdrplay_api_GainValuesT.min$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetDeviceParams_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetDeviceParams_t.java
index 31abe2ff..27f2ec89 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetDeviceParams_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetDeviceParams_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,64 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_GetDeviceParams_t)(void* dev,struct ** deviceParams);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_GetDeviceParams_t)(HANDLE, sdrplay_api_DeviceParamsT **)
* }
*/
-public interface sdrplay_api_GetDeviceParams_t {
+public class sdrplay_api_GetDeviceParams_t {
- int apply(java.lang.foreign.MemorySegment dev, java.lang.foreign.MemorySegment deviceParams);
- static MemorySegment allocate(sdrplay_api_GetDeviceParams_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$4.sdrplay_api_GetDeviceParams_t_UP$MH, fi, constants$4.sdrplay_api_GetDeviceParams_t$FUNC, scope);
+ sdrplay_api_GetDeviceParams_t() {
+ // Should not be called directly
}
- static sdrplay_api_GetDeviceParams_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev, java.lang.foreign.MemorySegment _deviceParams) -> {
- try {
- return (int)constants$4.sdrplay_api_GetDeviceParams_t_DOWN$MH.invokeExact(symbol, _dev, _deviceParams);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev, MemorySegment deviceParams);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_GetDeviceParams_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_GetDeviceParams_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev, MemorySegment deviceParams) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev, deviceParams);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetDevices_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetDevices_t.java
index b6026519..ca13f220 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetDevices_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetDevices_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,65 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_GetDevices_t)(struct * devices,unsigned int* numDevs,unsigned int maxDevs);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_GetDevices_t)(sdrplay_api_DeviceT *, unsigned int *, unsigned int)
* }
*/
-public interface sdrplay_api_GetDevices_t {
+public class sdrplay_api_GetDevices_t {
- int apply(java.lang.foreign.MemorySegment devices, java.lang.foreign.MemorySegment numDevs, int maxDevs);
- static MemorySegment allocate(sdrplay_api_GetDevices_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$2.sdrplay_api_GetDevices_t_UP$MH, fi, constants$2.sdrplay_api_GetDevices_t$FUNC, scope);
+ sdrplay_api_GetDevices_t() {
+ // Should not be called directly
}
- static sdrplay_api_GetDevices_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _devices, java.lang.foreign.MemorySegment _numDevs, int _maxDevs) -> {
- try {
- return (int)constants$2.sdrplay_api_GetDevices_t_DOWN$MH.invokeExact(symbol, _devices, _numDevs, _maxDevs);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment devices, MemorySegment numDevs, int maxDevs);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_GetDevices_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_GetDevices_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment devices, MemorySegment numDevs, int maxDevs) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, devices, numDevs, maxDevs);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetErrorString_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetErrorString_t.java
index a59e1e0c..052714f6 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetErrorString_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetErrorString_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * char* (*sdrplay_api_GetErrorString_t)(enum err);
+ * {@snippet lang=c :
+ * typedef const char *(*sdrplay_api_GetErrorString_t)(sdrplay_api_ErrT)
* }
*/
-public interface sdrplay_api_GetErrorString_t {
+public class sdrplay_api_GetErrorString_t {
- java.lang.foreign.MemorySegment apply(int err);
- static MemorySegment allocate(sdrplay_api_GetErrorString_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$3.sdrplay_api_GetErrorString_t_UP$MH, fi, constants$3.sdrplay_api_GetErrorString_t$FUNC, scope);
+ sdrplay_api_GetErrorString_t() {
+ // Should not be called directly
}
- static sdrplay_api_GetErrorString_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (int _err) -> {
- try {
- return (java.lang.foreign.MemorySegment)constants$3.sdrplay_api_GetErrorString_t_DOWN$MH.invokeExact(symbol, _err);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ MemorySegment apply(int err);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_INT
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_GetErrorString_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_GetErrorString_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static MemorySegment invoke(MemorySegment funcPtr,int err) {
+ try {
+ return (MemorySegment) DOWN$MH.invokeExact(funcPtr, err);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetLastError_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetLastError_t.java
index 6ca3c03d..fe3c4c2b 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetLastError_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_GetLastError_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * struct * (*sdrplay_api_GetLastError_t)(struct * device);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrorInfoT *(*sdrplay_api_GetLastError_t)(sdrplay_api_DeviceT *)
* }
*/
-public interface sdrplay_api_GetLastError_t {
+public class sdrplay_api_GetLastError_t {
- java.lang.foreign.MemorySegment apply(java.lang.foreign.MemorySegment device);
- static MemorySegment allocate(sdrplay_api_GetLastError_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$3.sdrplay_api_GetLastError_t_UP$MH, fi, constants$3.sdrplay_api_GetLastError_t$FUNC, scope);
+ sdrplay_api_GetLastError_t() {
+ // Should not be called directly
}
- static sdrplay_api_GetLastError_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _device) -> {
- try {
- return (java.lang.foreign.MemorySegment)constants$3.sdrplay_api_GetLastError_t_DOWN$MH.invokeExact(symbol, _device);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ MemorySegment apply(MemorySegment device);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_GetLastError_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_GetLastError_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static MemorySegment invoke(MemorySegment funcPtr,MemorySegment device) {
+ try {
+ return (MemorySegment) DOWN$MH.invokeExact(funcPtr, device);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Init_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Init_t.java
index 930b6d42..daf00830 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Init_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Init_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,65 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_Init_t)(void* dev,struct * callbackFns,void* cbContext);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_Init_t)(HANDLE, sdrplay_api_CallbackFnsT *, void *)
* }
*/
-public interface sdrplay_api_Init_t {
+public class sdrplay_api_Init_t {
- int apply(java.lang.foreign.MemorySegment dev, java.lang.foreign.MemorySegment callbackFns, java.lang.foreign.MemorySegment cbContext);
- static MemorySegment allocate(sdrplay_api_Init_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$5.sdrplay_api_Init_t_UP$MH, fi, constants$5.sdrplay_api_Init_t$FUNC, scope);
+ sdrplay_api_Init_t() {
+ // Should not be called directly
}
- static sdrplay_api_Init_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev, java.lang.foreign.MemorySegment _callbackFns, java.lang.foreign.MemorySegment _cbContext) -> {
- try {
- return (int)constants$5.sdrplay_api_Init_t_DOWN$MH.invokeExact(symbol, _dev, _callbackFns, _cbContext);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment dev, MemorySegment callbackFns, MemorySegment cbContext);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_Init_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_Init_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment dev, MemorySegment callbackFns, MemorySegment cbContext) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, dev, callbackFns, cbContext);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_LockDeviceApi_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_LockDeviceApi_t.java
index e17cced7..e1a7e512 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_LockDeviceApi_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_LockDeviceApi_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,61 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_LockDeviceApi_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_LockDeviceApi_t)(void)
* }
*/
-public interface sdrplay_api_LockDeviceApi_t {
+public class sdrplay_api_LockDeviceApi_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_LockDeviceApi_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$1.sdrplay_api_LockDeviceApi_t_UP$MH, fi, constants$1.sdrplay_api_LockDeviceApi_t$FUNC, scope);
+ sdrplay_api_LockDeviceApi_t() {
+ // Should not be called directly
}
- static sdrplay_api_LockDeviceApi_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$1.sdrplay_api_LockDeviceApi_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_LockDeviceApi_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_LockDeviceApi_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Open_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Open_t.java
index 7a69321e..0e78a556 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Open_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Open_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,61 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_Open_t)();
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_Open_t)(void)
* }
*/
-public interface sdrplay_api_Open_t {
+public class sdrplay_api_Open_t {
- int apply();
- static MemorySegment allocate(sdrplay_api_Open_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$0.sdrplay_api_Open_t_UP$MH, fi, constants$0.sdrplay_api_Open_t$FUNC, scope);
+ sdrplay_api_Open_t() {
+ // Should not be called directly
}
- static sdrplay_api_Open_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return () -> {
- try {
- return (int)constants$0.sdrplay_api_Open_t_DOWN$MH.invokeExact(symbol);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply();
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT);
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_Open_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_Open_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_PowerOverloadCbParamT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_PowerOverloadCbParamT.java
index 089b45ac..33e82fff 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_PowerOverloadCbParamT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_PowerOverloadCbParamT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,62 +21,126 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfInt;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType;
- * };
+ * }
* }
*/
public class sdrplay_api_PowerOverloadCbParamT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_INT$LAYOUT.withName("powerOverloadChangeType")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_PowerOverloadCbParamT.$struct$LAYOUT;
+ sdrplay_api_PowerOverloadCbParamT() {
+ // Should not be called directly
}
- static final VarHandle powerOverloadChangeType$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("powerOverloadChangeType"));
- public static VarHandle powerOverloadChangeType$VH() {
- return sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_INT.withName("powerOverloadChangeType")
+ ).withName("$anon$38:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfInt powerOverloadChangeType$LAYOUT = (OfInt)$LAYOUT.select(groupElement("powerOverloadChangeType"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType
+ * }
+ */
+ public static final OfInt powerOverloadChangeType$layout() {
+ return powerOverloadChangeType$LAYOUT;
+ }
+
+ private static final long powerOverloadChangeType$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType
+ * }
+ */
+ public static final long powerOverloadChangeType$offset() {
+ return powerOverloadChangeType$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType;
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType
* }
*/
- public static int powerOverloadChangeType$get(MemorySegment seg) {
- return (int)sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH.get(seg);
+ public static int powerOverloadChangeType(MemorySegment struct) {
+ return struct.get(powerOverloadChangeType$LAYOUT, powerOverloadChangeType$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType;
+ * {@snippet lang=c :
+ * sdrplay_api_PowerOverloadCbEventIdT powerOverloadChangeType
* }
*/
- public static void powerOverloadChangeType$set(MemorySegment seg, int x) {
- sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH.set(seg, x);
+ public static void powerOverloadChangeType(MemorySegment struct, int fieldValue) {
+ struct.set(powerOverloadChangeType$LAYOUT, powerOverloadChangeType$OFFSET, fieldValue);
}
- public static int powerOverloadChangeType$get(MemorySegment seg, long index) {
- return (int)sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void powerOverloadChangeType$set(MemorySegment seg, long index, int x) {
- sdrplay_api_PowerOverloadCbParamT.powerOverloadChangeType$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ReleaseDevice_t.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ReleaseDevice_t.java
index e3b15377..80ee1c06 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ReleaseDevice_t.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ReleaseDevice_t.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,30 +21,63 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.FunctionDescriptor;
+import java.lang.foreign.Linker;
import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentScope;
+import java.lang.invoke.MethodHandle;
/**
- * {@snippet :
- * enum (*sdrplay_api_ReleaseDevice_t)(struct * device);
+ * {@snippet lang=c :
+ * typedef sdrplay_api_ErrT (*sdrplay_api_ReleaseDevice_t)(sdrplay_api_DeviceT *)
* }
*/
-public interface sdrplay_api_ReleaseDevice_t {
+public class sdrplay_api_ReleaseDevice_t {
- int apply(java.lang.foreign.MemorySegment dev);
- static MemorySegment allocate(sdrplay_api_ReleaseDevice_t fi, SegmentScope scope) {
- return RuntimeHelper.upcallStub(constants$3.sdrplay_api_ReleaseDevice_t_UP$MH, fi, constants$3.sdrplay_api_ReleaseDevice_t$FUNC, scope);
+ sdrplay_api_ReleaseDevice_t() {
+ // Should not be called directly
}
- static sdrplay_api_ReleaseDevice_t ofAddress(MemorySegment addr, SegmentScope scope) {
- MemorySegment symbol = MemorySegment.ofAddress(addr.address(), 0, scope);
- return (java.lang.foreign.MemorySegment _dev) -> {
- try {
- return (int)constants$3.sdrplay_api_ReleaseDevice_t_DOWN$MH.invokeExact(symbol, _dev);
- } catch (Throwable ex$) {
- throw new AssertionError("should not reach here", ex$);
- }
- };
+
+ /**
+ * The function pointer signature, expressed as a functional interface
+ */
+ public interface Function {
+ int apply(MemorySegment device);
+ }
+
+ private static final FunctionDescriptor $DESC = FunctionDescriptor.of(
+ sdrplay_api_h.C_INT,
+ sdrplay_api_h.C_POINTER
+ );
+
+ /**
+ * The descriptor of this function pointer
+ */
+ public static FunctionDescriptor descriptor() {
+ return $DESC;
+ }
+
+ private static final MethodHandle UP$MH = sdrplay_api_h.upcallHandle(sdrplay_api_ReleaseDevice_t.Function.class, "apply", $DESC);
+
+ /**
+ * Allocates a new upcall stub, whose implementation is defined by {@code fi}.
+ * The lifetime of the returned segment is managed by {@code arena}
+ */
+ public static MemorySegment allocate(sdrplay_api_ReleaseDevice_t.Function fi, Arena arena) {
+ return Linker.nativeLinker().upcallStub(UP$MH.bindTo(fi), $DESC, arena);
+ }
+
+ private static final MethodHandle DOWN$MH = Linker.nativeLinker().downcallHandle($DESC);
+
+ /**
+ * Invoke the upcall stub {@code funcPtr}, with given parameters
+ */
+ public static int invoke(MemorySegment funcPtr,MemorySegment device) {
+ try {
+ return (int) DOWN$MH.invokeExact(funcPtr, device);
+ } catch (Throwable ex$) {
+ throw new AssertionError("should not reach here", ex$);
+ }
}
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ResetFlagsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ResetFlagsT.java
index 024c77e3..f9f9763e 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ResetFlagsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_ResetFlagsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,122 +21,218 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char resetGainUpdate;
* unsigned char resetRfUpdate;
* unsigned char resetFsUpdate;
- * };
+ * }
* }
*/
public class sdrplay_api_ResetFlagsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("resetGainUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("resetRfUpdate"),
- Constants$root.C_CHAR$LAYOUT.withName("resetFsUpdate")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_ResetFlagsT.$struct$LAYOUT;
+ sdrplay_api_ResetFlagsT() {
+ // Should not be called directly
}
- static final VarHandle resetGainUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("resetGainUpdate"));
- public static VarHandle resetGainUpdate$VH() {
- return sdrplay_api_ResetFlagsT.resetGainUpdate$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("resetGainUpdate"),
+ sdrplay_api_h.C_CHAR.withName("resetRfUpdate"),
+ sdrplay_api_h.C_CHAR.withName("resetFsUpdate")
+ ).withName("$anon$30:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte resetGainUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("resetGainUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char resetGainUpdate
+ * }
+ */
+ public static final OfByte resetGainUpdate$layout() {
+ return resetGainUpdate$LAYOUT;
+ }
+
+ private static final long resetGainUpdate$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char resetGainUpdate
+ * }
+ */
+ public static final long resetGainUpdate$offset() {
+ return resetGainUpdate$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char resetGainUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetGainUpdate
* }
*/
- public static byte resetGainUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_ResetFlagsT.resetGainUpdate$VH.get(seg);
+ public static byte resetGainUpdate(MemorySegment struct) {
+ return struct.get(resetGainUpdate$LAYOUT, resetGainUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char resetGainUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetGainUpdate
* }
*/
- public static void resetGainUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_ResetFlagsT.resetGainUpdate$VH.set(seg, x);
+ public static void resetGainUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(resetGainUpdate$LAYOUT, resetGainUpdate$OFFSET, fieldValue);
}
- public static byte resetGainUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_ResetFlagsT.resetGainUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte resetRfUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("resetRfUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char resetRfUpdate
+ * }
+ */
+ public static final OfByte resetRfUpdate$layout() {
+ return resetRfUpdate$LAYOUT;
}
- public static void resetGainUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_ResetFlagsT.resetGainUpdate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle resetRfUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("resetRfUpdate"));
- public static VarHandle resetRfUpdate$VH() {
- return sdrplay_api_ResetFlagsT.resetRfUpdate$VH;
+
+ private static final long resetRfUpdate$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char resetRfUpdate
+ * }
+ */
+ public static final long resetRfUpdate$offset() {
+ return resetRfUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char resetRfUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetRfUpdate
* }
*/
- public static byte resetRfUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_ResetFlagsT.resetRfUpdate$VH.get(seg);
+ public static byte resetRfUpdate(MemorySegment struct) {
+ return struct.get(resetRfUpdate$LAYOUT, resetRfUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char resetRfUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetRfUpdate
* }
*/
- public static void resetRfUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_ResetFlagsT.resetRfUpdate$VH.set(seg, x);
+ public static void resetRfUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(resetRfUpdate$LAYOUT, resetRfUpdate$OFFSET, fieldValue);
}
- public static byte resetRfUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_ResetFlagsT.resetRfUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte resetFsUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("resetFsUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char resetFsUpdate
+ * }
+ */
+ public static final OfByte resetFsUpdate$layout() {
+ return resetFsUpdate$LAYOUT;
}
- public static void resetRfUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_ResetFlagsT.resetRfUpdate$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle resetFsUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("resetFsUpdate"));
- public static VarHandle resetFsUpdate$VH() {
- return sdrplay_api_ResetFlagsT.resetFsUpdate$VH;
+
+ private static final long resetFsUpdate$OFFSET = 2;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char resetFsUpdate
+ * }
+ */
+ public static final long resetFsUpdate$offset() {
+ return resetFsUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char resetFsUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetFsUpdate
* }
*/
- public static byte resetFsUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_ResetFlagsT.resetFsUpdate$VH.get(seg);
+ public static byte resetFsUpdate(MemorySegment struct) {
+ return struct.get(resetFsUpdate$LAYOUT, resetFsUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char resetFsUpdate;
+ * {@snippet lang=c :
+ * unsigned char resetFsUpdate
* }
*/
- public static void resetFsUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_ResetFlagsT.resetFsUpdate$VH.set(seg, x);
+ public static void resetFsUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(resetFsUpdate$LAYOUT, resetFsUpdate$OFFSET, fieldValue);
}
- public static byte resetFsUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_ResetFlagsT.resetFsUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void resetFsUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_ResetFlagsT.resetFsUpdate$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_RfFreqT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_RfFreqT.java
index 4560e9c4..301c9fc8 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_RfFreqT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_RfFreqT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,93 +21,174 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
+import static java.lang.foreign.ValueLayout.OfDouble;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* double rfHz;
* unsigned char syncUpdate;
- * };
+ * }
* }
*/
public class sdrplay_api_RfFreqT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_DOUBLE$LAYOUT.withName("rfHz"),
- Constants$root.C_CHAR$LAYOUT.withName("syncUpdate"),
- MemoryLayout.paddingLayout(56)
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_RfFreqT.$struct$LAYOUT;
+ sdrplay_api_RfFreqT() {
+ // Should not be called directly
}
- static final VarHandle rfHz$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfHz"));
- public static VarHandle rfHz$VH() {
- return sdrplay_api_RfFreqT.rfHz$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_DOUBLE.withName("rfHz"),
+ sdrplay_api_h.C_CHAR.withName("syncUpdate"),
+ MemoryLayout.paddingLayout(7)
+ ).withName("$anon$69:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfDouble rfHz$LAYOUT = (OfDouble)$LAYOUT.select(groupElement("rfHz"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * double rfHz
+ * }
+ */
+ public static final OfDouble rfHz$layout() {
+ return rfHz$LAYOUT;
+ }
+
+ private static final long rfHz$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * double rfHz
+ * }
+ */
+ public static final long rfHz$offset() {
+ return rfHz$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * double rfHz;
+ * {@snippet lang=c :
+ * double rfHz
* }
*/
- public static double rfHz$get(MemorySegment seg) {
- return (double)sdrplay_api_RfFreqT.rfHz$VH.get(seg);
+ public static double rfHz(MemorySegment struct) {
+ return struct.get(rfHz$LAYOUT, rfHz$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * double rfHz;
+ * {@snippet lang=c :
+ * double rfHz
* }
*/
- public static void rfHz$set(MemorySegment seg, double x) {
- sdrplay_api_RfFreqT.rfHz$VH.set(seg, x);
+ public static void rfHz(MemorySegment struct, double fieldValue) {
+ struct.set(rfHz$LAYOUT, rfHz$OFFSET, fieldValue);
}
- public static double rfHz$get(MemorySegment seg, long index) {
- return (double)sdrplay_api_RfFreqT.rfHz$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte syncUpdate$LAYOUT = (OfByte)$LAYOUT.select(groupElement("syncUpdate"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final OfByte syncUpdate$layout() {
+ return syncUpdate$LAYOUT;
}
- public static void rfHz$set(MemorySegment seg, long index, double x) {
- sdrplay_api_RfFreqT.rfHz$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle syncUpdate$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("syncUpdate"));
- public static VarHandle syncUpdate$VH() {
- return sdrplay_api_RfFreqT.syncUpdate$VH;
+
+ private static final long syncUpdate$OFFSET = 8;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
+ * }
+ */
+ public static final long syncUpdate$offset() {
+ return syncUpdate$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static byte syncUpdate$get(MemorySegment seg) {
- return (byte)sdrplay_api_RfFreqT.syncUpdate$VH.get(seg);
+ public static byte syncUpdate(MemorySegment struct) {
+ return struct.get(syncUpdate$LAYOUT, syncUpdate$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char syncUpdate;
+ * {@snippet lang=c :
+ * unsigned char syncUpdate
* }
*/
- public static void syncUpdate$set(MemorySegment seg, byte x) {
- sdrplay_api_RfFreqT.syncUpdate$VH.set(seg, x);
+ public static void syncUpdate(MemorySegment struct, byte fieldValue) {
+ struct.set(syncUpdate$LAYOUT, syncUpdate$OFFSET, fieldValue);
}
- public static byte syncUpdate$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_RfFreqT.syncUpdate$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void syncUpdate$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_RfFreqT.syncUpdate$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp1aParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp1aParamsT.java
index f64a365f..3176ade0 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp1aParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp1aParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,92 +21,172 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
+import java.lang.foreign.Arena;
+import java.lang.foreign.GroupLayout;
import java.lang.foreign.MemoryLayout;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.util.function.Consumer;
+
+import static java.lang.foreign.MemoryLayout.PathElement.groupElement;
+import static java.lang.foreign.ValueLayout.OfByte;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char rfNotchEnable;
* unsigned char rfDabNotchEnable;
- * };
+ * }
* }
*/
public class sdrplay_api_Rsp1aParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("rfNotchEnable"),
- Constants$root.C_CHAR$LAYOUT.withName("rfDabNotchEnable")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_Rsp1aParamsT.$struct$LAYOUT;
+ sdrplay_api_Rsp1aParamsT() {
+ // Should not be called directly
}
- static final VarHandle rfNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfNotchEnable"));
- public static VarHandle rfNotchEnable$VH() {
- return sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("rfNotchEnable"),
+ sdrplay_api_h.C_CHAR.withName("rfDabNotchEnable")
+ ).withName("$anon$11:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte rfNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final OfByte rfNotchEnable$layout() {
+ return rfNotchEnable$LAYOUT;
+ }
+
+ private static final long rfNotchEnable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
+ * }
+ */
+ public static final long rfNotchEnable$offset() {
+ return rfNotchEnable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static byte rfNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH.get(seg);
+ public static byte rfNotchEnable(MemorySegment struct) {
+ return struct.get(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfNotchEnable
* }
*/
- public static void rfNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH.set(seg, x);
+ public static void rfNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfNotchEnable$LAYOUT, rfNotchEnable$OFFSET, fieldValue);
}
- public static byte rfNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ private static final OfByte rfDabNotchEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("rfDabNotchEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
+ * }
+ */
+ public static final OfByte rfDabNotchEnable$layout() {
+ return rfDabNotchEnable$LAYOUT;
}
- public static void rfNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp1aParamsT.rfNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
- }
- static final VarHandle rfDabNotchEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("rfDabNotchEnable"));
- public static VarHandle rfDabNotchEnable$VH() {
- return sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH;
+
+ private static final long rfDabNotchEnable$OFFSET = 1;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
+ * }
+ */
+ public static final long rfDabNotchEnable$offset() {
+ return rfDabNotchEnable$OFFSET;
}
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char rfDabNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
* }
*/
- public static byte rfDabNotchEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH.get(seg);
+ public static byte rfDabNotchEnable(MemorySegment struct) {
+ return struct.get(rfDabNotchEnable$LAYOUT, rfDabNotchEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char rfDabNotchEnable;
+ * {@snippet lang=c :
+ * unsigned char rfDabNotchEnable
* }
*/
- public static void rfDabNotchEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH.set(seg, x);
+ public static void rfDabNotchEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(rfDabNotchEnable$LAYOUT, rfDabNotchEnable$OFFSET, fieldValue);
}
- public static byte rfDabNotchEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void rfDabNotchEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp1aParamsT.rfDabNotchEnable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp1aTunerParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp1aTunerParamsT.java
index 8b3da5f5..c1c55e67 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp1aTunerParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp1aTunerParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,62 +21,122 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char biasTEnable;
- * };
+ * }
* }
*/
public class sdrplay_api_Rsp1aTunerParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("biasTEnable")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_Rsp1aTunerParamsT.$struct$LAYOUT;
+ sdrplay_api_Rsp1aTunerParamsT() {
+ // Should not be called directly
}
- static final VarHandle biasTEnable$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("biasTEnable"));
- public static VarHandle biasTEnable$VH() {
- return sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("biasTEnable")
+ ).withName("$anon$17:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte biasTEnable$LAYOUT = (OfByte)$LAYOUT.select(groupElement("biasTEnable"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final OfByte biasTEnable$layout() {
+ return biasTEnable$LAYOUT;
+ }
+
+ private static final long biasTEnable$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
+ * }
+ */
+ public static final long biasTEnable$offset() {
+ return biasTEnable$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static byte biasTEnable$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH.get(seg);
+ public static byte biasTEnable(MemorySegment struct) {
+ return struct.get(biasTEnable$LAYOUT, biasTEnable$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char biasTEnable;
+ * {@snippet lang=c :
+ * unsigned char biasTEnable
* }
*/
- public static void biasTEnable$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH.set(seg, x);
+ public static void biasTEnable(MemorySegment struct, byte fieldValue) {
+ struct.set(biasTEnable$LAYOUT, biasTEnable$OFFSET, fieldValue);
}
- public static byte biasTEnable$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void biasTEnable$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp1aTunerParamsT.biasTEnable$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer cleanup) {
+ return addr.reinterpret(layout().byteSize() * elementCount, arena, cleanup);
}
- public static MemorySegment ofAddress(MemorySegment addr, SegmentScope scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }
}
-
diff --git a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp2ParamsT.java b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp2ParamsT.java
index f0d67548..d3bc00dd 100644
--- a/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp2ParamsT.java
+++ b/src/main/java/io/github/dsheirer/source/tuner/sdrplay/api/v3_08/sdrplay_api_Rsp2ParamsT.java
@@ -1,6 +1,6 @@
/*
* *****************************************************************************
- * Copyright (C) 2014-2023 Dennis Sheirer
+ * Copyright (C) 2014-2024 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,62 +21,122 @@
package io.github.dsheirer.source.tuner.sdrplay.api.v3_08;
-import java.lang.foreign.MemoryLayout;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.SegmentAllocator;
-import java.lang.foreign.SegmentScope;
-import java.lang.foreign.StructLayout;
-import java.lang.invoke.VarHandle;
+import java.lang.foreign.*;
+import java.util.function.*;
+
+import static java.lang.foreign.ValueLayout.*;
+import static java.lang.foreign.MemoryLayout.PathElement.*;
/**
- * {@snippet :
+ * {@snippet lang=c :
* struct {
* unsigned char extRefOutputEn;
- * };
+ * }
* }
*/
public class sdrplay_api_Rsp2ParamsT {
- static final StructLayout $struct$LAYOUT = MemoryLayout.structLayout(
- Constants$root.C_CHAR$LAYOUT.withName("extRefOutputEn")
- );
- public static MemoryLayout $LAYOUT() {
- return sdrplay_api_Rsp2ParamsT.$struct$LAYOUT;
+ sdrplay_api_Rsp2ParamsT() {
+ // Should not be called directly
}
- static final VarHandle extRefOutputEn$VH = $struct$LAYOUT.varHandle(MemoryLayout.PathElement.groupElement("extRefOutputEn"));
- public static VarHandle extRefOutputEn$VH() {
- return sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH;
+
+ private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(
+ sdrplay_api_h.C_CHAR.withName("extRefOutputEn")
+ ).withName("$anon$22:9");
+
+ /**
+ * The layout of this struct
+ */
+ public static final GroupLayout layout() {
+ return $LAYOUT;
}
+
+ private static final OfByte extRefOutputEn$LAYOUT = (OfByte)$LAYOUT.select(groupElement("extRefOutputEn"));
+
+ /**
+ * Layout for field:
+ * {@snippet lang=c :
+ * unsigned char extRefOutputEn
+ * }
+ */
+ public static final OfByte extRefOutputEn$layout() {
+ return extRefOutputEn$LAYOUT;
+ }
+
+ private static final long extRefOutputEn$OFFSET = 0;
+
+ /**
+ * Offset for field:
+ * {@snippet lang=c :
+ * unsigned char extRefOutputEn
+ * }
+ */
+ public static final long extRefOutputEn$offset() {
+ return extRefOutputEn$OFFSET;
+ }
+
/**
* Getter for field:
- * {@snippet :
- * unsigned char extRefOutputEn;
+ * {@snippet lang=c :
+ * unsigned char extRefOutputEn
* }
*/
- public static byte extRefOutputEn$get(MemorySegment seg) {
- return (byte)sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH.get(seg);
+ public static byte extRefOutputEn(MemorySegment struct) {
+ return struct.get(extRefOutputEn$LAYOUT, extRefOutputEn$OFFSET);
}
+
/**
* Setter for field:
- * {@snippet :
- * unsigned char extRefOutputEn;
+ * {@snippet lang=c :
+ * unsigned char extRefOutputEn
* }
*/
- public static void extRefOutputEn$set(MemorySegment seg, byte x) {
- sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH.set(seg, x);
+ public static void extRefOutputEn(MemorySegment struct, byte fieldValue) {
+ struct.set(extRefOutputEn$LAYOUT, extRefOutputEn$OFFSET, fieldValue);
}
- public static byte extRefOutputEn$get(MemorySegment seg, long index) {
- return (byte)sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH.get(seg.asSlice(index*sizeof()));
+
+ /**
+ * Obtains a slice of {@code arrayParam} which selects the array element at {@code index}.
+ * The returned segment has address {@code arrayParam.address() + index * layout().byteSize()}
+ */
+ public static MemorySegment asSlice(MemorySegment array, long index) {
+ return array.asSlice(layout().byteSize() * index);
}
- public static void extRefOutputEn$set(MemorySegment seg, long index, byte x) {
- sdrplay_api_Rsp2ParamsT.extRefOutputEn$VH.set(seg.asSlice(index*sizeof()), x);
+
+ /**
+ * The size (in bytes) of this struct
+ */
+ public static long sizeof() { return layout().byteSize(); }
+
+ /**
+ * Allocate a segment of size {@code layout().byteSize()} using {@code allocator}
+ */
+ public static MemorySegment allocate(SegmentAllocator allocator) {
+ return allocator.allocate(layout());
}
- public static long sizeof() { return $LAYOUT().byteSize(); }
- public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }
- public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {
- return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));
+
+ /**
+ * Allocate an array of size {@code elementCount} using {@code allocator}.
+ * The returned segment has size {@code elementCount * layout().byteSize()}.
+ */
+ public static MemorySegment allocateArray(long elementCount, SegmentAllocator allocator) {
+ return allocator.allocate(MemoryLayout.sequenceLayout(elementCount, layout()));
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, Arena arena, Consumer cleanup) {
+ return reinterpret(addr, 1, arena, cleanup);
+ }
+
+ /**
+ * Reinterprets {@code addr} using target {@code arena} and {@code cleanupAction} (if any).
+ * The returned segment has size {@code elementCount * layout().byteSize()}
+ */
+ public static MemorySegment reinterpret(MemorySegment addr, long elementCount, Arena arena, Consumer