Esempio n. 1
0
Error USBDevice::getDescriptor(USBDescriptor::Device *desc)
{
    DEBUG("");

    controlMessage(USBTransfer::GetDescriptor,
                   USBTransfer::In, 0, 0,
                   desc, sizeof(*desc));

    return ESUCCESS;
}
Esempio n. 2
0
void SMSC95xxUSB::write(SMSC95xxUSB::Register reg, u32 value)
{
    *m_value = value;
    Error r = controlMessage(WriteRegister,
                             USBTransfer::Out,
                             USBTransfer::Vendor,
                             USBTransfer::Device,
                             0, (u16)reg, m_value, sizeof(*m_value));
    if (r != ESUCCESS)
    {
        ERROR("failed to write SMSC95xxUSB register at offset " <<
               (uint) reg << " with value " << *m_value);
    }
}
Esempio n. 3
0
u32 SMSC95xxUSB::read(SMSC95xxUSB::Register reg)
{
    Error r = controlMessage(ReadRegister,
                             USBTransfer::In,
                             USBTransfer::Vendor,
                             USBTransfer::Device,
                             0, (u16)reg, m_value, sizeof(*m_value));

    if (r != ESUCCESS)
    {
        ERROR("failed to read SMSC95xxUSB register at offset " <<
               (uint) reg);
        return 0;
    }
    return (*m_value);
}
Esempio n. 4
0
int main(int argc, char *argv[])
{
    try {
        if (argc < 5)	/* Test for correct number of arguments */
            usage();

        /* get info from parameters , or default to defaults if they're not specified */
        char *server_ip = argv[1];		   /* First arg: server IP address (dotted quad) */
        Parameter<uint16_t>		server_port("server port", 0, 65535, atoi(argv[2]));
        Parameter<int>			num_bursts("number of bursts", 1, TestData::MAX_LEN, atoi(argv[3]));
        Parameter<int>			burst_delay("burst iteration delay", 0, TestData::MAX_DELAY, atoi(argv[4]));
        Parameter<int>			payload_len("payload length", 0, Message::MAX_PAYLOAD, 0);
        Parameter<int>			initial_burst_len("initial burst length", 1, Burst::MAX_LEN, 100);
        Parameter<float>		burst_len_multiplier("burst length multiplier", 0, 100, 0);

        if (argc >= 6) // allow specifying payload length
            payload_len.value(atoi(argv[5]));

        if (argc >= 7) // specify burst length to repeat
            initial_burst_len.value(atoi(argv[6]));

        if (argc >= 8)
            burst_len_multiplier.value(atof(argv[7]));

        // other (currently constant) parameters
        int test_type = TestData::BUFFER_SIZE_TEST;
        int client_port = server_port.value()+1;

        SignalHandler cntlcCatcher(SIGINT);

        // open a socket, bind for control messages
        UDPSocket socket(client_port);

        const unsigned int bufferSize = Message::MAX_SIZE;
        unsigned char controlBuffer[bufferSize];
        unsigned char responseBuffer[bufferSize];

        // first burst length
        int burst_len = initial_burst_len.value();

        Message controlMessage(controlBuffer, 0);
        controlMessage.setAddress(server_ip, server_port.value());

        // send the begin message
        controlMessage.header().message_type(Message::BEGIN);
        controlMessage.header().test_type(test_type);
        controlMessage.header().burst_num(num_bursts.value());
        // seq_num set in sending
        controlMessage.header().burst_len(burst_len);

        bool gotResponse = false;

        for (int i = 0; i < Socket::MAX_RETRIES; i++) {
            controlMessage.header().seq_num(i+1);
            socket.send(controlMessage);

            // wait for the begin_ack
            Message responseMessage(responseBuffer, bufferSize);
            socket.receive(responseMessage, 1);

            if (responseMessage.size() <= 0)
                continue;

            if (!Message::isResponsePair(controlMessage, responseMessage))
                throw std::runtime_error("Got an unexpected response to begin message.");

            gotResponse = true;
            break;
        }

        if (!gotResponse)
            throw std::runtime_error("Didn't get a response to the begin message from the server.");

        int bursts_sent = 0;
        int messages_sent = 0;

        // send the bursts
        for (int burst_num = 0; !cntlcCatcher.receivedSignal() && burst_num < num_bursts.value(); burst_num++) {
            Burst burst(test_type, burst_num, burst_len, payload_len.value(), server_ip, server_port.value());
            burst.send(socket);

            messages_sent += burst_len;
            bursts_sent++;

//		printf("burst %d sent, %d messages\n", burst_num, burst_len);
            burst_len += burst_len * burst_len_multiplier.value();
            usleep(burst_delay.value());
        }

//	printf("\nTotal of %d bursts sent, totalling %d messages\n", bursts_sent, messages_sent);

        // send the complete message
        controlMessage.header().message_type(Message::COMPLETE);
        controlMessage.header().burst_num(num_bursts.value());
        // seq_num set in sending
        controlMessage.header().burst_len(burst_len);

        gotResponse = false;

        for (int i = 0; i < Socket::MAX_RETRIES; i++) {
            controlMessage.header().seq_num(i+1);
            socket.send(controlMessage);

            // wait for the complete_ack
            Message responseMessage(responseBuffer, bufferSize);
            socket.receive(responseMessage, 1);

            if (responseMessage.size() <= 0)
                continue;

            if (!Message::isResponsePair(controlMessage, responseMessage))
                throw std::runtime_error("Got an unexpected response to complete message.");

            TestResults results(responseMessage.payload(), responseMessage.header().payload_len());
            std::cout << results;

            gotResponse = true;
            break;
        }

        if (!gotResponse)
            throw std::runtime_error("Didn't get a response to the complete message from the server.");

    } catch (std::exception &e) {
        std::cerr << "exception caught: " << e.what() << std::endl;
    }
    exit(0);
}