Porta paralela

4 respostas
P
Eu ja  tentei  utilizar  o javax.comm , o RXTX,  o parport.dll , todos  eles  sem exito, sempre mostrando a  mensagem  de  erro : java.lang.UnsatisfiedLinkError:

, e sempre seguindo todos os passos , será que não existe uma forma mais simples de utilizar a porta paralela, ja até pensei em fazer a aplicação em .net , mas é contra o plano da empresa

4 Respostas

P

Olha cara eu utilizo bastante o Java para a leitura e escrita na porta serial. Pelo que vi a porta paralela é complicada mesmo utilizando Java, pois vc não consegue acender e apagar bits na porta paralela usando somente a API do Java.

Uma dica: faça uma dll padrão JINI (acho que é assim que escreve) dessa forma vc pode consumir a dll na sua aplicação e resolver os seus problemas de leitura/escrita na paralela.

Vlw.

P

na verdade eu preciso escrever um byte em um endereço , no caso seria 888 decimal e 378 em hexa , poderia ter alguma intrução que fizesse endereçamento de dados , nunca tive problemas com isso em outras linguagens , até em assembly eu ja consegui fazer , sera que eu consigo utilizar uma classe feita em C++ para essa funalidade ? , para fazer a dll em padrao JNI que recurso eu poderia utilizar ?

leonardom

Pablo você pode fazer seu código java executar seus código em C. Para isso você precisa usar JNI (Java Native Interface) com o Petter disse, mas isso não é nada muito trivial de se fazer, mas se procurar no Google você vai achar vários exemplos.

P
Funcionou !!! depois de muita luta de certo , eu utilizei a parport.dll , e a forma que eu fiz isso foi meio picareta mas tá valendo !! eu baixei um programinha ParallelPortviewer.jar, depois descompilei ele no DJ java Decompliler a classe ParallelPort , e nela existia um método :
private static void writeToLPT1()
    {
        boolean temp1[] = new boolean[24];
        lpt1Data = readOneByteFromPort(888);
        lpt1Status = readOneByteFromPort(889);
        lpt1Control = readOneByteFromPort(890);
        for(int i = 0; i &lt 8; i++)
        {
            temp1[i] = (lpt1Data & 1 &lt&lt i) != 0;
            temp1[i + 8] = (lpt1Status & 1 &lt&lt i) != 0;
            temp1[i + 16] = (lpt1Control & 1 &lt&lt i) != 0;
        }

        temp1[21] = lpt1Port[0];
        temp1[16] = lpt1Port[1];
        temp1[0] = lpt1Port[2];
        temp1[1] = lpt1Port[3];
        temp1[2] = lpt1Port[4];
        temp1[3] = lpt1Port[5];
        temp1[4] = lpt1Port[6];
        temp1[5] = lpt1Port[7];
        temp1[6] = lpt1Port[8];
        temp1[7] = lpt1Port[9];
        temp1[14] = lpt1Port[10];
        temp1[15] = lpt1Port[11];
        temp1[13] = lpt1Port[12];
        temp1[12] = lpt1Port[13];
        temp1[17] = lpt1Port[14];
        temp1[11] = lpt1Port[15];
        temp1[18] = lpt1Port[16];
        temp1[19] = lpt1Port[17];
        lpt1Data = 0;
        lpt1Status = 0;
        lpt1Control = 0;
        for(int i = 0; i &lt 8; i++)
        {
            lpt1Data += !temp1[i] ? 0 : 1 &lt&lt i;
            lpt1Status += !temp1[i + 8] ? 0 : 1 &lt&lt i;
            lpt1Control += !temp1[i + 16] ? 0 : 1 &lt&lt i;
        }

        writeOneByteToPort(888, lpt1Data);
        writeOneByteToPort(889, lpt1Status);
        writeOneByteToPort(890, lpt1Control);
    }
que eu não conseguia enxergar da classe que intanciou então eu criei na mesma o método
public static void writeToLPT1(int data)
    {
        writeOneByteToPort(888, data);
    }

de qualquer forma , obrigado por terem me ajudado !!

Criado 23 de julho de 2007
Ultima resposta 24 de jul. de 2007
Respostas 4
Participantes 3