/* --- The following code comes from c:\programme\lcc\lib\wizard\textmode.tpl. */ #include #include #include #include #include #include #include "error.h" #include "tools.h" #define ESC 27 #define EOL 13 /* end of line */ #define EOT 4 #define COM_BUFFER_SIZE 256 #define RECVBYTES 32 // max. recv. bytes per transmission #define STX 0x02 #define ETX 0x03 #define Pointer 0x00 // ?? Pointer sind 4 Byte lang? #define CHK 0x3E #define ENQ 0x05 void Usage(char *programName); int seriell(char *string); const char * dump(const unsigned char *ucHex, const size_t length, char *pszBuffer); char sys_str_schreiben2[] = "regedit.exe /s kws_schreiben2.reg"; char sys_str_schreiben3[] = "regedit.exe /s kws_schreiben3.reg"; char mem_lst_array[200][80]; //Das eigentliche Programm: /* File: serialcom.c Author: Karlheinz Zeiner Purpose: Sample C program (MS-Windows console application) Read from and write to a serial interface with API-functions. Platform: WIN95, WIN98, WIN-NT, ... */ int main(int argc,char *argv[]) { char sys_str_lesen[] = "regedit.exe /a kws_gelesen.reg HKEY_CURRENT_USER\\Software\\KWS_AMA_214S_Tool"; char sys_str_loeschen[] = "regedit.exe /s kws_loeschen.reg"; char mem_lst[]= "C:\\Programme\\KWS AMA210s\\channel_mem_write_from_exel2b.txt"; char rs232_out[32]=""; char rs232_send[32]=""; char temp[32]=""; char *p_rs232_out=0; char rs232_in[80]=""; char *p_rs232_in=0; DWORD iBytesWritten; BOOL kws_schnitte=FALSE; BOOL wait=FALSE; int i=0, j=0; int kommazaehler=0; DCB dcb; // device control block HANDLE hCom; BOOL fSuccess; BOOL bLineEnd; char cKb; DWORD BytesRead, BytesWrite; COMMTIMEOUTS timeouts; if(argc > 1) { /* handle the program options */ HandleOptions(argc,argv); return 1; } // DCB and COMMTIMEOUTS are system-defined structures, // HANDLE, BOOL, DWORD are predefined simple datatypes (typedef's) // The used constants are also defined in the windows-header files if(!tabelle_file_lesen()) { printf("EXIT: sys_str_schreiben2 -> %s: \n", sys_str_schreiben2); system((char *)sys_str_schreiben2); printf("EXIT: REG_COM2 geschrieben \n"); return 0; } //fprintf(stderr,"1: Tabelle gelesen \n"); i=0; system((char *)sys_str_schreiben3); //fprintf(stderr,"2: sys_str_schreiben3 \n"); if(reg_key_lesen_kws_com((char *)sys_str_lesen, &comm)) { fprintf(stderr,"aus REG_KEY gelesen: "); fprintf(stderr,"%s ", comPRTstr(comm.com__-1)); fprintf(stderr," %ld Baud ", comm.baud__); fprintf(stderr," %d Stoppbit \n\n", comm.stppbt__); hCom = CreateFile(comPRTstr(comm.com__-1),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); // wenn ungültig if( hCom == INVALID_HANDLE_VALUE ) { fprintf(stderr,"1. ERROR open %s \n", comPRTstr(comm.com__)); fprintf(stderr,"Teste andere\n\n"); } else { kws_schnitte=TRUE; fSuccess = CloseHandle(hCom); } hCom = CreateFile(comPRTstr(2-1),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); // wenn ungültig if( hCom == INVALID_HANDLE_VALUE ) { fprintf(stderr,"2, ERROR open %s \n", comPRTstr(comm.com__)); fprintf(stderr,"Teste andere\n\n"); } else { kws_schnitte=TRUE; fSuccess = GetCommState(hCom, &dcb); PERR(fSuccess, "GetCommState"); // configure the port //typedef struct _DCB { // DWORD DCBlength; dcb.BaudRate = 19200L; // DWORD BaudRate; // unsigned fBinary:1; // unsigned fParity:1; // unsigned fOutxCtsFlow:1; // unsigned fOutxDsrFlow:1; dcb.fDtrControl = DTR_CONTROL_DISABLE; // unsigned fDtrControl:2; // unsigned fDsrSensitivity:1; // unsigned fTXContinueOnXoff:1; // unsigned fOutX:1; dcb.fInX = 1; // unsigned fInX:1; // unsigned fErrorChar:1; // unsigned fNull:1; // unsigned fRtsControl:2; // unsigned fAbortOnError:1; // unsigned fDummy2:17; // WORD wReserved; // WORD XonLim; // WORD XoffLim; dcb.ByteSize = 8; // BYTE ByteSize; dcb.Parity = NOPARITY; // BYTE Parity; dcb.StopBits = TWOSTOPBITS; // BYTE StopBits; dcb.XonChar = 17; // char XonChar; dcb.XoffChar = 19; // char XoffChar; // char ErrorChar; dcb.EofChar = 4; // char EofChar; // char EvtChar; // WORD wReserved1; //} DCB,*LPDCB; fSuccess = SetCommState(hCom, &dcb); PERR(fSuccess, "SetCommState"); fSuccess = GetCommTimeouts (hCom, &timeouts); PERR(fSuccess, "GetCommTimeouts"); // Only to show the content of the COMMTIMEOUTS structur /* printf("Timeout-values:\n" "ReadIntervalTimeout = %u\n" "ReadTotalTimeoutMultiplier = %u\n" "ReadTotalTimeoutConstant = %u\n" "WriteTotalTimeoutMultiplier = %u\n" "WriteTotalTimeoutConstant = %u\n", timeouts.ReadIntervalTimeout, timeouts.ReadTotalTimeoutMultiplier, timeouts.ReadTotalTimeoutConstant, timeouts.WriteTotalTimeoutMultiplier, timeouts.WriteTotalTimeoutConstant); */ // Set timeout to 0 to force that: If a character is in the buffer, the // character is read, If no character is in the buffer, the function do // not wait and returns immediatly timeouts.ReadIntervalTimeout = MAXDWORD; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.ReadTotalTimeoutConstant = 0; fSuccess = SetCommTimeouts (hCom, &timeouts); PERR(fSuccess, "SetCommTimeouts"); //strcpy(rs232_out, "FM,104.05,O"); // rtl104.6 im Kabel //strcpy(rs232_out, "FM,104.60,O"); // rtl104.6 Antenne //strcpy(rs232_out, "FM,94.30,O"); // rs2 Antenne //strcpy(rs232_out, "FM,100.75,O"); // rs2 im Kabel strcpy(rs232_out, "TV,245.25,O"); // TV Kabel1 //strcpy(rs232_out, "SAT,950,LNC0"); //strcpy(rs232_out, ""); // leerstring //fprintf(stderr,"3: rs232_out:\"%s\" \n", rs232_out); j=0; while(j<200) { if(strlen(mem_lst_array[j])<7) strcpy(rs232_send, rs232_out); else { strcpy(rs232_send, hole_mem(j, mem_lst_array[j])); strcpy(temp, rs232_send); //fprintf(stderr,"4: rs232_send:\"%s\" \n", rs232_send); strcat(rs232_send, "\r"); if(!WriteFile(hCom, &rs232_send, strlen(rs232_send), &iBytesWritten, NULL)) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL); MessageBox(NULL, (LPCTSTR)lpMsgBuf, "Error: WriteFile", MB_OK | MB_ICONINFORMATION); LocalFree(lpMsgBuf); } // if(!WriteFile(hCom....... else { printf( "\n\n--------------------------------------------------------------------------\n" "Wait for inputs from the serial port\n" "Gets maximal 70 characters until a EndOfLine character (RETURN) is detected\n\n"); /* if(*strrchr(rs232_out, ',')) *strrchr(rs232_out, ',')=0; else strcpy(rs232_out, "\"leer\""); */ strcpy(rs232_in, ""); i = 0; bLineEnd = FALSE; do { // look for a character in the input buffer ReadFile ( hCom, &rs232_in[i], 1, &BytesRead, NULL); if (BytesRead > 0) { // a character was read, show the character and the ASCII -Code //printf("%c<%03u>", rs232_in[i], rs232_in[i]); if (rs232_in[i] == EOT || rs232_in[i] == EOL ) // check end of line bLineEnd = TRUE; i++; } if(bLineEnd || i > 70) { if(strlen(rs232_in)) rs232_in[--i] = '\0'; while (rs232_in[i]!=EOT && rs232_in[i]!=EOL && i<70) i++; *strstr(temp,",O,S,")=0; *strstr(rs232_in,"MHz,")=0; if(!strcmp(rs232_in, temp)) kws_schnitte=TRUE; (kws_schnitte) ? printf("3: kws_schnitte = TRUE\n") : printf("3: kws_schnitte = FALSE\n"); printf("%s \n", rs232_in); } // give us a chance to end the program with ESC from keyboard if (kbhit()) cKb = getch(); } while (cKb != ESC && !bLineEnd ); /* fSuccess = CloseHandle(hCom); PERR(fSuccess, "CloseHandle"); */ } // if(WriteFile(hCom....... } // if(strlen(mem_lst_array[j])) j++; }; // while(j<200) } // if !( hCom == INVALID_HANDLE_VALUE ) } // if(reg_key_lesen_kws_com((char *)sys_str, &comm)) // wenn nicht vorhanden, erzeugen /* REGEDIT4 // Leerzeile [HKEY_CURRENT_USER\Software\KWS_AMA_214S_Tool] "Port"="COM1" "Baud"="19200" "StopBit"="2" // Leerzeile */ // if no arguments we call the Usage routine and exit // Usage(argv[0]); printf("EXIT: sys_str_schreiben2 -> %s: \n", sys_str_schreiben2); system((char *)sys_str_schreiben2); printf("EXIT: REG_COM2 geschrieben \n"); return 0; } /* Exportieren von einzelnen Schlüsseln in eine Regdatei älteren Formats (V4) (ohne Dialoge): /a bzw. /A Beispiel: regedit.exe /a c:\hklm_run.reg HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run Importieren einer Regdatei in die Registry (mit Fragedialog): Beispiel: regedit.exe meinRegfile.reg Importieren einer Regdatei in die Registry (ohne Dialoge, also still, engl. silent): Beispiel: regedit.exe /s meinRegfile.reg KWS_AMA_214S_Tool.reg Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\KWS_AMA_214S_Tool] "Port"="COM2" "Baud"="19200" "StopBit"="2" regedit.exe in c:\WINDOWS ------ path %SystemRoot% */