Voie parallele coupleur mc 68230 imprimante sous linux

Contenu du snippet

classe permettant le transfert de données entre la voie parrallele d un pc et un coupleur MC 68230
exemple avec une imprimante reliée au coupleur
le tout sous linux

Source / Exemple :


PaCoupleur.h

#ifndef PACOUPLEUR
#define PACOUPLEUR

typedef struct{
	unsigned char offset0,PGCR;
	unsigned char offset2,PSRR;
	unsigned char offset4,PADDR;
	unsigned char offset6,PBDDR;
	unsigned char offset8,PCDDR;
	unsigned char offset10,PIVR;
	unsigned char offset12,PACR;
	unsigned char offset14,PBCR;
	unsigned char offset16,PADR;
	unsigned char offset18,PBDR;
	unsigned char offset20,PAAR;
	unsigned char offset22,PBAR;
	unsigned char offset24,PCDR;
	unsigned char offset26,PSR;
	unsigned char offset28,TCR;
	unsigned char offset30,TIVR;
	unsigned char offset32,CPRH;
	unsigned char offset34,CPRM;
	unsigned char offset36,CPRL;
	unsigned char offset38,CNTRH;
	unsigned char offset40,CNTRM;
	unsigned char offset42,CNTRL;
	unsigned char offset44,TSR;
}coupleur;

class PaCoupleur{
private:
int ID;
coupleur *ptcoupleur;
bool Etat();
public:
bool port_ouvert;
PaCoupleur();
~PaCoupleur();
bool Ecrire(char);
};

#endif

PaCoupleur.cpp

#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include "PaCoupleur.h"

#define Adbase 0xFFFF1000

PaCoupleur::PaCoupleur()
{
	if((ID=open("/dev/mem",O_RDWR))>=0)
	{
		ptcoupleur=(coupleur*)mmap(NULL,1024,PROT_READ|PROT_WRITE,MAP_SHARED,ID,Adbase);
		if(ptcoupleur!=MAP_FAILED)
		{
		cout<<hex<<ptcoupleur<<endl;
		port_ouvert=true;
	//validation des lignes	
	ptcoupleur->PGCR=0x24;
		//mode main impulsionnel sous mode 01
		ptcoupleur->PBCR=0x78;
	

		//sortie
		ptcoupleur->PBDDR=255; //#11111111
		}
		else
		{
		port_ouvert=false;
		}
	}
	else
	port_ouvert=false;
}

PaCoupleur::~PaCoupleur()
{
	if(port_ouvert==true)
	{
	//fermeture
	munmap(ptcoupleur,sizeof(coupleur));
	close(ID);
	}
}

bool PaCoupleur::Etat()
//renseigne sur l etat des buffers
{
	return(true);
}

bool PaCoupleur::Ecrire(char caractere)
{
	ptcoupleur->PBDR=caractere;
	ptcoupleur->PBDR=0x0d;
        
	return(true);
}

main.cpp

#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include "PaCoupleur.h"

using namespace std;

PaCoupleur *O_PaCoupleur=NULL;

int main(void)
{
	char caractere;
	O_PaCoupleur=new PaCoupleur();
	if(O_PaCoupleur->port_ouvert==true)
	{
		cout<<"Entre la valeur à ecrire: "<<endl;
		cin>>caractere;
		O_PaCoupleur->Ecrire(caractere);
	}
	else
	{
		cerr<<"Erreur d'ouverture de la voie parrallele"<<endl;
	}
	delete O_PaCoupleur;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.