Hallo, bin absoluter C++ Neuling und habe folgendes Problem. Ich habe einen Phillips RFID Hitag Reader Modul HTRM800 und möchte es über die COM Schnittstelle ansprechen. Ich habe die den Orginal c source codes auf Diskette bekommen. Zum öffnen der Com Schnittstelle ist folgende Funktion deklariert. Hier ein Beispiel aus der Source Datei wie es funktionieren soll: /*-BASIC--------------------------function header---------------------------- * * proloc_open (char *ComStr) * opens the communication path between HOST and RWD, * by programming the serial interface. Old interrupt * and timer values are stored, to be restored at the * end of a proloc-session by proloc_close(). * * (IN) char *ComStr This parameter defines the interface name. * Only * "COM1" and * "COM2" are allowed. * * return EOK(0) is returned on success. * ESERIELL(-1) is returned if it failed. * * for example: * : * : * if ( proloc_open( "COM1" )<0 ) * { * printf( "open error" ); * exit( 1 ); * } * : * : ------------------------------------------------------------------------ ---*/ int proloc_open (char *); Ich kenne mich mit Pointern noch nicht richtig aus aber ich denke in meinen Programm muss ich den Pointer vor dem Aufruf erst deklariern. int main() { char *Comstr="COM1"; proloc_open(ComStr); Ich stehe da momentan auf dem Schlauch. Die Funktion beginnt mit int,die Variable ist aber char. Wer kann mir da weiterhelfen
Du übergibst einen Zeiger auf character und bekommst einen int zurück. Gruß Joachim
Hallo Joachim, danke für die Antwort. Bekomme aber die Fehlermeldung cannot convert int to char char *ComStr= "COM1"; int proloc_open(char *ComStr); Ich denke mein Syntax ist falsch. Oder muss ich COM1 durch den Speicherbereich für COM1 ersetzen. Hier nochmals die gesamte Funktion proloc_open () aus dem source code:
1 | int proloc_open (char *ComStr) |
2 | {
|
3 | BYTE_T IMR; |
4 | |
5 | |
6 | strupr (ComStr); |
7 | |
8 | //
|
9 | // switch to standard bcc mode
|
10 | //
|
11 | |
12 | BCCMode = 0; |
13 | |
14 | //
|
15 | // - open serial port
|
16 | // - init serial interrupt
|
17 | //
|
18 | |
19 | if (strcmp (ComStr, "COM1") == 0) |
20 | {
|
21 | Com = 0; |
22 | |
23 | //
|
24 | // - init IMR - register
|
25 | // - init interrupt routine
|
26 | // - set read mode of rs485
|
27 | //
|
28 | |
29 | IMR = inportb (0x21); |
30 | IMR |= 0x11; |
31 | |
32 | outportb (0x21, IMR); // disable interrupt // |
33 | InitComPort ((BaseAddr = 0x3F0)); |
34 | old_com_isr = getvect (0x0C); |
35 | setvect (0x0C, proloc_ComISR); |
36 | old_timer_isr = getvect (0x08); |
37 | setvect (0x08, proloc_TimerISR); |
38 | |
39 | IMR &= (~0x11); |
40 | |
41 | outportb (0x21, IMR); // enable interrupt // |
42 | inportb (BaseAddr+READ_WRITE); // DUMMY - READ // |
43 | |
44 | return (EOK); |
45 | }
|
46 | |
47 | if (strcmp (ComStr, "COM2") == 0) |
48 | {
|
49 | Com = 1; |
50 | |
51 | //
|
52 | // - init IMR - register
|
53 | // - init interrupt routine
|
54 | // - set read mode of rs485
|
55 | //
|
56 | |
57 | IMR = inportb (0x21); |
58 | IMR |= 0x09; |
59 | |
60 | outportb (0x21, IMR); // disable interrupt // |
61 | InitComPort ((BaseAddr = 0x2F0)); |
62 | old_com_isr = getvect (0x0B); |
63 | setvect (0x0B, proloc_ComISR); |
64 | old_timer_isr = getvect (0x08); |
65 | setvect (0x08, proloc_TimerISR); |
66 | |
67 | IMR &= (~0x09); |
68 | |
69 | outportb (0x21, IMR); // enable interrupt // |
70 | inportb (BaseAddr+READ_WRITE); // DUMMY - READ // |
71 | |
72 | return (EOK); |
73 | }
|
74 | |
75 | return (ERR); |
76 | }
|
Laut readme sind nur COM1 oder COM2 als Werte erlaubt. Ich weiß aber nicht wie ich Sie in meiner Anwendung richtig an die Funktion übergeben kann. Ich kenne mich mit dem Syntax nicht richtig aus. Gruß Udo
> Bekomme aber die Fehlermeldung cannot convert int to char > > char *ComStr= "COM1"; > int proloc_open(char *ComStr); Dein Aufruf sollte z.B. so aussehen:
1 | int Resultat; |
2 | |
3 | Resultat = proloc_open("COM1"); |
Eine weitere Beschäftigung mit diesem Code ist allerdings nutzlos, weil das nur unter DOS funktioniert. So etwas ist unter Betriebssystemen wie Windows oder Linux absolut unzulässig.
Danke für die Info. Das die COM Schnittstelle unter unter 32 Bit Betriebssystemen aus Sicherheitsgründen nicht mehr direkt angesprochen werden kann wusste ich. Ich habe noch einen alten Rechner mit Windows 98 und dem Borland C++ 4.5 Compiler mit dem ich eine einfache DOS Anwendung für den Zugriff auf den Reader erstellen will. Gruß Udo
Läubi .. schrieb: > Unter Win98s gehts auch noch ;) Sicher? Das Ding da frickelt direkt am Interruptcontroller herum und versucht, eigene Interrupthandler zu installieren, das geht nur dann gut, wenn die VDM das wasserdicht abfängt. Udo I. schrieb: > Ich habe noch einen alten Rechner mit Windows 98 > und dem Borland C++ 4.5 Compiler mit dem ich eine einfache DOS Anwendung > für den Zugriff auf den Reader erstellen will. Wenn Du das tun willst, nur zu. Ist halt museales Wissen, das sich nicht sinnvoll andersweitig nutzen lässt.
O.K., du hast recht. Ist natürlich uraltes Zeug. Ich möchte halt nicht alle Funktionen zur Kommunikation mit dem Reader neu schreiben. Ich denke einen Teil der Fuktionen kann man noch verwenden. Wie kann ich die serielle Schnittstelle unter Linux/bzw Windows ansprechen? Gruß Udo
Rufus Τ. Firefly schrieb: > Sicher? Das Ding da frickelt direkt am Interruptcontroller herum Puh... so genau hab ich mir das nicht angeschaut, manches lief auch nur wenn man im "MS-DOS Modus neustarten" wählte ;) Udo I. schrieb: > Wie kann ich die serielle Schnittstelle unter Linux/bzw > Windows ansprechen? Hat das Ding den eine "normale" RS-232 oder wird da die RS-232 nur als I/O mißbraucht? Ansonsten kannst du auch erst mal mit hTerm testen. Udo I. schrieb: > Ich möchte halt nicht alle Funktionen Vermutlich sind diese garnicht so umfangreich und ein neuschreiben laut DB fixer gemacht als dieses "Beispiel" zu verstehen.
Hi all, I read about the issue with rfid r/w. I have the same problem. Someone have solved the problem with this programmer? Tks in advance. Nike
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.