[C]Aansturen parallele poort

Pagina: 1
Acties:

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik ben me al enkele dagen suf aan het zoeken hoe ik onder linux de parallele poort aan kan sturen in C.

Ik vind genoeg voorbeeld code voor het te laten werken onder windows, maar ik zou het graag werkend krijgen onder linux.

Is er iemand die me hiermee zou kunnen helpen?

  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 30-01 01:49

Sprite_tm

Semi-Chinees

Weet je zeker dat je wel de juiste zoekwoorden intikt?

Basically zijn er 2 methoden: de eerste is met behulp van ioperm() access naar de raw poorten aanvragen en dan met inb() en outb() bytes lezen en schijven. De andere is iets moeilijker, die maakt gebruik van de userspace parallel port access kernel-module, wat basically ioctls op /dev/parportx doen betekent. De eerste is leuk om even snel iets in elkaar te hacken, de 2e is beter qua portabiliteit en netheid enzo.

Edit: Ik denk dat het hier best netjes uitgelegd word: http://as6edriver.sourcef...gramming-HOWTO/book1.html

[ Voor 22% gewijzigd door Sprite_tm op 31-03-2006 16:16 ]

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik heb wel iets gevonden dat wel zonder problemen gecompileerd wordt etc.. het maakt gebruik van de poort op adres 0x378 , als ik het echter uitvoer dan zegt hij dat hij de poort niet kan vinden op dat adres.

Ik gebruik Gentoo, in de kernel was parallel port support wel geconfigureerd als module, ik weet niet of dat wat uitmaakt, ben hem nu aan het compileren met support in de kernel..

het is trouwens deze code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>

#define base 0x378           /* printer port base address */

main(int argc, char **argv)
{                    
  int value;

  if (argc!=2)
    fprintf(stderr, "Error: Wrong number of arguments. This program needs one argument which is number between 0 and 255.\n"), exit(1);
  if (sscanf(argv[1],"%i",&value)!=1)
    fprintf(stderr, "Error: Parameter is not a number.\n"), exit(1);
  if ((value<0) || (value>255))
    fprintf(stderr, "Error: Invalid numeric value. The parameter number must be between 0 and 255\n"), exit(1);
  if (ioperm(base,1,1))
    fprintf(stderr, "Error: Couldn't get the port at %x\n", base), exit(1);

  outb((unsigned char)value, base);
}

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-02 18:51

Creepy

Tactical Espionage Splatterer

Je weet dat je root rechten nodig hebt voor ioperm calls?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
ja heb root rechten.

Via dmesg zie ik dat m'n /dev/parport0 wel degellijk op 0x378 zit dus dat kan het probleem niete zijn.

Verder heb ik op google iets gevonden om rechtstreeks de parport aan te spreken via terminal:

echo bits > /dev/parport0

en ook dat doet hij dus niet (geen errors, maar er komen geen pinnen hoog te staan)

*EDIT* De compillatie van de parallele port support in de kernel is net gedaan en nu blijkt het wel effectief te werken _/-\o_

[ Voor 18% gewijzigd door bibawa op 31-03-2006 16:48 ]