Olá
Até o Win 98 a gente podia fazer in, out direto nas portas e ler as tabelas de interrução. A partir do Win NT, o Windows não permite mais acesso direto ao hardware as aplicações comuns que são executadas no chamado “user mode”.
O micro procesador Intel suporta 4 modos (ou anéis) aonde os programas podem rodar. Os modos permitem programas rodar com níveis de privilégios diferentes para acessar ao hardware a a outros programas em execução.
O Win NT/2000/XP usa apenas 2 modos: modo privilegiado normalmente chamado de “kernel mode” e modo sem privilégio chamado de “user mode”. Componentes que rodam no “kernel mode” podem acessar diretamente ao hardware e aos recursos de software do sistema. Na arquitetura NT/2000/XP só os componentes do grupo NT Executive tem este acesso, isto é, o HAL (hardware abstraction layer), o micro kernel, as seções USER e GDI e os device drivers. Todos os programas que não rodam em “kernel mode”, isto é, aqueles do “user mode” NÃO podem acessar diretamente ao hardware.
Solução: escrever um device driver. É dificil mas não impossível, resta saber se cabe no orçamento do seu projeto. Geralmente é melhor contratar um especialista pois há um monte de regras para seguir e isto não é fácil. Primeiro precisa fazer download do SDK da Microsoft pois só com o Visual Studio não se consegue fazer. Depois a depuração dá bem mais trabalho do que softwares normais.
Nos tempos do velho DOS fiz vários device drivers para plotters, tablets e outros dispositivos gráficos. Há uns 2 anos atrás fui estudar como fazer um device driver para conseguir verificar o status de impressora paralela e acabei desistindo. Deixei a tarefa para o fabricante da impressora. Em Java é impossível fazer isto só com javax.comm.
Melhor e mais fácil é procurar algo pronto como o SerialIO, veja: http://www.sc-systems.com/. (Não é free)
Outros links:
http://www.beyondlogic.org/ (ótimo, não deixe de visitar. Explica como acessar ao hardware)
http://www.easysw.com/~mike/serial/ (Não é para Win , mas tem toda a teoria)
Linux:
http://wass.homelinux.net/howtos/Comm_How-To.shtml (Uso de rxtx)
PS: Com JNI o Java acessa uma dll que acessa às interrupções. Há que ter cuidado com as questões de timing para não perder caracteres na porta serial.
[]s
Luca