JNI - Acessar Interrupções da Porta SERIAL

Fala Galera,

 Preciso de uma ajuda com o JNI. Eu necessito desenvolver um FTP que utilize a porta serial C p/ DOS. Este FTP terá 3 camadas(nada a ver com MVC ok ;)). NÃO POSSO USAR JAVACOMM NEM QQ OUTRA API e tambem não estou me preocupando com portabilidade.

 1) FISICA - Envia e recebe bytes usando interrupções do SO.  Consulta interrupções importantes para o funcionamento do ftp(Ex: Consulta o status da conexão, Status do buffer de envio, etc)

 2) ENLACE - Interface entre a camada fisica e aplicação 

 3) APLICAÇÃO - Responsavel pelo "input" dos comandos que o usuário deseja executar(EX: dir, cd, get, put)

 Minha idéia é desenvolver a camada fisica em C e o resto em java.

 Já li vários artigos sobre JNI e até já brinquei um pouco com a API. 

 Gostaria de saber se alguem já conseguiu gerar a famosa DLL com um programa que trabalhasse com interrupções. Meus conhecimentos em C são básicos e já tentei gerar a DLL em vários tipos de compiladores(Turbo C, Borland C 3(antigo), Borland C 5.5(free), Visual C, etc...)

  Se alguem aí puder me ajudar eu ficarei aternamente grato senão terei que me virar no velho Borland C p/ DOS ;))

Valeu

Mesmo que vc queira, vc nao vai conseguir usar BCC pra DOS, pelo fato de ele nao gerar DLLs compativeis com a JVM :wink:

Se nao me engano, o BCC Win32 e o MSVC sao compativeis, mas outros (como, talvez, o Watcom), possam funcionar.

Pois é… Os compiladores mais antigos TC 3 e BC3 nem tem como gerar a dll compativeis.

Andei dando uma procurada e parece que o BC5.5 gera DLLs compativeis mas não trabalha com interrupções.

O negocio tá fedendo… :shock:

falô

A minha sugestao… e vc nao sabe como me dói dizer isso… eh usar MSVC, ja que, se nao me engano, a propria JDK eh compilada com ele…

se for linux usa asm + vm86
se for windows usar aquele esquema para fazer longjumps entre 16 e 32 bits

[quote=“louds”]se for linux usa asm + vm86
se for windows usar aquele esquema para fazer longjumps entre 16 e 32 bits[/quote]

quê uquê quê ??!!!

No linux não dá pra usar interrupções… A não ser que vc recompile o kernel…

Eu to querendo fugir do C e vc manda eu usar o Assembly :shock:

Acho que eu vou mudar de area… Vo virá pescador … hehe

[]´s

com vm86 voce consegue executar código em modo real no linux!
só que ate onde eu sei não existe compilador de C 16bit p/ modo real em linux e nem imagino se a saida dos compiladores windows funcionaria, apesar que é bem provavel que os .com funcionem.

Para comunicação serial, a JavaSoft distribui uma API a JavaComm.

http://java.sun.com/products/javacomm/

Bom estudo.

Você realmente precisa falar com a porta serial via interrupções? Não pode ser via uma API do SO?
O grande problema disso é que nenhum SO moderno deixa programas de usuario mexer em interrupções diretamente e os antigos não tem suporte a java…

Pois é, como eu havia falado, eu realmente tenho que usar interrupções… e não posso usar nenhum API…

é um trabalho da facul, por isso que é tão nada a ver assim :wink:

Louds, como vc disse nenhum SO atual permite acesso direto as interrupções… Um dos ultimos SO que que esse suporte é o win98.

Eu comecei usar o compilador WatCom de C (Muito bom, recomendo, é free) para gerar a DLL que será chamada no java.

Basicamente eu criei 3 metodos, um de configuração da porta serial, outro de escrita na porta e outro de leitura de bytes da porta. Gerei a DLL, tudo certinho…

O unico problema é que eu uso windows XP e ainda não pude testar… Mas creio que vai funcionar. Se funcionar eu coloco o desfecho da aventura aqui no forum…

Eu tava com receio que houvesse algum bloqueio da VM quando fosse chamada uma DLL que lidasse com interrupções… Espero que de certo…

Valeu pela ajuda…

Não vai funcionar, eu te garanto.
Já tive de trabalhar com interrupções pra facul (pq todo curso de asm tem 1 trabalho usando interrupções?) e não funciona em win2k/xp.

Voce vai ter 1 senhor problema para usar tua dll no Java, ao ponto de não mais valer a pena usar java.

Já te explico.

No windows voce só consegue usar as interrupções do hardware, as soft-int funcionam porêm, em programas 16bit. Quando você executa um programa 32bits ele ta em modo protegido e não vm86, oque torna executar código 16bits que usa interrupções impossivel.

Eu me lembro que existe umas api do windows que te permite carregar dll 16bits de uma aplicação 32bits, porêm não sei se as int’s vão funcionar.

Pq você não escreve 1 driver e exporta ele como 1 file system, me parece mais simples que isso…