Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mikroe hid bootloader linux - compatibility with pyudev 0.18 #5

Open
rc-ozzy opened this issue Jan 22, 2016 · 3 comments
Open

mikroe hid bootloader linux - compatibility with pyudev 0.18 #5

rc-ozzy opened this issue Jan 22, 2016 · 3 comments

Comments

@rc-ozzy
Copy link

rc-ozzy commented Jan 22, 2016

Olá, Paulo, tudo bem?

Meu nome é Rogério, e estou muito interessado em utilizar o seu bootloader no linux.
Atualmente utilizo o pic18f4550, e o bootloader mikroe HID bootloader (no windows)
neste link há uma foto:

http://oi45.tinypic.com/33esll0.jpg

Meu objetivo é apenas estudar mesmo... Me formei recentemente na Fatec Osasco.
Como não consegui rodar o seu bootloader, eu uso o piklab e picdemusb (microchip bootloader), com a diretiva org para mudar o meu vetor de reset.
Infelizmente, para ficar o código idêntico ao windows, tenho que gravar meus arquivos hex por icsp com pickit2 (daí não preciso de diretiva org). Isso será resolvido quando eu usar o seu mikroe-uhb normalmente.

Postei meu problema no fórum Mikroe, pensando que você veria minha dúvida lá. O link é este:
https://www.mikroe.com/forum/viewtopic.php?f=12&t=56367

A última linha do terminal me retornou isso:
TypeError: argument of type 'Attributes' is not iterable

Se puder, me responda... Dê uma olhadinha por gentileza.
Tentei contato com o pessoal da mikroletrônika, mas eles não pensam em desenvolver um bootloader HID em linux tão cedo.

Pode me ajudar por favor?

Se preferir responder por email será muito bem vindo!
[email protected]

Muito Obrigado!

thotypous added a commit that referenced this issue Jan 23, 2016
@thotypous
Copy link
Owner

Olá, desculpe por não ter respondido antes no forum da Mikroe, devo estar com alguma configuração de notificação incorreta e não vi a mensagem.

Muito obrigado pelo bug report. Parece que o problema aconteceu devido a uma versão recente que lançaram da biblioteca pyudev, que quebrou compatibilidade com a versão 0.16 que eu tinha instalada na minha máquina. Agora ele não permite mais usar a classe Attribute como se fosse um dicionário, por isso ocorre o erro que você observou. Fiz uma mudança no código que mantém compatibilidade com a versão antiga e também suporta essa nova versão.

Por favor teste com a última versão do mikroe-uhb e avise se ainda ocorrer algum erro.


The issue is due to a change in pyudev's Attribute class which breaks backwards compatibility. It can no longer be treated as a dictionary. The new implementation should be compatible both with older and newer pyudev versions.

@thotypous thotypous changed the title mikroe hid bootloader linux mikroe hid bootloader linux - compatibility with pyudev 0.18 Jan 23, 2016
@rc-ozzy
Copy link
Author

rc-ozzy commented Jan 26, 2016

Olá, Paulo, tudo bem?
Existe alguma configuração de topic reply lá no forum, mas parece que temos acesso somente ao abrir o tópico (tenho passado por alguns problemas com isso também...)
Eu é que lhe agradeço pela iniciativa... é um trabalho árduo desenvolver ferramentas para linux, pois não há compatibilidade tão natural de bibliotecas 'comerciais' (como hid), e todas as ferramentas disponíveis na internet sobre bootloader para MCU pic, são baseadas no Microchip Framework, por isso é tão importante o seu projeto. A própria Mikroeletronika não possui hoje um bootloader para PIC em linux. Quando conseguirmos usá-lo com o 18f4550, ficarei muito feliz em não ter que modificar meus vetores de reset e interrupção para atender o boot da picdem (microchip), ou modificar o arquivo hex (para o tinybootloader -020000040000FA).
Me desculpe pela dificuldade (sou mais da área eletrônica que da informática), desculpe também por seguir tudo bem devagar, passo a passo...

Segui as dicas do site:
http://pyudev.readthedocs.org/en/latest/
e entrei com o comando no terminal:
ozzy@ozzy-laptop:$ udevadm --version
151
e depois:
ozzy@ozzy-laptop:
$ python
Python 2.6.5 (r265:79063, Feb 27 2014, 19:44:14)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Será que tem problema? Porque no github pede a versão de phyton ao menos 2.7...
Enfim, baixei o arquivo zip direto no github (mikroe-uhb-master), porque o do library stock está com o último update de 2014 (Last Updated: 2014-08-16).

Abri outro terminal e digitei
sudo su (senha)
Nautilus
Daí verifiquei em usr/local/bin o arquivo mikroe-uhb e etc/modprobe.d o arquivo mikroe-uhb.conf
Ok

No mikrobasic, rodei um programa de teste bem simples:

program mikroe_uhb_test

main:
while TRUE
TRISc.0 = 0
latc.0 = 1
while true
latc.0 = 1
delay_ms(100)
latc.0 = 0
delay_ms(100)
wend
wend
end.

Testei o código no proteus com sucesso.
Usei o bootloader para um pic 18f4550
http://www.mikroe.com/forum/viewtopic.php?f=88&t=53440
Fiz o upload no Mikroe HID bootloader v2.0.0 (windows7). Ok.

Conectei meu dispositivo ao computador (que após o tempo do boot já comecou a piscar o led) com linux ubuntu 10.04LTS (lucid linx), e no terminal, digitei lsusb, pressionei o reset (para acessar o bootloader) e dei enter. Achou:
Bus 003 Device 016: ID 1234:0001
com a sintax:
lsusb -d 1234:0001 -vvv
tivemos:

Bus 003 Device 018: ID 1234:0001
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1234
idProduct 0x0001
bcdDevice 0.01
iManufacturer 1 Mikroelektronika
iProduct 2 USB HID Bootloader
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.01
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 33
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Device Status: 0x0001
Self Powered

rodando no terminal:
mikroe-uhb -v
ou
mikroe-uhb -v /home/ozzy/Download/mikroe_uhb_test_20Mhz.hex
ou
/usr/local/bin/mikroe-uhb -v /home/ozzy/Download/mikroe_uhb_test_20Mhz.hex
o cursor ficou piscando, até desconectar e reconectar a placa do usb (alimentação) ou pressionar o reset.

O resultado foi o mesmo:
ozzy@ozzy-laptop:~$ mikroe-uhb -v
DEBUG:mikroeuhb.hid.linux:opening device vendor=1234, product=1
INFO:mikroeuhb.hid.linux:USB device 1234:0001 plugged
INFO:mikroeuhb.hid.linux:USB ID matches the expected one
DEBUG:mikroeuhb.device:send cmd: stx, cmd=INFO, addr=0x00000000, counter=0x0000
Traceback (most recent call last):
File "/usr/local/bin/mikroe-uhb", line 5, in
pkg_resources.run_script('mikroe-uhb==0.2', 'mikroe-uhb')
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 461, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1194, in run_script
execfile(script_filename, namespace, namespace)
File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/EGG-INFO/scripts/mikroe-uhb", line 58, in
main()
File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/EGG-INFO/scripts/mikroe-uhb", line 55, in main
dev.program(hexf, disable_bootloader=disable_bootloader)
File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/mikroeuhb/device.py", line 129, in program
bootinfo = self.cmd_info()
File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/mikroeuhb/device.py", line 111, in cmd_info
self.send(Command.from_attr(Command.INFO))
File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/mikroeuhb/device.py", line 86, in send
cmd.send(self.f)
File "/usr/local/lib/python2.6/dist-packages/mikroe_uhb-0.2-py2.6.egg/mikroeuhb/device.py", line 44, in send
f.write(b'\x00' + self.buf())
IOError: [Errno 32] Broken pipe

E isso é tudo o que consegui. Paulo, mais uma vez, muito obrigado pela paciência! Parece que agora falta pouco...
Estive olhando o github, nao sei se o bootloader utilizado pelo senhor Kerekes Szilard pode ter alguma informação diferente, pois estou utilizando a versão de firmware e software oficial da mikroe (windows), e tanto vendor quanto product id coincidem.

Uma última informação:
O relatório não deu erro sobre minha versão de phyton (que é nativa do linux 10.04LTS), mas já tive problema com isso anteriormente, ao tentar rodar outros programas. O que me impede de atualizar meu linux é devido eu utilizar uma máquina antiga (problemas com placa de vídeo), e eu não consigo desinstalar um pacote essencial do sistema. Procurando bastante, tive esse resultado:

ozzy@ozzy-laptop:~$ whereis python2.6.5
python2.6: /usr/bin/python2.6 /etc/python2.6 /usr/lib/python2.6 /usr/local/lib/python2.6 /usr/include/python2.6 /usr/share/man/man1/python2.6.1.gz

ozzy@ozzy-laptop:~$ whereis python3.1.2
python3.1: /usr/bin/python3.1 /etc/python3.1 /usr/lib/python3.1 /usr/local/lib/python3.1 /usr/include/python3.1 /usr/share/man/man1/python3.1.gz /usr/share/man/man1/python3.1.1.gz

Tenho estas duas versões de phyton na minha máquina. Mas é só pra avisar mesmo, porque, entendi que o erro em si é este:
IOError: [Errno 32] Broken pipe

Na instalação do mikroe-uhb (último update Jan 23, 2016), tivemos:
Using /usr/local/lib/python2.6/dist-packages/six-1.10.0-py2.6.egg
Finished processing dependencies for mikroe-uhb==0.2
install -m 644 conf/51-mikroe-uhb.rules /etc/udev/rules.d
install -m 644 conf/mikroe-uhb.conf /etc/modprobe.d
ozzy@ozzy-laptop:~/Download/mikroe-uhb-master$

Ou seja, instalação feita com sucesso!

Obrigado mais uma vez. Me desculpe pelo excesso de informações...

@rc-ozzy
Copy link
Author

rc-ozzy commented Jan 26, 2016

Olá mais uma vez, Paulo.
Respondi lá no github (não sei se foi no lugar correto rsrs).
Assim que tiver um tempinho, pode dar uma olhadinha por favor?Obrigado!
Rogério Campos

  De: Paulo Matias <[email protected]>

Para: thotypous/mikroe-uhb [email protected]
Cc: rc-ozzy [email protected]
Enviadas: Sábado, 23 de Janeiro de 2016 13:16
Assunto: Re: [mikroe-uhb] mikroe hid bootloader linux (#5)

Olá, desculpe por não ter respondido antes no forum da Mikroe, devo estar com alguma configuração de notificação incorreta e não vi a mensagem.Muito obrigado pelo bug report. Parece que o problema aconteceu devido a uma versão recente que lançaram da biblioteca pyudev, que quebrou compatibilidade com a versão 0.16 que eu tinha instalada na minha máquina. Agora ele não permite mais usar a classe Attribute como se fosse um dicionário, por isso ocorre o erro que você observou. Fiz uma mudança no código que mantém compatibilidade com a versão antiga e também suporta essa nova versão.Por favor teste com a última versão do mikroe-uhb e avise se ainda ocorrer algum erro.The issue is due to a change in pyudev's Attribute class which breaks backwards compatibility. It can no longer be treated as a dictionary. The new implementation should be compatible both with older and newer pyudev versions.—
Reply to this email directly or view it on GitHub.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants