Exemple #1
0
static int
cmd_initbus_run (urj_chain_t *chain, char *params[])
{
    int drv, i;
    const urj_param_t **bus_params;

    if (urj_cmd_params (params) < 2)
    {
        urj_error_set (URJ_ERROR_SYNTAX,
                       "%s: #parameters should be >= %d, not %d",
                       params[0], 2, urj_cmd_params (params));
        return URJ_STATUS_FAIL;
    }

    if (urj_cmd_test_cable (chain) != URJ_STATUS_OK)
        return URJ_STATUS_FAIL;

    if (urj_tap_chain_active_part (chain) == NULL)
        return URJ_STATUS_FAIL;

    for (drv = 0; urj_bus_drivers[drv] != NULL; drv++)
        if (strcasecmp (urj_bus_drivers[drv]->name, params[1]) == 0)
            break;

    if (urj_bus_drivers[drv] == NULL)
    {
        urj_error_set (URJ_ERROR_NOTFOUND, _("Unknown bus: %s"), params[1]);
        return URJ_STATUS_FAIL;
    }

    urj_param_init (&bus_params);
    for (i = 2; params[i] != NULL; i++)
        if (urj_param_push (&urj_bus_param_list, &bus_params,
                            params[i]) != URJ_STATUS_OK)
        {
            urj_param_clear (&bus_params);
            return URJ_STATUS_FAIL;
        }

    if (urj_bus_init_bus(chain, urj_bus_drivers[drv], bus_params) == NULL)
    {
        urj_param_clear (&bus_params);
        return URJ_STATUS_FAIL;
    }

    urj_param_clear (&bus_params);

    return URJ_STATUS_OK;
}
Exemple #2
0
int
urj_param_init_list (const urj_param_t ***bp, char *params[],
                     const urj_param_list_t *param_list)
{
    int ret;
    size_t i;

    ret = urj_param_init (bp);
    if (ret != URJ_STATUS_OK)
        return ret;

    for (i = 0; params[i] != NULL; ++i)
    {
        ret = urj_param_push (param_list, bp, params[i]);
        if (ret != URJ_STATUS_OK)
        {
            urj_param_clear (bp);
            return ret;
        }
    }

    return URJ_STATUS_OK;
}
Exemple #3
0
int
urj_tap_chain_connect (urj_chain_t *chain, const char *drivername, char *params[])
{
    urj_cable_t *cable;
    int j, paramc;
    const urj_param_t **cable_params;
    const urj_cable_driver_t *driver;

    urj_cable_parport_devtype_t devtype;
    const char *devname;
    int param_start;

    param_start = 0;
    paramc = urj_cmd_params (params);

    driver = urj_tap_cable_find (drivername);
    if (!driver)
    {
        urj_error_set (URJ_ERROR_INVALID,
                       "unknown cable driver '%s'", drivername);
        return URJ_STATUS_FAIL;
    }

    if (driver->device_type == URJ_CABLE_DEVICE_PARPORT)
    {
        if (paramc < 2)
        {
            urj_error_set (URJ_ERROR_SYNTAX,
                           "parallel cable requires >= 4 parameters, got %d", paramc);
            return URJ_STATUS_FAIL;
        }
        for (j = 0; j < URJ_CABLE_PARPORT_N_DEVS; j++)
            if (strcasecmp (params[0],
                            urj_cable_parport_devtype_string (j)) == 0)
                break;
        if (j == URJ_CABLE_PARPORT_N_DEVS)
        {
            urj_error_set (URJ_ERROR_INVALID,
                           "unknown parallel port device type '%s'",
                           params[0]);
            return URJ_STATUS_FAIL;
        }

        devtype = j;
        devname = params[1];
        param_start = 2;
    }
    else
    {
        /* Silence gcc uninitialized warnings */
        devtype = -1;
        devname = NULL;
    }

    if (urj_param_init_list (&cable_params, &params[param_start],
                             &urj_cable_param_list) != URJ_STATUS_OK)
        return URJ_STATUS_FAIL;

    switch (driver->device_type)
    {
    case URJ_CABLE_DEVICE_PARPORT:
        cable = urj_tap_cable_parport_connect (chain, driver, devtype, devname,
                                               cable_params);
        break;
    case URJ_CABLE_DEVICE_USB:
        cable = urj_tap_cable_usb_connect (chain, driver, cable_params);
        break;
    case URJ_CABLE_DEVICE_OTHER:
        cable = urj_tap_cable_other_connect (chain, driver, cable_params);
        break;
    default:
        cable = NULL;
        break;
    }

    urj_param_clear (&cable_params);

    if (cable == NULL)
        return URJ_STATUS_FAIL;

    chain->cable->chain = chain;
    return URJ_STATUS_OK;
}