--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo
para Eventos do Grupo C & C++ Brasil:
http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
2011/4/17 Lucas Nunes <lucas...@gmail.com>:
>
> Gostaria de saber como faço para acessar o hardware do PC (as portas
> de I\O) usando C\C++.
Para qualquer sistema operacional moderno, vc vai precisar de um
driver. Se quiser uma explicação detalhada do porque, veja livros de
teoria de sistemas operacionais e também os manuais da Intel sobre os
Rings de execução.
>
> Por exemplo, como leio o que entrada em uma das minhas portas USB?
> Usando o stdios dá para ter acesso ao teclado no máximo. Mas eu não
> entendo como isso ocorre.
> Se segue algum protocolo e etc.
Sim, USB é um stack, assim como rede, cada camada tem uma
responsabilidade. Se vc quer acessar especificamente USB (e não,
digamos uma porta paralela), então sugiro que dê uma olhada no libusb.
(google)
Att.
Thiago A. Correa
Eu sei como exebir um vídeo, reproduzir o aúdio, gravar um arquivo no HD e etc.Mas, se eu preciso desenvolver um programa que capte o audio do microfone do PC, ou reproduzir.
Normalmente, nós só temos dlls que façam isso. Mas, como eu faço isso no braço mesmo?
Tudo vai depender um do tipo de interface que o dispositivo que voc�
quer controlar pela porta USB implementa. Afinal, n�o controlamos a
porta em si (como fazemos com portas seriais), mas controlamos os
dispositivos atrav�s dela.
Primeiro de tudo, se seu dispositivo implementa uma interface padr�o,
tal como Mass Storage, Teclado, Mouse. O Windows pode manipular tudo pra
voc�, mas isso n�o elimina a op��o de se ter uma implementa��o
espec�fica do seu dispositivo. Por exemplo: Quero que meu mouse use meu
driver no lugar do driver padr�o.
Se seu dispositivo implementa uma interface customizada, tal como uma
m�quina de desentortar bananas, o Windows n�o ter� um driver para isso e
voc� ter� que implementar por voc� mesmo. Uma interface customizada pode
ser implementada de diversas formas e � o dispositivo quem determina
isso. (verificar com o fabricante e datasheet)
Se seu dispositivo implementa interface HID, que usa endpoint
"interrupt", voc� n�o vai precisar desenvolver nenhum driver. Apenas
usando as rotinas da SetupAPI e manipulando o handle do dispositivo via
ReadFile/WriteFile voc� pode fazer tudo o que precisa. Tudo coisa de
User-Mode sem as dores do Kernel.
Mas se seu dispositivo usa um tipo de endpoint mais r�pido, tal como o
"bulk", voc� pode escolher em desenvolver drivers em User-Mode ou Kernel
mode com o WDF, um framework de desenvolvimento de drivers para Windows.
Seu pior caso ser� se seu dispositivo implementa o endpoint
"isochronous", mais usado em stream de audio e v�deo. Nesse caso voc�
ser� obrigado a escrever um driver em Kernel-Mode e ainda vai esbarrar
nas limita��es do WDF.
WDF � um framework que facilita o desenvolvimento de drivers WDM.
Drivers WDM s�o mais complicados de serem implementados. Facilidade tem
seu pre�o, nesse caso o WDF possui algumas limita��es com rela��o ao
endpoint "Isochronous" e voc� ter� que implementar umas pequenas partes
apoiado em conceitos WDM.
Se voc� � a pessoa que vai desenvolver o firmware que vai rodar na outra
extremidade do cabo, ent�o voc� ter� a liberdade de escolher a interface
a ser implementada, mas caso contr�rio, uma boa documenta��o ser�
suficiente.
Estes s�o excelentes livros a respeito do assunto:
http://www.amazon.com/Developing-Drivers-Windows-Foundation-Developer/dp/0735623740/ref=pd_sim_b_2
http://www.amazon.com/USB-Complete-Developers-Guide-Guides/dp/1931448086/ref=pd_sim_b_4
Espero ter ajudado.
Um abra�o,
--
Fernando Roberto da Silva
DriverEntry Kernel Development
http://www.driverentry.com.br
On 17/04/11 16:19, Lucas Nunes wrote:
> Ol�!
>
> Gostaria de saber como fa�o para acessar o hardware do PC (as portas
> de I\O) usando C\C++.
> Pelo que pesquisei isso depende muito do SO, que no caso estou usando
> Windows.
> Preciso saber sobre isso, pois vou precisar para um trabalho.
>
> Por exemplo, como leio o que entrada em uma das minhas portas USB?
> Usando o stdios d� para ter acesso ao teclado no m�ximo. Mas eu n�o
> entendo como isso ocorre.
> Se segue algum protocolo e etc.
>
> Algu�m pode me guiar nesse caminho? Indicam-me algum livro, tutorial
> ou outra coisa?
>
> Aproveitando, algu�m conhece algum tutorial ou livro bom sobre
> Assembly inline (eu sei que � quase a mesma coisa que s� o ASM, mas de
> prefer�ncia o inline), pois acho que isso ser� �til.
>
> P.S: Eu tenho um bom conhecimento de C\C++ e esse conhecimento de
> hardware e baixo n�vel me ser�o muito �til (n�o, n�o � criar v�rus nem
> malwares ^^").
>
> Desde j� agrade�o.
>
--
Fernando Roberto da Silva
DriverEntry Kernel Development
http://www.driverentry.com.br
Olá Lucas,
Tudo vai depender um do tipo de interface que o dispositivo que você quer controlar pela porta USB implementa. Afinal, não controlamos a porta em si (como fazemos com portas seriais), mas controlamos os dispositivos através dela.
Primeiro de tudo, se seu dispositivo implementa uma interface padrão, tal como Mass Storage, Teclado, Mouse. O Windows pode manipular tudo pra você, mas isso não elimina a opção de se ter uma implementação específica do seu dispositivo. Por exemplo: Quero que meu mouse use meu driver no lugar do driver padrão.
Se seu dispositivo implementa uma interface customizada, tal como uma máquina de desentortar bananas, o Windows não terá um driver para isso e você terá que implementar por você mesmo. Uma interface customizada pode ser implementada de diversas formas e é o dispositivo quem determina isso. (verificar com o fabricante e datasheet)
Se seu dispositivo implementa interface HID, que usa endpoint "interrupt", você não vai precisar desenvolver nenhum driver. Apenas usando as rotinas da SetupAPI e manipulando o handle do dispositivo via ReadFile/WriteFile você pode fazer tudo o que precisa. Tudo coisa de User-Mode sem as dores do Kernel.
Mas se seu dispositivo usa um tipo de endpoint mais rápido, tal como o "bulk", você pode escolher em desenvolver drivers em User-Mode ou Kernel mode com o WDF, um framework de desenvolvimento de drivers para Windows.
Seu pior caso será se seu dispositivo implementa o endpoint "isochronous", mais usado em stream de audio e vídeo. Nesse caso você será obrigado a escrever um driver em Kernel-Mode e ainda vai esbarrar nas limitações do WDF.
WDF é um framework que facilita o desenvolvimento de drivers WDM. Drivers WDM são mais complicados de serem implementados. Facilidade tem seu preço, nesse caso o WDF possui algumas limitações com relação ao endpoint "Isochronous" e você terá que implementar umas pequenas partes apoiado em conceitos WDM.
Se você é a pessoa que vai desenvolver o firmware que vai rodar na outra extremidade do cabo, então você terá a liberdade de escolher a interface a ser implementada, mas caso contrário, uma boa documentação será suficiente.
Estes são excelentes livros a respeito do assunto:
http://www.amazon.com/Developing-Drivers-Windows-Foundation-Developer/dp/0735623740/ref=pd_sim_b_2
http://www.amazon.com/USB-Complete-Developers-Guide-Guides/dp/1931448086/ref=pd_sim_b_4
http://www.amazon.com/Programming-Microsoft-Windows-Driver-Model/dp/0735618038/ref=sr_1_4?s=books&ie=UTF8&qid=1303136600&sr=1-4
Espero ter ajudado.
Um abraço,
--
Fernando Roberto da Silva
DriverEntry Kernel Development
http://www.driverentry.com.br
On 17/04/11 16:19, Lucas Nunes wrote:
Olá!
Gostaria de saber como faço para acessar o hardware do PC (as portas
de I\O) usando C\C++.
Pelo que pesquisei isso depende muito do SO, que no caso estou usando
Windows.
Preciso saber sobre isso, pois vou precisar para um trabalho.
Por exemplo, como leio o que entrada em uma das minhas portas USB?
Usando o stdios dá para ter acesso ao teclado no máximo. Mas eu não
entendo como isso ocorre.
Se segue algum protocolo e etc.
Alguém pode me guiar nesse caminho? Indicam-me algum livro, tutorial
ou outra coisa?
Aproveitando, alguém conhece algum tutorial ou livro bom sobre
Assembly inline (eu sei que é quase a mesma coisa que só o ASM, mas de
preferência o inline), pois acho que isso será útil.
P.S: Eu tenho um bom conhecimento de C\C++ e esse conhecimento de
hardware e baixo nível me serão muito útil (não, não é criar vírus nem
malwares ^^").
Desde já agradeço.
--
Fernando Roberto da Silva
DriverEntry Kernel Development
http://www.driverentry.com.br
2011/4/18 Gabriel Novaes <gabriel...@hotmail.com>:
> Eu não sei se vem ao caso ...
> mas por que vc não aprende um pouco de assembly e e usa com c/c++
> talvez seja uma boa solução ára vc .........................
>
Essa solução não é possível com nenhum sistema operacional moderno.
Isso só funcionava com DOS 6 e seus contemporaneos.
Att.
Thiago A. Correa