:) danke , aber hier habe ich kein icq. leider.
evtl. abends?
mit dem hier kann ich nichts anfangen: IOCTL_SERIAL_CLR_RTS
aber ich bin kräftig am googlen
Druckbare Version
:) danke , aber hier habe ich kein icq. leider.
evtl. abends?
mit dem hier kann ich nichts anfangen: IOCTL_SERIAL_CLR_RTS
aber ich bin kräftig am googlen
Ist eine Konstante
Defined in ntddser.h. Include ntddser.h.
http://www.sysinternals.com/Utilities/Portmon.html
Hier mit kanst du mit hören was dein Comport so mach for allem was das Terminal prg so tut.
Code:#define IOCTL_SERIAL_SET_BAUD_RATE CTL_CODE(FILE_DEVICE_SERIAL_PORT, 1,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_QUEUE_SIZE CTL_CODE(FILE_DEVICE_SERIAL_PORT, 2,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_LINE_CONTROL CTL_CODE(FILE_DEVICE_SERIAL_PORT, 3,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_BREAK_ON CTL_CODE(FILE_DEVICE_SERIAL_PORT, 4,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_BREAK_OFF CTL_CODE(FILE_DEVICE_SERIAL_PORT, 5,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_IMMEDIATE_CHAR CTL_CODE(FILE_DEVICE_SERIAL_PORT, 6,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_TIMEOUTS CTL_CODE(FILE_DEVICE_SERIAL_PORT, 7,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_TIMEOUTS CTL_CODE(FILE_DEVICE_SERIAL_PORT, 8,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_DTR CTL_CODE(FILE_DEVICE_SERIAL_PORT, 9,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_CLR_DTR CTL_CODE(FILE_DEVICE_SERIAL_PORT,10,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_RESET_DEVICE CTL_CODE(FILE_DEVICE_SERIAL_PORT,11,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_RTS CTL_CODE(FILE_DEVICE_SERIAL_PORT,12,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_CLR_RTS CTL_CODE(FILE_DEVICE_SERIAL_PORT,13,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_XOFF CTL_CODE(FILE_DEVICE_SERIAL_PORT,14,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_XON CTL_CODE(FILE_DEVICE_SERIAL_PORT,15,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_WAIT_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT,16,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_WAIT_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT,17,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_WAIT_ON_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT,18,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_PURGE CTL_CODE(FILE_DEVICE_SERIAL_PORT,19,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_BAUD_RATE CTL_CODE(FILE_DEVICE_SERIAL_PORT,20,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_LINE_CONTROL CTL_CODE(FILE_DEVICE_SERIAL_PORT,21,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_CHARS CTL_CODE(FILE_DEVICE_SERIAL_PORT,22,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_CHARS CTL_CODE(FILE_DEVICE_SERIAL_PORT,23,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_HANDFLOW CTL_CODE(FILE_DEVICE_SERIAL_PORT,24,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_HANDFLOW CTL_CODE(FILE_DEVICE_SERIAL_PORT,25,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_MODEMSTATUS CTL_CODE(FILE_DEVICE_SERIAL_PORT,26,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_COMMSTATUS CTL_CODE(FILE_DEVICE_SERIAL_PORT,27,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_XOFF_COUNTER CTL_CODE(FILE_DEVICE_SERIAL_PORT,28,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_PROPERTIES CTL_CODE(FILE_DEVICE_SERIAL_PORT,29,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_DTRRTS CTL_CODE(FILE_DEVICE_SERIAL_PORT,30,METHOD_BUFFERED,FILE_ANY_ACCESS)
hm, ich glaube die winioctl.h hat gefehlt.
ich hab mal den port gesnifft, also das terminalprogramm pollt nur den comport und wenn ich dtr anhacke, wird dieser aktiviert.
nochmal kurz ne frage. cts muss ich auf high ziehen oder?
ansonsten bei masse darf ja der pc senden, oder ist dies sosiso irrelevant?
-------------------
[edit]
jipii, ich glaube ich habs jetzt. es läuft beim tastendruck weiter, aber gleich 2 mal, jetzt ist es aber nichtmehr weit bis zum ziel. den code poste ich in ein paar minuten.
wenn mir jetzt noch jemand sagen kann wiso das programm 2mal durchläuft, obwohl ich nur einmal gedrückt habe, dann mache ich luftsprünge ;)
komischerweisse ist das aber nur bei den ersten 2 mal der fall, dass "er" das programm 2 mal ausführt, danach klappt es wie es sollte - aber leider auchnicht immer.
..
wenn ich wärend der sleeptime drücke, wird das programm nur einmal ausgeführt, dnach immer 2 mal :(
Code:
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <winioctl.h>
using namespace std;
int main(void)
{
DWORD dwfreq=800, dwDuration=200;
DWORD dwEvtMask;
int anzahl=0;
BOOL succ;
///////////////////////////////////////////////////
DCB dcb;
memset(&dcb, sizeof(dcb), 0);
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = CBR_600;
dcb.fBinary = TRUE;
dcb.fParity = TRUE; // enable parity checking
dcb.fOutxCtsFlow = FALSE; // CTS output flow control
dcb.fOutxDsrFlow = FALSE; // DSR output flow control
dcb.fDtrControl = DTR_CONTROL_ENABLE; // DTR flow control type
dcb.fDsrSensitivity = FALSE; // DSR sensitivity
dcb.fTXContinueOnXoff = FALSE; // XOFF continues Tx
dcb.fOutX = FALSE; // XON/XOFF out flow control
dcb.fInX = FALSE; // XON/XOFF in flow control
dcb.fErrorChar = FALSE; // enable error replacement
dcb.fNull = 0; // enable null stripping
dcb.fRtsControl = RTS_CONTROL_ENABLE; // RTS flow control
dcb.fAbortOnError = FALSE; // abort on error
dcb.fDummy2 = 0; // reserved
dcb.wReserved = 0; // not currently used
dcb.XonLim = 0; // transmit XON threshold
dcb.XoffLim =0; // transmit XOFF threshold
dcb.ByteSize = 8; // number of bits/byte, 4-8
dcb.Parity = NOPARITY; // 0-4=no,odd,even,mark,space
dcb.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2
dcb.XonChar = 0; // Tx and Rx XON character
dcb.XoffChar = 0; // Tx and Rx XOFF character
dcb.ErrorChar = 0; // error replacement character
dcb.EofChar = 0; // end of input character
dcb.EvtChar = 0; // received event character
dcb.wReserved1 =0; // reserved; do not use
///////////////////////////////////////////////////
HANDLE hCOM = CreateFile ("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
//////////////////////////////
start:
//////////////////////////////
//warteschelife - damit das signal nicht gleich 2 mal abgegriffen wird
printf("Bitte warten!...");
Sleep(2000);
printf("...Weiter.");
//warteschleife ende
//////////////////////////////
succ= SetCommState(hCOM, &dcb);
//////////////////////////////
cout << "" <<endl;
cout <<"------------------------"<<endl;
cout <<"Auf Signal warten."<<endl;
SetCommMask(hCOM,EV_DSR); //
WaitCommEvent(hCOM,&dwEvtMask,NULL); // auf tastendruck warten
printf("%d",dwEvtMask);
cout <<"<--->"<<endl;
printf("%d",EV_DSR);
if(dwEvtMask & EV_DSR)
{
printf("....jjojojoojojojojoj....");
//noch ein peep ausgeben
Beep (dwfreq,dwDuration);
//cout<<'\a';
//bepp ende
}
cout <<"Signal erhalten."<<endl;
cout <<"------------------------"<<endl;
cout << "" <<endl;
//////////////////////////////
//////////////////////////////
//datei oeffnen
//funktioniert
cout <<"Increment wird geoeffnet."<<endl;
cout <<"------------------------"<<endl;
system("d:\\Dev-Cpp\\Examples\\inc.bat");
cout <<"------------------------"<<endl;
cout <<"Increment beendet."<<endl;
//datei oeffnen ende
//////////////////////////////
//////////////////////////////
++anzahl;
cout << "" <<endl;
cout << "" <<endl;
printf("Es wurde ");
printf("%d",anzahl);
printf(" mal Incrementiert.");
cout << "" <<endl;
cout << "" <<endl;
//////////////////////////////
cout << "****************************" <<endl;
cout << "" <<endl;
goto start;
//////////////////////////////
CloseHandle(hCOM);
return 0;
}
kommt mir so vor als ob der bei jeder flanke und nicht bei jeder 1 an dsr aus dem wait rausspringt.
Das mit der Flake kann gut sein das es ja was mit dem Modem status zutun hat. da muß man immer reagieren wenn sich da was ändert. aber das solltest du doch program techisch abfangen können oder ?.
Sorry ging nicht früher
hi, naja, ich habs ja jetzt hinbekommen.
evtl nehme ich nen schalter oder mach noch nen monoflop rein, wobei eine programmiertechnische lösung die bessere wäre. ich habs gerade so noch hingemurxt glaube ich, naja mal auf die testphase warten :P
ich danke dir aufjedenfall vielmals für deine super hilfe!!!
schon wenn ich dir helfen konnte.
kannst doch einfach fragen bevor du wieder ins Wait gehst op das signal wech ist. Oder machst zwei wait hinter ein ander bei ersten ON bei zweiten OFF dann erst sleep. wenn jetzt bei ein schalten den schalter fest hält klaps.
Sag mal wie beendest du das Prg eingenlich ?
Es ist Klein und fein aber bei mir hätte das ding mindestens ein thread damit ich die sache sauber beenden kann.
Gruß
das muss nicht beendet werden.
es läuft meistens im 2schichtbetrieb und manchmal im 3schichtbetrieb, also denk ich mal reicht das so. ausserdem kann man das betriebssys ja runterfahren und dann gehts mit aus. der pc wird ja für NICHTS anderes verwendet ausser knopf und anzeige.
problem ist sowiso mein mangeldes c++ verständniss/kenntniss.
ich bin so ganz zufrieden weil es ja geht (mit 2 waits) und widme mich nun der dokumentation und der php-oberfläche.