Hello Erel
I have a WIT-motion device which give Roll/Pitch/Yaw data via bluetooth HC-06.
11 bytes, start with 0X55 with second byte as data type 0x53 is RPY. Byte 11 is CRC. This is not Prefix mode so I have used a ring buffer to find the data block.
This code working but seems very slow, can you suggest a better method to 'find' the data in the buffer stream.
Also when you 'read' or copy from the Async Buffer, does this clear the Async Buffer..?
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
Many Thanks
Richard
			
			I have a WIT-motion device which give Roll/Pitch/Yaw data via bluetooth HC-06.
11 bytes, start with 0X55 with second byte as data type 0x53 is RPY. Byte 11 is CRC. This is not Prefix mode so I have used a ring buffer to find the data block.
This code working but seems very slow, can you suggest a better method to 'find' the data in the buffer stream.
Also when you 'read' or copy from the Async Buffer, does this clear the Async Buffer..?
			
				B4X:
			
		
		
		Sub AStream_NewData (Buffer() As Byte)
    
    Dim i As Int = 0
    usLength = Buffer.Length
    usRxLength = usRxLength + usLength
    Bit.ArrayCopy(Buffer, 0, RxBuffer, usRxLength, usLength)
    Do While usRxLength >= 11
            
        If (Not ((RxBuffer(0) = 0x55) And (Bit.And(RxBuffer(1), 0x50) = 0x50))) Then
            'Move Byte to the front un till Byte(0) = 0x55 and Byte(1) is Above 0x50
            For i = 1 To usRxLength - 1
                RxBuffer(i - 1) = RxBuffer(i)
            Next
            usRxLength = usRxLength - 1
            Continue
        End If
                
        If Bit.And(RxBuffer(0) + RxBuffer(1) + RxBuffer(2) + RxBuffer(3) + RxBuffer(4) + RxBuffer(5) _
                + RxBuffer(6) + RxBuffer(7) + RxBuffer(8) + RxBuffer(9), 0xfF) = RxBuffer(10) Then
                
            If RxBuffer(1) = 0x53 Then
                Dim Roll As Double = (((RxBuffer(3) * 256) + RxBuffer(2)) / 32768) * 180
                Dim Pitch As Double = (((RxBuffer(5) * 256) + RxBuffer(4)) / 32768) * 180
                Dim Yaw As Double = (((RxBuffer(7) * 256) + RxBuffer(6)) / 32768) * 180
                Dim Temperature As Double =  ((RxBuffer(9) * 256) + RxBuffer(8)) / 340 + 36.53
                Log($"T = $1.0{Temperature}"$ & TAB & TAB & $"R = $1.2{Roll}"$ & TAB & TAB & $"P = $1.2{Pitch}"$ & TAB & TAB & $"Y = $1.2{Yaw}"$)
            End If
        End If
            
        ' Remove 'Used' Data from Ring Buffer
        For i = 11 To usRxLength - 1
            RxBuffer(i - 11) = RxBuffer(i)
        Next
        usRxLength = usRxLength - 11
    Loop
End SubMany Thanks
Richard
 
				 
 
		 
 
		 
 
		