Ejemplo n.º 1
0
int main(int argc, char *argv[]) {
    char c, *device, *sport, *aport, *ahost;
    monome_rotate_t rotate = MONOME_ROTATE_0;
    int i;

    struct option arguments[] = {
        {"help",             no_argument,       0, 'h'},

        {"device",           required_argument, 0, 'd'},

        {"server-port",      required_argument, 0, 's'},
        {"application-port", required_argument, 0, 'a'},
        {"application-host", required_argument, 0, 'o'},

        {"rotation",         required_argument, 0, 'r'}
    };

    device = DEFAULT_MONOME_DEVICE;
    sport  = DEFAULT_OSC_SERVER_PORT;
    aport  = DEFAULT_OSC_APP_PORT;
    ahost  = DEFAULT_OSC_APP_HOST;

    while( (c = getopt_long(argc, argv, "hd:s:a:o:r:",
                            arguments, &i)) > 0 ) {
        switch( c ) {
        case 'h':
            usage(argv[0]);
            return 1;

        case 'd':
            device = optarg;
            break;

        case 's':
            if( is_numstr(optarg) )
                sport = optarg;
            else
                printf("warning: \"%s\" is not a valid server port.\n",
                       optarg);

            break;

        case 'a':
            if( is_numstr(optarg) )
                aport = optarg;
            else
                printf("warning: \"%s\" is not a valid application port.\n",
                       optarg);

            break;

        case 'o':
            ahost = optarg;
            break;

        case 'r':
            switch(*optarg) {
            case 'l':
            case '0':
                rotate = MONOME_ROTATE_0;
                break;
            case 't':
            case '9':
                rotate = MONOME_ROTATE_90;
                break;
            case 'r':
            case '1':
                rotate = MONOME_ROTATE_180;
                break;
            case 'b':
            case '2':
                rotate = MONOME_ROTATE_270;
                break;
            }
            break;
        }
    }

    if( optind == argc )
        state.lo_prefix = m_strdup(DEFAULT_OSC_PREFIX);
    else
        state.lo_prefix = m_strdup(argv[optind]);

    if( !(state.monome = monome_open(device)) ) {
        printf("failed to open %s\n", device);
        return EXIT_FAILURE;
    }

    if( !(state.server = lo_server_new(sport, lo_error)) )
        return EXIT_FAILURE;

    state.outgoing = lo_address_new(ahost, aport);

    monome_register_handler(state.monome, MONOME_BUTTON_DOWN,
                            monome_handle_press, state.lo_prefix);
    monome_register_handler(state.monome, MONOME_BUTTON_UP,
                            monome_handle_press, state.lo_prefix);

    register_osc_methods(state.lo_prefix, state.monome);

    monome_set_rotation(state.monome, rotate);
    monome_led_all(state.monome, 0);

    printf("monomeserial version %s, yay!\n\n", VERSION);
    printf("initialized device %s at %s, which is %dx%d\n",
           monome_get_serial(state.monome), monome_get_devpath(state.monome),
           monome_get_rows(state.monome), monome_get_cols(state.monome));
    printf("running with prefix /%s\n\n", state.lo_prefix);

    /* main_loop() returns 1 if the monome was disconnected */
    if( main_loop() )
        printf("%s disconnected, monomeserial exiting.\nsee you later!\n\n",
               monome_get_devpath(state.monome));

    monome_close(state.monome);

    unregister_osc_methods(state.lo_prefix);
    m_free(state.lo_prefix);

    lo_address_free(state.outgoing);
    lo_server_free(state.server);

    return EXIT_SUCCESS;
}
Ejemplo n.º 2
0
Archivo: rove.c Proyecto: rknLA/rove
int main(int argc, char **argv) {
    char *session_file, c;
    int i;

    struct option arguments[] = {
        {"help",			no_argument,       0, 'u'}, /* for "usage", get it?  hah, hah... */
        {"monome-columns",	required_argument, 0, 'c'},
        {"monome-rows",		required_argument, 0, 'r'},
        {"osc-prefix", 		required_argument, 0, 'p'},
        {"osc-host-port", 	required_argument, 0, 'h'},
        {"osc-listen-port",	required_argument, 0, 'l'},
        {0, 0, 0, 0}
    };

    memset(&state, 0, sizeof(rove_state_t));

    session_file = NULL;
    opterr = 0;

    while( (c = getopt_long(argc, argv, "uc:r:p:h:l:", arguments, &i)) > 0 ) {
        switch( c ) {
        case 'u':
            usage();
            exit(EXIT_FAILURE); /* should we exit after displaying usage? (i think so) */

        case 'c':
            state.config.cols = ((atoi(optarg) - 1) & 0xF) + 1;
            break;

        case 'r':
            state.config.rows = ((atoi(optarg) - 1) & 0xF) + 1;
            break;

        case 'p':
            if( *optarg == '/' ) /* remove the leading slash if there is one */
                optarg++;

            state.config.osc_prefix = strdup(optarg);
            break;

        case 'h':
            if( !is_numstr(optarg) )
                usage_printf_exit("error: \"%s\" is not a valid host port.\n\n", optarg);

            state.config.osc_host_port = strdup(optarg);
            break;

        case 'l':
            if( !is_numstr(optarg) )
                usage_printf_exit("error: \"%s\" is not a valid listen port.\n\n", optarg);

            state.config.osc_listen_port = strdup(optarg);
            break;
        }
    }

    if( optind == argc )
        usage_printf_exit("error: you did not specify a session file!\n\n");

    if( rove_settings_load(user_config_path()) )
        exit(EXIT_FAILURE);

    session_file = argv[optind];

    state.files    = rove_list_new();
    state.patterns = rove_list_new();

    state.active   = rove_list_new();
    state.staging  = rove_list_new();

    printf("\nhey, welcome to rove!\n\n"
           "you've got the following loops loaded:\n"
           "\t[rows]\t[file]\n");

    if( session_load(session_file) ) {
        printf("error parsing session file :(\n");
        exit(EXIT_FAILURE);
    }

    if( rove_list_is_empty(state.files) ) {
        fprintf(stderr, "\t(none, evidently.  get some and come play!)\n\n");
        exit(EXIT_FAILURE);
    }

    if( rove_jack_init() ) {
        fprintf(stderr, "error initializing JACK :(\n");
        exit(EXIT_FAILURE);
    }

    rove_recalculate_bpm_variables();

#define ASSIGN_IF_UNSET(k, v) do { \
	if( !k ) \
		k = v; \
} while( 0 );

    ASSIGN_IF_UNSET(state.config.osc_prefix, DEFAULT_OSC_PREFIX);
    ASSIGN_IF_UNSET(state.config.osc_host_port, DEFAULT_OSC_HOST_PORT);
    ASSIGN_IF_UNSET(state.config.osc_listen_port, DEFAULT_OSC_LISTEN_PORT);
    ASSIGN_IF_UNSET(state.config.cols, DEFAULT_MONOME_COLUMNS);
    ASSIGN_IF_UNSET(state.config.rows, DEFAULT_MONOME_ROWS);

#undef ASSIGN_IF_UNSET

    if( rove_monome_init() )
        exit(EXIT_FAILURE);

    if( rove_jack_activate() )
        exit(EXIT_FAILURE);

    signal(SIGINT, exit_on_signal);
    atexit(cleanup);

    rove_monome_run_thread(state.monome);
    monome_display_loop();

    return 0;
}