🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #17736

Communiceren met modem [Linux/gcc]

#17736
From: Alain Van der Eycken
Date: Fri, 12 Nov 1999 00:00
84 lines
2993 bytes
Hi Folks :)

Graag een beetje raad ivm de bijgevoegde broncode.
Zo vind ik de "sleep(2)" om te wachten tot de modem klaar is met zenden
een behoorlijk lompe oplossing. Dat  moet anders kunnen, en ik hoop dat
iemand me kan vertellen hoe. Zou het monitoren van de niveau's op de
hardware lijnen een oplossing kunnen zijn ?
Een tweede vraag heeft te maken met het gedrag vande string array
"receive".
Als ik die definieer als "receive[0]" (in de lijn waarin gelezen wordt
van
de poort, wordt dan 1024 wel aangehouden als lengte van de te lezen
string)
dan blijkt na uitvoering van het proggie, dat "receive" *toch* alle
karakters heeft opgenomen. (in geval van een ATI4 string een stuk of
650)

Kan iemand mij dat mechanisme es uitleggen ? Als zoiets werkt, waarom
dienen we dan nog de grootte van arrays aan te geven als we een array
definieren ?

Dank u bij voorbaat,

Regards,
Alain


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

/*start*/

int main(void)
{
	    /*een paar noodzakelijke int's*/
        int pt, comport;

        /*een string, van 1024 karakters, ruim gekozen
         *om er zeker van dat er ruimte is voor alle
         *modemoutput. Als ieamnd wat beters weet...*/
        char receive[1024];
	
	
        /*open de comport*/
        comport = open("/dev/ttyS0", O_RDWR | O_NDELAY | O_NOCTTY);

	    /*print failure, dan wel success*/
        if (comport < 0)
	{
		printf("Open Device Failed\n");
		exit (EXIT_FAILURE);
	}
	else
		printf("Open Device OK\n\n");

        /*stuur een at-commando naar de modem dat flink wat output
         *genereert*/
        write(comport, "ATZI4\r", 5);

        /*Dit stoort me dus mateloos. Kan iemand me een betere manier
         *vertellen om erachter te komen wanneer de modem klaar is met
         *karakters sturen ? Als ik ATI4I5 naar de modem stuur,
         *is 2 sec zelfs niet eens lang genoeg om alle output te
         *lezen Hoe doe ik dit beter ???????? */ 	
         sleep(2);

	   /*lees wat de modem te vertellen heeft*/
        pt = read(comport, receive, 1024);

    /*druk de gelezen string af*/
	printf("The Read returned : %s\n", receive);
	printf("The number of characters returned : %d\n", strlen(receive));
	
	    /*sluit de poort*/
        close(comport);
	
	return (EXIT_SUCCESS);
}
Technical Details
Message-ID: <382BD9D3.6C9902E7@village.uunet.be>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,dc826121a59f8386,start
X-Google-Attributes: gidfcea4,public
From: Alain Van der Eycken <zidaya@village.uunet.be>
Subject: Communiceren met modem [Linux/gcc]
Date: 1999/11/12
Message-ID: <382BD9D3.6C9902E7@village.uunet.be>
X-Deja-AN: 547681580
Content-Transfer-Encoding: 7bit
Organization: UUNET Benelux (post does not reflect views of UUNET Benelux)
X-Accept-Language: en
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0
Newsgroups: be.comp.programming