digitalmars.D.learn - communicating with a com port
- Miguel F. Simoes (14/14) Jun 01 2005 I have been working on a project that will use language D to create the
- Regan Heath (29/43) Jun 01 2005 Same way you'd do it in C. AFAIK there is no D library for this yet.
- Regan Heath (2/46) Jun 01 2005 EDIT: 'there' == 'these', or should I say 'there' is 'these' ;)
- Brad Beveridge (6/64) Jun 01 2005 I think that inp/outp will probably map to similar C functions. IIRC
- Miguel F. Simoes (3/3) Jun 01 2005 Thanks a lot.
- Tom S (5/9) Jun 01 2005 In the dark C++ days I used to have a *little* COM library working on
- Regan Heath (11/20) Jun 01 2005 Cool. I'm not 100% certain, but I believe on FreeBSD and OSX you get
- Miguel F. Simoes (7/88) Jun 01 2005 Very cool.
I have been working on a project that will use language D to create the graphical user interface. The application needs to communicate with a Microchip Picdem Z Board. The board can be accessed by COM4. How can I communicate with COM4 using D? I have noticed that Phobos has some functions that can be related with this: ubyte inp(uint port_address) ushort inpw(uint port_address) uint inpl(uint port_address) ubyte outp(uint port_address, ubyte value) ushort outpw(uint port_address, ushort value) uint outpl(uint port_address, uint value) How should I use them? Greetings, Miguel Ferreira Simoes
Jun 01 2005
On Wed, 1 Jun 2005 21:47:40 +0100, Miguel F. Simoes <Kobold netcabo.pt> wrote:I have been working on a project that will use language D to create the graphical user interface. The application needs to communicate with a Microchip Picdem Z Board. The board can be accessed by COM4. How can I communicate with COM4 using D?Same way you'd do it in C. AFAIK there is no D library for this yet. [On windows]--- CreateFile - to open port GetCommTimeouts - to get timeouts SetCommTimeouts - to set timeouts GetCommState - to get state/mode SetCommState - to set state/mode CloseHandle - to close port WaitCommEvent - to wait for input/output/etc ReadFile - to read from port WriteFile - to write to port --- [On unix]--- open - to open port tcgetattr - to get state/mode tcsetattr - to set state/mode close - to close port select - to wait for input/output read - to read from port write - to write to port --- [on FreeBSD/OS-X]--- cfsetispeed - to set input baud cfsetospeed - to set output baud ---I have noticed that Phobos has some functions that can be related with this: ubyte inp(uint port_address) ushort inpw(uint port_address) uint inpl(uint port_address) ubyte outp(uint port_address, ubyte value) ushort outpw(uint port_address, ushort value) uint outpl(uint port_address, uint value) How should I use them?I'm not sure what there do :) Regan
Jun 01 2005
On Thu, 02 Jun 2005 09:16:29 +1200, Regan Heath <regan netwin.co.nz> wrote:On Wed, 1 Jun 2005 21:47:40 +0100, Miguel F. Simoes <Kobold netcabo.pt> wrote:EDIT: 'there' == 'these', or should I say 'there' is 'these' ;)I have been working on a project that will use language D to create the graphical user interface. The application needs to communicate with a Microchip Picdem Z Board. The board can be accessed by COM4. How can I communicate with COM4 using D?Same way you'd do it in C. AFAIK there is no D library for this yet. [On windows]--- CreateFile - to open port GetCommTimeouts - to get timeouts SetCommTimeouts - to set timeouts GetCommState - to get state/mode SetCommState - to set state/mode CloseHandle - to close port WaitCommEvent - to wait for input/output/etc ReadFile - to read from port WriteFile - to write to port --- [On unix]--- open - to open port tcgetattr - to get state/mode tcsetattr - to set state/mode close - to close port select - to wait for input/output read - to read from port write - to write to port --- [on FreeBSD/OS-X]--- cfsetispeed - to set input baud cfsetospeed - to set output baud ---I have noticed that Phobos has some functions that can be related with this: ubyte inp(uint port_address) ushort inpw(uint port_address) uint inpl(uint port_address) ubyte outp(uint port_address, ubyte value) ushort outpw(uint port_address, ushort value) uint outpl(uint port_address, uint value) How should I use them?I'm not sure what there do :)
Jun 01 2005
Regan Heath wrote:On Thu, 02 Jun 2005 09:16:29 +1200, Regan Heath <regan netwin.co.nz> wrote:I think that inp/outp will probably map to similar C functions. IIRC they are pretty much x86 specific & you could use them to access IO space on the mother board. Ie, outb(0x37F) writes to the parallel port (I think - very hazy here) BradOn Wed, 1 Jun 2005 21:47:40 +0100, Miguel F. Simoes <Kobold netcabo.pt> wrote:EDIT: 'there' == 'these', or should I say 'there' is 'these' ;)I have been working on a project that will use language D to create the graphical user interface. The application needs to communicate with a Microchip Picdem Z Board. The board can be accessed by COM4. How can I communicate with COM4 using D?Same way you'd do it in C. AFAIK there is no D library for this yet. [On windows]--- CreateFile - to open port GetCommTimeouts - to get timeouts SetCommTimeouts - to set timeouts GetCommState - to get state/mode SetCommState - to set state/mode CloseHandle - to close port WaitCommEvent - to wait for input/output/etc ReadFile - to read from port WriteFile - to write to port --- [On unix]--- open - to open port tcgetattr - to get state/mode tcsetattr - to set state/mode close - to close port select - to wait for input/output read - to read from port write - to write to port --- [on FreeBSD/OS-X]--- cfsetispeed - to set input baud cfsetospeed - to set output baud ---I have noticed that Phobos has some functions that can be related with this: ubyte inp(uint port_address) ushort inpw(uint port_address) uint inpl(uint port_address) ubyte outp(uint port_address, ubyte value) ushort outpw(uint port_address, ushort value) uint outpl(uint port_address, uint value) How should I use them?I'm not sure what there do :)
Jun 01 2005
Thanks a lot. It is my first time communicating with a com port. Miguel
Jun 01 2005
Miguel F. Simoes wrote:I have been working on a project that will use language D to create the graphical user interface. The application needs to communicate with a Microchip Picdem Z Board. The board can be accessed by COM4. How can I communicate with COM4 using D?In the dark C++ days I used to have a *little* COM library working on Linux... Attaching its sources here, maybe you'll find some use for them :) -- Tomasz Stachowiak /+ a.k.a. h3r3tic +/
Jun 01 2005
On Wed, 01 Jun 2005 23:28:39 +0200, Tom S <h3r3tic remove.mat.uni.torun.pl> wrote:Miguel F. Simoes wrote:Cool. I'm not 100% certain, but I believe on FreeBSD and OSX you get trouble with this line: options.c_cflag = CBAUD | B9600 | CS8 | CREAD | CLOCAL; as it does not expect the baud there (IIRC it's a number not a flag on freeBSD), instead you must use cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); only. Of course, linux is fine with it either way. ReganI have been working on a project that will use language D to create the graphical user interface. The application needs to communicate with a Microchip Picdem Z Board. The board can be accessed by COM4. How can I communicate with COM4 using D?In the dark C++ days I used to have a *little* COM library working on Linux... Attaching its sources here, maybe you'll find some use for them :)
Jun 01 2005
Very cool. I will have a depper look at it. Thanks! "Tom S" <h3r3tic remove.mat.uni.torun.pl> escreveu na mensagem news:d7l9a8$2j1g$1 digitaldaemon.com...Miguel F. Simoes wrote:--------------------------------------------------------------------------------I have been working on a project that will use language D to create the graphical user interface. The application needs to communicate with a Microchip Picdem Z Board. The board can be accessed by COM4. How can I communicate with COM4 using D?In the dark C++ days I used to have a *little* COM library working on Linux... Attaching its sources here, maybe you'll find some use for them :) -- Tomasz Stachowiak /+ a.k.a. h3r3tic +/typedef unsigned char byte; class Comm { public: enum CommStatus { COMM_ERR = 0, COMM_OK = 1, COMM_NULL = 2 }; int fd; CommStatus open(); CommStatus send(const byte *const data, const unsigned len); CommStatus recvbyte(byte *const data); CommStatus recv(byte* data, int size); Comm() : fd(-1) {} ~Comm() { if (fd != -1) close(fd); fd = -1; } };--------------------------------------------------------------------------------#include <cstdlib> #include <cstdio> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include "rs232.h" typedef unsigned char byte; Comm::CommStatus Comm::open() { fd = ::open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (-1 == fd) return COMM_ERR; struct termios options; tcgetattr(fd, &options); tcflush(fd, TCIFLUSH); options.c_cflag = CBAUD | B9600 | CS8 | CREAD | CLOCAL; options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_iflag &= ~(INPCK | ISTRIP); options.c_iflag &= ~(IXON | IXOFF | IXANY); options.c_oflag &= ~OPOST; cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); tcsetattr(fd, TCSANOW, &options); return COMM_OK; } Comm::CommStatus Comm::send(const byte *const data, const unsigned len) { int status = ::write(fd, data, len); if (status < 0) return COMM_ERR; else return COMM_OK; } Comm::CommStatus Comm::recvbyte(byte *const data) { int status = ::read(fd, data, 1); if (status < 0 && errno == EAGAIN) return COMM_NULL; else if(status < 0) return COMM_ERR; return COMM_OK; } Comm::CommStatus Comm::recv(byte* data, int size) { CommStatus st = recvbyte(data); if (st != COMM_OK) return st; if (1 == size--) return st; fcntl(fd, F_SETFL, 0); while (size-- > 0) { st = recvbyte(++data); if (st != COMM_OK) break; } fcntl(fd, F_SETFL, FNDELAY); return st; }
Jun 01 2005