فهمیدم. شما توی هر زبان برنامهنویسی کافیه فایل dev/ttyS0/ رو برای write یا append (مود w یا a) باز کنید. بعد هر چی خواستید روش رایت کنید و برای اینکه فرستاده بشه هر بار flush کنید.
مثلاً با این کد پایتون
f = file('/dev/ttyS0', 'w')
f.write('Hello')
f.flush()
f.write('World')
f.flush()
f.close()
حالا مثل این میمونه که یه سختافزار خارجی به پورت com1 وصل شده و دو تا کلمهٔ Hello و World رو فرستاده!
توی C هم دقیقاً عین همین. با توابع fopen و fread و fflush و fclose (مثل کار با فایلهای معمولی)
برای دریافت دیتا از پورت سریال(واقعی یا مجازی) هم توی پایتون از کتابخانهٔ serial میشه استفاده کرد. مثلاً این کد هر چی که به پورت com1 فرستاده بشه رو کاراکتر به کاراکتر چاپ میکنه(البته عدد معادلش رو).
from serial.serialposix import Serial
import sys
s = Serial(port='/dev/ttyS0', timeout=0.1)
s.open()
while True:
c = s.read(1)
if c!='':
print ord(c), ## No Newline
sys.stdout.flush() ## Because no newline printed at the end of output
تحت ++C هم این کد رو قبلاً نوشته بودم برای کار با پورت سریال:
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <sys/ioctl.h>
#include <unistd.h>
int getRTS(int fd){
int stat;
ioctl(fd, TIOCMGET, &stat);// Read the RTS pin status
return (stat & TIOCM_RTS)!=0;
}
void setRTS(int fd, bool enable){
int cmd = TIOCM_RTS;
if(enable)
ioctl(fd, TIOCMBIS, &cmd); // Set the RTS pin.
else
ioctl(fd, TIOCMBIC, &cmd); // Unset the RTS pin.
}
int getDTR(int fd){
int stat;
ioctl(fd, TIOCMGET, &stat);// Read the DTR pin status
return (stat & TIOCM_DTR)!=0;
}
void setDTR(int fd, bool enable){
int cmd = TIOCM_DTR;
if(enable)
ioctl(fd, TIOCMBIS, &cmd); // Set the RTS pin.
else
ioctl(fd, TIOCMBIC, &cmd); // Unset the RTS pin.
}
int main()
{
int fd;
char buff[100];
int i, wr, rd, n;
fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1 ){
perror("open_port: Unable to open /dev/ttyS0 – ");
return 1;
}
fcntl(fd, F_SETFL,0);
printf("Port 1 has been sucessfully opened and %d is the file description\n",fd);
/*/////////////
printf("\nRTS==%d\n", getRTS(fd));
printf("Unsetting the RTS pin...\n");
setRTS(fd, false);
printf("RTS==%d\n", getRTS(fd));
printf("Setting the RTS pin...\n");
setRTS(fd, true);
printf("RTS==%d\n", getRTS(fd));
///////
printf("\nDTR==%d\n", getDTR(fd));
printf("Unsetting the DTR pin...\n");
setDTR(fd, false);
printf("DTR==%d\n", getDTR(fd));
printf("Setting the DTR pin...\n");
setDTR(fd, true);
printf("DTR==%d\n", getDTR(fd));
printf("\n");
*//////////////
wr=write(fd, "ATZ\r", 5);
read(fd, buff, 10);
printf("Received %s\n", buff);
////////
wr=write(fd, "ATM0L2\r", 4);
read(fd, buff, 10);
printf("Received %s\n", buff);
////////
wr=write(fd, "ATDT9716129\r", 4);
read(fd, buff, 10);
printf("Received %s\n", buff);
////////
//for(i=0; i<10000; i++)
// wr=write(fd, "A\n", 4);
close(fd);
return 0;
}
(تحت C هم فقط بجای bool بذارید int و بجای false بذارید 0 و بجای true بذارید 1)
پس شما نیاز به هیچ درایور یا ابزار خارجی ندارید. با امکانات پایهای خود گنو/لینوکس به راحتی انجام میشه.