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