[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. e7786cee4c4e15aeba8a5
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2023-11-13 14:10:34
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Hamlib -- Ham radio control libraries". The branch, master has been updated via e7786cee4c4e15aeba8a551622342f4b090a3059 (commit) via 43159e55a1c4351199fada21eb6be4632001d930 (commit) via 9832fba7979c827785119052f0a824c76acd3007 (commit) via 6351d5deacd5b2ba37c307fe6430965fa86573f4 (commit) via 1374ee554c9d73b5fd301a2afd1023725ef4d4ab (commit) via 774e60895cb268f6ec1001047f97ff2319881869 (commit) via 5059ec8cd6bc2913ffc8d5f4b84910fed2f97466 (commit) via 1f9d3a63d42526d2cbd162a08c8d40d498b3c8de (commit) via 7cb10edf20c4a1be18f0ff2f52c54c1b095d17c7 (commit) via 59285750ef32dc0ee5deab8634832965372f7b73 (commit) via 3a08bbe3d82b2cbc22ecb5b4af6775cfea2e3c4b (commit) via 5d7db6b516affc9a4e1c6e6f6cba393bbe49a077 (commit) via f1a9823bddf2dd93e781bbc6fe9ef0a46335a639 (commit) via 62341a657efcce90af1f897861b20572d0e3f4a9 (commit) via 02b4da83c3c34330ca796942f7e0698fb0a86464 (commit) via a5bac081908255fe71dc06d934ef418821b50364 (commit) via 7c3e71a487fd600591d299794fa2c3c28e79147a (commit) via 162a685887d9cdd18dc17f557edbb117694b38f5 (commit) via afdb26093e6fe0eeafabcbad6b48859f928b7e47 (commit) via 4aa8e010a1653574bbf582fe9b102cb2464bff01 (commit) via 45dca3be598c028f08e6db1edb0a7e78525c2fe2 (commit) via 49e93f3090f0dd32a2fbf752ab43d5872e58e52b (commit) via 02ffc6d6dcaa34100e2b7ff93e7713999505c45c (commit) via 2d2d5009e0181a71d171add29c19a7bbe347887d (commit) via 1e3e1a9499f6cdc6738e311fdf07fb14e52ebbed (commit) via 337fb0f3e5b7b83c8d28481d516587cc9469e304 (commit) via 43d1fbb3230c74e62f47dc510aeafb072443aca5 (commit) via 31298bb91711d71356b2309670321a88a11f4582 (commit) via 3107a060f015dfda3d5087ce85bac5a668ae2154 (commit) via f8814732a2224d50ca16cf497fe0d9dd0686358d (commit) via 41c891251f4641d2aeb292e76654ed88b9f85a90 (commit) via 40a8cedc9da307c00ca7b4bd591ffb69542a9cde (commit) via 5b86d4efffe86b9893093790bcb0f74c86e11a9e (commit) via 88e86fb62a17a14dc681a1ed4336d6268af709cc (commit) via 53ff60d98156b277c369fbdd63ce3da2893594d2 (commit) via 5fb2e68e07c8b972d82b68dc4b0a5b2d79045623 (commit) via f36822ac20b43d7257ded7ba25b8162b4c5eda31 (commit) via f618540f227d634c05dfa69d2237fb1350a0eb77 (commit) via 0dbe24ff424854ce849c0c159bcd6f938f61d995 (commit) via f4f4d122a850bd2cffe586a2850b45fc5fa1b6ca (commit) via 8484b132f265e99257f64dcbc99d9e2da732e96c (commit) via 7f8f470ef75b3cb9424ab01667da6b5b1a23d03d (commit) via 701bc365599ee0cfe0174da58e5be56d38ac0a5a (commit) via fccc540353269ccf89aa70c37ec060fe30c78039 (commit) via 6cb17e49dcf1219d9c44b684356797128daf4209 (commit) via c8c8869a3c19661a73e321079d35a3cc1ce58262 (commit) via fb03d095dff23b7efd1794a9ce2ebf9425889579 (commit) via 012534a628f6025bbaed6d0189f686c776388945 (commit) via 6b558c5d2ad5dffa9887495688882fd6f1560ed0 (commit) via f9bd07bbf5faee04129158606e4c207db85115e9 (commit) via 7c5d4db2fe14addd7c57235229f610b0ee931207 (commit) via 06c20da7384f8426df3543bda42c94f34bbf10a2 (commit) via 1d57136d699ed8e4fa7cc829a1060338382542ea (commit) via 66e8548d606d666ed863ece111f1c1150d622e20 (commit) via 6d0035180c1126867e80069fee96970a5f4cc8a0 (commit) via 228aac34ca9e47bd30cf20d8b637013d320dc790 (commit) via b5653852b382eefc19273adc53ffea350f1f35f2 (commit) via d39662348642f2c8d9fe2977721403a1b7b0eb79 (commit) via 325277f269615eef8fdfb1fc1104203557dc99b1 (commit) via 32728ba95f8ee396793bb5fcaa002154ebf4f1cf (commit) via 599554ee162f2806bf84128f4ba6c62f947d2dc8 (commit) via 192822417b80e8ea7929c14ed2c1dfbf56cc511b (commit) via e0fa354d3a684d5a012144ec53a0e9afba126cff (commit) via a8f224e660728f428ea2f2cd6bef51d332c3896c (commit) via 7e0d60535a67443c27297ba054ab206ea943af2e (commit) via 0613c5844bf03fb3019b7c982f5228f895aa519c (commit) via 541c1e1de23cc41e020546b8bce4cf00a773f822 (commit) via b17d2b869c266548f44a92f1710ea2f8d1697067 (commit) via ce6dd8d2c79460ac368321b4065d39d629d78217 (commit) via 5a7eec1af702f7298ffc5084c814fc1cfb39352a (commit) via 84875071a93fefc9f4f7c56e31a4fc90c42f203c (commit) via 9b6d1565f137b8f0a61b9c934d1c0eded866e9fd (commit) via fb49c0cf7099dffba94354c7fffb77ca2e4e7987 (commit) via 46bfe24a62b5e2ae2c968e82aae8863892ad7b1d (commit) via 00d69f63ef65d287dc2a00d8ca747cee885d9603 (commit) via bdeb433d040736ad28a6f8cb7128ae4c5a2be532 (commit) via 464fa3f4780bf249bc876d26fac7df549f9c21af (commit) via 344f06382ce4eae0829ecd85eb6bd9469bec6356 (commit) via aa429806aa8f21569d7ca117bb98205753d2cd1b (commit) via 65caf427f09034f799e7498dbb9166dc197ce495 (commit) via e1ca06655d141e1bc30c112a86884967b925a937 (commit) via a1baf7307d7c5067c909322d39c9414a77a24837 (commit) via 9a22b39fcdf0ec063d630703146bf7f67bc34a9a (commit) via 05823482a001c13d0aaeede857371dac0128a642 (commit) via c74fc74e9ec23bc53649eeda2b46e873dc532098 (commit) via b6ffeeda990c79b64d32e1495b7055d00bd9193e (commit) via f697f71205862284de64bd4066742b7999796124 (commit) via b609eb0085f4f5f28a94a13b173d38c6784b2af8 (commit) via df413d0dc4d7083be4abca6b626340603a56a124 (commit) via d87671b54b9e432bdaef5860dcf4c8bf520d63c2 (commit) via 289585388b057f0e8043e3b0e220c818178b8de7 (commit) via ff2c0e6b0365e6ae6b5d2ab45a8812a3ee4f70a3 (commit) via 01292b261f40cc6d0ac0d57158ef5a7508234ae2 (commit) via ec6c19854e0c59c129ac6a1b20da295c51e352f6 (commit) via f5f8694a709bf084145121c4ed8633032eacf873 (commit) via 914c4f4d2a695dcf0e1d756e476806baeca0a88f (commit) via 60356f5774140738b692da88b7fd8b83a0190051 (commit) via cb5e9ec8539394bd4d0931eb189c4f3ec3f4f461 (commit) via aac762712a8382626a7c0d41ba481969f69b8f2b (commit) via 680ce55ba26df1e3634356229bfe20491706f77e (commit) via 1bf2111c7a72aac84f2618c4338142fdabafd06e (commit) via 8a006db51d297e5b894ee887ec89886de0bc5a8e (commit) via 9f053799e91e2ba5c090fc31e86bcb38fb716211 (commit) via cdc9bc45f21174d82af7350d967d771e425563c4 (commit) via b72dd095f730b73f560944d4261e0d876154625d (commit) via 8d15c04727ddea13feef5d37fe203a4105f4ae5d (commit) via e2354333f34986359559dd74073bb0712f060bcb (commit) via 534fe449a28273bf30b4ae363dc4d81160071367 (commit) via d72127f29a1a226fb09949a6570cace1db7e6bc2 (commit) via 501c4b62c9f40feb64d4acdd409f3940a8552949 (commit) via 9c6e564006c0e39db053b2bffe7084125a6f6ac9 (commit) via 744eb5fc5d23f69cdcc6268aff4815726dc3608f (commit) via e68b6f98b52d0ff5286e304734ad8455aa2e4bfb (commit) via 67fdf34f226f33573ea63eb9a8fd06eec1374122 (commit) via d3edab375950c67cafc987d73058912f684c9e57 (commit) via dfc04d49c4b218b7211eba0550ca20d602735428 (commit) via fd1c48bfabcd7fb890e1c24fbac4e6290afd957c (commit) via 64d6cd4af270bd2e94968eb6df5c34202b0763a4 (commit) via d7b65ec5a5e59bbd6f82d9271547ffc216728836 (commit) via f7f57ecc68fd647c59a27e226c9f8c46fd196b09 (commit) via 8a9776664ede8b2f902c6c33326a80a5edca11bf (commit) via 4175929a48f256e8ce8c2920f987f38c76601ced (commit) via 8dea15d4dbdfce581a348a87255c0882e34b4713 (commit) via 3217a007e4e1a7071bc40389809c7e69b69d172d (commit) via d5f7660781ea7310028463b99d22a054eb198022 (commit) via e2d03ea581b39400d15fcbe28f29ac54e0282ab7 (commit) via 6957c15ec39236bb3883539cdba9f654b80f169a (commit) via d48c847cf5c625868488f92a9633ac3da79af470 (commit) via 4fd9edbc97167f2c7f60a72bb720a2c7f8708f2d (commit) via adc339039decaa7b60e4cb0c1ff304dad39228ff (commit) via 98ab55b80500fb3b8e0fe98f0d94249bb0651dc2 (commit) via 89db4ae757e12474d2325d81d5011701b5159118 (commit) via d4cf8a04d71c9da9bdd704277a616574b4c973a3 (commit) via e0c4988e6a59ca781b6c9816c29a90d9fc07e429 (commit) via da5de3cb6ec6a188545910ec255d8c5849ebe18d (commit) via 3b5f7a6dcf6dc191d906f8a15d4b204ad8d51d93 (commit) via c93440706f24073daf2ec8e8c1ce09e2e6bbd417 (commit) via 5ac1e50b8060ac248659ffe8d7e28788843d5b04 (commit) via 631a2a3aa1f4ff0763d6d966067bdadcd5914c6c (commit) via 717a451d9cf48036ac9ed8c845d1fac35e1cb3aa (commit) via 1a8ae4b4342e433552384f6b0d002a02ad36e49b (commit) via 84ca35f19e643545bef67fb154994465b344993a (commit) via 6877d0357967df737b50049758d90900466d3d6b (commit) via 1a4a189dbcb972788efade98778ecc9a5705fbab (commit) via 0484dc08c8538db34d4e1302a702147b28e42353 (commit) via 18d016a2a2b72e70bb9c69acf85494cbaadd6380 (commit) via 18e122196f0f5fa7eedbda6b4b92534af52bea6d (commit) via 71f8b3b8c9e64e3e7d561da83ced9dad84bfb8d0 (commit) via 93af897753279dcc4455c47726ad80535284abf8 (commit) via a4698230287e2d9690d842f7c0498bc8e94f4ccc (commit) via f00661a8ae24f662b2ad8c2d88a3e904de8b8197 (commit) via e1e7112cb5ceecadcc62961fc63cd7902e8219ed (commit) via 53855c868db32e1dc87984d103daf6daf307a4bd (commit) via 027c59d6e94d44ea0c3235f23c43f7fa8a527df6 (commit) via 6e8d328fb15c63f09bc51e82340d5b6c076481fd (commit) via 4d540b14590aa8794d2fa1c380c67f7302fcf985 (commit) via f9e9657ad139dad008c0c3f6ad84beb585393bd7 (commit) via d49543f00c0b0198ef5a1f33c41a21a7017ee8eb (commit) via f55d0fc872cfbd88ffddd73fd13b7d1733906030 (commit) via 2423fb237ce2317464383803223d82b430dc8f9f (commit) via aeb03fda62c7dc1c931365654ca9b38188d4df5c (commit) via 8bb6a57548a3c56cd58183ef0ed15edbe83644f4 (commit) via a82d67234b9da44de9bd2729a27efc031dcc42e0 (commit) via f9a9de37cf7a6df701f7755a63ff973cc7b63b52 (commit) via 76a836af5b4550bbec01f0ea6261497afb3934fb (commit) via cd9077fbc26754032d505e5ec282fa31c7e193aa (commit) via 6b6289313cffb9f12dc531c4f835919478b276de (commit) via 85787c8e89d02388788313208a0167c2b82eb762 (commit) via db6ffaf7dad2bd5adcb619850f541676b1797d70 (commit) via 3e0420f13829436786c02eeaa13ce0fc5d0ce8cb (commit) via 85226e5bc43da0b3b12f17b54449cfb0654a4057 (commit) via be8372c72f16b123f7fa5b557d8329594eb1cf60 (commit) via f797178e961ff52f7d29ce281102e9b5141f7b29 (commit) via b731e77841e861c93b2cfb123e756aef7d2cf212 (commit) via 44a6274bbee830515756183f00ee46ba21529354 (commit) via 6b4cc5b36baa490342d15a87e69bad3cf44c43d5 (commit) via 6f3a9831c3e4750a75a83983e499710c1a301704 (commit) via 5e4cb6f1c189441107dddb0bc9d1cb363e1aa277 (commit) via 6644afbf8d4dbf966638a8597e59eb0133aeeaf6 (commit) via 1fbb03fa92320f49dfa45704a1e557f888a69093 (commit) via 5f825aa0d466b2e3b22455035423033cf8f5ffb3 (commit) via da9199577ea3b948d49babde894829a2c17fe806 (commit) via 86df4001a1b3d29b51ce0f7ef5bfcd8e7fdd4a5a (commit) via 57c8819ce0467ec80e322d1aa7f92332ab2fcadf (commit) via e9ef4c1a81d1de111d2e2996377159bcf1e64dab (commit) via 5115fa8959b75aeb15746146cd99ef7ce688214f (commit) via 0bee5820953d06e4796982b08c65dd4cbcebe9d6 (commit) via e972262e8068890ad21e46acb4d0affb016ae973 (commit) via 3e91601a0f2a1e0b6d8d28443f6b9d1512bc5543 (commit) via d50ff331eea3f183928c202fe544c9b8cf7fa7be (commit) via 9415fc34462128ab4a6cb1f14025657c31a91426 (commit) via f05b6604a28820b1dcf1582acba6afc336dce3d4 (commit) via 8a4767db17c049d2d9b67155370ab24cd6e40adc (commit) via 4df8260cc1153e9576f2cac30c7469b7cab00eaf (commit) via 4f65288c326a609eefc0b276b4db3c5f7af64c79 (commit) via 3cf5fab21d6a238dee77b1372413d116085251c6 (commit) via ee807a7541fbd85a8125aafcc12fddfa954e44cb (commit) via a00326161c25dba722211edaec0743c86104ae94 (commit) via 5b4654024ad2b7fb252fd8d10df8ea2cb6bd1211 (commit) via 81e14ae4f1663de21ada86b3b204a286cc58ac1a (commit) via 6f229d1c1a015e507e6bf912b18a02cd1b776f85 (commit) via c07e40e18be59e849c1643f602802b0cac22c194 (commit) via 256766c5b6c02eab247ac93581b41199c4fd1b2b (commit) via 8ebadb3b7d39ef2d3d314019d560232e8f63fa07 (commit) via 1e93364f7d7f4dd28f338c1f1d3b390b50ed4487 (commit) via 3c48de2159713ef073ec238e827eced4d2f5bce7 (commit) from 2e3e0df4d6be4bd9aad2f0a155ee2370a45959a0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e7786cee4c4e15aeba8a551622342f4b090a3059 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Nov 12 13:22:02 2023 -0600 Fix TS990S SWR read -- strange behavior of RM command reading first RM turned on for read New SWR table too for TS990S https://github.com/Hamlib/Hamlib/issues/1423 diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 4e87543ba..7974d4423 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -1100,6 +1100,15 @@ int kenwood_open(RIG *rig) // mismatched IDs can still be tested rig->state.rigport.retry = retry_save; + + // TS-990S needs to ensure all RM meters are turned off as first one with read on gets read + // Any RM commands need to be ON/READ/OFF to allow other apps or threads to read meters + + if (RIG_IS_TS990S) + { + kenwood_transaction(rig, "RM10;RM20;RM30;RM40;RM50;RM60;", NULL, 0); + } + RETURNFUNC(RIG_OK); } diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index cfb5df20b..0e2a3858f 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -28,7 +28,7 @@ #include "token.h" #include "idx_builtin.h" -#define BACKEND_VER "20231031" +#define BACKEND_VER "20231112" #define EOM_KEN ';' #define EOM_TH '\r' diff --git a/rigs/kenwood/ts990s.c b/rigs/kenwood/ts990s.c index 63374cb16..39a5c9a07 100644 --- a/rigs/kenwood/ts990s.c +++ b/rigs/kenwood/ts990s.c @@ -59,9 +59,9 @@ #define TS990S_SWR_CAL { 5, \ { \ { 0, 1.0f }, \ - { 14, 1.5f }, \ - { 28, 2.0f }, \ - { 42, 3.0f }, \ + { 7, 1.5f }, \ + { 36, 3.0f }, \ + { 43, 6.0f }, \ { 70, 10.0f } \ } } @@ -647,7 +647,9 @@ int ts990s_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_SWR: - retval = kenwood_safe_transaction(rig, "RM21", lvlbuf, sizeof(lvlbuf), 7); + // we need to turn on read, read it, and turn it off again + // first RM meter with read on is the that gets read with RM; + retval = kenwood_safe_transaction(rig, "RM21;RM;RM20", lvlbuf, sizeof(lvlbuf), 8); if (retval != RIG_OK) { diff --git a/src/rig.c b/src/rig.c index a080cd7d8..d95ae97fb 100644 --- a/src/rig.c +++ b/src/rig.c @@ -2740,6 +2740,14 @@ int HAMLIB_API rig_get_mode(RIG *rig, *width = rig->state.cache.widthMainA; RETURNFUNC(RIG_OK); } + else if (vfo == RIG_VFO_B) + { + if (rig->state.cache.modeMainB == RIG_MODE_NONE) + { + retcode = caps->get_mode(rig, vfo, mode, width); + return retcode; + } + } if ((*mode != RIG_MODE_NONE && cache_ms_mode < rig->state.cache.timeout_ms) && cache_ms_width < rig->state.cache.timeout_ms) commit 43159e55a1c4351199fada21eb6be4632001d930 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Nov 12 08:47:28 2023 -0600 Default configure builds shared libraries Adding --enable-static now turnes off shared as it never build both at the same time diff --git a/configure.ac b/configure.ac index 863b76dec..25f53c6bf 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,23 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) ## ------------------------------ ## ## Hamlib specific configuration. ## ## ------------------------------ ## +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared], + [Enable shared libraries @<:@default=yes@:>@])], + [enable_shared=$enableval], + [enable_shared=yes]) +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static], + [Enable static libraries @<:@default=check@:>@])], + [enable_static=$enableval], + [enable_static=check]) + +AS_IF([test "x$enable_static" = "xyes"], [ + enable_shared=no +]) +AS_IF([test "x$enable_static" = "xyes" && test "x$enable_shared" = "xyes"], [ + AC_MSG_ERROR([Both --enable-static and --enable-shared cannot be enabled at the same time.]) +]) dnl New backends must be listed here! Also the new Makefile path must be dnl added to AC_CONFIG_FILES near the end of this file. See README.developer commit 9832fba7979c827785119052f0a824c76acd3007 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Nov 11 22:21:38 2023 -0600 Add null check in rig_get_function_ptr diff --git a/src/misc.c b/src/misc.c index 67a96205f..eba3ee2b7 100644 --- a/src/misc.c +++ b/src/misc.c @@ -2346,6 +2346,12 @@ void *HAMLIB_API rig_get_function_ptr(rig_model_t rig_model, { const struct rig_caps *caps = rig_get_caps(rig_model); + if (caps == NULL) + { + rig_debug(RIG_DEBUG_ERR, "%s: caps == null for model %d??\n", __func__, rig_model); + return NULL; + } + switch (rig_function) { case RIG_FUNCTION_INIT: commit 6351d5deacd5b2ba37c307fe6430965fa86573f4 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Nov 10 17:38:57 2023 -0600 Get scaling correct (i.e.none) for FLRig get_SWR https://github.com/Hamlib/Hamlib/issues/1423 diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index c1c4e1c4f..e5a14e32e 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -2210,7 +2210,10 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { case RIG_LEVEL_SWR: { - val->f = interpolateSWR(atoi(value)); + if (priv->get_SWR) + val->f = atof(value); + else + val->f = interpolateSWR(atoi(value)); break; } case RIG_LEVEL_STRENGTH: commit 1374ee554c9d73b5fd301a2afd1023725ef4d4ab Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Nov 10 15:43:20 2023 -0600 Add new get_SWR function for FLRig https://github.com/Hamlib/Hamlib/issues/1423 diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 7d10d4882..c1c4e1c4f 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -117,6 +117,7 @@ struct flrig_priv_data float powermeter_scale; /* So we can scale power meter to 0-1 */ value_t parms[RIG_SETTING_MAX]; struct ext_list *ext_parms; + int get_SWR; }; /* level's and parm's tokens */ @@ -639,6 +640,7 @@ static int flrig_init(RIG *rig) priv->curr_modeB = -1; priv->curr_widthA = -1; priv->curr_widthB = -1; + priv->get_SWR = 1; // we'll try getSWR once to see if it works if (!rig->caps) { @@ -2154,7 +2156,7 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) char value[MAXARGLEN]; char *cmd; int retval; - const struct flrig_priv_data *priv = (struct flrig_priv_data *) rig->state.priv; + struct flrig_priv_data *priv = (struct flrig_priv_data *) rig->state.priv; ENTERFUNC; rig_debug(RIG_DEBUG_TRACE, "%s: vfo=%s\n", __func__, @@ -2171,8 +2173,11 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_STRENGTH: cmd = "rig.get_smeter"; break; - case RIG_LEVEL_SWR: cmd = "rig.get_SWR"; break; - //case RIG_LEVEL_SWR: cmd = "rig.get_swrmeter"; break; + case RIG_LEVEL_SWR: + cmd = "rig.get_swrmeter"; + // we'll try get_SWR at least once to see if it works + if (priv->get_SWR) cmd = "rig.get_SWR"; + break; case RIG_LEVEL_RFPOWER: cmd = "rig.get_power"; break; @@ -2188,6 +2193,7 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) if (retval == RIG_ENAVAIL && strcmp(cmd,"rig.get_SWR")==0) { + priv->get_SWR = 0; cmd = "rig.get_swrmeter"; // revert to old flrig method retval = flrig_transaction(rig, cmd, NULL, value, sizeof(value)); } commit 774e60895cb268f6ec1001047f97ff2319881869 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Nov 10 11:55:30 2023 -0600 Use new FLRig get_SWR method if available -- otherwise use old method diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 60dd8b5cf..7d10d4882 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -139,7 +139,7 @@ const struct rig_caps flrig_caps = RIG_MODEL(RIG_MODEL_FLRIG), .model_name = "FLRig", .mfg_name = "FLRig", - .version = "20231108.0", + .version = "20231110.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -2171,7 +2171,8 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_STRENGTH: cmd = "rig.get_smeter"; break; - case RIG_LEVEL_SWR: cmd = "rig.get_swrmeter"; break; + case RIG_LEVEL_SWR: cmd = "rig.get_SWR"; break; + //case RIG_LEVEL_SWR: cmd = "rig.get_swrmeter"; break; case RIG_LEVEL_RFPOWER: cmd = "rig.get_power"; break; @@ -2185,6 +2186,12 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) retval = flrig_transaction(rig, cmd, NULL, value, sizeof(value)); + if (retval == RIG_ENAVAIL && strcmp(cmd,"rig.get_SWR")==0) + { + cmd = "rig.get_swrmeter"; // revert to old flrig method + retval = flrig_transaction(rig, cmd, NULL, value, sizeof(value)); + } + if (retval != RIG_OK) { rig_debug(RIG_DEBUG_ERR, "%s: flrig_transaction failed retval=%s\n", __func__, diff --git a/simulators/simft991.c b/simulators/simft991.c index 0a9066f3c..d2f5b1eb2 100644 --- a/simulators/simft991.c +++ b/simulators/simft991.c @@ -138,8 +138,14 @@ int main(int argc, char *argv[]) if (n <= 0) { perror("RM5"); } } + else if (strcmp(buf,"MR118;") == 0) + { + pbuf = "?;"; + n = write(fd, pbuf, strlen(pbuf)); + if (n <= 0) { perror("MR118"); } + } - if (strcmp(buf, "AN0;") == 0) + else if (strcmp(buf, "AN0;") == 0) { printf("%s\n", buf); hl_usleep(50 * 1000); @@ -161,7 +167,7 @@ int main(int argc, char *argv[]) } else if (strcmp(buf, "FA;") == 0) { - SNPRINTF(buf, sizeof(buf), "FA%08.0f;", freqA); + SNPRINTF(buf, sizeof(buf), "FA%09.0f;", freqA); n = write(fd, buf, strlen(buf)); } else if (strncmp(buf, "FA", 2) == 0) @@ -170,7 +176,7 @@ int main(int argc, char *argv[]) } else if (strcmp(buf, "FB;") == 0) { - SNPRINTF(buf, sizeof(buf), "FB%08.0f;", freqB); + SNPRINTF(buf, sizeof(buf), "FB%09.0f;", freqB); n = write(fd, buf, strlen(buf)); } else if (strncmp(buf, "FB", 2) == 0) commit 5059ec8cd6bc2913ffc8d5f4b84910fed2f97466 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Nov 10 10:55:31 2023 -0600 Add SWR for TS990 https://github.com/Hamlib/Hamlib/issues/1423 diff --git a/rigs/kenwood/ts990s.c b/rigs/kenwood/ts990s.c index ffa724a71..63374cb16 100644 --- a/rigs/kenwood/ts990s.c +++ b/rigs/kenwood/ts990s.c @@ -22,10 +22,12 @@ #include <stdlib.h> #include <string.h> +#include <math.h> #include <hamlib/rig.h> #include "kenwood.h" #include "ts990s.h" +#include "cal.h" #define TS990S_AM_MODES RIG_MODE_AM #define TS990S_FM_MODES (RIG_MODE_FM|RIG_MODE_FMN) @@ -37,7 +39,7 @@ #define TS2000_FUNC_ALL (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_BC|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_ANF|RIG_FUNC_COMP) -#define TS2000_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_VOXDELAY|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_COMP|RIG_LEVEL_AGC|RIG_LEVEL_BKINDL|RIG_LEVEL_METER|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) +#define TS2000_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_VOXDELAY|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_COMP|RIG_LEVEL_AGC|RIG_LEVEL_BKINDL|RIG_LEVEL_METER|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_SWR) #define TS990S_VFO_OP (RIG_OP_BAND_UP|RIG_OP_BAND_DOWN) #define TS990S_SCAN_OP (RIG_SCAN_VFO) @@ -54,6 +56,16 @@ {0x46, 60}}\ } +#define TS990S_SWR_CAL { 5, \ + { \ + { 0, 1.0f }, \ + { 14, 1.5f }, \ + { 28, 2.0f }, \ + { 42, 3.0f }, \ + { 70, 10.0f } \ + } } + + /* memory capabilities */ #define TS990S_MEM_CAP { \ .freq = 1, \ @@ -121,7 +133,7 @@ const struct rig_caps ts990s_caps = RIG_MODEL(RIG_MODEL_TS990S), .model_name = "TS-990S", .mfg_name = "Kenwood", - .version = BACKEND_VER ".5", + .version = BACKEND_VER ".6", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -311,6 +323,7 @@ const struct rig_caps ts990s_caps = }, .str_cal = TS990S_STR_CAL, + .swr_cal = TS990S_SWR_CAL, .priv = (void *)& ts990s_priv_caps, @@ -633,6 +646,19 @@ int ts990s_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->i = lvl / 100; break; + case RIG_LEVEL_SWR: + retval = kenwood_safe_transaction(rig, "RM21", lvlbuf, sizeof(lvlbuf), 7); + + if (retval != RIG_OK) + { + return retval; + } + + sscanf(lvlbuf, "RM2%d", &lvl); + val->f = rig_raw2val_float(lvl, &rig->caps->swr_cal); + val->f = round(val->f*10)/10.0; // 1 decimal place precision + break; + case RIG_LEVEL_METER: retval = kenwood_safe_transaction(rig, "RM", lvlbuf, sizeof(lvlbuf), 7); @@ -715,7 +741,7 @@ int ts990s_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) } } break; - + default: rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_level %s", __func__, rig_strlevel(level)); diff --git a/simulators/simts990.c b/simulators/simts990.c index 462be1824..c4918d52a 100644 --- a/simulators/simts990.c +++ b/simulators/simts990.c @@ -14,6 +14,7 @@ struct ip_mreq #include <fcntl.h> #include <string.h> #include <unistd.h> +#include <errno.h> #include <hamlib/rig.h> #define BUFSIZE 256 @@ -32,22 +33,6 @@ int modeMain = 2; int modeSub = 2; int keyspd = 20; -int -getmyline(int fd, char *buf) -{ - char c; - int i = 0; - memset(buf, 0, BUFSIZE); - - while (read(fd, &c, 1) > 0) - { - buf[i++] = c; - - if (c == ';') { return strlen(buf); } - } - - return strlen(buf); -} #if defined(WIN32) || defined(_WIN32) int openPort(char *comport) // doesn't matter for using pts devices @@ -87,6 +72,30 @@ int openPort(char *comport) // doesn't matter for using pts devices } #endif +int +getmyline(int fd, char *buf) +{ + char c; + int i = 0; + memset(buf, 0, BUFSIZE); + int retval; + + while ((retval=read(fd, &c, 1)) > 0) + { + buf[i++] = c; + + if (c == ';') { return strlen(buf); } + } + if (retval != 0) + { + perror("read failed:"); + close(fd); + fd = openPort(""); + } + + return strlen(buf); +} + int main(int argc, char *argv[]) @@ -99,13 +108,19 @@ int main(int argc, char *argv[]) while (1) { + hl_usleep(10); buf[0] = 0; if (getmyline(fd, buf) > 0) { printf("Cmd:%s\n", buf); } // else { return 0; } - if (strcmp(buf, "RM5;") == 0) + if (strncmp(buf, "RM2", 3) == 0) + { + pbuf = "RM20020;"; + write(fd, pbuf, strlen(pbuf)); + } + else if (strcmp(buf, "RM5;") == 0) { printf("%s\n", buf); hl_usleep(mysleep * 1000); commit 1f9d3a63d42526d2cbd162a08c8d40d498b3c8de Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Nov 9 11:26:56 2023 -0600 Fix PTT status for multicast diff --git a/src/snapshot_data.c b/src/snapshot_data.c index a32ad1ff5..8d61ebe0b 100644 --- a/src/snapshot_data.c +++ b/src/snapshot_data.c @@ -151,7 +151,7 @@ static int snapshot_serialize_vfo(cJSON *vfo_node, RIG *rig, vfo_t vfo) || (split == RIG_SPLIT_ON && vfo != split_vfo); is_tx = (split == RIG_SPLIT_OFF && vfo == rig->state.current_vfo) || (split == RIG_SPLIT_ON && vfo == split_vfo); - ptt = rig->state.cache.ptt; + ptt = rig->state.cache.ptt && is_tx; if (is_tx) { commit 7cb10edf20c4a1be18f0ff2f52c54c1b095d17c7 Merge: 5d7db6b51 59285750e Author: Michael Black <mdb...@ya...> Date: Thu Nov 9 09:33:13 2023 -0600 Merge pull request #1421 from mikaelnousiainen/hamlib-multicast-4 Improve rig poll routine (multicast) commit 59285750ef32dc0ee5deab8634832965372f7b73 Merge: 3a08bbe3d 5d7db6b51 Author: Mikael Nousiainen <mik...@ik...> Date: Thu Nov 9 09:59:35 2023 +0200 Fix conflict commit 3a08bbe3d82b2cbc22ecb5b4af6775cfea2e3c4b Author: Mikael Nousiainen <mik...@ik...> Date: Thu Nov 9 09:53:48 2023 +0200 Detect also VFO changes in poll routine and allow detection of multiple changes at once. Remove old unused code. diff --git a/src/event.c b/src/event.c index 6f70e37af..10ca23ab9 100644 --- a/src/event.c +++ b/src/event.c @@ -69,10 +69,9 @@ void *rig_poll_routine(void *arg) rig_poll_routine_args *args = (rig_poll_routine_args *)arg; RIG *rig = args->rig; struct rig_state *rs = &rig->state; - int result; int update_occurred; - vfo_t vfo = RIG_VFO_NONE, vfo_prev = RIG_VFO_NONE; + vfo_t vfo = RIG_VFO_NONE, tx_vfo = RIG_VFO_NONE; freq_t freq_main_a = 0, freq_main_b = 0, freq_main_c = 0, freq_sub_a = 0, freq_sub_b = 0, freq_sub_c = 0; rmode_t mode_main_a = 0, mode_main_b = 0, mode_main_c = 0, mode_sub_a = 0, mode_sub_b = 0, mode_sub_c = 0; pbwidth_t width_main_a = 0, width_main_b = 0, width_main_c = 0, width_sub_a = 0, width_sub_b = 0, width_sub_c = 0; @@ -95,244 +94,117 @@ void *rig_poll_routine(void *arg) while (rs->poll_routine_thread_run) { + if (rig->state.current_vfo != vfo) + { + vfo = rig->state.current_vfo; + update_occurred = 1; + } + if (rig->state.tx_vfo != tx_vfo) + { + tx_vfo = rig->state.tx_vfo; + update_occurred = 1; + } if (rig->state.cache.freqMainA != freq_main_a) { freq_main_a = rig->state.cache.freqMainA; update_occurred = 1; } - else if (rig->state.cache.freqMainB != freq_main_b) + if (rig->state.cache.freqMainB != freq_main_b) { freq_main_b = rig->state.cache.freqMainB; update_occurred = 1; } - else if (rig->state.cache.freqMainC != freq_main_c) + if (rig->state.cache.freqMainC != freq_main_c) { freq_main_b = rig->state.cache.freqMainC; update_occurred = 1; } - else if (rig->state.cache.freqSubA != freq_sub_a) + if (rig->state.cache.freqSubA != freq_sub_a) { freq_sub_a = rig->state.cache.freqSubA; update_occurred = 1; } - else if (rig->state.cache.freqSubB != freq_sub_b) + if (rig->state.cache.freqSubB != freq_sub_b) { freq_sub_b = rig->state.cache.freqSubB; update_occurred = 1; } - else if (rig->state.cache.freqSubC != freq_sub_c) + if (rig->state.cache.freqSubC != freq_sub_c) { freq_sub_c = rig->state.cache.freqSubC; update_occurred = 1; } - else if (rig->state.cache.ptt != ptt) + if (rig->state.cache.ptt != ptt) { ptt = rig->state.cache.ptt; update_occurred = 1; } - else if (rig->state.cache.split != split) + if (rig->state.cache.split != split) { split = rig->state.cache.split; update_occurred = 1; } - else if (rig->state.cache.modeMainA != mode_main_a) + if (rig->state.cache.modeMainA != mode_main_a) { mode_main_a = rig->state.cache.modeMainA; update_occurred = 1; } - else if (rig->state.cache.modeMainB != mode_main_b) + if (rig->state.cache.modeMainB != mode_main_b) { mode_main_b = rig->state.cache.modeMainB; update_occurred = 1; } - else if (rig->state.cache.modeMainC != mode_main_c) + if (rig->state.cache.modeMainC != mode_main_c) { mode_main_c = rig->state.cache.modeMainC; update_occurred = 1; } - else if (rig->state.cache.modeSubA != mode_sub_a) + if (rig->state.cache.modeSubA != mode_sub_a) { mode_sub_a = rig->state.cache.modeSubA; update_occurred = 1; } - else if (rig->state.cache.modeSubB != mode_sub_b) + if (rig->state.cache.modeSubB != mode_sub_b) { mode_sub_b = rig->state.cache.modeSubB; update_occurred = 1; } - else if (rig->state.cache.modeSubC != mode_sub_c) + if (rig->state.cache.modeSubC != mode_sub_c) { mode_sub_c = rig->state.cache.modeSubC; update_occurred = 1; } - else if (rig->state.cache.widthMainA != width_main_a) + if (rig->state.cache.widthMainA != width_main_a) { width_main_a = rig->state.cache.widthMainA; update_occurred = 1; } - else if (rig->state.cache.widthMainB != width_main_b) + if (rig->state.cache.widthMainB != width_main_b) { width_main_b = rig->state.cache.widthMainB; update_occurred = 1; } - else if (rig->state.cache.widthMainC != width_main_c) + if (rig->state.cache.widthMainC != width_main_c) { width_main_c = rig->state.cache.widthMainC; update_occurred = 1; } - else if (rig->state.cache.widthSubA != width_sub_a) + if (rig->state.cache.widthSubA != width_sub_a) { width_sub_a = rig->state.cache.widthSubA; update_occurred = 1; } - else if (rig->state.cache.widthSubB != width_sub_b) + if (rig->state.cache.widthSubB != width_sub_b) { width_sub_b = rig->state.cache.widthSubB; update_occurred = 1; } - else if (rig->state.cache.widthSubC != width_sub_c) + if (rig->state.cache.widthSubC != width_sub_c) { width_sub_c = rig->state.cache.widthSubC; update_occurred = 1; } -// The original code here actively reads rig state, which can be too intensive and intrusive -#if 0 - if (rig->caps->get_vfo) - { - result = rig_get_vfo(rig, &vfo); - - if (result != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_vfo error %s\n", __FILE__, __LINE__, - rigerror(result)); - } - - if (vfo != vfo_prev) - { - rig_fire_vfo_event(rig, vfo); - } - - if (vfo != vfo_prev) - { - rig_debug(RIG_DEBUG_CACHE, - "%s(%d) vfo=%s was %s\n", __FILE__, __LINE__, - rig_strvfo(vfo), rig_strvfo(vfo_prev)); - update_occurred = 1; - vfo_prev = vfo; - } - } - - if (rig->caps->get_freq) - { - result = rig_get_freq(rig, RIG_VFO_A, &freq_main); - - if (result != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_freqA error %s\n", __FILE__, __LINE__, - rigerror(result)); - } - - result = rig_get_freq(rig, RIG_VFO_B, &freq_sub); - - if (result != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_freqB error %s\n", __FILE__, __LINE__, - rigerror(result)); - } - - if (freq_main != freq_main_prev) - { - rig_fire_freq_event(rig, RIG_VFO_A, freq_main); - } - - if (freq_sub != freq_sub_prev) - { - rig_fire_freq_event(rig, RIG_VFO_B, freq_sub); - } - - if (freq_main != freq_main_prev || freq_sub != freq_sub_prev) - { - rig_debug(RIG_DEBUG_CACHE, - "%s(%d) freq_main=%.0f was %.0f, freq_sub=%.0f was %.0f\n", __FILE__, __LINE__, - freq_main, freq_main_prev, freq_sub, freq_sub_prev); - update_occurred = 1; - freq_main_prev = freq_main; - freq_sub_prev = freq_sub; - } - } - - if (rig->caps->get_mode) - { - result = rig_get_mode(rig, RIG_VFO_A, &mode_main, &width_main); - - if (result != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_modeA error %s\n", __FILE__, __LINE__, - rigerror(result)); - } - - result = rig_get_mode(rig, RIG_VFO_B, &mode_sub, &width_sub); - - if (result != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_modeB error %s\n", __FILE__, __LINE__, - rigerror(result)); - } - - if (mode_main != mode_main_prev || width_main != width_main_prev) - { - rig_fire_mode_event(rig, RIG_VFO_A, mode_main, width_main); - } - - if (mode_sub != mode_sub_prev || width_sub != width_sub_prev) - { - rig_fire_mode_event(rig, RIG_VFO_B, mode_sub, width_sub); - } - - if (mode_main != mode_main_prev || mode_sub != mode_sub_prev) - { - rig_debug(RIG_DEBUG_CACHE, "%s(%d) mode_main=%s was %s, mode_sub=%s was %s\n", - __FILE__, __LINE__, rig_strrmode(mode_main), rig_strrmode(mode_main_prev), - rig_strrmode(mode_sub), rig_strrmode(mode_sub_prev)); - update_occurred = 1; - mode_main_prev = mode_main; - mode_sub_prev = mode_sub; - } - - if (width_main != width_main_prev || width_sub != width_sub_prev) - { - rig_debug(RIG_DEBUG_CACHE, - "%s(%d) width_main=%ld was %ld, width_sub=%ld was %ld\n", __FILE__, __LINE__, - width_main, width_main_prev, width_sub, width_sub_prev); - update_occurred = 1; - width_main_prev = width_main; - width_sub_prev = width_sub; - } - } - - if (rig->caps->get_split_vfo) - { - vfo_t tx_vfo; - result = rig_get_split_vfo(rig, RIG_VFO_A, &split, &tx_vfo); - - if (result != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s(%d): rig_get_modeA error %s\n", __FILE__, __LINE__, - rigerror(result)); - } - - if (split != split_prev) - { - rig_debug(RIG_DEBUG_CACHE, "%s(%d) split=%d was %d\n", __FILE__, __LINE__, - split, - split_prev); - update_occurred = 1; - split_prev = split; - } - } -#endif - if (update_occurred) { network_publish_rig_poll_data(rig); commit 5d7db6b516affc9a4e1c6e6f6cba393bbe49a077 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Nov 8 17:14:10 2023 -0600 Fix FLRig SWR value Change float level print to %g format for better appearance https://github.com/Hamlib/Hamlib/issues/1417 diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 5c0b6fcd8..60dd8b5cf 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -23,6 +23,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> /* String function definitions */ +#include <math.h> #include <hamlib/rig.h> #include <serial.h> @@ -138,7 +139,7 @@ const struct rig_caps flrig_caps = RIG_MODEL(RIG_MODEL_FLRIG), .model_name = "FLRig", .mfg_name = "FLRig", - .version = "20231107.0", + .version = "20231108.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -2111,6 +2112,39 @@ static int flrig_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) RETURNFUNC(RIG_OK); } +typedef struct { + float mtr; + float swr; +} swrpair; + +static swrpair swrtbl[] = { + {0.0, 1.0}, + {10.5, 1.5}, + {23.0, 2.0}, + {35.0, 2.5}, + {48.0, 3.0}, + {100.0, 10.0 } // assuming 10.0 is infinity for FLRig +}; + +// Function to interpolate SWR from MTR +float interpolateSWR(float mtr) { + int i; + for (i = 0; i < sizeof(swrtbl)/sizeof(swrpair) - 1; i++) { + if (mtr == swrtbl[i].mtr) { + // Exact match + return swrtbl[i].swr; + } + if (mtr < swrtbl[i + 1].mtr) { + // Perform linear interpolation + float slope = (swrtbl[i + 1].swr - swrtbl[i].swr) / (swrtbl[i + 1].mtr - swrtbl[i].mtr); + float swr = round((swrtbl[i].swr + slope * (mtr - swrtbl[i].mtr))*10)/10.0; + rig_debug(RIG_DEBUG_VERBOSE,"%s: swr=%f\n", __func__, swr); + return swr; + } + } + // If mtr is not within the range of values in the table, you could choose to return an error or extrapolate + return 10; // Example er +} /* * flrig_get_level * Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL @@ -2161,6 +2195,11 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) // most levels are 0-100 -- may have to allow for different ranges switch (level) { + case RIG_LEVEL_SWR: + { + val->f = interpolateSWR(atoi(value)); + break; + } case RIG_LEVEL_STRENGTH: val->i = atoi(value) - 54; //if (val->i > 0) val->i /= 10; diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 668034b8b..c47a87fe6 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -1952,7 +1952,7 @@ int print_conf_list(const struct confparams *cfp, rig_ptr_t data) cfp->u.n.step); break; case RIG_CONF_NUMERIC: - printf("\tRange: %.1f..%.1f, step %.1f\n", + printf("\tRange: %g..%g, step %.1f\n", cfp->u.n.min, cfp->u.n.max, cfp->u.n.step); @@ -3287,7 +3287,7 @@ declare_proto_rig(set_level) break; case RIG_CONF_NUMERIC: - CHKSCN1ARG(sscanf(arg2, "%f", &val.f)); + CHKSCN1ARG(sscanf(arg2, "%g", &val.f)); break; case RIG_CONF_STRING: @@ -3393,7 +3393,7 @@ declare_proto_rig(get_level) break; case RIG_CONF_NUMERIC: - fprintf(fout, "%f%c", val.f, resp_sep); + fprintf(fout, "%g%c", val.f, resp_sep); break; case RIG_CONF_INT: @@ -3445,7 +3445,7 @@ declare_proto_rig(get_level) if (RIG_LEVEL_IS_FLOAT(level)) { - fprintf(fout, "%f%c", val.f, resp_sep); + fprintf(fout, "%g%c", val.f, resp_sep); } else { @@ -3629,7 +3629,7 @@ declare_proto_rig(set_parm) break; case RIG_CONF_NUMERIC: - CHKSCN1ARG(sscanf(arg2, "%f", &val.f)); + CHKSCN1ARG(sscanf(arg2, "%g", &val.f)); break; case RIG_CONF_STRING: @@ -3747,7 +3747,7 @@ declare_proto_rig(get_parm) break; case RIG_CONF_NUMERIC: - fprintf(fout, "%f%c", val.f, resp_sep); + fprintf(fout, "%g%c", val.f, resp_sep); break; case RIG_CONF_STRING: @@ -4442,7 +4442,7 @@ int dump_chan(FILE *fout, RIG *rig, channel_t *chan) break; case RIG_CONF_NUMERIC: - SNPRINTF(lstr, sizeof(lstr), "%f", chan->ext_levels[idx].val.f); + SNPRINTF(lstr, sizeof(lstr), "%g", chan->ext_levels[idx].val.f); break; case RIG_CONF_CHECKBUTTON: commit f1a9823bddf2dd93e781bbc6fe9ef0a46335a639 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Nov 8 08:05:56 2023 -0600 Move swr from rig_cache to priv value until we get rig_cache fixed to be expandable https://github.com/Hamlib/Hamlib/issues/1419 diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index bc16a1f0c..590e91e67 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2478,6 +2478,7 @@ typedef enum { * \brief Rig cache data * * This struct contains all the items we cache at the highest level + * DO NOT MODIFY THIS STRUCTURE AT ALL -- we need a new cache that is a pointer rather than a structure */ struct rig_cache { int timeout_ms; // the cache timeout for invalidating itself @@ -2551,7 +2552,6 @@ struct rig_cache { struct timespec time_ptt; struct timespec time_split; int satmode; // if rig is in satellite mode - double swr; // keep swr }; /** diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index 3a6b1d113..0510ceac8 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -94,7 +94,8 @@ static struct kenwood_priv_caps powersdr_priv_caps = { .cmdtrm = EOM_KEN, .mode_table = powersdr_mode_table, - .if_len = 37 + .if_len = 37, + .swr = 0 }; #define DSP_BW_NUM 8 @@ -839,16 +840,17 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_SWR: { + struct kenwood_priv_caps *priv = kenwood_caps(rig); ptt_t ptt = 0; rig_get_ptt(rig, RIG_VFO_CURR, &ptt); - if (ptt == RIG_PTT_OFF) { val->f = rig->state.cache.swr; return RIG_OK;} + if (ptt == RIG_PTT_OFF) { val->f = priv->swr; return RIG_OK;} cmd = "ZZRM8"; // get SWR len = 5; ans = 8; retval = kenwood_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf)); - if (retval != RIG_OK) { val->f = rig->state.cache.swr; return RIG_OK;}; - sscanf(lvlbuf,"ZZRM8%lg", &rig->state.cache.swr); - val->f = rig->state.cache.swr; + if (retval != RIG_OK) { val->f = priv->swr; return RIG_OK;}; + sscanf(lvlbuf,"ZZRM8%lg", &priv->swr); + val->f = priv->swr; rig_debug(RIG_DEBUG_ERR, "%s(%d) swr=%.1f\n", __func__, __LINE__, val->f); return RIG_OK; } diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index c455685ff..cfb5df20b 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -135,6 +135,7 @@ struct kenwood_priv_caps struct kenwood_filter_width *filter_width; /* Last entry should have value == -1 and width_hz == -1 */ struct kenwood_slope_filter *slope_filter_high; /* Last entry should have value == -1 and frequency_hz == -1 */ struct kenwood_slope_filter *slope_filter_low; /* Last entry should have value == -1 and frequency_hz == -1 */ + double swr; }; struct kenwood_priv_data commit 62341a657efcce90af1f897861b20572d0e3f4a9 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Nov 7 16:05:27 2023 -0600 Only allow SWR read when ptt is on for PowerSDR https://github.com/Hamlib/Hamlib/issues/1417 diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index 1ff71288e..3a6b1d113 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -839,6 +839,9 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_SWR: { + ptt_t ptt = 0; + rig_get_ptt(rig, RIG_VFO_CURR, &ptt); + if (ptt == RIG_PTT_OFF) { val->f = rig->state.cache.swr; return RIG_OK;} cmd = "ZZRM8"; // get SWR len = 5; ans = 8; commit 02b4da83c3c34330ca796942f7e0698fb0a86464 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Nov 7 16:00:31 2023 -0600 Fix PowerSDR swr reading -- then we can fix FLRig's read too https://github.com/Hamlib/Hamlib/issues/1417 diff --git a/rigs/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c index 98699b212..1ff71288e 100644 --- a/rigs/kenwood/flex6xxx.c +++ b/rigs/kenwood/flex6xxx.c @@ -839,24 +839,14 @@ int powersdr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_SWR: { - // if not PTT we'll return the last SWR value - // seems desirable to able to see this always - ptt_t ptt; - rig_get_ptt(rig, RIG_VFO_TX, &ptt); - if (!ptt) { val->f = rig->state.cache.swr; return RIG_OK; } - double forward=0, reverse=0; - cmd = "ZZRM5"; // get forward power + cmd = "ZZRM8"; // get SWR len = 5; - ans = 4; - retval = kenwood_safe_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf), len + ans); - if (retval != RIG_OK) { val->f = 0; return RIG_OK;}; - sscanf(lvlbuf,"ZZRM5%lg", &forward); - if (forward == 0) { val->f = 1.0; return RIG_OK;} - cmd = "ZZRM7"; - retval = kenwood_safe_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf), len + ans); - if (retval != RIG_OK) { val->f = 0; return RIG_OK;}; - sscanf(lvlbuf,"ZZRM7%lg", &reverse); - rig->state.cache.swr = val->f = (1.0 + sqrt(reverse/forward)) / (1.0 - sqrt(reverse/forward)); + ans = 8; + retval = kenwood_transaction(rig, cmd, lvlbuf, sizeof(lvlbuf)); + if (retval != RIG_OK) { val->f = rig->state.cache.swr; return RIG_OK;}; + sscanf(lvlbuf,"ZZRM8%lg", &rig->state.cache.swr); + val->f = rig->state.cache.swr; + rig_debug(RIG_DEBUG_ERR, "%s(%d) swr=%.1f\n", __func__, __LINE__, val->f); return RIG_OK; } @@ -1350,7 +1340,7 @@ const struct rig_caps powersdr_caps = RIG_MODEL(RIG_MODEL_POWERSDR), .model_name = "PowerSDR/Thetis", .mfg_name = "FlexRadio/ANAN", - .version = "20231104.0", + .version = "20231107.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, commit a5bac081908255fe71dc06d934ef418821b50364 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Nov 7 12:32:47 2023 -0600 Add SWR to flrig diff --git a/rigs/dummy/flrig.c b/rigs/dummy/flrig.c index 8e649a3ef..5c0b6fcd8 100644 --- a/rigs/dummy/flrig.c +++ b/rigs/dummy/flrig.c @@ -51,7 +51,7 @@ RIG_MODE_FM | RIG_MODE_WFM | RIG_MODE_FMN | RIG_MODE_PKTFM |\ RIG_MODE_C4FM) -#define FLRIG_LEVELS (RIG_LEVEL_AF | RIG_LEVEL_RF | RIG_LEVEL_MICGAIN | RIG_LEVEL_STRENGTH | RIG_LEVEL_RFPOWER_METER | RIG_LEVEL_RFPOWER_METER_WATTS | RIG_LEVEL_RFPOWER) +#define FLRIG_LEVELS (RIG_LEVEL_AF | RIG_LEVEL_RF | RIG_LEVEL_MICGAIN | RIG_LEVEL_STRENGTH | RIG_LEVEL_RFPOWER_METER | RIG_LEVEL_RFPOWER_METER_WATTS | RIG_LEVEL_RFPOWER | RIG_LEVEL_SWR) #define FLRIG_PARM (TOK_FLRIG_VERIFY_FREQ|TOK_FLRIG_VERIFY_PTT) @@ -138,7 +138,7 @@ const struct rig_caps flrig_caps = RIG_MODEL(RIG_MODEL_FLRIG), .model_name = "FLRig", .mfg_name = "FLRig", - .version = "20231010.0", + .version = "20231107.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -2137,6 +2137,8 @@ static int flrig_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) case RIG_LEVEL_STRENGTH: cmd = "rig.get_smeter"; break; + case RIG_LEVEL_SWR: cmd = "rig.get_swrmeter"; break; + case RIG_LEVEL_RFPOWER: cmd = "rig.get_power"; break; case RIG_LEVEL_RFPOWER_METER_WATTS: commit 7c3e71a487fd600591d299794fa2c3c28e79147a Merge: 4aa8e010a 162a68588 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Nov 7 07:55:10 2023 -0600 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit 162a685887d9cdd18dc17f557edbb117694b38f5 Merge: 45dca3be5 afdb26093 Author: Michael Black <mdb...@ya...> Date: Tue Nov 7 07:54:55 2023 -0600 Merge pull request #1416 from mikaelnousiainen/hamlib-multicast-3 List all available VFOs in multicast state snapshot packets commit afdb26093e6fe0eeafabcbad6b48859f928b7e47 Author: Mikael Nousiainen <mik...@ik...> Date: Tue Nov 7 09:55:30 2023 +0200 List all available VFOs in multicast state snapshot packets diff --git a/src/snapshot_data.c b/src/snapshot_data.c index 8d99af7e9..a32ad1ff5 100644 --- a/src/snapshot_data.c +++ b/src/snapshot_data.c @@ -10,8 +10,6 @@ #include "cJSON.h" -#define MAX_VFO_COUNT 4 - #define SPECTRUM_MODE_FIXED "FIXED" #define SPECTRUM_MODE_CENTER "CENTER" @@ -87,7 +85,6 @@ static int snapshot_serialize_rig(cJSON *rig_node, RIG *rig) } cJSON_AddItemToObject(rig_node, "modes", modes_array); - //RETURNFUNC2(RIG_OK); return RIG_OK; error: @@ -157,9 +154,13 @@ static int snapshot_serialize_vfo(cJSON *vfo_node, RIG *rig, vfo_t vfo) ptt = rig->state.cache.ptt; if (is_tx) - node = cJSON_AddBoolToObject(vfo_node, "ptt", ptt == RIG_PTT_OFF ? 0 : 1); - else - node = cJSON_AddBoolToObject(vfo_node, "ptt", 0); + { + node = cJSON_AddBoolToObject(vfo_node, "ptt", ptt == RIG_PTT_OFF ? 0 : 1); + } + else + { + node = cJSON_AddBoolToObject(vfo_node, "ptt", 0); + } if (node == NULL) { @@ -181,7 +182,6 @@ static int snapshot_serialize_vfo(cJSON *vfo_node, RIG *rig, vfo_t vfo) goto error; } - //RETURNFUNC2(RIG_OK); return RIG_OK; error: @@ -309,7 +309,6 @@ static int snapshot_serialize_spectrum(cJSON *spectrum_node, RIG *rig, goto error; } - //RETURNFUNC2(RIG_OK); return RIG_OK; error: @@ -329,15 +328,9 @@ int snapshot_serialize(size_t buffer_length, char *buffer, RIG *rig, cJSON *node; cJSON_bool bool_result; char buf[256]; - - int vfo_count = 2; - vfo_t vfos[MAX_VFO_COUNT]; int result; int i; - vfos[0] = RIG_VFO_A; - vfos[1] = RIG_VFO_B; - root_node = cJSON_CreateObject(); if (root_node == NULL) @@ -408,10 +401,16 @@ int snapshot_serialize(size_t buffer_length, char *buffer, RIG *rig, goto error; } - for (i = 0; i < vfo_count; i++) + for (i = 0; i < HAMLIB_MAX_VFOS; i++) { + vfo_t vfo = rig->state.vfo_list & RIG_VFO_N(i); + if (!vfo) + { + continue; + } + vfo_node = cJSON_CreateObject(); - result = snapshot_serialize_vfo(vfo_node, rig, vfos[i]); + result = snapshot_serialize_vfo(vfo_node, rig, vfo); if (result != RIG_OK) { @@ -459,7 +458,6 @@ int snapshot_serialize(size_t buffer_length, char *buffer, RIG *rig, rig->state.snapshot_packet_sequence_number++; - //RETURNFUNC2(RIG_OK); return RIG_OK; error: commit 4aa8e010a1653574bbf582fe9b102cb2464bff01 Merge: 49e93f309 45dca3be5 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Nov 5 22:38:55 2023 -0600 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit 45dca3be598c028f08e6db1edb0a7e78525c2fe2 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Nov 5 17:34:49 2023 -0600 Add dumpcap include files to test/Makefile.am diff --git a/tests/Makefile.am b/tests/Makefile.am index b2ec16650..11831e511 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -19,8 +19,8 @@ bin_PROGRAMS = rigctl rigctld rigmem rigsmtr rigswr rotctl rotctld rigctlcom rig #check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid testsecurity check_PROGRAMS = dumpmem testrig testrigopen testrigcaps testtrn testbcd testfreq listrigs testloc rig_bench testcache cachetest cachetest2 testcookie testgrid hamlibmodels testmW2power -RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h rig_tests.c rig_tests.h -ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h +RIGCOMMONSRC = rigctl_parse.c rigctl_parse.h dumpcaps.c dumpstate.c uthash.h rig_tests.c rig_tests.h dumpcaps.h +ROTCOMMONSRC = rotctl_parse.c rotctl_parse.h dumpcaps_rot.c uthash.h dumpcaps_rot.h AMPCOMMONSRC = ampctl_parse.c ampctl_parse.h dumpcaps_amp.c uthash.h rigctl_SOURCES = rigctl.c $(RIGCOMMONSRC) commit 49e93f3090f0dd32a2fbf752ab43d5872e58e52b Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Nov 5 17:16:09 2023 -0600 Comment out lines on compile warning diff --git a/src/event.c b/src/event.c index 6f70e37af..12feca650 100644 --- a/src/event.c +++ b/src/event.c @@ -69,10 +69,10 @@ void *rig_poll_routine(void *arg) rig_poll_routine_args *args = (rig_poll_routine_args *)arg; RIG *rig = args->rig; struct rig_state *rs = &rig->state; - int result; + //int result; int update_occurred; - vfo_t vfo = RIG_VFO_NONE, vfo_prev = RIG_VFO_NONE; + //vfo_t vfo = RIG_VFO_NONE, vfo_prev = RIG_VFO_NONE; freq_t freq_main_a = 0, freq_main_b = 0, freq_main_c = 0, freq_sub_a = 0, freq_sub_b = 0, freq_sub_c = 0; rmode_t mode_main_a = 0, mode_main_b = 0, mode_main_c = 0, mode_sub_a = 0, mode_sub_b = 0, mode_sub_c = 0; pbwidth_t width_main_a = 0, width_main_b = 0, width_main_c = 0, width_sub_a = 0, width_sub_b = 0, width_sub_c = 0; commit 02ffc6d6dcaa34100e2b7ff93e7713999505c45c Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Nov 5 17:03:21 2023 -0600 More set_conf/get_conf work https://github.com/Hamlib/Hamlib/issues/971 diff --git a/src/network.c b/src/network.c index c4754cbd1..a68329149 100644 --- a/src/network.c +++ b/src/network.c @@ -999,15 +999,19 @@ void *multicast_receiver(void *arg) __LINE__); int optval = 1; +#ifdef __MINGW32__ + if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (PCHAR)&optval, sizeof(optval)) < 0) +#else if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) +#endif { rig_debug(RIG_DEBUG_ERR, "%s: error enabling UDP address reuse: %s\n", __func__, strerror(errno)); return NULL; } -#if defined(SO_REUSEPORT) // Windows does not have SO_REUSEPORT. However, SO_REUSEADDR works in a similar way. +#if defined(SO_REUSEPORT) if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)) < 0) { rig_debug(RIG_DEBUG_ERR, "%s: error enabling UDP port reuse: %s\n", __func__, @@ -1038,7 +1042,11 @@ void *multicast_receiver(void *arg) mreq.imr_multiaddr.s_addr = inet_addr(args->multicast_addr); mreq.imr_interface.s_addr = htonl(INADDR_ANY); +#ifdef __MINGW32__ + if (setsockopt(socket_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (PCHAR)&mreq, sizeof(mreq)) < 0) +#else if (setsockopt(socket_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) +#endif { rig_debug(RIG_DEBUG_ERR, "%s: error joining multicast group %s:%d: %s\n", __func__, args->multicast_addr, args->multicast_port, strerror(err... [truncated message content] |