shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script-pt] Portar "driver" de decibelímetro de ruby para bas


From: Alfredo Casanova
Subject: Re: [shell-script-pt] Portar "driver" de decibelímetro de ruby para bash
Date: Tue, 5 May 2020 10:09:20 -0300

Fiz uma captura da comunicacao usb do device com o driver em ruby funcionando e joguei lá também para análise

On Tue, May 5, 2020 at 10:01 AM Alfredo Casanova <address@hidden> wrote:
Fiquei até tarde ontem criando o repo no github, dei uma editada no codigo pra ficar mais fidedigno ao original pra facilitar

https://github.com/atcasanova/decibelimeter

Ainda não está funcionando heheheh

On Tue, May 5, 2020 at 9:17 AM Julio C. Neves <address@hidden> wrote:
Alfredo, qdo se usa exec na leitura, o ponteiro do FD fica no local em que a leitura terminou. Veja um exemplo do meu livro:
$ echo "teco teco" > arq      # Arquivo arq contém a cadeia teco teco
$ exec 6<> arq                # Abre arq para entrada/saída com fd 6
$ read -n 4 Var <&6           # Lê para Var4 primeiros caracteres de fd 6
$ echo $Var
teco

Mas, seguindo nesse mesmo exemplo, vamos ver também como podemos escrever no arquivo arq:

$ echo -n - >&6               # Escreve um hífen na 5ª posição, matando o espaço em branco
$ exec 6>&-                   # Fecha o fd 6
$ cat arq
teco-teco

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Em 27/01/2020 abriremos uma semana de inscrições
» para uma nova turma. Veja mais detalhes em:

Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.







Em seg., 4 de mai. de 2020 às 21:28, Alfredo Casanova <address@hidden> escreveu:
O head -8 eu fiz por isso:

def read_current_state(&block)
begin
send_state_request
data = read_cap_data
raise InvalidCaptureDataLengthError.new('Capture data should have 8 bytes.', data) if data.length != 8
record = Record.new(data.unpack('H*').first)
self.settings = record.settings
block_given? ? block.call(record) : record
rescue InvalidCaptureDataLengthError
sleep 0.1
retry
end
end

Esse código envia o "STATE_REQUEST" pro device, lê o que vem dele e faz um "try/catch" enquanto o comprimento dessa variável não for 8. 

On Mon, May 4, 2020 at 9:25 PM Alfredo Casanova <address@hidden> wrote:
Fala Fernando, valeu a resposta!

Também sei NADA de ruby, comecei a estudar olhando esse código mesmo. 

cap_data = device.read_timeout(1000) until cap_data && !cap_data.empty?

Pelo que estudei, essa linha é basicamente : "enquanto a variável cap_data estiver vazia leia o que vem do device com timeout de 1s"

 O loop é resultado de mta tentativa e erro (mas nada funcionou, diga-se). Quando mando o STATE_REQUEST e tento ler do device, não recebo absolutamente nada.
O dmesg passa a mostrar a mensagem "usb 1-1: input irq status -75 received" mas a variavel status nunca é preenchida. Já tentei com head -1, read -n1, etc. Não vem nada!



On Mon, May 4, 2020 at 8:55 PM Fernando Mercês <address@hidden> wrote:
Salve, Alfredo! hehe que legal isso! O que vem na $reply tá certo? Eu não encontrei o código dessa read_timeout [1] nessa implementação em Ruby, mas tampouco sei muito dessa linguagem.

No pouco que tem sobre o protocolo no repositório, o autor diz na seção de "Decode" [2] que há 64-bits que "sobram" na resposta. Numa primeira impressão, entendo que estes 8 bytes estão no final, então você leria com tail -c8, mas queria entender a lógica desse teu loop com head -c8. É que não sei como essa resposta vem, nem quantos bytes ela tem, então tô meio no escuro. rs


On Mon, May 4, 2020 at 7:52 PM Alfredo Casanova <address@hidden> wrote:
Galera, comprei um decibelímetro (call me crazy) e estava tentando sniffar ele na porta usb com o wireshark pra entender o protocolo, até que numa googlada achei um cara que ja tinha feito isso, usando ruby.



Esse é nosso herói. o RubyGem dele funciona perfeitamente com o meu device, e resolvi portar o código dele. Acontece que eu não faço ideia do porque, mas não consigo fazer funcionar. Alguém (Mercês, tô olhando pra você hehe) quer dar uma mão?

Pra quem não lembra, o Mercês deu uma mão quando inventei a mesma aventura com isso aqui:

https://github.com/atcasanova/dream-cheeky.sh

A evolução até o momento tá nesse gist aqui:

https://gist.github.com/atcasanova/005b707d7997bcefb3f4bdccb333a13a



--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619
_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: address@hidden
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: address@hidden
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.


--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619


--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619
_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: address@hidden
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: address@hidden
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.


--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619


--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619

reply via email to

[Prev in Thread] Current Thread [Next in Thread]