Estou tendo dificuldades para entender quando os drivers de dispositivo são necessários e quando é bom conversar diretamente com um controlador de porta por meio do serial / paralelo / USB / etc fornecido pelo sistema operacional. motorista.
Por exemplo, Exemplo 1 : tomemos o OpenBCI , um BCI de hardware de código aberto que permite ler leituras de EEG + EKG ("ondas cerebrais"). O headset OpenBCI envia sinais de RF para uma unidade USB conectada à sua máquina e, em seguida, você pode escrever seu próprio software para ler os dados que entram nessa porta; assim, permite que você leia suas próprias ondas cerebrais e interprete dados de ondas cerebrais na camada de aplicativos. Muito legal. Para ler seus dados de ondas cerebrais de "streaming", você precisa não apenas ler da sua porta serial (usando o driver serial fornecido pelo sistema operacional), mas também interpretar os dados de acordo com as especificações do OpenBCI . Portanto, a pilha fica assim:
Mas em nenhum lugar aqui temos um "driver de dispositivo" específico para o headset OpenBCI. Apenas o driver serial necessário para ler bytes de dados e, em seguida, você precisa interpretar o significado desses bytes dentro do aplicativo. Por exemplo, se eu quisesse que um aplicativo Java interpretasse dados de ondas cerebrais, poderia usar o JSerialComm para ler os dados da minha porta COM local (ou qualquer USB que esteja no sistema local). Caberia ao meu aplicativo interceptar esses dados de acordo com as especificações listadas acima.
Agora, Exemplo 2 : uma webcam USB da Logitech como esta . Aqui, você precisa instalar os drivers de dispositivo da webcam em sua máquina para poder usá-la. Eu estou me perguntando o porquê. Vamos fingir (basta pressionar o botão " Eu acredito! " Por um momento)) que a pinagem dessa webcam era estúpida e simples:
PIN # Meaning
===================
1 Power
2 Ground
3 Send data (if 1 then the camera will start "streaming" its video data over data pins)
4 Data pin 1
5 Data pin 2
Este é um dispositivo USB, assim como o OpenBCI. Então, por que não consegui escrever um aplicativo (em qualquer idioma) que também apenas lesse / gravasse diretamente na porta USB / serial (novamente, talvez usando JSerialComm ou similar)? Quando quero que o aplicativo comece a capturar dados de vídeo da webcam, envio bytes para a porta serial ( novamente via JSerialComm, etc.) que ativam o Pin # 3 alto e ativam subsequentemente a leitura dos dados de vídeo dos pinos 4 e 5.
Acho que não entendo por que o OpenBCI não possui ou precisa de um driver de dispositivo, enquanto a webcam (ou qualquer outro dispositivo USB padrão como impressora, mouse, teclado etc.) possui. Desde já, obrigado!