示例#1
0
bool USBTester::setup_iterface(uint8_t ep_in, uint8_t ep_out, uint32_t ep_size, usb_ep_type_t ep_type,
                               uint8_t *buf, uint32_t buf_size, void (USBTester::*callback)())
{
    bool success = false;

    success = endpoint_add(ep_in, ep_size, ep_type);
    success &= endpoint_add(ep_out, ep_size, ep_type, callback);
    success &= read_start(ep_out, buf, buf_size);
    return success;
}
示例#2
0
// Get an endpoint from the list by its metainformation
struct endpoint_handle *endpoint_get(unsigned int domain, unsigned int node,
                                     unsigned int port) {
    struct endpoint_handle *eph = 0;

    // Try to find endpoint in local database
    struct endpoint_handle_listelem *lit;
    for (lit=eplist_first;lit!=0;lit=lit->next) {
        if ((lit->handle->domain == domain) &&
                (lit->handle->node == node) &&
                (lit->handle->port == port)) {
            eph = lit->handle;
            break;
        }
    }

    if (eph == 0 && (domain != optimsoc_get_tileid())) {
        // Endpoint is not locally known
        struct endpoint *ep = control_get_endpoint(domain, node, port);
        // Create the respective handle

        eph = malloc(sizeof(struct endpoint_handle));
        eph->domain = domain;
        eph->node = node;
        eph->port = port;
        eph->ep = ep;
        eph->type = REMOTE;

        endpoint_add(eph);

    }

    return eph;
}
示例#3
0
struct endpoint_handle *endpoint_create(uint32_t node, uint32_t port,
                                        endpoint_buffer_type buffer_type,
                                        uint32_t buffer_size,
                                        int overwrite_max_size) {

    struct endpoint *ep = malloc(sizeof(struct endpoint));
    assert(ep!=0);

    ep->buffer = calloc(1, sizeof(struct endpoint_buffer));
    assert(ep->buffer != 0);

    ep->buffer->data = malloc(buffer_size * sizeof(uint32_t*));
    assert(ep->buffer->data != 0);

    ep->buffer->data_size = malloc(buffer_size * sizeof(uint32_t*));
    assert(ep->buffer->data_size != 0);

    uint32_t max_element_size_bytes;
    uint32_t max_element_size_words;

    if (overwrite_max_size > 0) {
        max_element_size_bytes = overwrite_max_size;
    } else {
        if (buffer_type == MESSAGE) {
            max_element_size_bytes = MAX_MESSAGE_SIZE;
        } else {
            max_element_size_bytes = MAX_PACKET_SIZE;
        }
    }

    max_element_size_words = (max_element_size_bytes + 3) >> 2;

    uint32_t *datafield = malloc(max_element_size_bytes * buffer_size);
    assert(datafield);

    int i;
    for (i = 0; i < buffer_size; i++) {
        ep->buffer->data[i] = &datafield[i*max_element_size_words];
    }

    ep->buffer->size = buffer_size;
    ep->buffer->write_ptr = 0;
    ep->buffer->read_ptr = 0;

#ifdef RUNTIME
    ep->waiting = 0;
#endif


    struct endpoint_handle *eph = malloc(sizeof(struct endpoint_handle));
    assert(eph!=0);

    eph->ep = ep;
    eph->domain = optimsoc_get_tileid();
    eph->node = node;
    eph->port = port;

    trace_ep_create(ep);
    endpoint_add(eph);

    return eph;
}