コード例 #1
0
/*
 * Execute
 */
static int
configure_exec(transaction *tr)
{
	tr_ctx_t *tr_ctx = &tr->tr_ctx;
	arms_context_t *res = arms_get_context();
	struct configure_args *arg = tr_ctx->arg;
	arms_config_cb_t config_cb;
	int err = 0;

	if (arg->already_running) {
		return 0;
	}

	config_cb = res->callbacks.config_cb;

	libarms_log(ARMS_LOG_IPROTO_CONFIG_COMMIT,
	    "Execute configure commit");
	if (arg->errs) {
		arg->commit_err = 1;
		/* XXX DO NEED IMPLEMENT DISCARD callback? */
#if 0
		config_cb(arg->cur_mod_id, "" NULL,
			  ARMS_PUSH_DISCARD_CONFIG, NULL, 0, NULL);
#endif
		return 0;
	}

	err = config_cb(arg->cur_mod_id, "", "",
			ARMS_PUSH_EXEC_STORED_CONFIG, NULL, 0, 0,
			res->udata);
	if (err == ARMS_EMODSYNC) {
		arg->commit_err = 0;
		arg->syncing = 1;
		return 0;
	} else if (err != 0) {
		/* execute failure, rollback immediately */
		err = configure_rollback(tr);
		/*
		 * exec success     --> rollbacked=0,commit_err=0,err=0
		 * rollback success --> rollbacked=1,commit_err=0,err=0
		 * rollback failed  --> rollbacked=1,commit_err=1,err=!0
		 */
		if (err != 0) {
			arg->commit_err = 1;
			return err;
		}
	}
	arg->commit_err = 0;
	
	return 0;
}
コード例 #2
0
/*
 * Rollback
 */
static int
configure_rollback(transaction *tr)
{
	tr_ctx_t *tr_ctx = &tr->tr_ctx;
	arms_context_t *res = arms_get_context();
	struct configure_args *arg = tr_ctx->arg;
	arms_config_cb_t config_cb;
	int err;

	if (tr->rollbacked) {
		/* already rollbacked. */
		return -1;
	}
	libarms_log(ARMS_LOG_IPROTO_CONFIG_ROLLBACK,
	    "Execute configure rollback");

	config_cb = res->callbacks.config_cb;

	arg->commit_err = 0;
	tr->rollbacked = 1;
	err = config_cb(arg->cur_mod_id, "", "",
		  ARMS_PUSH_REVERT_CONFIG, NULL, 0, 0, res->udata);

	libarms_log(ARMS_LOG_DEBUG, "WAITING FOR ROLLBACK ESTABLISHED");
	/* clear send buffer */
	tr->len = 0;

	return err;
}
コード例 #3
0
static void
button_cb(void *data)
{
   toolbutton_t       *b = data;

   if (b && b->prog)
     {
	if (*(b->prog) == '<')
	  {
	     if (BEGMATCH(b->prog, ACT_EXIT))
	       {
		  close_cb(NULL);
		  return;
	       }
	     else if (BEGMATCH(b->prog, ACT_CONFIG))
	       {
		  config_cb(NULL);
		  return;
	       }
	     else if (BEGMATCH(b->prog, ACT_SHADE))
	       {
		  shade_cb(NULL);
		  return;
	       }
	  }
	Epplet_spawn_command(b->prog);
     }
}
コード例 #4
0
int
main(int argc, char **argv)
{
   int                 j = 0, c = 0;

   prog_name = argv[0];
   atexit(Epplet_cleanup);

   for (j = 1; j < argc; j++)
     {
	if ((!strcmp("-w", argv[j])) && (argc - j > 1))
	  {
	     w = atoi(argv[++j]);
	  }
	else if ((!strcmp("-h", argv[j])) && (argc - j > 1))
	  {
	     h = atoi(argv[++j]);
	  }
	else if (!strcmp("-c", argv[j]))
	  {
	     c = 1;
	  }
     }

   Epplet_Init("E-Toolbox", "0.1", "Enlightenment Toolbox Epplet", w, h, argc,
	       argv, 0);
   Epplet_load_config();
   parse_config();

   for (j = 0; j < (int)button_cnt; j++)
     {
	create_gadget(j);
     }

   Epplet_register_delete_event_handler(delete_cb, NULL);
   create_shade_window();
   Epplet_show();

   if (c)
     {
	config_cb(NULL);
     }
   Epplet_Loop();

   return 0;
}
コード例 #5
0
ファイル: RawRideFile.cpp プロジェクト: ejchet/GoldenCheetah
static void
pt_read_raw(FILE *in, void *context,
            void (*config_cb)(unsigned interval, double rec_int_secs,
                              unsigned wheel_sz_mm, void *context),
            void (*time_cb)(struct tm *time, time_t since_epoch, void *context),
            void (*data_cb)(double secs, double nm, double mph, double watts,
                            double miles, double alt, unsigned cad, unsigned hr,
                            unsigned interval, void *context),
            void (*error_cb)(const char *msg, void *context))
{
    unsigned interval = 0;
    unsigned last_interval = 0;
    unsigned wheel_sz_mm = 0;
    double rec_int_secs = 0.0;
    int i, n, row = 0;
    unsigned char buf[6];
    unsigned sbuf[6];
    double meters = 0.0;
    double secs = 0.0, start_secs = 0.0;
    double miles;
    double mph;
    double nm;
    double watts;
    double alt = 0;
    unsigned cad;
    unsigned hr;
    struct tm time;
    time_t since_epoch;
    char ebuf[256];
    bool bIsVer81 = false;

    while ((n = fscanf(in, "%x %x %x %x %x %x\n",
            sbuf, sbuf+1, sbuf+2, sbuf+3, sbuf+4, sbuf+5)) == 6) {
        ++row;
        for (i = 0; i < 6; ++i) {
            if (sbuf[i] > 0xff) { n = 1; break; }
            buf[i] = sbuf[i];
        }
        if (row == 1)
        {
            /* Serial number? */
            bIsVer81 = PowerTapUtil::is_Ver81(buf);
        }
        else if (PowerTapUtil::is_ignore_record(buf, bIsVer81)) {
            // do nothing
        }
        else if (PowerTapUtil::is_config(buf, bIsVer81)) {
            double new_rec_int_secs = 0.0;
            if (PowerTapUtil::unpack_config(buf, &interval, &last_interval,
                                        &new_rec_int_secs, &wheel_sz_mm, bIsVer81) < 0) {
                sprintf(ebuf, "Couldn't unpack config record.");
                if (error_cb) error_cb(ebuf, context);
                return;
            }
            if ((rec_int_secs != 0.0) && (rec_int_secs != new_rec_int_secs)) {
                sprintf(ebuf, "Ride has multiple recording intervals, which "
                        "is not yet supported.<br>(Recording interval changes "
                        "from %0.2f to %0.2f after %0.2f minutes of ride data.)\n",
                        rec_int_secs, new_rec_int_secs, secs / 60.0);
                if (error_cb) error_cb(ebuf, context);
                return;
            }
            rec_int_secs = new_rec_int_secs;
            if (config_cb) config_cb(interval, rec_int_secs, wheel_sz_mm, context);
        }
        else if (PowerTapUtil::is_time(buf, bIsVer81)) {
            since_epoch = PowerTapUtil::unpack_time(buf, &time, bIsVer81);
            bool ignore = false;
            if (start_secs == 0.0)
                start_secs = since_epoch;
            else if (since_epoch - start_secs > secs)
                secs = since_epoch - start_secs;
            else {
                sprintf(ebuf, "Warning: %0.3f minutes into the ride, "
                        "time jumps backwards by %0.3f minutes; ignoring it.",
                        secs / 60.0, (secs - since_epoch + start_secs) / 60.0);
                if (error_cb) error_cb(ebuf, context);
                ignore = true;
            }
            if (time_cb && !ignore) time_cb(&time, since_epoch, context);
        }
        else if (PowerTapUtil::is_data(buf, bIsVer81)) {
            if (wheel_sz_mm == 0) {
                sprintf(ebuf, "Read data row before wheel size set.");
                if (error_cb) error_cb(ebuf, context);
                return;
            }
            PowerTapUtil::unpack_data(buf, rec_int_secs, wheel_sz_mm, &secs,
                                      &nm, &mph, &watts, &meters, &cad, &hr, bIsVer81);
            miles = meters / 1000.0 * MILES_PER_KM;
            if (data_cb)
                data_cb(secs, nm, mph, watts, miles, alt, cad,
                        hr, interval, context);
        }
        else {
            sprintf(ebuf, "Unknown record type 0x%x on row %d.", buf[0], row);
            if (error_cb) error_cb(ebuf, context);
            return;
        }
    }
    if (n != -1) {
        sprintf(ebuf, "Parse error on row %d.", row);
        if (error_cb) error_cb(ebuf, context);
        return;
    }
}