OBD II App in Visual Studio(C#) with Xamarin
I am working on an Android App that receives Data from a OBD II Bluetooth Adapter. Setting up the Connection between App and Adapter works but when I send commands to the Adapter I wont get the right results. It either returns:
+CONNECTING<
or the command I just sent to the Adapter.
The App is coded in Visual Studio using Xamarin to develop for Android. The code shows just a simplified version of the app and just sents the code for the supported PIDs between 01 -1f.
BluetoothAdapter myAdapter;
BluetoothSocket socket = null;
string rawData;
public BluetoothConnect()
{
myAdapter = BluetoothAdapter.DefaultAdapter;
if (myAdapter == null)
{
//Device has no Bluetooth
}
if (!myAdapter.IsEnabled)
{
myAdapter.Enable();
}
BluetoothDevice d = myAdapter.GetRemoteDevice("AA:BB:CC:11:22:33");
socket = d.CreateRfcommSocketToServiceRecord(UUID.FromString("00001101-0000-1000-8000-00805F9B34FB"));
socket.Connect();
byte[] cmd = Encoding.ASCII.GetBytes("AT D");
socket.OutputStream.Write(cmd, 0, cmd.Length);
ReadAnswer();
socket.OutputStream.Flush();
cmd = Encoding.ASCII.GetBytes("AT Z");
socket.OutputStream.Write(cmd, 0, cmd.Length);
socket.OutputStream.Flush();
cmd = Encoding.ASCII.GetBytes("AT E0");
socket.OutputStream.Write(cmd, 0, cmd.Length);
ReadAnswer();
socket.OutputStream.Flush();
cmd = Encoding.ASCII.GetBytes("AT L0");
socket.OutputStream.Write(cmd, 0, cmd.Length);
ReadAnswer();
socket.OutputStream.Flush();
cmd = Encoding.ASCII.GetBytes("AT S0");
socket.OutputStream.Write(cmd, 0, cmd.Length);
ReadAnswer();
socket.OutputStream.Flush();
cmd = Encoding.ASCII.GetBytes("AT H0");
socket.OutputStream.Write(cmd, 0, cmd.Length);
ReadAnswer();
socket.OutputStream.Flush();
cmd = Encoding.ASCII.GetBytes("AT SP 0");
socket.OutputStream.Write(cmd, 0, cmd.Length);
ReadAnswer();
socket.OutputStream.Flush();
cmd = Encoding.ASCII.GetBytes("0100");
socket.OutputStream.Write(cmd, 0, cmd.Length);
ReadAnswer();
}
private void ReadAnswer() {
try {
rawData = "";
int a = 0;
System.Text.StringBuilder b = new System.Text.StringBuilder();
char c;
while (((a = (byte)socket.InputStream.ReadByte()) > -1))
{
c = (char)a;
if (c == '>')
{
break;
}
b.Append(c);
}
rawData = b.ToString();
Log.Info("-----------------------------------", "RawData: " + rawData);
socket.InputStream.Flush();
}
catch(System.Exception e)
{
Log.Info("", "" + e.Message);
}
}
I already tried different combinations of initialization Commands.
I could imagine that the problem has to do either with my method of reading the inputstream or with sending the commands but I can't figure out what to do, since I am new to Visual Studio, Xamarin and Android developing.
Hope you guys can give me some suggestions!
链接地址: http://www.djcxy.com/p/95124.html上一篇: 从汽车的OBD获取VIN号码