コード例 #1
0
ファイル: SerialProtocol.c プロジェクト: StephenCEI/2011
/**
 * 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;
}
コード例 #2
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;
	}
}
コード例 #3
0
bool CommTransmissionInProgress(CommInterface * inf) {
	return SerialTransferInProgress(&inf->serData);
}