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(); }
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(); } }
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(); }
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); }