ik wil via een com poort een blackbox benaderen in de auto zodat ik (op termijn) met mijn pda de gegevens kan uitlezen (gps en datalog en alles).
Ik gebruik een dll die communicatie regelt tussen mijn lappie en de blackbox.De bedoeling is dat alles onder C# gaat draaien.
Nou heb ik 2 dingen geprobeerd, met de SerialPort klasse uit C# en een wrapper om MSComm te gebruiken.
Deze dll verwacht een 'handle' naar de com-poort volgens de API, die MSComm afgeeft met MSComm.CommID (krijg ik ergens getallen tussen de 910 en 930).
Ik heb de DLL geimport met:
Poging 1:
Ik gebruik een wrapper voor MSComm ( en wel DesktopSerialIO.dll) omdat ik de orginele MSComm32 niet in geladen krijg.
Maar in mijn comport logger gaat alleen de poort open door de MSComm wrapper en er wordt niets naar de poort geschreven of gelezen.
Poging2:
Ik gebruik de SerialPort klasse (netter in mijn ogen), maar dan weet ik niet hoe ik de goede ''handle" terugkrijg.
Gebeurt ook niets (uiteraard).
Dit is een stukje VB uit de api om een idee te krijgen:
iemand die me kan helpen?
Ik gebruik een dll die communicatie regelt tussen mijn lappie en de blackbox.De bedoeling is dat alles onder C# gaat draaien.
Nou heb ik 2 dingen geprobeerd, met de SerialPort klasse uit C# en een wrapper om MSComm te gebruiken.
Deze dll verwacht een 'handle' naar de com-poort volgens de API, die MSComm afgeeft met MSComm.CommID (krijg ik ergens getallen tussen de 910 en 930).
code:
1
2
| Function Protocols C-API BOOL FM_Comms_Start (DWORD* pdwHandle) |
Ik heb de DLL geimport met:
C#:
1
2
| [DllImport("FM_Comms.dll")] public static extern bool FM_Comms_Start(ref Int32 pdwHandle); |
Poging 1:
Ik gebruik een wrapper voor MSComm ( en wel DesktopSerialIO.dll) omdat ik de orginele MSComm32 niet in geladen krijg.
C#:
1
2
3
4
5
6
| SerialPort port = new SerialPort(1, 9600, "N", 8, 1.0f); port.PortOpen = true; bool test = false; Int32 pHandle = (Int32)port.CommID; test = FM_Comms.FM_Comms_Start(ref pHandle); |
Maar in mijn comport logger gaat alleen de poort open door de MSComm wrapper en er wordt niets naar de poort geschreven of gelezen.
Poging2:
Ik gebruik de SerialPort klasse (netter in mijn ogen), maar dan weet ik niet hoe ik de goede ''handle" terugkrijg.
C#:
1
2
3
| SerialPort port = new SerialPort("COM1",9600,Parity.None,8,StopBits.One); Int32 handle = Int32.Parse("928"); //wat moet hier eigenlijk in dan... test = FM_Comms.FM_Comms_Start(ref handle); |
Gebeurt ook niets (uiteraard).
Dit is een stukje VB uit de api om een idee te krijgen:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| Private Sub cmdStart_Click() Dim lState As Long Dim lDown As Long Dim lSize As Long cmdStart.Enabled = False MSComm1.Settings = "19200,N,8,1" MSComm1.Handshaking = comRTS 'Hardware handshaking required MSComm1.CommPort = 1 'assumes COM 1 -- change this as needed MSComm1.PortOpen = True FM_Comms_Start MSComm1.CommID Do FM_Comms_GetProgress lState, lDown, lSize lblStatus.Caption = FMCommsState(lState) Sleep 63 ' at least 1 / 16 secs and generally not more than 1/4 secs DoEvents Loop While lState >= &H10 Or lState = 0 'FM_COMMS_STATE_IDLE If lState = FM_COMMS_STATE_ERROR Then MsgBox FMCommsError(FM_Comms_GetLastError) Else MsgBox "Vehicle #" & FM_Comms_GetVehicleID & ": Hello World!" End If FM_Comms_End MSComm1.PortOpen = False cmdStart.Enabled = True End Sub |
iemand die me kan helpen?