I'm having an issue and not sure if it's an android problem or the device itself.
I have an ESP8266 acting as an access point with 2 android tablets connected to it right now.
When I send out to x.x.x.255, one tablet has over 30% packet loss, other is 1.2% (i'm ok with that amount of loss). If I send out unicast to just that one troubled tablet (10.10.10.100), it has barely any loss (< 0.2%). Sending only about 12 bytes @ 3 times a second, which isn't much. I bumped it up to 10 times a second, and both tablets error out about 30%.
Both are running rooted rom's with android 5.1.1
Samsung 10.1 P7500 (2010) ~1.2%
Samsung Tab A 7.0 SM-T280 (2015) >30%
I also plugged in my Samsung S5 (running stock 6.0.1 version), and had over 20% loss. Ran across the post about trying to lock a multicast state, and added it without any difference in performance. The newer devices are blocking some of the UDP packets?
Since I'll only have 4 tablets, I could send to each individual IP address.
Manifest
Service - Starter
I have an ESP8266 acting as an access point with 2 android tablets connected to it right now.
When I send out to x.x.x.255, one tablet has over 30% packet loss, other is 1.2% (i'm ok with that amount of loss). If I send out unicast to just that one troubled tablet (10.10.10.100), it has barely any loss (< 0.2%). Sending only about 12 bytes @ 3 times a second, which isn't much. I bumped it up to 10 times a second, and both tablets error out about 30%.
Both are running rooted rom's with android 5.1.1
Samsung 10.1 P7500 (2010) ~1.2%
Samsung Tab A 7.0 SM-T280 (2015) >30%
I also plugged in my Samsung S5 (running stock 6.0.1 version), and had over 20% loss. Ran across the post about trying to lock a multicast state, and added it without any difference in performance. The newer devices are blocking some of the UDP packets?
Since I'll only have 4 tablets, I could send to each individual IP address.
Manifest
B4X:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="19"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
'End of default text.
AddPermission(android.permission.CHANGE_WIFI_MULTICAST_STATE)
Service - Starter
B4X:
#Region Service Attributes
#StartAtBoot: False
#ExcludeFromLibrary: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim Tablet As Reflector
Dim UDPSocket1 As UDPSocket
Dim UDPPort As Int = 8888
End Sub
Sub Service_Create
Tablet.Target = Tablet.GetContext
Tablet.Target = Tablet.RunMethod2("getSystemService", "wifi", "java.lang.String")
Tablet.Target = Tablet.RunMethod2("createMulticastLock", "mylock", "java.lang.String")
Tablet.RunMethod2("setReferenceCounted", False, "java.lang.boolean") 'not really necessary but safer
Tablet.RunMethod("acquire") 'acquire the lock
'This is the program entry point.
'This is a good place to load resources that are not specific to a single activity.
c.BCMData.Initialize
End Sub
Sub Service_Start (StartingIntent As Intent)
'Start receiving data
If UDPSocket1.IsInitialized = False Then
UDPSocket1.Initialize("UDP", UDPPort, 8192)
Log("Listening for UDP packets on port "& UDPSocket1.Port)
End If
End Sub
Sub Service_TaskRemoved
'This event will be raised when the user removes the app from the recent apps list.
End Sub
'Return true to allow the OS default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
Return True
End Sub
Sub Service_Destroy
If UDPSocket1.IsInitialized Then
UDPSocket1.Close
End If
Tablet.RunMethod("release") ' release when not needed to save battery
End Sub
Sub UDP_PacketArrived (Packet As UDPPacket)
'Log(Packet.Length)
' If Packet.Length <> 8 Then
' Log("Invalid packet")
' End If
Dim PacketLength As Int
Dim PacketId, x As Int
Dim PacketValid As Int
Dim raf As RandomAccessFile
raf.Initialize3(Packet.Data, False)
raf.CurrentPosition = Packet.Offset
PacketLength = raf.ReadShort(raf.CurrentPosition)
PacketId = raf.ReadUnsignedByte(raf.CurrentPosition)
PacketValid = raf.ReadShort(raf.CurrentPosition)
'2 byte rolls over from BCM
If PacketValid = 65535 Then c.BCMData.RollOver = c.BCMData.RollOver + 1
If c.BCMData.RollOver > 0 Then PacketValid = PacketValid * c.BCMData.RollOver
Log(PacketValid)
c.BCMData.Connect = True
If c.BCMData.StartValid = 0 Then
c.BCMData.StartValid = PacketValid 'Starting point when this app connected to bcm
Else If c.BCMData.Valid > PacketValid Then
Log("Wrong packet order "& PacketValid)
c.BCMData.Invalid = c.BCMData.Invalid + 1
Return 'The last packet ID is bigger then the current packet, skip
Else If c.BCMData.Valid < (PacketValid - 1) Then
Log("Missed packet "& (c.BCMData.Valid + 1))
c.BCMData.Invalid = c.BCMData.Invalid + 1 'The last packet ID should equal the current packet - 1 (next Id in line)
End If
c.BCMData.Valid = PacketValid
c.BCMData.NumConnects = raf.ReadUnsignedByte(raf.CurrentPosition)
c.BCMData.ScreenDim = raf.ReadUnsignedByte(raf.CurrentPosition)
x = raf.ReadUnsignedByte(raf.CurrentPosition)
c.BCMData.DoorOpenLSw = Regex.IsMatch("1", Bit.And(x,Bit.ShiftLeft(1, 0)))
c.BCMData.DoorOpenRSw = Regex.IsMatch("1", Bit.And(x,Bit.ShiftLeft(1, 1)))
c.BCMData.FuelTransLSw = Regex.IsMatch("1", Bit.And(x,Bit.ShiftLeft(1, 2)))
c.BCMData.FuelTransRSw = Regex.IsMatch("1", Bit.And(x,Bit.ShiftLeft(1, 3)))
x = raf.ReadUnsignedByte(raf.CurrentPosition)
c.BCMData.FuelTransAuto = Regex.IsMatch("1", Bit.And(x,Bit.ShiftLeft(1, 0)))
c.BCMData.FuelTransLRelay = Regex.IsMatch("1", Bit.And(x,Bit.ShiftLeft(1, 1)))
c.BCMData.FuelTransRRelay = Regex.IsMatch("1", Bit.And(x,Bit.ShiftLeft(1, 2)))
CallSub(Main, "DataRefresh_Tick")
End Sub
Last edited: