virtual err_t onSent(uint16_t len)
	{
		sent += len;
		if (written < sent || !completed) return TcpConnection::onSent(len);
		finishTransfer();
		return TcpConnection::onSent(len);
	}
	virtual void transferData(TcpConnectionEvent sourceEvent)
	{
		if (completed) return;
		Vector<String> list = fileList();
		debugf("send file list: %d", list.count());
		for (int i = 0; i < list.count(); i++)
			writeString("01-01-15  01:00AM               " + String(fileGetSize(list[i])) + " " + list[i] + "\r\n");
		completed = true;
		finishTransfer();
	}
Ejemplo n.º 3
0
void IthoCC1101::sendCommand(IthoCommand command)
{
	CC1101Packet outMessage1;
	CC1101Packet outMessage2;
	uint8_t maxTries = sendTries;
	uint8_t delay = 40;
	
	//update itho packet data
	outIthoPacket.previous = outIthoPacket.command;
	outIthoPacket.command = command;
	outIthoPacket.counter += 1;
	
	//get message1 bytes
	createMessageStart(&outIthoPacket, &outMessage1);
	
	//get message2 bytes
	switch (command)
	{
		case join:
			createMessageJoin(&outIthoPacket, &outMessage2);
			break;
		
		case leave:
			createMessageLeave(&outIthoPacket, &outMessage2);
			//the leave command needs to be transmitted for 1 second according the manual
			maxTries = 30;
			delay = 4;
			break;
		
		default:
			createMessageCommand(&outIthoPacket, &outMessage2);
			break;
	}
	
	debug.serOut("send\n");
	
	//send messages
	for (int i=0;i<maxTries;i++)
	{
		//message1
		initSendMessage1();
		sendData(&outMessage1);
		debug.serOut("1\n");
		
		delay_ms(4);
		
		//message2
		initSendMessage2(outIthoPacket.command);
		sendData(&outMessage2);
		debug.serOut("2\n");
		
		finishTransfer();
		delay_ms(delay);
	}
}
	virtual void transferData(TcpConnectionEvent sourceEvent)
	{
		if (completed) return;
/*
		int p = fileTell(file);
		if (p == 0)
			response(250, "Transfer started");
*/
		char * buf = new char [1024];
		int len = fileRead(file, buf, 1024);
		write(buf, len, TCP_WRITE_FLAG_COPY);
		delete buf;
		if (fileIsEOF(file))
		{
			completed = true;
			finishTransfer();
		}
	}
Ejemplo n.º 5
0
void SMSC95xxUSB::readFinished(FileSystemMessage *message)
{
    DEBUG("identifier = " << message->identifier << " result = " << (int)message->result);

    if (!m_rxPacket)
    {
        ERROR("unexpected readFinish with no receive packet buffer");
        return;
    }

    // Extract packet
    // USBMessage *usb = (USBMessage *) message->buffer;
    // TODO: Offset field contains virtual address of input data buffer
    u8 *data = (u8 *) message->offset; //usb->buffer;
    u32 receiveCmd = data[0] | data[1] << 8 | data[2] << 16 | data[3] << 24;
    Size frameLength = (receiveCmd & RxCommandFrameLength) >> 16;

    if (frameLength == 0 || frameLength > m_packetSize)
    {
        ERROR("invalid framelength: " << frameLength);
    }
    else
    {
        DEBUG("packet is " << frameLength << " bytes long");

        // Publish the packet to our parent
        m_rxPacket->size = frameLength;
        m_smsc->process(m_rxPacket, ReceiveCommandSize);

        // Release the packet buffer
        m_smsc->getReceiveQueue()->release(m_rxPacket);
        m_rxPacket = 0;

        // TODO: this should not be done like this
        // Trigger retry of all FileSystemRequests here.
        // m_server->interruptHandler(0);
    }

    // Release USB transfer
    finishTransfer(message);

    // Restart read transfer
    readStart();
}
Ejemplo n.º 6
0
void SMSC95xxUSB::writeFinished(FileSystemMessage *message)
{
    DEBUG("identifier = " << message->identifier << " result = " << (int)message->result);

    if (!m_txPacket)
    {
        ERROR("no transmit packet in progress");
        return;
    }

    // Clean transmit packet
    m_smsc->getTransmitQueue()->release(m_txPacket);
    m_txPacket = 0;

    // Release USB transfer
    finishTransfer(message);

    // TODO: this should not be done like this
    // Trigger retry of all FileSystemRequests here.
    // m_server->interruptHandler(0);

    // Continue with the next packet(s)
    writeStart();
}
	virtual void onReadyToSendData(TcpConnectionEvent sourceEvent)
	{
		if (!parent->isCanTransfer()) return;
		if (completed && written == 0) finishTransfer();
		transferData(sourceEvent);
	}