The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Схема простого переключателя для последовательного порта (linux scheme serial hardware)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: linux, scheme, serial, hardware,  (найти похожие документы)
From: Tigran Zakaryan <tigr@irphe.am.> Date: Mon, 18 Apr 2005 16:36:47 +0600 (YEKST) Subject: Схема простого переключателя для последовательного порта Схема переключателя с индикатором текущего режима, подключаемого к последовательному порту и периодически запускающего один из 2 скриптов в зависимости от режима переключателя. switcher.c ------------ /* Simple program to monitor the state of switcher and execute two different scripts according to the state. Current state is displayed by LED indicator Circuit diagram DCD o-------------|------------| DTR o---/\/\/\----| | 10k \\ switcher \\ | GND o--------------------------| ------- | - | | LED | | + | RTS o---/\/\/\-----------------| 1k Author: Tigran Zakaryan tigr@irphe.am */ #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { int fd; int dtr_bit = TIOCM_DTR; int rts_bit = TIOCM_RTS; int flags, cntr_bits; int status, oldstat = -1; // if (argc < 4) { fprintf(stderr, "Usage: switcher <device> <script1> <script2>\\n"); exit(1); } // Daemonize switch(fork()) { case 0: // Child setsid(); break; case -1: // Error exit(1); default: // Parent exit(0); } if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) { exit(1); } // DTR should be high. Force it ioctl(fd, TIOCMGET, &cntr_bits); cntr_bits |= dtr_bit; ioctl(fd, TIOCMSET, &cntr_bits); // Sample the DCD line while(1) { // Get the status ioctl(fd, TIOCMGET, &flags); // Calculate present status status = (flags & TIOCM_CAR); // Did DCD drop to zero? (switch is "ON", light is "ON") if (oldstat != 0 && status == 0) { // Script1 system(argv[2]); // Switch light "ON" ioctl(fd, TIOCMGET, &cntr_bits); cntr_bits |= rts_bit; ioctl(fd, TIOCMSET, &cntr_bits); } // Did DCD come up again? (switch is "OFF", light is "OFF") if ((oldstat == 0 && status != 0) || (oldstat == -1 && status != 0)) { // Script2 system(argv[3]); // Switch light "OFF" ioctl(fd, TIOCMGET, &cntr_bits); cntr_bits &= ~rts_bit; ioctl(fd, TIOCMSET, &cntr_bits); } // Remember status and sleep for 1 second oldstat = status; usleep(1000000); } // Never happens return(0); } Makefile ----------- CC=g++ all: switcher switcher: switcher.c $(CC) -o switcher switcher.c chmod 700 switcher clean: rm -f *~ core switcher

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Piros (?), 10:25, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Немного я не догоню смысл даного девайса.Может кто втолкует.
     
  • 1.2, Slimm (??), 11:08, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Например шкаф открыли где у тебя сервак стоит -
    тебе SMS на моблильник ...
     
  • 1.3, sss (??), 11:11, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    na com-porte visit perekluchatel
    programka schitivayet ego sostoyanie i v zavisimosti ot nego chto-to delaet

    prostenkiy devayc - fakticheski ego mojno postavit i na lpt, i na usb, i daje na sound kartu

     
  • 1.4, whaler (?), 12:18, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я так понимаю, что диод в данном подключении горит всегда. а зачем?
     
     
  • 2.7, tigr (??), 17:49, 22/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    нет, лампочка загорается только в одном из положений и притом только после того, как запустит соотвеиствующий скрипт. Я лично использую этот переключатель для смены parent-proxy
     

  • 1.5, dyug (?), 12:54, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как я понимаю, данная схема есть упрощенное решение
    pport.sf.net ?

    Но pport рассчитан на все 8 выходных линий паралельного порта (который редко чем можно занять на отдельном сервере), и его же 5 входных линий.

    Впрочем, там же есть поддержка и последовательного порта... :-)

     
  • 1.6, DM (??), 19:23, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Извиняюсь за нопросвещенность, но как сделать похожее под ЛПТ?
    Все описывают работу м последовательным портом, а вот с параллельным у меня такое не выходит (точнее выходит, но только путем чтения адресов 0х2(3)79).
    Может, ко-то хоть в нужное русло меня направит?
    Заренее благодарен.
     
     
  • 2.8, Vladimir (??), 13:58, 23/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    ЛПТ это что? Если LPT, то предыдущий писатель даже ссылку дал.
     
     
  • 3.9, DM (??), 14:33, 27/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Я туда даже зашел. Прямо перед написанием вопроса. Потому и написал. Там весьма содержательный материал обнаружился - ссылка на Parent Folder. И дата модификации совсем свежая - 21-May-2003.
    Под ЛПТ действительно подразумевалось LPT.
    Все описывают работу с COM портом, а вот насчет LPT как-то статей не нашлось. Не исключено, что я плохо искал.
     

  • 1.10, pawlo (?), 23:11, 29/09/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Идея неплохая. Похожие устройства работают уже полгода. Я его доработал т.к. мне было мало одного переключателя, сейчас у меня их четыре. Как выложить на сайт я не нашел, но могу выслать схему и программу.
     
  • 1.12, nm11 (?), 14:00, 28/11/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вот схожие проекты
    http://www.linuxfocus.org/Russian/January2001/article186.shtml
    http://www.rtner.de/parsled/
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру