Страница 1 из 1
Работа с COM портом
Добавлено: 2007-07-31 23:38:36
termsl
Есть железка самопальная, ей по RS232 (COM-порт) говоришь сделай то-то (несколько байт просто пересылаются) она делает и отвечает - "сделала то-то"
Под виндой без проблемм работает, под Free ничего не накопал .... Железка терминал не потдерживает, просто ты ей несколько байт, она тебе несколько байт в ответ ......
Может кто знает как сделать?
Re: Работа с COM портом
Добавлено: 2007-07-31 23:41:42
Alex Keda
Re: Работа с COM портом
Добавлено: 2007-08-01 7:29:14
termsl
cu создает терминал как я понял
для нормальной работы cu надо чтобы ей с той стороны отвечали..... железка повторяюсь тупая
при запуске
виснят прям как у тебя Лис в посте ... приходится killall делать
Мне более подошел бы алгоритм -
1 вар. открыть порт, сказать, выслушать ответ, закрыть
2 вар. как демон висит слухач, который при старте открывает порт и по команде может говорить.
Re: Работа с COM портом
Добавлено: 2007-08-02 9:17:08
termsl
Разобрался:
Программа посылает символы на входе в обрамлении конструкции " <!XXX> "
Код: Выделить всё
/*
* gcc -O2 -o /test/COM/com /test/COM/com.c
*/
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
#include <locale.h>
#define MAXL 255 /* макс. длина строки */
/*
* 'open_port()' - Open serial port 1.
*
* Returns the file descriptor on success or -1 on error.
*/
int open_port(void)
{
int fd; /* File descriptor for the port */
struct termios options;
fd = open("/dev/cuad0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
/*
* Could not open the port.
*/
perror("open_port: Unable to open /dev/cuad0 :( ");
}
else
{
fcntl(fd, F_SETFL, 0);
printf ("Port OPEN OK!:>\n");
}
tcgetattr(fd, &options);
cfsetispeed(&options, B57600);
cfsetospeed(&options, B57600);
tcsetattr(fd, TCSANOW, &options);
return (fd);
}
int main (argc, argv) char **argv;
{
int fdd;
int n;
char str[10];
printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n| (c) Termsl' 2007 |\n-------------------------\n");
fdd = open_port();
setlocale(LC_ALL, "");
if( argc == 1 )
{
/* программа вызвана без аргументов */
}else{ /* аргументы программы - имена файлов */
while( argv[ 1 ] )
{
printf("<%s> ",argv[1]);
n = write(fdd," <!",3);
n = write(fdd,argv[1], 8);
n = write(fdd,"> ",2);
argv++;
argc--;
}
}
if (n < 0) fputs("write() failed!\n", stderr);
close(fdd);
printf ("\n<: Port CLOSED OK! \n=========================\n\n");
exit(0);
}
Использование:
отошлет в COM1 на скорости 57600 без контроля четности " <!111> <!112> <!113> "