Encerrado - Elaboração de plataforma para projeto de programação

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Estudos USB

Quarta-feira - 17/04/2013

-Tentativas de enviar sinal pra a porta através do código C da biblioteca "hidapi.h"

-Git - http://fabio-fernandes.com/blog/instalando-e-usando-o-git-no-ubuntu/

-Instalei o programa VB (cedido pela Cerne) no linux(Ubuntu 12.04), através do Wine, porém ele nao funcionou como ja tinha funcionado no Windows. (Estive pensando se o problema seria no linux ou no Wine, pois talvez o wine nao ofereça a comunicaçao necessária ao programa, ou até nao sei se a instalaçao no Wine é 100% equivalente a instalaçao diretamente no Windows)

-Leitura de documentos sobre o Pic 18F2550 (18f2550.h) OBS: Fiquei com dúvida se isso pode servir nesse projeto, pois muitos falam em gravação do microcontrolador. E nao sei se a gravaçao nos interessa.

http://www.vivaolinux.com.br/artigo/Gravacao-de-microcontroladores-PIC-via-USB-pelo-terminal-do-Linux

"Para que os programas em C possam ser gravados no microcontrolador via USB, é necessário compilá-los, ou seja, transformá-los em linguagem de máquina hexadecimal. 

Existem diversos compiladores que podem ser utilizados por esta ferramenta, entre eles o SDCC, o C18, o Hi-Tech e o CCS"

http://www.cerne-tec.com.br/artigousbparte2.pdf

http://burningsmell.org/pic18f2550/

http://www.eletrica.ufpr.br/ufpr2/tccs/150.pdf


Sexta-feira 19/04/2013

Leituras sobre USB Links interessantes: http://www.infowester.com/usb.php

http://www.infowester.com/usb30.php

http://computer.howstuffworks.com/usb1.htm



Segunda-feira 22/04/2013 e terça-feira

Leituras USB:

Capitulo 13 do livro "linux device drivers"

http://bbs.dianyuan.com/bbs/u/34/1129334558.pdf

http://www.beyondlogic.org/usbnutshell/usb1.shtml

http://www.freebsd.org/doc/en/books/arch-handbook/usb-dev.html

citações interessantes:

"Endpoints are the unidirectional access points for communicating with a device. They provide buffers to temporarily store incoming or outgoing data from the device."

Endpoint do tipo interrupt :"Interrupt endpoints transfer small amounts of data at a fixed rate every time the USB host asks the device for data. These endpoints are the primary transport method for USB keyboards and mice. They are also commonly used to send data to USB devices to control the device, but are not generally used to transfer large amounts of data. These transfers are guaranteed by the USB protocol to always have enough reserved bandwidth to make it through."

http://www.beyondlogic.org/usbnutshell/usb4.shtml#Interrupt

"A device interface is a collection of endpoints. For example USB speakers can have an interface for the audio data (Audio Class) and an interface for the knobs, dials and buttons (HID Class). All interfaces in a configuration are active at the same time and can be attached to by different drivers."

"USB interfaces are themselves bundled up into configurations [...]So to summarize, USB devices are quite complex and are made up of lots of different logical units. The relationships among these units can be simply described as follows: • Devices usually have one or more configurations. • Configurations often have one or more interfaces. • Interfaces usually have one or more settings. • Interfaces have zero or more endpoints."


prints do software, para windows, que analiza a comunicaçao USB

https://lh6.googleusercontent.com/epD232KXyedfyV2r_7LLZRQ70bn9gEWPXBxrKLuuMv2gZoexTtcoc_bstDvj-Jg-VA=w1600

https://lh4.googleusercontent.com/f1GPV21XYjF0ZOaL4gIda5OK2CZGP9H1ifx9bDMBSMv-Yrnbybi7YZmMalHCmVRW6Q=w1600

https://lh4.googleusercontent.com/eC1tw7vsLzk0OYylqKx1iYxqdE6O86c-IleXmCCqpbiwDn34FylNniG_Pw9K67wG7g=w1600

documentos com algumas informaçoes que estão auxiliando no estudo da comunicaçao entre host e o device USB:



https://docs.google.com/document/d/1-y3Ze_V60gTRnhb7FxVc1gmjkX2RaLGmtfopfyV2-d0/edit (ultima atualizaçao no dia 05/05/2013)

leitura complementar sobre URBs http://www.makelinux.net/ldd3/chp-13-sect-3


Domingo 5/5/2013 instalaçõ do GCC no windows

http://www.franciscosouza.com.br/2009/04/07/instalando-um-compilador-cc-no-windows/

Comunicão em C com a placa de aquisição de dados

Primeira comunicação feita com sucesso utilizando a linguagem C

Para rodar o programa leia otutorial

Tutorial de conexão e comunicação com a placa de aquisição de dados

O primeiro passo para conseguir se conectar à placa de aquisição de dados, utilizando a liguagem C é fazer todas a configurações necessárias para conseguir compilar o programa utilizando a biblioteca HID.

Links úteis:

Link principal para a biblioteca: http://www.signal11.us/oss/hidapi/
Read-me com explicações mais detalhadas sobre as configurações abaixo: https://docs.google.com/document/d/1LsqJdvBf6gg5KQLJULJwQus9NVtZsaCNOQudspGmFLs/edit

Página de downloads: https://github.com/signal11/hidapi/downloads

1 - Baixe o pacote com os arquivos necessários:

https://github.com/downloads/signal11/hidapi/hidapi-0.7.0.zip

2 - Instale o pacote Libusb 1.0

  1. sudo apt-get install libusb-1.0-0-dev

3 - Instale o pacote Libudev (cabeçalho e biblioteca)

  1. sudo apt-get install libudev-dev

4 - Descompacte o arquivo .zip hidapi-0.7.0.zip baixado no passo 1. Você pode fazer isso manualmente, ou no terminal: No meu caso o arquivo está na pasta Downloads:

  1. cd ~/Downloads

E então:

  1. unzip -a hidapi-0.7.0.zip

5 - entre em hidapi-0.7.0 hidapi-0.7.0/hidapi/ e copie ou mova o arquivo hidapi.h para a pasta linux: (manualmente, ou pelo terminal)

#cd hidapi-0.7.0/hidapi/

E então

  1. mv hidapi.h ../linux/



6 - após descompactar, entre na pasta hidapi-0.7.0/linux e faça o comando make

  1. cd hidapi-0.7.0/linux/
  1. make


7 - Crie um documento com o código C mais abaixo nesta página e salve-o dentro do diretório linux

~/Downloads/hidapi-0.7.0/linux):

8 - Compile o programa: (certifique-se que você esta dentro do diretório “linux” (~/Downloads/hidapi-0.7.0/linux))

gcc prog.c hid-libusb.o `pkg-config libusb-1.0 libudev --libs` -o prog

9 - Rode o programa:

sudo ./prog



Código separado em funções
  1. include <stdio.h>
  2. include <stdlib.h>
  3. include "hidapi.h"

/*===================================Váriaveis globais=======================================*/ int res; unsigned char buf[65]; #define MAX_STR 255 wchar_t wstr[MAX_STR]; hid_device *handle; int i; char io, v;

/*======Função "conectar" utilizada para o programa reconhecer e acessar a placa=============*/

conectar () { struct hid_device_info *devs, *cur_dev;

devs = hid_enumerate(0x0, 0x0); cur_dev = devs; while (cur_dev) { cur_dev = cur_dev->next; } hid_free_enumeration(devs);

// acessa a placa pelo VID, PID, e opcinalmente com o serial number

handle = hid_open(0x1234, 0x0001, NULL); }

/*==========================Função "info" mostra as informações da placa=========================*/

info () { // Lê o nome do fabricante res = hid_get_manufacturer_string(handle, wstr, MAX_STR); printf("\nFabricante: %ls\n", wstr);

// Lê a string do produto res = hid_get_product_string(handle, wstr, MAX_STR); printf("Produto: %ls\n", wstr);

// Lê o serial number res = hid_get_serial_number_string(handle, wstr, MAX_STR); printf("Serial Number: %ls\n", wstr);

}

/*=============Função "enviar" envia um sinal para uma das saídas da placa==========================*/ //Parâmetros: enviar(nº da saída);

enviar (char saida) {

printf ("\nmude estado para 1 ou para 0.\n"); scanf (" %c", &v); getchar();

buf[0] = 'O'; buf[1] = saida; buf[2] = v; res = hid_write(handle, &buf[0], 3);

}

/*==================Função "receber" envia um sinal para uma das saídas da placa======================*/ //Parâmetros: receber(nº da saída);

receber (char saida) { buf[0] = 'I'; buf[1] = saida; res = hid_write(handle, &buf[0], 2);

res = hid_read(handle, buf, 1); if (res < 0) printf("Erro na leitura\n");

// Imprime o buffer retornado. for (i = 0; i < res; i++) printf("\nValor lido = %d \n", buf[i]); }


main (/*int argc, char* argv[]*/) {

/*não é preciso passar parâmetros*/conectar();

 for (;;) {

printf ("Escolha a saída\n"); scanf ("%c", &io);

/*io é uma variavel do tipo CHAR*/enviar(io); // /*io é uma variavel do tipo CHAR*/receber (io); // /*não é necessário passar parâmetros*/info();

 }

}


Pontos a serem verificados

  • Versão e drivers do linux que estão sendo usados;

modinfo usbtouchscreen > print1 print2 https://drive.google.com/#folders/0B9B1PtWR62blY1QxeGpONGlVYzg


  • Fazer um teste no Redes II e Inf para verificar se placa funciona (falar com Ricardo - ricardo.ifsc@gmail.com );
  • Documentar o driver da usb que está sendo usado (input) e verificar como trocar o driver dinamicamente para testar em outros PC;


Adding new vendor and product IDs to an existing USB driver on Linux

  1. su
  1. modprobe usbtouchscreen echo 1234 0001 > /sys/bus/usb/drivers/usbtouchscreen/new_id
  • Testar as entradas e saídas analógicas;

Saída: modificar a função enviar():


buf[0] = 'D';

buf[1] = '1';

buf[2] = '2';

buf[3] = '5';

buf[4] = '5';

res = hid_write(handle, &buf[0], 5);


Onde 1 é o numero da saída e 255 representa 5V 127 = 2,5V 0 = 0V e assim por diante.

  • Especificar a "biblioteca" a ser disponibilizada para os alunos;
  • estudar como construir uma biblioteca no Linux (lib ver [1]);
  • testes de desempenho