diff --git a/src/main.cpp b/src/main.cpp index d3c115d..867ebeb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -69,14 +69,18 @@ void loop() { counter = 0; // Mirror data via Serial + Serial.print("Received raw integers: "); while (bytesAvailable--) { - char currentByte = (char)RawHID.read(); + int currentByte = RawHID.read(); + Serial.print(currentByte); + Serial.print(" "); // save only if it is a printable character if(currentByte >= 32 && currentByte <= 126) { receivedMessageBuffer[counter++] = currentByte; } } + Serial.print("\n"); // print read message Serial.print("Received: '"); @@ -128,7 +132,7 @@ void UsbHidSendLine(unsigned char* str) if (str!=NULL) { int32_t messageBytes = McuUtility_strlen((char*)str); uint8_t bufferSize = sizeof(sendMessageBuffer); - uint8_t numBytesPerMessage = bufferSize - 1; // last byte got omitted always, therefore it is not sent + uint8_t maxNumBytesPerMessage = bufferSize - 2; // 1 because last byte got omitted always (therefore it is not sent), 2 because of prefix Serial.print("Sending message with "); Serial.print(messageBytes); Serial.print(" bytes and buffer size "); @@ -138,11 +142,16 @@ void UsbHidSendLine(unsigned char* str) // split message in buffer Size amount for(int messageNum = 0; messageBytes > 0; messageNum++){ memset(sendMessageBuffer, '\0', sizeof(sendMessageBuffer)); // clear send buffer - // copy part of message to send buffer. move pointer by buffer size to take the next part of the string. - McuUtility_strcpy((unsigned char*)sendMessageBuffer, numBytesPerMessage, (unsigned char*)(str + (numBytesPerMessage*messageNum))); + // calculate length of payload + uint8_t payloadLength = messageBytes > maxNumBytesPerMessage ? maxNumBytesPerMessage : messageBytes; + // prefix: 0=report ID, 1=amount of bytes for this payload, rest=payload + sendMessageBuffer[0] = 0x00; + sendMessageBuffer[1] = payloadLength; + // copy part of message to send buffer. move pointer by buffer size to take the next part of the string. (offset destination pointer by 2 because of prefix) + McuUtility_strcpy(((unsigned char*)sendMessageBuffer) + 2, maxNumBytesPerMessage+1, (unsigned char*)(str + (maxNumBytesPerMessage*messageNum))); RawHID.write(sendMessageBuffer, sizeof(sendMessageBuffer)); // write buffer Serial.print((char*)sendMessageBuffer); // print - messageBytes -= numBytesPerMessage; // subtract numBytes that were sent from message bytes + messageBytes -= maxNumBytesPerMessage; // subtract numBytes that were sent from message bytes } Serial.print("\n'''\n");