Beispiel #1
0
int
mc_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
{
	struct mc_softc *sc = ifp->if_softc;
	struct ifaddr *ifa = (struct ifaddr *)data;
	int s, err = 0;

	s = splnet();

	switch (cmd) {
	case SIOCSIFADDR:
		ifp->if_flags |= IFF_UP;
		if (!(ifp->if_flags & IFF_RUNNING))
			mc_init(sc);
#ifdef INET
		if (ifa->ifa_addr->sa_family == AF_INET)
			arp_ifinit(&sc->sc_arpcom, ifa);
#endif
		break;

	case SIOCSIFFLAGS:
		if ((ifp->if_flags & IFF_UP) == 0 &&
		    (ifp->if_flags & IFF_RUNNING) != 0) {
			/*
			 * If interface is marked down and it is running,
			 * then stop it.
			 */
			mc_stop(sc);
		} else if ((ifp->if_flags & IFF_UP) != 0 &&
		    (ifp->if_flags & IFF_RUNNING) == 0) {
			/*
			 * If interface is marked up and it is stopped,
			 * then start it.
			 */
			mc_init(sc);
		} else {
			/*
			 * reset the interface to pick up any other changes
			 * in flags
			 */
			mc_reset(sc);
			mc_start(ifp);
		}
		break;

	default:
		err = ether_ioctl(ifp, &sc->sc_arpcom, cmd, data);
	}

	if (err == ENETRESET) {
		if (ifp->if_flags & IFF_RUNNING)
			mc_reset(sc);
		err = 0;
	}

	splx(s);
	return (err);
}
static void qc_key_pressed(void* data, int key, int modifier)
{
    KeyboardConnect* connect = (KeyboardConnect*)data;
    long elapsedTime;
    MediaControlMode mode = mc_get_mode(connect->control);
    int i;

    if (mode == MENU_MODE)
    {
        switch (key)
        {
            case 'q':
                mc_stop(connect->control);
                break;
            case XK_space:
                mc_pause(connect->control);
                break;
            case 'o':
                mc_next_osd_screen(connect->control);
                break;
            case XK_Up:
                mc_previous_menu_item(connect->control);
                break;
            case XK_Down:
                mc_next_menu_item(connect->control);
                break;
            case XK_Return:
                mc_select_menu_item_extra(connect->control);
                break;
            case XK_Left:
                mc_select_menu_item_left(connect->control);
                break;
            case XK_Right:
                mc_select_menu_item_right(connect->control);
                break;
            case XK_Page_Up:
                for (i = 0; i < 10; i++)
                {
                    mc_previous_menu_item(connect->control);
                }
                break;
            case XK_Page_Down:
                for (i = 0; i < 10; i++)
                {
                    mc_next_menu_item(connect->control);
                }
                break;
            case XK_Delete:
                mc_select_menu_item_center(connect->control);
                break;

            default:
                break;
        }
    }
    else
    {
        switch (key)
        {
            case 'j':
                if (!connect->reverse)
                {
                    connect->reverse = 1;
                    connect->speedIndex = 0;
                }
                else
                {
                    connect->speedIndex = (connect->speedIndex < NUM_SPEEDS - 1) ?
                        (connect->speedIndex + 1) : connect->speedIndex;
                }
                mc_play_speed(connect->control, g_reverseKeyboardSpeed[connect->speedIndex], FRAME_PLAY_UNIT);
                break;
            case 'l':
                if (connect->reverse)
                {
                    connect->reverse = 0;
                    connect->speedIndex = 0;
                }
                else
                {
                    connect->speedIndex = (connect->speedIndex < NUM_SPEEDS - 1) ?
                        (connect->speedIndex + 1) : connect->speedIndex;
                }
                mc_play_speed(connect->control, g_keyboardSpeed[connect->speedIndex], FRAME_PLAY_UNIT);
                break;
            case 'k':
                connect->speedIndex = -1;
                connect->reverse = 0;
                mc_pause(connect->control);
                break;
            case 'i':
                mc_toggle_lock(connect->control);
                break;
            case 'q':
                mc_stop(connect->control);
                break;
            case XK_space:
                connect->speedIndex = -1;
                connect->reverse = 0;
                mc_toggle_play_pause(connect->control);
                break;
            case XK_Right:
                mc_step(connect->control, 1, FRAME_PLAY_UNIT);
                break;
            case XK_Left:
                mc_step(connect->control, 0, FRAME_PLAY_UNIT);
                break;
            case XK_Up:
                /* 10 frames speed up forwards */
                mc_play_speed(connect->control, 10, FRAME_PLAY_UNIT);
                break;
            case XK_Down:
                /* 10 frames speed up backwards */
                mc_play_speed(connect->control, -10, FRAME_PLAY_UNIT);
                break;
            case XK_Page_Up:
                /* step 1 minute backwards */
                mc_seek(connect->control, -1500, SEEK_CUR, FRAME_PLAY_UNIT);
                break;
            case XK_Page_Down:
                /* step 1 minute forwards */
                mc_seek(connect->control, 1500, SEEK_CUR, FRAME_PLAY_UNIT);
                break;
            case 'm':
                mc_mark(connect->control, M0_MARK_TYPE, 1);
                break;
            case 'c':
                /* clear mark except for PSE failures, VTR errors and digibeta dropouts */
                mc_clear_mark(connect->control,
                    ALL_MARK_TYPE & ~VTR_ERROR_MARK_TYPE & ~PSE_FAILURE_MARK_TYPE & ~DIGIBETA_DROPOUT_MARK_TYPE);
                break;
            case 'b':
                /* clear all marks except for PSE failures, VTR errors and digibeta dropouts */
                mc_clear_all_marks(connect->control,
                    ALL_MARK_TYPE & ~VTR_ERROR_MARK_TYPE & ~PSE_FAILURE_MARK_TYPE & ~DIGIBETA_DROPOUT_MARK_TYPE);
                break;
            case ',':
                mc_seek_prev_mark(connect->control);
                break;
            case '.':
                mc_seek_next_mark(connect->control);
                break;
            case '/':
                mc_seek_clip_mark(connect->control);
                break;
            case XK_Home:
                mc_seek(connect->control, 0, SEEK_SET, FRAME_PLAY_UNIT);
                break;
            case XK_End:
                mc_seek(connect->control, 0, SEEK_END, FRAME_PLAY_UNIT);
                break;
            case 'o':
                mc_next_osd_screen(connect->control);
                break;
            case 't':
                mc_next_osd_timecode(connect->control);
                break;
            case '0':
                mc_switch_video(connect->control, 0);
                break;
            case '1':
                mc_switch_video(connect->control, 1);
                break;
            case '2':
                mc_switch_video(connect->control, 2);
                break;
            case '3':
                mc_switch_video(connect->control, 3);
                break;
            case '4':
                mc_switch_video(connect->control, 4);
                break;
            case '5':
                mc_switch_video(connect->control, 5);
                break;
            case '6':
                mc_switch_video(connect->control, 6);
                break;
            case '7':
                mc_switch_video(connect->control, 7);
                break;
            case '8':
                mc_switch_video(connect->control, 8);
                break;
            case '9':
                mc_switch_video(connect->control, 9);
                break;
            case 'a':
                mc_review_start(connect->control, connect->reviewDuration * 25);
                break;
            case 'z':
                mc_review_end(connect->control, connect->reviewDuration * 25);
                break;
            case 'x':
                mc_review(connect->control, connect->reviewDuration * 25);
                break;
            case 's':
                mc_set_half_split_orientation(connect->control, -1 /* toggle */);
                break;
            case 'd':
                mc_set_half_split_type(connect->control, -1 /* toggle */);
                break;
            case 'f':
                mc_show_half_split(connect->control, -1 /* toggle */);
                break;
            case 'g':
                elapsedTime = get_elapsed_time(&connect->halfSplitMovePressedTime);
                if (elapsedTime < 100000)
                {
                    connect->halfSplitSpeed = (connect->halfSplitSpeed > HALF_SPLIT_MOVE_MAX_SPEED) ?
                        HALF_SPLIT_MOVE_MAX_SPEED : connect->halfSplitSpeed + 1;
                }
                else
                {
                    connect->halfSplitSpeed = 0;
                }
                mc_move_half_split(connect->control, 0 /* left or down */, connect->halfSplitSpeed);
                break;
            case 'h':
                elapsedTime = get_elapsed_time(&connect->halfSplitMovePressedTime);
                if (elapsedTime < 100000)
                {
                    connect->halfSplitSpeed = (connect->halfSplitSpeed > HALF_SPLIT_MOVE_MAX_SPEED) ?
                        HALF_SPLIT_MOVE_MAX_SPEED : connect->halfSplitSpeed + 1;
                }
                else
                {
                    connect->halfSplitSpeed = 0;
                }
                mc_move_half_split(connect->control, 1 /* right or up */, connect->halfSplitSpeed);
                break;

            case '\'':
                mc_toggle_show_source_name(connect->control);
                break;

            default:
                break;
        }
    }
}
static void default_key_pressed(void* data, int key, int modifier)
{
    KeyboardConnect* connect = (KeyboardConnect*)data;
    long elapsedTime;
    MediaControlMode mode = mc_get_mode(connect->control);

    switch (key)
    {
        case 'j':
            if (!connect->reverse)
            {
                connect->reverse = 1;
                connect->speedIndex = 0;
            }
            else
            {
                connect->speedIndex = (connect->speedIndex < NUM_SPEEDS - 1) ?
                    (connect->speedIndex + 1) : connect->speedIndex;
            }
            mc_play_speed(connect->control, g_reverseKeyboardSpeed[connect->speedIndex], FRAME_PLAY_UNIT);
            break;
        case 'l':
            if (connect->reverse)
            {
                connect->reverse = 0;
                connect->speedIndex = 0;
            }
            else
            {
                connect->speedIndex = (connect->speedIndex < NUM_SPEEDS - 1) ?
                    (connect->speedIndex + 1) : connect->speedIndex;
            }
            mc_play_speed(connect->control, g_keyboardSpeed[connect->speedIndex], FRAME_PLAY_UNIT);
            break;
        case 'k':
            connect->speedIndex = -1;
            connect->reverse = 0;
            mc_pause(connect->control);
            break;
        case 'i':
            mc_toggle_lock(connect->control);
            break;
        case 'q':
            mc_stop(connect->control);
            break;
        case XK_space:
            connect->speedIndex = -1;
            connect->reverse = 0;
            mc_toggle_play_pause(connect->control);
            break;
        case XK_Right:
            if (mode == MENU_MODE)
            {
                mc_select_menu_item_right(connect->control);
            }
            else
            {
                mc_step(connect->control, 1, FRAME_PLAY_UNIT);
            }
            break;
        case XK_Left:
            if (mode == MENU_MODE)
            {
                mc_select_menu_item_left(connect->control);
            }
            else
            {
                mc_step(connect->control, 0, FRAME_PLAY_UNIT);
            }
            break;
        case XK_Up:
            if (mode == MENU_MODE)
            {
                mc_previous_menu_item(connect->control);
            }
            else
            {
                /* 10 frames speed up forwards */
                mc_play_speed(connect->control, 10, FRAME_PLAY_UNIT);
            }
            break;
        case XK_Down:
            if (mode == MENU_MODE)
            {
                mc_next_menu_item(connect->control);
            }
            else
            {
                /* 10 frames speed up backwards */
                mc_play_speed(connect->control, -10, FRAME_PLAY_UNIT);
            }
            break;
        case XK_Page_Up:
            /* step 1 minute backwards */
            mc_seek(connect->control, -1500, SEEK_CUR, FRAME_PLAY_UNIT);
            break;
        case XK_Page_Down:
            /* step 1 minute forwards */
            mc_seek(connect->control, 1500, SEEK_CUR, FRAME_PLAY_UNIT);
            break;
        case 'm':
            mc_mark(connect->control, M0_MARK_TYPE, 1);
            break;
        case 'c':
            mc_clear_mark(connect->control, ALL_MARK_TYPE);
            break;
        case 'b':
            mc_clear_all_marks(connect->control, ALL_MARK_TYPE);
            break;
        case ',':
            mc_seek_prev_mark(connect->control);
            break;
        case '.':
            mc_seek_next_mark(connect->control);
            break;
        case '/':
            mc_seek_clip_mark(connect->control);
            break;
        case XK_Home:
            mc_seek(connect->control, 0, SEEK_SET, FRAME_PLAY_UNIT);
            break;
        case XK_End:
            mc_seek(connect->control, 0, SEEK_END, FRAME_PLAY_UNIT);
            break;
        case 'o':
            mc_next_osd_screen(connect->control);
            break;
        case 't':
            mc_next_osd_timecode(connect->control);
            break;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            mc_switch_video(connect->control, key - '0');
            break;
        case 'e':
            mc_switch_prev_audio_group(connect->control);
            break;
        case 'p':
            mc_snap_audio_to_video(connect->control);
            break;
        case 'r':
            mc_switch_next_audio_group(connect->control);
            break;
        case 'a':
            mc_review_start(connect->control, connect->reviewDuration * 25);
            break;
        case 'z':
            mc_review_end(connect->control, connect->reviewDuration * 25);
            break;
        case 'x':
            mc_review(connect->control, connect->reviewDuration * 25);
            break;
        case 's':
            mc_set_half_split_orientation(connect->control, -1 /* toggle */);
            break;
        case 'd':
            mc_set_half_split_type(connect->control, -1 /* toggle */);
            break;
        case 'f':
            mc_show_half_split(connect->control, -1 /* toggle */);
            break;
        case 'g':
            elapsedTime = get_elapsed_time(&connect->halfSplitMovePressedTime);
            if (elapsedTime < 100000)
            {
                connect->halfSplitSpeed = (connect->halfSplitSpeed > HALF_SPLIT_MOVE_MAX_SPEED) ?
                    HALF_SPLIT_MOVE_MAX_SPEED : connect->halfSplitSpeed + 1;
            }
            else
            {
                connect->halfSplitSpeed = 0;
            }
            mc_move_half_split(connect->control, 0 /* left or down */, connect->halfSplitSpeed);
            break;
        case 'h':
            elapsedTime = get_elapsed_time(&connect->halfSplitMovePressedTime);
            if (elapsedTime < 100000)
            {
                connect->halfSplitSpeed = (connect->halfSplitSpeed > HALF_SPLIT_MOVE_MAX_SPEED) ?
                    HALF_SPLIT_MOVE_MAX_SPEED : connect->halfSplitSpeed + 1;
            }
            else
            {
                connect->halfSplitSpeed = 0;
            }
            mc_move_half_split(connect->control, 1 /* right or up */, connect->halfSplitSpeed);
            break;
        case 'v':
            mc_mute_audio(connect->control, -1 /* toggle */);
            break;
        case XK_Return:
            if (mode == MENU_MODE)
            {
                mc_select_menu_item_extra(connect->control);
            }
            break;

        case XK_Delete:
            if (mode == MENU_MODE)
            {
                mc_select_menu_item_center(connect->control);
            }
            break;

        case '-':
            mc_toggle_show_source_name(connect->control);
            break;

        case XK_KP_Add:
            mc_toggle_show_audio_level(connect->control);
            break;

        default:
            break;
    }
}
Beispiel #4
0
static void http_player_control(struct shttpd_arg* arg)
{
    HTTPAccess* access = (HTTPAccess*)arg->user_data;
    const char* requestURI;
    char queryValue[64];
    int64_t offset = 0;
    int whence = SEEK_SET;
    int speed = 1;
    PlayUnit unit = FRAME_PLAY_UNIT;
    int forward = 1;
    int queryOk;
    int queryValueCount;
    int pause = 0;
    float factor;
    int64_t duration;
    int toggle = 1;
    int markType = 0;
    int64_t position = 0;
    unsigned int markTypeMask = 0;
    int vtrErrorLevel = 0;
    int selection = 0;


    requestURI = shttpd_get_env(arg, "REQUEST_URI");

    if (strcmp("/player/control/play", requestURI) == 0)
    {
        mc_play(access->control);
    }
    else if (strcmp("/player/control/stop", requestURI) == 0)
    {
        mc_stop(access->control);
    }
    else if (strcmp("/player/control/pause", requestURI) == 0)
    {
        mc_pause(access->control);
    }
    else if (strcmp("/player/control/toggle-play-pause", requestURI) == 0)
    {
        mc_toggle_play_pause(access->control);
    }
    else if (strcmp("/player/control/seek", requestURI) == 0)
    {
        queryOk = 1;
        queryValueCount = 0;

        if (get_query_value(arg, "offset", queryValue, sizeof(queryValue)))
        {
            if (!parse_int64(queryValue, &offset))
            {
                queryOk = 0;
            }
            else
            {
                queryValueCount++;
            }
        }
        if (get_query_value(arg, "whence", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            if (strcmp("SEEK_SET", queryValue) == 0)
            {
                whence = SEEK_SET;
            }
            else if (strcmp("SEEK_CUR", queryValue) == 0)
            {
                whence = SEEK_CUR;
            }
            else if (strcmp("SEEK_END", queryValue) == 0)
            {
                whence = SEEK_END;
            }
            else
            {
                queryOk = 0;
            }
        }
        if (get_query_value(arg, "unit", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            if (strcmp("FRAME_PLAY_UNIT", queryValue) == 0)
            {
                unit = FRAME_PLAY_UNIT;
            }
            else if (strcmp("PERCENTAGE_PLAY_UNIT", queryValue) == 0)
            {
                unit = PERCENTAGE_PLAY_UNIT;
            }
            else
            {
                queryOk = 0;
            }
        }
        if (get_query_value(arg, "pause", queryValue, sizeof(queryValue)))
        {
            if (strcmp("true", queryValue) == 0)
            {
                pause = 1;
            }
        }

        if (queryOk && queryValueCount == 3)
        {
            if (pause)
            {
                mc_pause(access->control);
            }
            mc_seek(access->control, offset, whence, unit);
        }
    }
    else if (strcmp("/player/control/play-speed", requestURI) == 0)
    {
        queryOk = 1;
        queryValueCount = 0;

        if (get_query_value(arg, "speed", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            if ((speed = atoi(queryValue)) == 0)
            {
                queryOk = 0;
            }
        }
        if (get_query_value(arg, "unit", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            if (strcmp("FRAME_PLAY_UNIT", queryValue) == 0)
            {
                unit = FRAME_PLAY_UNIT;
            }
            else if (strcmp("PERCENTAGE_PLAY_UNIT", queryValue) == 0)
            {
                unit = PERCENTAGE_PLAY_UNIT;
            }
            else
            {
                queryOk = 0;
            }
        }

        if (queryOk && queryValueCount == 2)
        {
            mc_play_speed(access->control, speed, unit);
        }
    }
    else if (strcmp("/player/control/play-speed-factor", requestURI) == 0)
    {
        queryOk = 1;
        queryValueCount = 0;
        factor = 0.0;

        if (get_query_value(arg, "factor", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            factor = (float)(atof(queryValue));
            if (factor == 0.0)
            {
                queryOk = 0;
            }
        }

        if (queryOk && queryValueCount == 1)
        {
            mc_play_speed_factor(access->control, factor);
        }
    }
    else if (strcmp("/player/control/step", requestURI) == 0)
    {
        queryOk = 1;
        queryValueCount = 0;

        if (get_query_value(arg, "forward", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            if (strcmp("true", queryValue) == 0)
            {
                forward = 1;
            }
            else if (strcmp("false", queryValue) == 0)
            {
                forward = 0;
            }
            else
            {
                queryOk = 0;
            }
        }
        if (get_query_value(arg, "unit", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            if (strcmp("FRAME_PLAY_UNIT", queryValue) == 0)
            {
                unit = FRAME_PLAY_UNIT;
            }
            else if (strcmp("PERCENTAGE_PLAY_UNIT", queryValue) == 0)
            {
                unit = PERCENTAGE_PLAY_UNIT;
            }
            else
            {
                queryOk = 0;
            }
        }

        if (queryOk && queryValueCount == 2)
        {
            mc_step(access->control, forward, unit);
        }
    }
    else if (strcmp("/player/control/home", requestURI) == 0)
    {
        if (get_query_value(arg, "pause", queryValue, sizeof(queryValue)))
        {
            if (strcmp("true", queryValue) == 0)
            {
                mc_pause(access->control);
            }
        }
        mc_seek(access->control, 0, SEEK_SET, FRAME_PLAY_UNIT);
    }
    else if (strcmp("/player/control/end", requestURI) == 0)
    {
        if (get_query_value(arg, "pause", queryValue, sizeof(queryValue)))
        {
            if (strcmp("true", queryValue) == 0)
            {
                mc_pause(access->control);
            }
        }
        mc_seek(access->control, 0, SEEK_END, FRAME_PLAY_UNIT);
    }
    else if (strcmp("/player/control/prev-mark", requestURI) == 0)
    {
        mc_seek_prev_mark(access->control);
    }
    else if (strcmp("/player/control/next-mark", requestURI) == 0)
    {
        mc_seek_next_mark(access->control);
    }
    else if (strcmp("/player/control/clip-mark", requestURI) == 0)
    {
        mc_seek_clip_mark(access->control);
    }
    else if (strcmp("/player/control/mark-position", requestURI) == 0)
    {
        queryOk = 1;
        queryValueCount = 0;

        if (get_query_value(arg, "position", queryValue, sizeof(queryValue)))
        {
            if (!parse_int64(queryValue, &position) ||
                    position < 0)
            {
                queryOk = 0;
            }
            else
            {
                queryValueCount++;
            }
        }
        if (get_query_value(arg, "type", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            markType = atoi(queryValue);
        }
        if (get_query_value(arg, "toggle", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            if (strcmp("true", queryValue) == 0)
            {
                toggle = 1;
            }
            else if (strcmp("false", queryValue) == 0)
            {
                toggle = 0;
            }
            else
            {
                queryOk = 0;
            }
        }

        if (queryOk && queryValueCount == 3)
        {
            mc_mark_position(access->control, position, markType, toggle);
        }
    }
    else if (strcmp("/player/control/clear-mark-position", requestURI) == 0)
    {
        queryOk = 1;
        queryValueCount = 0;

        if (get_query_value(arg, "position", queryValue, sizeof(queryValue)))
        {
            if (!parse_int64(queryValue, &position) ||
                    position < 0)
            {
                queryOk = 0;
            }
            else
            {
                queryValueCount++;
            }
        }
        if (get_query_value(arg, "type", queryValue, sizeof(queryValue)))
        {
            queryValueCount++;
            markTypeMask = atoi(queryValue);
        }

        if (queryOk && queryValueCount == 2)
        {
            mc_clear_mark_position(access->control, position, markTypeMask);
        }
    }
    else if (strcmp("/player/control/next-show-marks", requestURI) == 0)
    {
        queryOk = 1;
        selection = 0;

        if (get_query_value(arg, "sel", queryValue, sizeof(queryValue)))
        {
            if (!parse_int(queryValue, &selection))
            {
                queryOk = 0;
            }
        }

        if (queryOk)
        {
            mc_next_show_marks(access->control, selection);
        }
    }
    else if (strcmp("/player/control/set-vtr-error-level", requestURI) == 0)
    {
        queryOk = 1;
        queryValueCount = 0;

        if (get_query_value(arg, "level", queryValue, sizeof(queryValue)))
        {
            if (!parse_int(queryValue, &vtrErrorLevel) ||
                    vtrErrorLevel < VTR_NO_ERROR_LEVEL || vtrErrorLevel > VTR_NO_GOOD_LEVEL)
            {
                queryOk = 0;
            }
            else
            {
                queryValueCount++;
            }
        }

        if (queryOk && queryValueCount == 1)
        {
            mc_set_vtr_error_level(access->control, (VTRErrorLevel)vtrErrorLevel);
        }
    }
    else if (strcmp("/player/control/next-vtr-error-level", requestURI) == 0)
    {
        mc_next_vtr_error_level(access->control);
    }
    else if (strcmp("/player/control/next-osd-screen", requestURI) == 0)
    {
        mc_next_osd_screen(access->control);
    }
    else if (strcmp("/player/control/next-osd-timecode", requestURI) == 0)
    {
        mc_next_osd_timecode(access->control);
    }
    else if (strcmp("/player/control/review", requestURI) == 0)
    {
        queryOk = 1;
        queryValueCount = 0;

        if (get_query_value(arg, "duration", queryValue, sizeof(queryValue)))
        {
            if (!parse_int64(queryValue, &duration) ||
                    duration <= 0)
            {
                queryOk = 0;
            }
            else
            {
                queryValueCount++;
            }
        }

        if (queryOk && queryValueCount == 1)
        {
            mc_review(access->control, duration);
        }
    }
    else if (strcmp("/player/control/next-marks-selection", requestURI) == 0)
    {
        mc_next_active_mark_selection(access->control);
    }

    shttpd_printf(arg, "HTTP/1.1 200 OK\r\n\r\n");
    arg->flags |= SHTTPD_END_OF_OUTPUT;
}
Beispiel #5
0
/*
 * reset and restart the MACE.  Called in case of fatal
 * hardware/software errors.
 */
void
mc_reset(struct mc_softc *sc)
{
	mc_stop(sc);
	mc_init(sc);
}
Beispiel #6
0
/*******************************************************************************
 * main()
 *
 * description: Send alarm message to alarm manager
 *
 ******************************************************************************/
int main(int argc, char *argv[])
{
    int position = 500;
    //print_menu();


    //printf("> \n");

    mc_init("eth1");
    #if 0
    while (1)
    {
        char cmd;

        scanf("%c", &cmd);
        switch(cmd)
        {
            case 'a':
            {
                epl_init("eth1");
                break;
            }
            case 'b':
            {
                epl_reset();
                break;
            }
            case 'c':
            {
                mc_init("eth1");
                break;
            }
            case 'd':
            {
                mc_reset_error();
                break;
            }
            case 'e':
            {
                int edge;
                scanf("%d", &edge);
                int ret = mc_set_positive_end_position(edge);
                printf("ret = %d\n", ret);
                break;
            }
            case 'f':
            {
                int edge;
                scanf("%d", &edge);
                int ret = mc_set_negative_end_position(edge);
                printf("ret = %d\n", ret);
                break;
            }
            case 'g':
            {
            	int cnt = 0;
            	while(cnt++<100)
            	{
                int ret = mc_move_absolute(1800,40,20,20,0);
                if(ret != 0)
                {
                	printf("ret = %d\n", ret);
                	PrintMCStatus();
                	break;
                }
                ret = mc_stop(10000);
                if(ret != 0)
                {
                	printf("ret = %d\n", ret);   
                	PrintMCStatus();   
                	break;
                }
                ret = mc_move_absolute(-1700,40,20,20,0);
                if(ret != 0)
                {
                	printf("ret = %d\n", ret);
                	PrintMCStatus();
                	break;
                }
                ret = mc_stop(10000);
                if(ret != 0)
                {
                	printf("ret = %d\n", ret);   
                	PrintMCStatus();   
                	break;
                }   
                }       	
                break;
            }            
            case '1':
            {
                mc_power();
                break;
            }
            case '2':
            {
                mc_home(0, 0);
                break;
            }
            case '3':
            {
                int pos, velocity;
                scanf("%d %d", &pos, &velocity);
                printf("pos is %d, velocity is %d\n", pos,velocity);
                mc_move_absolute(pos,velocity,20,20,0);
                position += 500;
                break;
            }
            case '4':
            {
                mc_move_additive(50,100,20,20);
                break;
            }
            case '5':
            {
            	int velocity, direction;
                scanf("%d %d", &velocity, &direction);
                mc_move_velocity(50,100,20,direction);
                break;
            }
            case '6':
            {
                PrintMCStatus();

                break;
            }
            case '7':
            {
                int ret = mc_stop(0);
                
                printf("ret =  %d\n", ret);
                break;
            }
            case '8':
            {
                printf("position is  %d\n", mc_get_position());
                break;
            }
            case '9':
            {
                printf("velocity is  %d\n", mc_get_velocity());
                break;
            }
            case '0':
            {
                unsigned short id;
                char str_err[256];
                id = mc_get_error_id();
                get_err_str(id, str_err);
                printf("error id is  %d\n", id);
                printf("error id is  %s\n", str_err);

                break;
            }
            case 'x':
            case 'X':
            {
                return 0;
            }
            case 'h':
            case 'H':
            {
                print_menu();
                break;
            }
            default:
            {
                printf("> ");
                break;
            }
        }
    }
    #else
    while(1)
        sleep(5);
    #endif

    return 0;
}