diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 8dc4a3dff..949ed1d32 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -9119,6 +9119,8 @@ int icom_mW2power(RIG *rig, float *power, unsigned int mwpower, freq_t freq, RETURNFUNC(RIG_OK); } + +#if defined(HAVE_PTHREAD) static int icom_parse_spectrum_frame(RIG *rig, size_t length, const unsigned char *frame_data) { @@ -9256,13 +9258,16 @@ static int icom_parse_spectrum_frame(RIG *rig, size_t length, .spectrum_data = cache->spectrum_data, }; +#if defined(HAVE_PTHREAD) rig_fire_spectrum_event(rig, &spectrum_line); +#endif cache->spectrum_metadata_valid = 0; } RETURNFUNC(RIG_OK); } +#endif int icom_is_async_frame(RIG *rig, size_t frame_length, const unsigned char *frame) @@ -9303,7 +9308,9 @@ int icom_process_async_frame(RIG *rig, size_t frame_length, // TODO: Disable cache timeout for frequency after first transceive packet once we figure out how to get active VFO reliably with transceive updates // TODO: rig_set_cache_timeout_ms(rig, HAMLIB_CACHE_FREQ, HAMLIB_CACHE_ALWAYS); freq_t freq = (freq_t) from_bcd(frame + 5, (priv->civ_731_mode ? 4 : 5) * 2); +#if defined(HAVE_PTHREAD) rig_fire_freq_event(rig, RIG_VFO_CURR, freq); +#endif #if 0 @@ -9323,7 +9330,9 @@ int icom_process_async_frame(RIG *rig, size_t frame_length, // TODO: Disable cache timeout for frequency after first transceive packet once we figure out how to get active VFO reliably with transceive updates // TODO: rig_set_cache_timeout_ms(rig, HAMLIB_CACHE_MODE, HAMLIB_CACHE_ALWAYS); icom2rig_mode(rig, frame[5], frame[6], &mode, &width); +#if defined(HAVE_PTHREAD) rig_fire_mode_event(rig, RIG_VFO_CURR, mode, width); +#endif if (rs->use_cached_mode != 1) { @@ -9334,6 +9343,8 @@ int icom_process_async_frame(RIG *rig, size_t frame_length, break; +#if defined(HAVE_PTHREAD) + case C_CTL_SCP: if (frame[5] == S_SCP_DAT) { @@ -9341,6 +9352,7 @@ int icom_process_async_frame(RIG *rig, size_t frame_length, } break; +#endif default: rig_debug(RIG_DEBUG_VERBOSE, "%s: transceive cmd unsupported %#2.2x\n", diff --git a/src/event.c b/src/event.c index 2a833fc4a..342186db9 100644 --- a/src/event.c +++ b/src/event.c @@ -608,6 +608,7 @@ int HAMLIB_API rig_get_trn(RIG *rig, int *trn) RETURNFUNC(-RIG_EDEPRECATED); } +#if defined(HAVE_PTHREAD) int rig_fire_freq_event(RIG *rig, vfo_t vfo, freq_t freq) { ENTERFUNC; @@ -634,8 +635,9 @@ int rig_fire_freq_event(RIG *rig, vfo_t vfo, freq_t freq) RETURNFUNC(0); } +#endif - +#if defined(HAVE_PTHREAD) int rig_fire_mode_event(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { ENTERFUNC; @@ -661,8 +663,10 @@ int rig_fire_mode_event(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) RETURNFUNC(0); } +#endif +#if defined(HAVE_PTHREAD) int rig_fire_vfo_event(RIG *rig, vfo_t vfo) { ENTERFUNC; @@ -681,8 +685,10 @@ int rig_fire_vfo_event(RIG *rig, vfo_t vfo) RETURNFUNC(0); } +#endif +#if defined(HAVE_PTHREAD) int rig_fire_ptt_event(RIG *rig, vfo_t vfo, ptt_t ptt) { ENTERFUNC; @@ -702,8 +708,10 @@ int rig_fire_ptt_event(RIG *rig, vfo_t vfo, ptt_t ptt) RETURNFUNC(0); } +#endif +#if defined(HAVE_PTHREAD) int rig_fire_dcd_event(RIG *rig, vfo_t vfo, dcd_t dcd) { ENTERFUNC; @@ -720,8 +728,10 @@ int rig_fire_dcd_event(RIG *rig, vfo_t vfo, dcd_t dcd) RETURNFUNC(0); } +#endif +#if defined(HAVE_PTHREAD) int rig_fire_pltune_event(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode, pbwidth_t *width) { @@ -739,8 +749,10 @@ int rig_fire_pltune_event(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode, RETURNFUNC(RIG_OK); } +#endif +#if defined(HAVE_PTHREAD) static int print_spectrum_line(char *str, size_t length, struct rig_spectrum_line *line) { @@ -798,8 +810,10 @@ static int print_spectrum_line(char *str, size_t length, return c; } +#endif +#if defined(HAVE_PTHREAD) int rig_fire_spectrum_event(RIG *rig, struct rig_spectrum_line *line) { ENTERFUNC; @@ -821,5 +835,6 @@ int rig_fire_spectrum_event(RIG *rig, struct rig_spectrum_line *line) RETURNFUNC(RIG_OK); } +#endif /** @} */ diff --git a/src/rig.c b/src/rig.c index 3f4d10168..ce6a185ba 100644 --- a/src/rig.c +++ b/src/rig.c @@ -60,7 +60,7 @@ #include #include #include -#ifdef HAVE_PTHREAD +#if defined(HAVE_PTHREAD) #include #endif @@ -225,7 +225,7 @@ static const char *const rigerror_table[] = #define ERROR_TBL_SZ (sizeof(rigerror_table)/sizeof(char *)) -#ifdef HAVE_PTHREAD +#if defined(HAVE_PTHREAD) typedef struct async_data_handler_args_s { RIG *rig; @@ -242,6 +242,7 @@ static int async_data_handler_stop(RIG *rig); void *async_data_handler(void *arg); #endif +#if defined(HAVE_PTHREAD) typedef struct morse_data_handler_args_s { RIG *rig; @@ -259,6 +260,7 @@ static int morse_data_handler_start(RIG *rig); static int morse_data_handler_stop(RIG *rig); int morse_data_handler_set_keyspd(RIG *rig, int keyspd); void *morse_data_handler(void *arg); +#endif /* * track which rig is opened (with rig_open) @@ -574,7 +576,7 @@ RIG *HAMLIB_API rig_init(rig_model_t rig_model) * TODO: read the Preferences here! */ rs = &rig->state; -#ifdef HAVE_PTHREAD +#if defined(HAVE_PTHREAD) pthread_mutex_init(&rs->mutex_set_transaction, NULL); #endif @@ -1323,6 +1325,7 @@ int HAMLIB_API rig_open(RIG *rig) RETURNFUNC2(status); } +#if defined(HAVE_PTHREAD) status = async_data_handler_start(rig); if (status < 0) @@ -1332,6 +1335,8 @@ int HAMLIB_API rig_open(RIG *rig) RETURNFUNC2(status); } +#endif + rs->comm_state = 1; rig_debug(RIG_DEBUG_VERBOSE, "%s: %p rs->comm_state==1?=%d\n", __func__, &rs->comm_state, @@ -1382,8 +1387,10 @@ int HAMLIB_API rig_open(RIG *rig) if (status != RIG_OK) { remove_opened_rig(rig); +#if defined(HAVE_PTHREAD) async_data_handler_stop(rig); morse_data_handler_stop(rig); +#endif port_close(&rs->rigport, rs->rigport.type.rig); memcpy(&rs->rigport_deprecated, &rs->rigport, sizeof(hamlib_port_t_deprecated)); rs->comm_state = 0; @@ -1437,6 +1444,7 @@ int HAMLIB_API rig_open(RIG *rig) } } +#if defined(HAVE_PTHREAD) status = morse_data_handler_start(rig); if (status < 0) @@ -1447,6 +1455,8 @@ int HAMLIB_API rig_open(RIG *rig) RETURNFUNC2(status); } +#endif + if (rs->auto_disable_screensaver) { // try to turn off the screensaver if possible @@ -1501,6 +1511,7 @@ int HAMLIB_API rig_open(RIG *rig) memcpy(&rs->dcdport_deprecated, &rs->dcdport, sizeof(hamlib_port_t_deprecated)); rig_flush_force(&rs->rigport, 1); +#if defined(HAVE_PTHREAD) enum multicast_item_e items = RIG_MULTICAST_POLL | RIG_MULTICAST_TRANSCEIVE | RIG_MULTICAST_SPECTRUM; retval = network_multicast_publisher_start(rig, rs->multicast_data_addr, @@ -1534,6 +1545,8 @@ int HAMLIB_API rig_open(RIG *rig) // we will consider this non-fatal for now } +#endif + rig->state.comm_status = RIG_COMM_STATUS_OK; add_opened_rig(rig); @@ -1581,11 +1594,13 @@ int HAMLIB_API rig_close(RIG *rig) rig->state.comm_status = RIG_COMM_STATUS_DISCONNECTED; +#if defined(HAVE_PTHREAD) morse_data_handler_stop(rig); async_data_handler_stop(rig); rig_poll_routine_stop(rig); network_multicast_receiver_stop(rig); network_multicast_publisher_stop(rig); +#endif /* * Let the backend say 73s to the rig. @@ -7885,11 +7900,13 @@ int HAMLIB_API rig_cookie(RIG *rig, enum cookie_e cookie_cmd, char *cookie, return ret; } +#if defined(HAVE_PTHREAD) static pthread_mutex_t initializer = PTHREAD_MUTEX_INITIALIZER; +#endif HAMLIB_EXPORT(void) sync_callback(int lock) { -#ifdef HAVE_PTHREAD +#if defined(HAVE_PTHREAD) pthread_mutex_t client_lock = initializer; if (lock) @@ -7908,7 +7925,7 @@ HAMLIB_EXPORT(void) sync_callback(int lock) void rig_lock(RIG *rig, int lock) { -#ifdef HAVE_PTHREAD +#if defined(HAVE_PTHREAD) if (rig->state.multicast == NULL) { return; } // not initialized yet @@ -7936,10 +7953,10 @@ void rig_lock(RIG *rig, int lock) /*! @} */ -#ifdef HAVE_PTHREAD #define MAX_FRAME_LENGTH 1024 +#if defined(HAVE_PTHREAD) static int async_data_handler_start(RIG *rig) { struct rig_state *rs = &rig->state; @@ -7957,8 +7974,6 @@ static int async_data_handler_start(RIG *rig) sleep(2); // give other things a chance to finish opening up the rig -#ifdef HAVE_PTHREAD - rs->async_data_handler_thread_run = 1; rs->async_data_handler_priv_data = calloc(1, sizeof(async_data_handler_priv_data)); @@ -7981,11 +7996,11 @@ static int async_data_handler_start(RIG *rig) RETURNFUNC(-RIG_EINTERNAL); } -#endif // HAVE_PTHREAD - RETURNFUNC(RIG_OK); } +#endif +#if defined(HAVE_PTHREAD) static int morse_data_handler_start(RIG *rig) { struct rig_state *rs = &rig->state; @@ -8023,8 +8038,10 @@ static int morse_data_handler_start(RIG *rig) RETURNFUNC(RIG_OK); } +#endif +#if defined(HAVE_PTHREAD) static int async_data_handler_stop(RIG *rig) { struct rig_state *rs = &rig->state; @@ -8032,7 +8049,6 @@ static int async_data_handler_stop(RIG *rig) ENTERFUNC; -#ifdef HAVE_PTHREAD rs->async_data_handler_thread_run = 0; async_data_handler_priv = (async_data_handler_priv_data *) @@ -8061,11 +8077,12 @@ static int async_data_handler_stop(RIG *rig) rs->async_data_handler_priv_data = NULL; } -#endif RETURNFUNC(RIG_OK); } +#endif +#if defined(HAVE_PTHREAD) static int morse_data_handler_stop(RIG *rig) { struct rig_state *rs = &rig->state; @@ -8119,8 +8136,9 @@ static int morse_data_handler_stop(RIG *rig) RETURNFUNC(RIG_OK); } +#endif - +#if defined(HAVE_PTHREAD) void *async_data_handler(void *arg) { struct async_data_handler_args_s *args = (struct async_data_handler_args_s *) @@ -8207,6 +8225,7 @@ void *async_data_handler(void *arg) } #endif +#if defined(HAVE_PTHREAD) void *morse_data_handler(void *arg) { struct morse_data_handler_args_s *args = @@ -8343,6 +8362,7 @@ void *morse_data_handler(void *arg) pthread_exit(NULL); return NULL; } +#endif HAMLIB_EXPORT(int) rig_password(RIG *rig, const char *key1) @@ -8514,6 +8534,7 @@ HAMLIB_EXPORT(int) rig_is_model(RIG *rig, rig_model_t model) } +#if defined(HAVE_PTHREAD) int morse_data_handler_set_keyspd(RIG *rig, int keyspd) { struct rig_state *rs = &rig->state; @@ -8523,3 +8544,4 @@ int morse_data_handler_set_keyspd(RIG *rig, int keyspd) rig_debug(RIG_DEBUG_VERBOSE, "%s: keyspd=%d\n", __func__, keyspd); return RIG_OK; } +#endif diff --git a/src/settings.c b/src/settings.c index 57e9af282..efa6f1677 100644 --- a/src/settings.c +++ b/src/settings.c @@ -94,12 +94,16 @@ int HAMLIB_API rig_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) || vfo == RIG_VFO_CURR || vfo == rig->state.current_vfo) { +#if defined(HAVE_PTHREAD) + if (level == RIG_LEVEL_KEYSPD) { extern int morse_data_handler_set_keyspd(RIG * rig, int keyspd); morse_data_handler_set_keyspd(rig, val.i); } +#endif + return caps->set_level(rig, vfo, level, val); } diff --git a/tests/rigctld.c b/tests/rigctld.c index 7d6d3e196..6787a23ce 100644 --- a/tests/rigctld.c +++ b/tests/rigctld.c @@ -1378,7 +1378,12 @@ void *handle_socket(void *arg) } while (!ctrl_c && (retcode == RIG_OK || RIG_IS_SOFT_ERRCODE(-retcode))); +#if defined(HAVE_PTHREAD) + if (rigctld_idle && client_count == 1) +#else + if (rigctld_idle) +#endif { rig_close(my_rig); diff --git a/tests/rigctltcp.c b/tests/rigctltcp.c index 51beb5433..207de3a19 100644 --- a/tests/rigctltcp.c +++ b/tests/rigctltcp.c @@ -1416,7 +1416,12 @@ void *handle_socket(void *arg) client_done: +#if defined(HAVE_PTHREAD) + if (rigctld_idle && client_count == 1) +#else + if (rigctld_idle) +#endif { rig_close(my_rig);