From 423aee453f927124647e7fdc125294f60e7042b5 Mon Sep 17 00:00:00 2001 From: stf <7o5rfu92t@ctrlc.hu> Date: Sun, 5 Apr 2020 19:35:23 +0000 Subject: [PATCH] added support for rtlsdr_rpc_set_and_get_tuner_bandwidth in rtl_rpc --- README.rtlsdr_rpc | 3 ++- include/rtlsdr_rpc.h | 3 +++ include/rtlsdr_rpc_msg.h | 1 + src/librtlsdr.c | 7 +++++++ src/rtl_rpcd.c | 21 +++++++++++++++++++++ src/rtlsdr_rpc.c | 29 +++++++++++++++++++++++++++++ 6 files changed, 63 insertions(+), 1 deletion(-) diff --git a/README.rtlsdr_rpc b/README.rtlsdr_rpc index 646b13d..98547a7 100644 --- a/README.rtlsdr_rpc +++ b/README.rtlsdr_rpc @@ -40,4 +40,5 @@ rtlsdr-waterfall rtlizer gnuradio-companion cubicsdr -gqrx \ No newline at end of file +gqrx +linrad diff --git a/include/rtlsdr_rpc.h b/include/rtlsdr_rpc.h index eb782c6..e77005f 100644 --- a/include/rtlsdr_rpc.h +++ b/include/rtlsdr_rpc.h @@ -74,6 +74,9 @@ int rtlsdr_rpc_set_tuner_if_gain int rtlsdr_rpc_set_tuner_gain_mode (void* dev, int manual); +int rtlsdr_rpc_set_and_get_tuner_bandwidth +(void* devp, uint32_t bw, uint32_t *applied_bw, int apply_bw); + int rtlsdr_rpc_set_sample_rate (void* dev, uint32_t rate); diff --git a/include/rtlsdr_rpc_msg.h b/include/rtlsdr_rpc_msg.h index 2ad9bd6..c7f4d9d 100644 --- a/include/rtlsdr_rpc_msg.h +++ b/include/rtlsdr_rpc_msg.h @@ -28,6 +28,7 @@ typedef enum RTLSDR_RPC_OP_GET_TUNER_GAIN, RTLSDR_RPC_OP_SET_TUNER_IF_GAIN, RTLSDR_RPC_OP_SET_TUNER_GAIN_MODE, + RTLSDR_RPC_OP_SET_GET_TUNER_BW, RTLSDR_RPC_OP_SET_SAMPLE_RATE, RTLSDR_RPC_OP_GET_SAMPLE_RATE, RTLSDR_RPC_OP_SET_TESTMODE, diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 86d6861..1f1873d 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -1160,6 +1160,13 @@ int rtlsdr_get_tuner_gains(rtlsdr_dev_t *dev, int *gains) int rtlsdr_set_and_get_tuner_bandwidth(rtlsdr_dev_t *dev, uint32_t bw, uint32_t *applied_bw, int apply_bw ) { + #ifdef _ENABLE_RPC + if (rtlsdr_rpc_is_enabled()) + { + return rtlsdr_rpc_set_and_get_tuner_bandwidth(dev, bw, applied_bw, apply_bw); + } + #endif + int r = 0; *applied_bw = 0; /* unknown */ diff --git a/src/rtl_rpcd.c b/src/rtl_rpcd.c index 3c41d13..740e717 100644 --- a/src/rtl_rpcd.c +++ b/src/rtl_rpcd.c @@ -398,6 +398,7 @@ static const char* op_to_string(rtlsdr_rpc_op_t op) "RTLSDR_RPC_OP_GET_TUNER_GAIN", "RTLSDR_RPC_OP_SET_TUNER_IF_GAIN", "RTLSDR_RPC_OP_SET_TUNER_GAIN_MODE", + "RTLSDR_RPC_OP_SET_GET_TUNER_BW", "RTLSDR_RPC_OP_SET_SAMPLE_RATE", "RTLSDR_RPC_OP_GET_SAMPLE_RATE", "RTLSDR_RPC_OP_SET_TESTMODE", @@ -789,6 +790,26 @@ static int handle_query break ; } + case RTLSDR_RPC_OP_SET_GET_TUNER_BW: + { + uint32_t did; + uint32_t bw; + uint32_t applied_bw; + int apply_bw; + + if (rtlsdr_rpc_msg_pop_uint32(q, &did)) goto on_error; + if (rtlsdr_rpc_msg_pop_uint32(q, &bw)) goto on_error; + if (rtlsdr_rpc_msg_pop_uint32(q, &apply_bw)) goto on_error; + + if ((rpcd->dev == NULL) || (rpcd->did != did)) goto on_error; + + err = rtlsdr_set_and_get_tuner_bandwidth(rpcd->dev, bw, &applied_bw, apply_bw); + if (err) goto on_error; + if (rtlsdr_rpc_msg_push_uint32(r, applied_bw)) goto on_error; + + break ; + } + case RTLSDR_RPC_OP_SET_SAMPLE_RATE: { uint32_t did; diff --git a/src/rtlsdr_rpc.c b/src/rtlsdr_rpc.c index b51fb48..1471c15 100644 --- a/src/rtlsdr_rpc.c +++ b/src/rtlsdr_rpc.c @@ -567,6 +567,8 @@ int rtlsdr_rpc_open(void** devp, uint32_t index) rtlsdr_rpc_dev_t* dev; int err = -1; + index = (uint32_t) atoi(getenv("RTLSDR_RPC_DEVICE_INDEX")); + *devp = NULL; if (init_cli(cli)) goto on_error_0; @@ -925,6 +927,33 @@ int rtlsdr_rpc_set_tuner_gain(void* devp, int gain) return err; } +int rtlsdr_rpc_set_and_get_tuner_bandwidth(void* devp, uint32_t bw, uint32_t *applied_bw, int apply_bw ) +{ + rtlsdr_rpc_dev_t* const dev = devp; + rtlsdr_rpc_cli_t* const cli = dev->cli; + rtlsdr_rpc_msg_t* q; + rtlsdr_rpc_msg_t* r; + int err = -1; + + if (alloc_qr(cli, &q, &r)) goto on_error_0; + + rtlsdr_rpc_msg_set_op(q, RTLSDR_RPC_OP_SET_GET_TUNER_BW); + + if (rtlsdr_rpc_msg_push_uint32(q, dev->index)) goto on_error_1; + if (rtlsdr_rpc_msg_push_uint32(q, (uint32_t)bw)) goto on_error_1; + if (rtlsdr_rpc_msg_push_uint32(q, (uint32_t)apply_bw)) goto on_error_1; + + if (send_recv_msg(cli, q, r)) goto on_error_1; + + if (rtlsdr_rpc_msg_get_err(r)) goto on_error_1; + if (rtlsdr_rpc_msg_pop_uint32(r, applied_bw)) goto on_error_1; + + on_error_1: + free_qr(cli, q, r); + on_error_0: + return err; +} + int rtlsdr_rpc_get_tuner_gain(void* devp) { rtlsdr_rpc_dev_t* const dev = devp;