Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Программирование LPT порта  (Прочитано 1661 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Shalmaran

  • Автор темы
  • Активист
  • *
  • Сообщений: 837
  • Cow super power!
    • Просмотр профиля
    • kristyushatmb.livejournal.com
Программирование LPT порта
« : 26 Апрель 2011, 10:08:23 »
Установил в свой компьютер плату LPT, она заработала (принтером оттестировал), но из программы все обращения к порту - пустые... Может кто поделится со мной секретом, как в Ubuntu правильно программировать LPT порт. Да и еще одна сложность в том, что платка то в PCI шину вставлена, то есть, выставить режим "двунаправленной передачи" через BIOS я не могу. А задача дополнительно требует именно этот режим. Господа программисты, гики и просто форумчане, подскажите) А то куда не посмотришь - везде про Windows, или как в ДОС-е было, а так я и сам умею...
Banana Pi

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3474
  • nix - вот оно счастье...
    • Просмотр профиля
Re: Программирование LPT порта
« Ответ #1 : 26 Апрель 2011, 10:11:51 »
Пример: если это то что вам действительно надо...
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>
#include <sys/types.h>
#include <fcntl.h>

#define BASEPORT 0x378 /* lp1 */

int main() {
char c;
int n, tem;

printf("Hit any key to stop\n");

//set permissions to access port
if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}

tem = fcntl(0, F_GETFL, 0);
fcntl (0, F_SETFL, (tem | O_NDELAY));

//main loop where actual blinking is done
while (1) {
//if some key is pressed, break out from loop
n = read(0, &c, 1);
if (n > 0) break;

//write 'on' bit on all data pins and wait 1/4 second
outb(255, BASEPORT);
usleep(250000);

//write 'off' bit on all data pins and wait 1/4 second
outb(0, BASEPORT);
usleep(250000);
}

fcntl(0, F_SETFL, tem);
outb(0, BASEPORT);

//take away permissions to access port
if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}

exit(0);
}
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Программирование LPT порта
« Ответ #2 : 26 Апрель 2011, 14:42:54 »
ТС, гуглите (можно по форуму)
lp
 и будет Вам счастье.

Оффлайн Shalmaran

  • Автор темы
  • Активист
  • *
  • Сообщений: 837
  • Cow super power!
    • Просмотр профиля
    • kristyushatmb.livejournal.com
Re: Программирование LPT порта
« Ответ #3 : 04 Май 2011, 10:19:28 »
После выполнения вашей программы, собственно, как и моей, напряжение появляеися на линии D3 (4 вывод порта)...

Но ведь принтер как-то на этом порту работает же!
Banana Pi

 

Страница сгенерирована за 0.132 секунд. Запросов: 25.