예제 #1
0
void test_cancel_cb() {
    int   disable;
    int   ferr;
    short tleid1;
    short tleid2;

    if (verbose)
        printf("cancel-cb-test\n");
    ferr = timer_start_cb(4, 4, 4, &tleid1, &cbcan);
    assert(ferr == XZFIL_ERR_OK);
    ferr = timer_cancel(tleid1);
    assert(ferr == XZFIL_ERR_OK);
    disable = msg_test_assert_disable();
    ferr = timer_cancel(tleid1);
    assert(ferr == XZFIL_ERR_NOTFOUND);
    msg_test_assert_enable(disable);
    ferr = timer_start_cb(1, 1, 1, &tleid1, &cbcan);
    assert(ferr == XZFIL_ERR_OK);
    usleep(4000);
    ferr = timer_cancel(tleid1);
    assert(ferr == XZFIL_ERR_OK);
    ferr = timer_start_cb(1, 1, 1, &tleid1, &cbcan);
    assert(ferr == XZFIL_ERR_OK);
    ferr = timer_start_cb(1, 1, 1, &tleid2, &cbcan);
    assert(ferr == XZFIL_ERR_OK);
    usleep(4000);
    ferr = timer_cancel(tleid2);
    assert(ferr == XZFIL_ERR_OK);
    ferr = timer_cancel(tleid1);
    assert(ferr == XZFIL_ERR_OK);
    ferr = timer_start_cb(214800, 4, 4, &tleid1, &cbcan); // test CR 6539
    assert(ferr == XZFIL_ERR_OK);
    ferr = timer_cancel(tleid1);
    assert(ferr == XZFIL_ERR_OK);
}
예제 #2
0
void test_timers_cb() {
    int             ferr;
    int             status;
    struct timeval  t_elapsed;
    struct timeval  t_start1;
    struct timeval  t_start2;
    struct timeval  t_stop;
    short           tleid1;
    short           tleid2;
    long            to_act;
    long            to_exp;

    if (verbose)
        printf("timer-cb-test\n");

    // check timers
    util_time_timer_start(&t_start1);
    ferr = timer_start_cb(40, 2, 2, &tleid1, &cb1);
    assert(ferr == XZFIL_ERR_OK);
    usleep(30000);
    util_time_timer_start(&t_start2);
    ferr = timer_start_cb(40, 4, 4, &tleid2, &cb2);
    assert(ferr == XZFIL_ERR_OK);

    status = cv1.wait(true);
    TEST_CHK_STATUSOK(status);
    if (verbose)
        printf("cv1 wait done\n");
    util_time_timer_stop(&t_stop);
    util_time_elapsed(&t_start1, &t_stop, &t_elapsed);
    to_act = t_elapsed.tv_sec * 1000000 + t_elapsed.tv_usec;
    to_exp = t1.sre_tleTOVal * 10000;
    if (verbose || (to_act < to_exp))
        printf("tleid=%d, exp-to=%ld, act-to=%ld\n",
               t1.sre_tleId, to_exp, to_act);
    assert(to_act >= to_exp);
    if (to_tol > 0)
        assert(to_act <= (to_exp + to_tol));

    status = cv2.wait(true);
    TEST_CHK_STATUSOK(status);
    if (verbose)
        printf("cv2 wait done\n");
    util_time_timer_stop(&t_stop);
    util_time_elapsed(&t_start2, &t_stop, &t_elapsed);
    to_act = t_elapsed.tv_sec * 1000000 + t_elapsed.tv_usec;
    to_exp = t2.sre_tleTOVal * 10000;
    if (verbose || (to_act < to_exp))
        printf("tleid=%d, exp-to=%ld, act-to=%ld\n",
               t2.sre_tleId, to_exp, to_act);
    assert(to_act >= to_exp);
    if (to_tol > 0)
        assert(to_act <= (to_exp + to_tol));
}
예제 #3
0
int sh_speed(int argc, char ** argv) {
	uint16_t timeout = 0;
	int left;
	int right;
	int ok;


	if (argc < 3) {
		cprintf("correct usage:\r\n");
		cprintf("\t%c [o] LEFT RIGHT <TIMEOUT>\r\n", argv[0]);
		return -1;
	}

	if (argc > 3) {
		timeout = read_uint16(argv[3], &ok);
		timer_start_cb(timer_id, timeout, 1);
	}

	left = read_int16(argv[1], &ok);
	right = read_int16(argv[2], &ok);
	cprintf("%d %d\r\n",left, right);

//	speed_start(speed_l);
//	speed_start(speed_r);

	speed_setPoint(speed_l, left);
	speed_setPoint(speed_r, right);

	return 0;
}
예제 #4
0
//
// Timer callback
//
void timer_callback(int tleid, int toval, short parm1, long parm2) {
    int   ferr;

    if (gv_verbose)
        printf("timer_callback \n");
    reset_time_counter();
    ferr = timer_start_cb(gv_time_refresh_delay, 0, 0, &gv_tleid, &timer_callback);
    assert(ferr == XZFIL_ERR_OK);
}
예제 #5
0
//
// server main
//
int main(int pv_argc, char *pa_argv[]) {
    bool     lv_done;
    int      lv_ferr;
    int      lv_lerr;
    BMS_SRE  lv_sre;

    CALL_COMP_DOVERS(idtmsrv, pv_argc, pa_argv);

    do_init(pv_argc, pa_argv);

    lv_ferr = msg_mon_process_startup(true); // system messages
    assert(lv_ferr == XZFIL_ERR_OK);
    msg_mon_enable_mon_messages(true);
    lv_ferr = msg_mon_get_my_process_name(ga_name, sizeof(ga_name));
    assert(lv_ferr == XZFIL_ERR_OK);

    do_shm();
    lv_ferr = timer_start_cb(gv_time_refresh_delay, 0, 0, &gv_tleid, &timer_callback);
    assert(lv_ferr == XZFIL_ERR_OK);

    lv_done = false;
    while (!lv_done) {
        do {
            lv_lerr = XWAIT(LREQ, -1);
            lv_lerr = BMSG_LISTEN_((short *) &lv_sre, // sre
                                   0,                 // listenopts
                                   0);                // listenertag
        } while (lv_lerr == XSRETYPE_NOWORK);
        if (lv_sre.sre_flags & XSRE_MON) {
            do_mon_msg(&lv_sre, &lv_done);
        } else {
            do_req(&lv_sre);
        }
    }

    if (gv_verbose)
        printf("server %s shutting down\n", ga_name);
    lv_ferr = msg_mon_process_shutdown();
    assert(lv_ferr == XZFIL_ERR_OK);

    return 0;
}
예제 #6
0
void sh_roam_init(uint16_t period_ms) {
	roam_timer_id = timer_add_cb(roam_cb, NULL);
	timer_start_cb(roam_timer_id, period_ms, 0);
}
예제 #7
0
void sh_speed_arrow_left() {
	speed_setPoint(speed_l, 60);
	speed_setPoint(speed_r, 60);

	timer_start_cb(timer_id, 200, 1);
}
예제 #8
0
void sh_speed_arrow_right() {
	speed_setPoint(speed_l, -60);
	speed_setPoint(speed_r, -60);

	timer_start_cb(timer_id, 200, 1);
}
예제 #9
0
void sh_speed_arrow_down() {
	speed_setPoint(speed_l, -100);
	speed_setPoint(speed_r, 100);

	timer_start_cb(timer_id, 200, 1);
}