Ragazzi utilizzando il seguente codice non riesco ad avere risposta dal modem.
premetto che nel file "miofile.txt" è presente la seguente stringa ATI1 e dovrei ricevere come risposta 255.
Aiuto per piacere.
codice:
int main(int argc, char *argv[])
{
BOOL fSuccess; // gestione degli errori
//parametri per la funzione WriteFile
int lpBuffer;
DWORD NumeroDiBytesDaScrivere = 1;
DWORD NumeroDiBytesScritti;
BOOL bResult;
DCB dcb;
FILE *fp;
//apro la porta COM
HANDLE hCom = CreateFile("COM3", // ad esempio
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
// verifico l'effettiva disponibilità (potrebbe non esistere)
if(!hCom) {
printf("Problemi alla porta di comunicazione e relativo errore!!!\nEI=%d",GetLastError());
return 0; }
// e verifico lo stato della stessa
fSuccess = GetCommState(hCom,&dcb);
if (!fSuccess) {
printf("La porta selezionata è già in uso!!!: EI=%d",GetLastError());
return 0; }
// Inizializzo la DCB con i parametri desiderati (non a piacere: vi sono delle regole) di ricezione/trasmissione
dcb.BaudRate = 115200; // velocità dei dati (bit) al secondo
dcb.ByteSize = 7; // numero di bit
dcb.Parity = 0; // parità
dcb.StopBits = 0; // numero di bits di stop
// e setto la porta COM con i valori sopra (9800/7/0/2)
// leggere con attenzione sul Win32 SDK gli ulteriori parametri di questa struttura
fSuccess = SetCommState(hCom, &dcb);
// verifica dell'effettivo settaggio
if(!fSuccess) {
printf("settaggio non riuscito!!!: EI=%d",GetLastError());
CloseHandle(hCom);
return 0; }
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//apro il file da trasferire
fp = fopen("miofile.txt","r");
if(!fp) {
printf("problemi nel file!!\nEI=%d",GetLastError());
CloseHandle(hCom);
return 0; }
printf("trasmissione in corso\n");
//invio i dati alla porta COM
while( ( lpBuffer = fgetc(fp)) != EOF)
{
printf("%c",lpBuffer);
bResult = WriteFile(hCom, &lpBuffer, NumeroDiBytesDaScrivere, &NumeroDiBytesScritti, NULL) ;
if(!bResult) {
printf("errore in trasmissione dati"); // da studiare col valore di ritorno della GetLasError();
fclose(fp);
CloseHandle(hCom);
return 0; }
}
//end while( ( lpBuffer = fgetc(fp)) != EOF)
//end while( ( lpBuffer = fgetc(fp)) != EOF)
// chiudo il file trasmesso
ReadFile(hCom, &lpBuffer, NumeroDiBytesDaScrivere, &NumeroDiBytesScritti, NULL);
printf("carattere:%c\n",lpBuffer);
ReadFile(hCom, &lpBuffer, NumeroDiBytesDaScrivere, &NumeroDiBytesScritti, NULL);
printf("carattere:%c\n",lpBuffer);
ReadFile(hCom, &lpBuffer, NumeroDiBytesDaScrivere, &NumeroDiBytesScritti, NULL);
printf("carattere:%c\n",lpBuffer);
ReadFile(hCom, &lpBuffer, NumeroDiBytesDaScrivere, &NumeroDiBytesScritti, NULL);
fclose(fp);
//chiudo la porta COM
bResult = CloseHandle(hCom);
if(!bResult) printf("errore sulla chiusura della porta COM\n");
printf("FILE TRANSFER END\n");
return 0;
}