From: <fi...@us...> - 2010-05-26 21:09:58
|
Revision: 2923 http://hamlib.svn.sourceforge.net/hamlib/?rev=2923&view=rev Author: fillods Date: 2010-05-26 20:09:31 +0000 (Wed, 26 May 2010) Log Message: ----------- only trigger set_pos thread handler on demand Modified Paths: -------------- trunk/ars/ars.c trunk/ars/ars.h Modified: trunk/ars/ars.c =================================================================== --- trunk/ars/ars.c 2010-05-26 19:08:11 UTC (rev 2922) +++ trunk/ars/ars.c 2010-05-26 20:09:31 UTC (rev 2923) @@ -192,11 +192,6 @@ pthread_attr_t attr; int retcode; - /* make handle_set_position() quiet at startup */ - retcode = ars_get_position(rot, &priv->target_az, &priv->target_el); - if (retcode != RIG_OK) - return retcode; - pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); @@ -236,6 +231,10 @@ rig_debug(RIG_DEBUG_TRACE, "%s called, brake was %s\n", __func__, priv->brake_off ? "OFF" : "ON"); +#ifdef HAVE_PTHREAD + priv->set_pos_active = 0; +#endif + par_lock (pport); priv->brake_off = 0; @@ -392,29 +391,19 @@ { ROT *rot = (ROT*) arg; struct ars_priv_data *priv = (struct ars_priv_data *)rot->state.priv; - azimuth_t curr_az; - elevation_t curr_el; int retcode; while (1) { - retcode = ars_get_position(rot, &curr_az, &curr_el); - if (retcode != RIG_OK) { - rig_debug(RIG_DEBUG_WARN, "%s: ars_get_position() failed: %s\n", - __func__, rigerror(retcode)); - usleep(1000*1000); - continue; - } - - if (angle_in_range(curr_az, priv->target_az, AZ_RANGE) && - (!ars_has_el(rot) || angle_in_range(curr_el, priv->target_el, EL_RANGE))) + if (!priv->set_pos_active) { - /* polling period */ + /* TODO: replace polling period by cond var */ usleep(100*1000); continue; } retcode = ars_set_position_sync(rot, priv->target_az, priv->target_el); + priv->set_pos_active = 0; if (retcode != RIG_OK) { rig_debug(RIG_DEBUG_WARN, "%s: ars_set_position_sync() failed: %s\n", __func__, rigerror(retcode)); @@ -529,6 +518,7 @@ /* will be picked by handle_set_position() next polling tick */ priv->target_az = az; priv->target_el = el; + priv->set_pos_active = 1; return RIG_OK; #else Modified: trunk/ars/ars.h =================================================================== --- trunk/ars/ars.h 2010-05-26 19:08:11 UTC (rev 2922) +++ trunk/ars/ars.h 2010-05-26 20:09:31 UTC (rev 2923) @@ -32,6 +32,7 @@ unsigned char pp_data; #ifdef HAVE_PTHREAD pthread_t thread; + int set_pos_active; azimuth_t target_az; elevation_t target_el; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |