/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
CygWin & Serial/parallel kommunikation ???
Fra : jokaas


Dato : 30-12-03 15:29

Hi folks!

Har søgt, men ej fundet skelet filer til serial og parallel kommunikation
fra kode afviklet på Cygwin/windows..
Skal der nogle .dll'er eller andet til eller ???

Er der nogle her der kan lede mig i rette retning ?

På forhånd tak,
john



 
 
Bertel Brander (30-12-2003)
Kommentar
Fra : Bertel Brander


Dato : 30-12-03 16:56

jokaas wrote:
> Hi folks!
>
> Har søgt, men ej fundet skelet filer til serial og parallel kommunikation
> fra kode afviklet på Cygwin/windows..
> Skal der nogle .dll'er eller andet til eller ???
>
> Er der nogle her der kan lede mig i rette retning ?
>

Du kan gøre det på to måder: "The Unix/Linux way" eller "The Windows
way".

Den første har den fordel at den også virker på Unix/Linux.

Den anden har (efter min mening) den fordel at det er lidt lettere.

Hvis du bruger den første metode skal du bruge open(...) til at
åbne en "fil" der er en port og ioctl(...) til at sætte porten op.
Du læser og skriver vha. read(...) og write(...).

Hvis du bruder den anden metode skal du bruge CreateFile(...) til at
åben filen/porten, SetCommTimeouts(...) og SetCommState(...) til at
sætte porten op, samt WriteFile(...) og ReadFile(...) til at
skrive/læse.

/b


Bertel Brander (01-01-2004)
Kommentar
Fra : Bertel Brander


Dato : 01-01-04 15:04

Bertel Brander wrote:
> jokaas wrote:
>
>> Hi folks!
>>
>> Har søgt, men ej fundet skelet filer til serial og parallel kommunikation
>> fra kode afviklet på Cygwin/windows..
>> Skal der nogle .dll'er eller andet til eller ???
>>
>> Er der nogle her der kan lede mig i rette retning ?
>>
>
> Du kan gøre det på to måder: "The Unix/Linux way" eller "The Windows
> way".
>
> Den første har den fordel at den også virker på Unix/Linux.
>
> Den anden har (efter min mening) den fordel at det er lidt lettere.
>
> Hvis du bruger den første metode skal du bruge open(...) til at
> åbne en "fil" der er en port og ioctl(...) til at sætte porten op.
> Du læser og skriver vha. read(...) og write(...).
>
> Hvis du bruder den anden metode skal du bruge CreateFile(...) til at
> åben filen/porten, SetCommTimeouts(...) og SetCommState(...) til at
> sætte porten op, samt WriteFile(...) og ReadFile(...) til at
> skrive/læse.
>
> /b
>

Jeg fandt lige et lille program jeg en gang lavede, det åbner com-porten
og sender nogle AT-kommandoer. Hvis der sidder en mobil i den anden ende
burde denne svare, svaret vil blive læst og udskrevet. Koden kompilerer
og kører med cygwin. Som du kan se bruger det windows måden.

#include <stdio.h>
#include <windows.h>

void SetTimeOut(HANDLE Port, int sec)
{
COMMTIMEOUTS commtimeouts;
GetCommTimeouts(Port, &commtimeouts);
commtimeouts.ReadIntervalTimeout = 1000*sec;
commtimeouts.ReadTotalTimeoutMultiplier = 10;
commtimeouts.ReadTotalTimeoutConstant = 1000*sec;
SetCommTimeouts(Port, &commtimeouts);
}

void Tx(HANDLE Port, const char *data)
{
DWORD Dummy;
WriteFile(Port, data, strlen(data), &Dummy, 0);
WriteFile(Port, "\r\n", 2, &Dummy, 0);
}

void Rx(HANDLE Port)
{
char Buffer[128];
DWORD Length, i;

ReadFile(Port, Buffer, 128, &Length, 0);

for(i = 0; i < Length; i++)
if(Buffer[i] != '\r')
printf("%c", Buffer[i]);

}

int main(void)
{
DCB dcb;
HANDLE ComPort = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0,
0, OPEN_EXISTING, 0, 0);

GetCommState(ComPort, &dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);

SetTimeOut(ComPort, 1);
Tx(ComPort, "AT");
Rx(ComPort);
Tx(ComPort, "ATZ");
Rx(ComPort);

CloseHandle(ComPort);

return 0;
}


Bertel Brander (01-01-2004)
Kommentar
Fra : Bertel Brander


Dato : 01-01-04 17:37

Bertel Brander wrote:

> Bertel Brander wrote:
>
>> jokaas wrote:
>>
>>> Hi folks!
>>>
>>> Har søgt, men ej fundet skelet filer til serial og parallel
>>> kommunikation
>>> fra kode afviklet på Cygwin/windows..
>>> Skal der nogle .dll'er eller andet til eller ???
>>>
>>> Er der nogle her der kan lede mig i rette retning ?
>>>
>>
>> Du kan gøre det på to måder: "The Unix/Linux way" eller "The Windows
>> way".
>>
>> Den første har den fordel at den også virker på Unix/Linux.
>>
>> Den anden har (efter min mening) den fordel at det er lidt lettere.
>>
>> Hvis du bruger den første metode skal du bruge open(...) til at
>> åbne en "fil" der er en port og ioctl(...) til at sætte porten op.
>> Du læser og skriver vha. read(...) og write(...).
>>
>> Hvis du bruder den anden metode skal du bruge CreateFile(...) til at
>> åben filen/porten, SetCommTimeouts(...) og SetCommState(...) til at
>> sætte porten op, samt WriteFile(...) og ReadFile(...) til at
>> skrive/læse.
>>
>> /b
>>
>
> Jeg fandt lige et lille program jeg en gang lavede, det åbner com-porten
> og sender nogle AT-kommandoer. Hvis der sidder en mobil i den anden ende
> burde denne svare, svaret vil blive læst og udskrevet. Koden kompilerer
> og kører med cygwin. Som du kan se bruger det windows måden.

Programmet burde også virke med et almindeligt modem.

/b


Kent Friis (04-01-2004)
Kommentar
Fra : Kent Friis


Dato : 04-01-04 01:09

Den Tue, 30 Dec 2003 16:56:07 +0100 skrev Bertel Brander:
>jokaas wrote:
>> Hi folks!
>>
>> Har søgt, men ej fundet skelet filer til serial og parallel kommunikation
>> fra kode afviklet på Cygwin/windows..
>> Skal der nogle .dll'er eller andet til eller ???
>>
>> Er der nogle her der kan lede mig i rette retning ?
>>
>
>Du kan gøre det på to måder: "The Unix/Linux way" eller "The Windows
>way".
>
>Den første har den fordel at den også virker på Unix/Linux.
>
>Den anden har (efter min mening) den fordel at det er lidt lettere.
>
>Hvis du bruger den første metode skal du bruge open(...) til at
>åbne en "fil" der er en port og ioctl(...) til at sætte porten op.
>Du læser og skriver vha. read(...) og write(...).

Fungerer tcgetattr() / tcsetattr() ikke under cygwin? De er noget
nemmere at bruge end at kalde ioctl direkte.

Mvh
Kent
--
Help test this great MMORPG game - http://www.eternal-lands.com/

Bertel Brander (04-01-2004)
Kommentar
Fra : Bertel Brander


Dato : 04-01-04 01:29

>>Hvis du bruger den første metode skal du bruge open(...) til at
>>åbne en "fil" der er en port og ioctl(...) til at sætte porten op.
>>Du læser og skriver vha. read(...) og write(...).
>
>
> Fungerer tcgetattr() / tcsetattr() ikke under cygwin? De er noget
> nemmere at bruge end at kalde ioctl direkte.

Det ved jeg ikke, jeg vidste ikke at de fandtes. Prototyperne
findes i <sys/termios.h> så der er en rimelig chance for at de virker.

/b


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408920
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste