Acessando dispositivo USB

1. Acessando dispositivo USB

Alfredo Miranda
podscrer

(usa Debian)

Enviado em 14/09/2010 - 23:31h

Bem gente, depois de muito pesquisar...testar muitas soluções e nada conseguir. Fui dá uma olhada afundo no sistema e percebi que todas as informações que eu preciso o Linux já me dá com o "lsusb -v". Só que não sei como pegar essa informação(o serial do dispositivo) pra dentro do meu programa.
E no caso, meu dispositivo é um GPS, preciso acessar a memória flash dele e copiar o arquivo de "log"(track) para uma pasta no computador.

Alguém teria alguma idéia de como fazer essas duas ações? Aceito qualquer tipo de sugestão.

Desde já, agradeço a todos.


  


2. Re: Acessando dispositivo USB

Anderson de Oliveira Madeira
enki

(usa Zenwalk)

Enviado em 15/09/2010 - 15:13h

podscrer, se eu entendi direito, o que você quer fazer é rodar o comando lsusb -v e ler a saída no programa que você fez em C/C++ certo? Então você pode usar a função popen() da stdio.h :

#include <stdio.h>

int main() {
/* a stream de entrada e saída
* a de entrada vai ser um comando
* e a de saída vai ser um arquivo no qual
* a gente vai escrever a saída do comando.
*/
FILE *input_file = popen("ls -l", "r"),
*output_file = fopen("ls_output", "w");
char buffer[255];

/* checa se foi possível abrir os dois arquivos
* o primeiro como leitura e o segundo como escrita
*/
if(!input_file || !output_file)
return 1;

/* enquanto não atingir o final da stream do comando,
* lê strings com até 254 caracteres e as escreve no
* arquivo de saída.
*/
while(!feof(input_file)) {
fgets(buffer, 254, input_file);
fputs(buffer, output_file);
}

return 0;
}

A função fgets pára quando tiver lido os 254 caracteres (o último é reservado pro terminador nulo), ou quando ler um '\n' (fim de linha) ou '{TEXTO}' (caracter terminador nulo).


3. Re: Acessando dispositivo USB

Alfredo Miranda
podscrer

(usa Debian)

Enviado em 16/09/2010 - 22:03h

Bem já haviam me dado essa solução, mas achei muito trabalhosa...então, fui um pouco mais afundo e descobri que a um diretório para cada USB com suas informações e dos dispositivos "espetados" nelas( /sys/bus/usb/device/ ). Utilizei a biblioteca dirent.h pra achar o nome de cada diretório e testar se existe o arquivo que eu desejo e se a numeração(no caso, o serial do dispositivo) está correta.

Bem, se alguém desejar o código, pode entrar em contato comigo que eu passo.
Apesar de ainda não ser 100% do que eu queria, já deu pra fazer um bucado de coisa.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts