/** * Transmit serial data * @param address The address to send the data to * @param length Number of bytes in data to be sent * @param maxLength Number of bytes allocated for * the data array. * @return 0 for success, nonzero for failure. */ char SerialTransmit(SerialData * s, byte address, byte length) { if (SerialTransferInProgress(s)) { return -1; } if (s->Transmit == NULL) { return -2; } if (length > SERIAL_TRANSMIT_BUFFER_SIZE) { return -3; } s->transmit_address = address; s->transmit_length = length; s->transmit_data_ptr = s->transmit_data; s->transmit_escaped_char = 0; s->transmit_state = PROC_STATE_TRANSMIT_ADDRESS; s->Transmit(s, START_BYTE); return 0; }
bool CommSendPacket(CommInterface * inf, CommPacket * pkt) { unsigned char length = pkt->length; if (SerialTransferInProgress(&inf->serData)) { return false; } if (length > SERIAL_TRANSMIT_BUFFER_SIZE) // TODO: Dynamically size SerialProtocol.transmit_data so we don't have this mysterious 20 byte max packet size length = SERIAL_TRANSMIT_BUFFER_SIZE; memcpy((void*)inf->serData.transmit_data, (void*)pkt->data, length); USART_TransmitMode(inf->port, true); if (SerialTransmit(&inf->serData, pkt->target, length)==0) { return true; } else { sei(); return false; } }
bool CommTransmissionInProgress(CommInterface * inf) { return SerialTransferInProgress(&inf->serData); }