Пример #1
0
void _Encoder::WriteSerial( const uint8_t *ptr, uint16_t length )
{

	Serial.write( 0 );

	const uint8_t *end = ptr + length;
	uint8_t checksum = 0;

	uint8_t current_length = 0;
	uint8_t buffer[ 254 ];

	while( ptr < end )
	{
		if( *ptr == 0 )
		{
			writeSegment( current_length, buffer, checksum );
			current_length = 0;
		}
		else
		{
			buffer[ current_length++ ] = *ptr;

			if( current_length == 0xFE )
			{
				writeSegment( current_length, buffer, checksum );
				current_length = 0;
			}
		}

		ptr++;
	}

	Serial.write( checksum );
	Serial.write( 0 );
}
Пример #2
0
void XferObject::ReceiveSegment(const InterfaceDescription::Member* member, Message& msg)
{
    const char* ccptr = msg->GetArg(0)->v_string.str;
    int serialNum = msg->GetArg(1)->v_uint32;
    int segSize = msg->GetArg(2)->v_uint32;
    int accept = 0;
    xferCallback("Receive", serialNum);

    uint8_t* bytes = (uint8_t*)ccptr;
    if (writeSegment(serialNum, bytes, segSize))
        accept = 1;
    MsgArg outArg("i", accept);
    QStatus status = MethodReply(msg, &outArg, 1);
    if (ER_OK != status) {
        NotifyUser(MSG_ERROR, "XferObjectReceiveSegment : Error sending reply");
    }
}