• Nenhum resultado encontrado

Dispositivos de Interface Humana (Human Interface Device – HID)

Sistema de aquisi¸c˜ao de dados

3.5.18 Dispositivos de Interface Humana (Human Interface Device – HID)

Os dispositivos HID s˜ao uma classe USB muito importante pois diversos dispositivos usuais como mouses e teclados se utilizam dela. Ela tamb´em muito utilizada por outros dispositivos que se utilizam desta classe para sua comunica¸c˜ao, ainda que n˜ao sejam escritamente de interface humana, como microcontroladores de sistemas de automa¸c˜ao pois muitos drivers desta classe j´a est˜ao dispon´ıveis nos sistemas operacionais mais utilizados (MS Windows, Mac OS, Linux).

Cap´ıtulo 3. Sistema de aquisi¸c˜ao de dados 

Figura 3.15: Estrutura dos Report Descriptors HID

O class code de bInterfaceClass ´e 3 para todos os dispositivos da classe HID. Como h´a muitos tipos de dispositivos distintos com diferentes usos, o comitˆe de especifica¸c˜ao decidiu n˜ao criar uma subclasse para cada dispositivo, mas um mecanismo chamado de Report Descriptor, no qual ao fazer sua enumera¸c˜ao, o dispositivo descreve quais os seus inputs e outputs para o host. As ´unicas excess˜oes s˜ao alguns teclados e mouses que tˆem subclasses separadas para utiliza¸c˜ao durante os processos de boot, que historicamente tˆem mais limita¸c˜ao do tamanho do c´odigo.

O membro bInterfaceProtocol do Interface Descriptor HID s´o faz sentido se o bInterface- SubClass especificar um dispositivo de boot, com o valor 1 para teclados e 0 para mouses. Caso contr´ario, seu valor ´e 0.

Quadro 3.15: Subclasses do HID C´odigo Subclasse

0x00 Sem subclasse 0x01 Dispositivos de boot 0x02–0xFF Reservados

Quando o HID realiza a enumera¸c˜ao, um dos processos mais importantes ´e o envio destes report descriptors. Ao contr´ario dos outros descritores, ele n˜ao ´e simplesmente uma tabela, mas ele de fato descreve os campos que s˜ao enviados no HID, permitindo que o sistema operacional do host possa interpretar os comandos mesmo sem ter um driver que tenha sido escrito especi- ficamente para este dispositivo (veja Figura 3.15). Por exemplo um teclado que tenha tamb´em a fun¸c˜ao de touchpad ou bot˜oes multim´ıdia pode ter em seu report descriptor estas fun¸c˜oes adicionais especificadas.

A seguir um exemplo com coment´arios do report descriptor de um mouse. Cada um dos textos entre v´ırgulas (geralmente uma linha da tabela) ´e um item.

C´odigo Descri¸c˜ao

Usage Page (Generic Desk- top),

Esta linha descreve que este dis- positivo ´e relevante para o desk- top. Ou seja, esta ´e uma descri- ¸c˜ao gen´erica do dispositivo

Usage (Mouse), Esta linha nos diz que este dispo-

sitivo ´e um mouse

Collection (Application), Aqui se inicia a descri¸c˜ao de da- dos que podem ser utilizados por uma aplica¸c˜ao

Usage (Pointer), Esta aplica¸c˜ao pode utilizar estes

dados para contolar um ponteiro na tela

Collection (Physical), Aqui se inicia a descri¸c˜ao de um dado espec´ıfico. Neste caso, o bo- t˜ao esquerdo do mouse e a posi¸c˜ao relativa nos eixos X e Y

Report ID (0A), Faz as altera¸c˜oes em um Report

espec´ıfico, neste caso o 0x0A

Usage (X), Usage (Y), Diz ao host que os dados seguin-

tes est˜ao se referindo respectiva- mente ao eixo X e Y

Logical Minimum (-127), O m´ınimo l´ogico destes dados ´e -127

Logical Maximum (127), O m´aximo l´ogico destes dados ´e

127

Report Size (8), S˜ao dados com 8 bits

Report Count (2), S˜ao dois dados

Input (Data, Variable, Relative),

Input pois ´e uma entrada para o host, Variable pois ela varia no tempo e Relative pois os da- dos s˜ao relativos a algum eixo, no caso, os dados anteriores de posi- ¸c˜ao

Logical Minimum (0), O m´ınimo l´ogico destes dados a

serem descritos ´e 0

Logical Maximum (1), O m´aximo l´ogico destes dados a

serem descritos ´e 1 (ou seja, s˜ao bin´arios)

Report Count (3), S˜ao trˆes dados

Report Size (1), De um bit

Usage Page (Button Page), O host deve interpret´a-los como bot˜oes

Cap´ıtulo 3. Sistema de aquisi¸c˜ao de dados 

Usage Minimum (1), O “bot˜ao m´ınimo ´e o n´umero 1”

Usage Maximum (3), E o “bot˜ao m´aximo ´e o n´umero 3”

– sendo portanto 3 bot˜oes Input (Data, Variable,

Absolute),

Input pois ´e uma entrada para o host, Variable pois ela varia no tempo e Absolute pois os dados n˜ao dependem de outros valores como valores passados

Report Size (5), Adiciona um Report de 5 bits

Input (Constant), Adiciona esse report como uma

constante, para completar o byte de bitmap dos bot˜oes

End Collection, Finaliza a Physical Collection

End Collection Finaliza a Application Collection

O dispositivo HID deve ter os pipes endpoint 0 e o Interrupt In definidos para suas comuni- ca¸c˜oes, enquanto o Interrupt Out ´e opcional.

3.5.19

USB Host

O USB Host ´e tipicamente o computador no qual ´e conectado um dispositivo. Entretanto, excepcionalmente tamb´em ´e poss´ıvel que sistemas embarcados sejam hosts. Isso permite que a estes dispositivos sejam conectadas cˆameras fotogr´aficas, armazenamento, e etc.

Em nosso caso, o hub atua como um host, pois a esta¸c˜ao meteorol´ogica ´e o seu dispositivo. Logo, ele deve suportar os diversos report descriptors que mencionamos. Para o aumento da produtividade do desenvolvedor, diversos fabricantes de microcontroladores e processadores j´a fornecem a pilha USB tanto de dispositivo como de host. Este ´e o nosso caso.

3.6

Esta¸c˜ao meteorol´ogica WH-1080

A esta¸c˜ao meteorol´ogica WH-1080 ´e produzida pelo fabricantes chinˆes Fine O↵set Electro- nics16, embora elas sejam revendidas sob a marca de diversos revendedores. Embora n˜ao sejam

os instrumentos mais apropriados para a avalia¸c˜ao de potencial e´olico, seu baixo custo as torna muito interessantes. Uma de suas desvantagens ´e a imprecis˜ao relativamente alta, casos reporta- dos de dados errados (algum bug?) e sua taxa de atualiza¸c˜ao lenta, com per´ıodo de 48s. Isso as torna inapropriadas para a medi¸c˜ao de turbulˆencia, embora a medida de velocidade de rajadas (gust) possa ser um parˆametro pelo qual podemos infer´ı-la.

A Tabela 3.6 nos mostra suas especifica¸c˜oes t´ecnicas conhecidas. Embora o autor tenha contactado o fabricante diversas vezes, n˜ao obteve resposta sobre a acur´acia, precis˜ao, drift, snr, range dinˆamico e taxa de amostragem dos parˆametros.

Quadro 3.17: Especifica¸c˜oes t´ecnicas da esta¸c˜ao meteorol´ogica WH-1080 Parˆametro Valor

Distˆancia de transmiss˜ao de dados 100m

Excurs˜ao de temperatura -40 C – 65 C Resolu¸c˜ao de temperatura 0,1 C

Excurs˜ao de humidade relativa 10% – 99% Volume de chuvas 0 – 9999mm

Resolu¸c˜ao de chuvas 0,3mm (se volume < 1000mm) 1mm (se volume > 1000mm) Velocidade de vento 0 – 160km/h

Intervalo de medi¸c˜ao do 48s sensor de temperatura, humidade e press˜ao

Excurs˜ao barom´etrica 435mmHg – 810mmHg Resolu¸c˜ao barom´etrica 0,25mmHg

As Figuras 3.16 e 3.17, assim como a Tabela 3.19 mostram as sa´ıdas do programa USBLy- ser17, que ´e utilizado para fazer a intercepta¸c˜ao de dados transmitidos pelas portas USB assim

como a an´alise de protocolo. Com o software fornecido junto com a esta¸c˜ao instalado em um PC, o USBLyser foi usado para interceptar essa comunica¸c˜ao, gerar relat´orios e assim realizar a engenharia reversa da comunica¸c˜ao USB com a esta¸c˜ao.

Neles podemos ver na Figura3.16a o device descriptor da esta¸c˜ao meteorol´ogica, e na Figura

3.16b o configuration descriptor e o interface descriptor. A Figura 3.17a nos mostra o report descriptor HID que descreve os dados a serem enviados pela esta¸c˜ao meteorol´ogica, enquanto a Figura 3.17b mostra os dados enviados pelo host `a esta¸c˜ao. Estes dados s˜ao usados pelo report seguinte, mostrado na Figura 3.17c, que comanda a esta¸c˜ao a usar o report da Figura 3.17b como entrada para as sa´ıdas que s˜ao finalmente enviadas em trˆes relat´orios de 8 bits semelhantes `a Figura3.17d. Nestas sa´ıdas est˜ao finalmente os dados que estamos interessados: temperatura, dire¸c˜ao de vento, intensidade de vento e etc. Este processo tamb´em pode ser visto de maneira sequencial na Tabela 3.19.

Com base nestas informa¸c˜oes e tamb´em em c´odigo j´a existente, foi constru´ıdo/adaptado um driver USB que simula um host e permite que estas informa¸c˜oes meteorol´ogicas sejam capturadas pelo hub.

Foi encontrado um documento na internet chamado “WH1080 EEPROM data definition” (sem referˆencia a autor), que traz alguma documenta¸c˜ao a respeito da descri¸c˜ao do mapa de mem´oria da esta¸c˜ao, mas o autor deste trabalho considera a documenta¸c˜ao bastante incompleta. Deste documento, sabemos que do endere¸co 0x0000 a 0x0100, h´a vari´aveis de configura¸c˜ao, assim como dados hist´oricos de m´ınimos e m´aximos da esta¸c˜ao. A partir do endere¸co 0x0100 at´e o endere¸co 0x1FFFF, temos dados em um bu↵er FIFO18 que armazena blocos de 16 bytes de

dados hist´oricos das medi¸c˜oes, sendo que os ´unicos dados de interesse para n´os s˜ao os mais recentes, justamente se iniciando na posi¸c˜ao 0x0100. A descri¸c˜ao dos dados nos blocos est´a

17Site: http://www.usblyzer.com/ 18First-in, first-out

Cap´ıtulo 3. Sistema de aquisi¸c˜ao de dados  apresentada na Tabela 3.18.

Quadro 3.18: Defini¸c˜ao dos dados de interesse da esta¸c˜ao meteorol´ogica

Item Bytes Unidade Formato dados M´ın.IntervaloM´ax. Coment´arios

Intervalo de amos- tragem

1 Byte minuto HEX 1 240 Intervalo de amostragem

Humidade relativa interna

1 Byte 1% HEX 1 99 Um byte

Temperatura interna 2 Bytes 0.1 ? HEX -400 60 LSBMSB

Humidade relativa externa

1 Byte 1% HEX 1 99 Um byte

Temperatura externa 2 Bytes 0.1 ? HEX -400 600 LSBMSB

ABS P 2 Bytes 0.1 Hpa HEX 920 1080 LSB

MSB

M´edia vel. vento 1 Byte 0.1 m/s HEX 0 500 LSB

M´aximo vel. vento 1 Byte 0.1 m/s HEX 0 500 LSB

Vel. vento – High Nibble

1 Byte HEX 0 1 MSB

Dire¸c˜ao vento 1 Byte N/A HEX 0 15 Um byte – 0x80 para dire-

¸c˜ao de vento inv´alida, 0 para N, 1 para NNE, 2 para NEE, 3 para E, 4 para EES, etc

Pluviosidade total 2 Bytes Hz HEX 0 65535 LSBMSB

Status 1 Byte bit0 bit1 bit2 bit3 bit4 bit5 Flag de da- dos v´alidos

bit6=1:n˜ao foram recebidos dados de sensor Flag de overflow de pluvio- sidade bit7=1:aconteceu overflow do contador de n´ıvel pluvi- om´etrico

Cap´ıtulo 3. Sistema de aquisi¸c˜ao de dados 

Get Descriptor

This request returns the specified descriptor if the descriptor exists.

Offset Field Size Value Description

0 bmRequestType 1 80h 4..0: Recipient ...00000 Device 6..5: Type .00... Standard 7: Direction 1... Device-to-Host 1 bRequest 1 06h Get Descriptor 2 wValue.LowByte 1 00h

3 wValue.HiByte 1 01h Device Descriptor 4 wIndex 2 0000h

6 wLength 2 0012h Descriptor Length Device Descriptor

Offset Field Size Value Description

0 bLength 1 12h 1 bDescriptorType 1 01h Device 2 bcdUSB 2 0110h USB Spec 1.1

4 bDeviceClass 1 00h Class info in Ifc Descriptors 5 bDeviceSubClass 1 00h 6 bDeviceProtocol 1 00h 7 bMaxPacketSize0 1 08h 8 bytes 8 idVendor 2 1941h 10 idProduct 2 8021h 12 bcdDevice 2 0100h 1.00 14 iManufacturer 1 00h 15 iProduct 1 00h 16 iSerialNumber 1 00h 17 bNumConfigurations 1 01h Get Descriptor

This request returns the specified descriptor if the descriptor exists.

Offset Field Size Value Description

0 bmRequestType 1 80h 4..0: Recipient ...00000 Device 6..5: Type .00... Standard 7: Direction 1... Device-to-Host 1 bRequest 1 06h Get Descriptor 2 wValue.LowByte 1 00h Descriptor Index 3 wValue.HiByte 1 02h Configuration Descriptor 4 wIndex 2 0000h

6 wLength 2 0022h Descriptor Length Configuration Descriptor 1 Bus Powered, 100 mA

Offset Field Size Value Description

0 bLength 1 09h 1 bDescriptorType 1 02h Configuration 2 wTotalLength 2 0022h 4 bNumInterfaces 1 01h 5 bConfigurationValue 1 01h 6 iConfiguration 1 00h

7 bmAttributes 1 80h Bus Powered 4..0: Reserved ...00000

5: Remote Wakeup ..0... No

6: Self Powered .0... No, Bus Powered 7: Reserved (set to one)

(bus-powered for 1.0) 1...

8 bMaxPower 1 32h 100 mA Interface Descriptor 0/0 HID, 1 Endpoint

Offset Field Size Value Description

0 bLength 1 09h 1 bDescriptorType 1 04h Interface 2 bInterfaceNumber 1 00h 3 bAlternateSetting 1 00h 4 bNumEndpoints 1 01h 5 bInterfaceClass 1 03h HID 6 bInterfaceSubClass 1 00h 7 bInterfaceProtocol 1 00h 8 iInterface 1 00h HID Descriptor

Offset Field Size Value Description

0 bLength 1 09h 1 bDescriptorType 1 21h HID 2 bcdHID 2 0100h 1.00 4 bCountryCode 1 00h 5 bNumDescriptors 1 01h 6 bDescriptorType 1 22h Report 7 wDescriptorLength 2 0034h 52 bytes Endpoint Descriptor 81 1 In, Interrupt

Offset Field Size Value Description

0 bLength 1 07h 1 bDescriptorType 1 05h Endpoint 2 bEndpointAddress 1 81h 1 In 3 bmAttributes 1 03h Interrupt

1..0: Transfer Type ...11 Interrupt 7..2: Reserved 000000..

4 wMaxPacketSize 2 0008h 8 bytes 6 bInterval 1 0Ah

Get Descriptor

This request returns the specified descriptor if the descriptor exists.

Offset Field Size Value Description

0 bmRequestType 1 81h

4..0: Recipient ...00001 Interface 6..5: Type .00... Standard 7: Direction 1... Device-to-Host 1 bRequest 1 06h Get Descriptor 2 wValue.LowByte 1 00h

3 wValue.HiByte 1 22h Report Descriptor

4 wIndex 2 0000h Interface

6 wLength 2 0074h Descriptor Length

Interface 0 HID Report Descriptor Vendor-Defined 1

Item Tag (Value) Raw Data

Usage Page (Vendor-Defined 161) 06 A0 FF

Usage (Vendor-Defined 1) 09 01

Collection (Application) A1 01

Usage (Vendor-Defined 2) 09 02

Collection (Physical) A1 00

Usage Page (Vendor-Defined 162) 06 A1 FF Usage Minimum (Vendor-Defined 1) 19 01 Usage Maximum (Vendor-Defined 8) 29 08

Logical Minimum (-128) 15 80 Logical Maximum (127) 25 7F Physical Minimum (0) 35 00 Physical Maximum (-1) 45 FF Report Size (8) 75 08 Report Count (8) 95 08 Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02 Usage Minimum (Vendor-Defined 17) 19 11 Usage Maximum (Vendor-Defined 24) 29 18

Logical Minimum (-128) 15 80 Logical Maximum (127) 25 7F Physical Minimum (0) 35 00 Physical Maximum (-1) 45 FF Report Size (8) 75 08 Report Count (8) 95 08 Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 02 End Collection C0 End Collection C0 Output Report

Usage Range Lg/Ph Value

Vendor-Defined 24 [-128..127] 161 Vendor-Defined 24 [-128..127] 0 Vendor-Defined 24 [-128..127] 0 Vendor-Defined 24 [-128..127] 32 Vendor-Defined 24 [-128..127] 161 Vendor-Defined 24 [-128..127] 0 Vendor-Defined 24 [-128..127] 0 Vendor-Defined 24 [-128..127] 0 Set Report

Allows the host to send a report to the device.

Offset Field Size Value Description

0 bmRequestType 1 21h 4..0: Recipient ...00001 Interface 6..5: Type .01... Class 7: Direction 0... Host-to-Device 1 bRequest 1 09h Set Report 2 wValue.LowByte 1 00h Report ID 3 wValue.HiByte 1 02h Output Report 4 wIndex 2 0000h Interface 6 wLength 2 0008h Report Length

Input Report

Usage Range Lg/Ph Value

Vendor-Defined 8 [-128..127] 85 Vendor-Defined 8 [-128..127] 170 Vendor-Defined 8 [-128..127] 255 Vendor-Defined 8 [-128..127] 255 Vendor-Defined 8 [-128..127] 255 Vendor-Defined 8 [-128..127] 255 Vendor-Defined 8 [-128..127] 255 Vendor-Defined 8 [-128..127] 0

Figura 3.17: HID Report Descriptor

C ap ´ıt ulo 3. Sis te ma de aq uis i¸c ˜ao de da do s 

Quadro 3.19: Sequˆencia temporal de enumera¸c˜ao e transferˆencia de dados da esta¸c˜ao me- teorol´ogica WH-1080

Seq Time Duration Request Request Details Raw Data I/O Status Coment´arios

In´ıcio do processo de enumera¸c˜ao

7 21:37:28.779 Get Descriptor from Device Dvc in

0010-0007 21:37:28.782 2.804 ms Control Transfer Get Descriptor (Dvc) 12 01 10 01 00 00 00 08... in Success Figura3.16a – descritor do dispositivo 11 21:37:28.782 Get Descriptor from Device Cfg ind:0 in

0014-0011 21:37:28.784 1.954 ms Control Transfer Get Descriptor (Cfg ind:0) 09 02 22 00 01 01 00 80... in Success Figura3.16b – descritor da primeira configu- ra¸c˜ao

15 21:37:28.784 Get Descriptor from Device Cfg ind:0 in

0018-0015 21:37:28.788 4.499 ms Control Transfer Get Descriptor (Cfg ind:0) 09 02 22 00 01 01 00 80... in Success Figura3.16b – descritor da primeira configu- ra¸c˜ao com o descritor da interface HID

23 21:37:28.789 Class Interface Set Idle out

0026-0023 21:37:28.790 819 us Control Transfer Set Idle out Success Manda o dispositivo ficar em idle 27 21:37:28.790 Get Descriptor from Interface Report in

0030-0027 21:37:28.796 6.053 ms Control Transfer Get Descriptor (Report) 06 A0 FF 09 01 A1 01 09... in Success Figura3.17a – report descriptor da interface HID

67 21:37:28.830 Bulk or Interrupt Transfer 8 bytes bu↵er in 69 21:37:28.831 Bulk or Interrupt Transfer 8 bytes bu↵er in

A partir desta linha temos blocos iguais, varrendo incrementalmente 0x0020 bytes da mem´oria da esta¸c˜ao meteorol´ogica a cada bloco – mem´oria 0x0000 a 0x001F

130 21:37:30.380 Class Interface Set Report (Output len:8) A1 00 00 20 A1 00 00 20 out Dados s˜ao enviados para o endpoint 1 – co- mando para a leitura dos 32 bytes iniciando no endere¸co 0x0000 – (Figura3.17c) 0133-0130 21:37:30.381 1.124 ms Control Transfer Set Report (Output len:8) out Success Comando ´e enviado para que os dados sejam

lidos do endpoint 1 e sejam processados (Fi- gura3.17b)

0135-0067 21:37:30.400 1.569731 s Bulk or Interrupt Transfer Input Report len:8 55 AA FF FF FF FF FF FF in Success Dados s˜ao lidos do dispositivo (Figura3.17d) 136 21:37:30.400 Bulk or Interrupt Transfer 8 bytes bu↵er in

0139-0069 21:37:30.408 1.577645 s Bulk or Interrupt Transfer Input Report len:8 FF FF FF FF FF FF FF FF in Success Dados s˜ao lidos do dispositivo (Figura3.17d) 140 21:37:30.408 Bulk or Interrupt Transfer 8 bytes bu↵er in

0143-0136 21:37:30.416 15.919 ms Bulk or Interrupt Transfer Input Report len:8 1E 20 02 20 09 00 00 00 in Success Dados s˜ao lidos do dispositivo (Figura3.17d) 144 21:37:30.416 Bulk or Interrupt Transfer 8 bytes bu↵er in

0147-0140 21:37:30.424 15.957 ms Bulk or Interrupt Transfer Input Report len:8 00 7F 00 01 00 00 00 01 in Success Dados s˜ao lidos do dispositivo (Figura3.17d) 148 21:37:30.424 Bulk or Interrupt Transfer 8 bytes bu↵er in

Final do primeiro bloco e in´ıcio do segundo bloco – mem´oria 0x0020 a 0x003F

150 21:37:30.424 Class Interface Set Report (Output len:8) A1 00 20 20 A1 00 20 20 out Dados s˜ao enviados para o endpoint 1 – co- mando para a leitura dos 32 bytes iniciando no endere¸co 0x0020

0153-0150 21:37:30.426 1.260 ms Control Transfer Set Report (Output len:8) out Success Comando ´e enviado para que os dados sejam lidos do endpoint 1 e sejam processados 0155-0144 21:37:30.440 23.951 ms Bulk or Interrupt Transfer Input Report len:8 94 27 65 24 00 00 00 00 in Success Dados s˜ao lidos do dispositivo 156 21:37:30.440 Bulk or Interrupt Transfer 8 bytes bu↵er in

0159-0148 21:37:30.448 23.889 ms Bulk or Interrupt Transfer Input Report len:8 00 00 00 07 01 01 12 02 in Success Dados s˜ao lidos do dispositivo 160 21:37:30.448 Bulk or Interrupt Transfer 8 bytes bu↵er in

0163-0156 21:37:30.456 15.989 ms Bulk or Interrupt Transfer Input Report len:8 41 23 C8 00 00 00 46 2D in Success Dados s˜ao lidos do dispositivo 164 21:37:30.456 Bulk or Interrupt Transfer 8 bytes bu↵er in

0167-0160 21:37:30.464 16.000 ms Bulk or Interrupt Transfer Input Report len:8 2C 01 64 80 C8 00 00 00 in Success Dados s˜ao lidos do dispositivo 168 21:37:30.464 Bulk or Interrupt Transfer 8 bytes bu↵er in

Final do segundo bloco e in´ıcio do terceiro bloco – mem´oria 0x0040 a 0x005F

170 21:37:30.464 Class Interface Set Report (Output len:8) A1 00 40 20 A1 00 40 20 out Dados s˜ao enviados para o endpoint 1 – co- mando para a leitura dos 32 bytes iniciando no endere¸co 0x0040

0173-0170 21:37:30.465 1.131 ms Control Transfer Set Report (Output len:8) out Success Comando ´e enviado para que os dados sejam lidos do endpoint 1 e sejam processados 0175-0164 21:37:30.480 24.012 ms Bulk or Interrupt Transfer Input Report len:8 64 00 64 80 A0 28 80 25 in Success Dados s˜ao lidos do dispositivo 176 21:37:30.480 Bulk or Interrupt Transfer 8 bytes bu↵er in

0179-0168 21:37:30.488 23.972 ms Bulk or Interrupt Transfer Input Report len:8 A0 28 80 25 00 B4 00 00 in Success Dados s˜ao lidos do dispositivo 180 21:37:30.488 Bulk or Interrupt Transfer 8 bytes bu↵er in

0183-0176 21:37:30.496 15.895 ms Bulk or Interrupt Transfer Input Report len:8 68 01 00 0A 00 F4 01 12 in Success Dados s˜ao lidos do dispositivo 184 21:37:30.496 Bulk or Interrupt Transfer 8 bytes bu↵er in

0187-0180 21:37:30.504 16.043 ms Bulk or Interrupt Transfer Input Report len:8 00 00 00 00 00 00 00 00 in Success Dados s˜ao lidos do dispositivo 188 21:37:30.504 Bulk or Interrupt Transfer 8 bytes bu↵er in

Final do terceiro bloco e in´ıcio do quarto bloco – mem´oria 0x0060 a 0x007F

190 21:37:30.504 Class Interface Set Report (Output len:8) A1 00 60 20 A1 00 60 20 out Dados s˜ao enviados para o endpoint 1 – co- mando para a leitura dos 32 bytes iniciando no endere¸co 0x0060

0193-0190 21:37:30.505 1.218 ms Control Transfer Set Report (Output len:8) out Success Comando ´e enviado para que os dados sejam lidos do endpoint 1 e sejam processados 0195-0184 21:37:30.520 24.063 ms Bulk or Interrupt Transfer Input Report len:8 00 00 47 1C 63 0B 4D 01 in Success Dados s˜ao lidos do dispositivo 196 21:37:30.520 Bulk or Interrupt Transfer 8 bytes bu↵er in

0199-0188 21:37:30.528 23.898 ms Bulk or Interrupt Transfer Input Report len:8 C3 00 1E 01 0A 81 1E 01 in Success Dados s˜ao lidos do dispositivo 200 21:37:30.528 Bulk or Interrupt Transfer 8 bytes bu↵er in

0203-0196 21:37:30.536 15.932 ms Bulk or Interrupt Transfer Input Report len:8 0A 81 EE 00 01 00 91 24 in Success Dados s˜ao lidos do dispositivo 204 21:37:30.536 Bulk or Interrupt Transfer 8 bytes bu↵er in

0207-0200 21:37:30.544 16.107 ms Bulk or Interrupt Transfer Input Report len:8 F1 23 1B 28 4A 27 00 00 in Success Dados s˜ao lidos do dispositivo 208 21:37:30.544 Bulk or Interrupt Transfer 8 bytes bu↵er in

Final do quarto bloco – os blocos seguintes n˜ao s˜ao mostrados pois seguem padr˜ao semelhante

Cap´ıtulo 3. Sistema de aquisi¸c˜ao de dados 

3.7

Interface Ethernet e TCP/IP

Os protocolos TCP19 e IP20 assim como a interface ETHERNET s˜ao bastante complexos,

como o protocolo USB. Entretanto, como n˜ao ´e necess´ario realizar engenharia reversa neles, n˜ao ´e necess´ario entender min´ucias, mas simplesmente utilizar as bibliotecas fornecidas pelo fabricante, assim como notas de aplica¸c˜ao.

Analizando a Figura 3.18, que mostra o esquem´atico na ´area pertinente a essa interface vemos o componente ENC424J600 que ´e um controlador da interface ETHERNET que funciona a partir de uma interface SPI. Ele ´e o respons´avel pela convers˜ao dos n´ıveis de tens˜ao diferenciais do padr˜ao ethernet e do recebimento e envio de pacotes neste formato, comunicando-se via o protocolo SPI (bem mais simples) com o PIC32. Este tem a pilha TCP/IP fornecida pelo fabricante, facilitando o desenvolvimento de aplica¸c˜oes.

3.8

Banco de dados e servidor

Os servidores de banco de dados, captura os dados do hub e interface com usu´ario est˜ao todos hospedados no mesmo servidor virtual no provedor Linode.com. A vantagem de servidores virtuais (nos quais v´arias m´aquinas rodam virtualizadas na mesma m´aquina f´ısica) ´e seu pre¸co atrativo, mantendo controle total da m´aquina.

O banco de dados que foi utilizado ´e o PostgreSQL, que ´e um banco de dados relacional com 15 anos de desenvolvimento ativo e com bancos de dados hoje em uso maiores que 4 Terabytes. A estrutura dos campos criados na principal tabela do banco de dados segue o seguinte padr˜ao da Tabela 3.20.

Como se pode ver, n˜ao h´a distin¸c˜ao de tabela por tipo de dado armazenado, seja tempera- tura, press˜ao, humidade, intensidade de vento ou qualquer outra grandeza. O prop´osito desta arquitetura ´e estimular a diversidade de parˆametros medidos com o m´ınimo poss´ıvel de adap- ta¸c˜oes ao sistema. Hoje a matriz de equivalˆencia num´erica a cada uma das grandezas medidas ´e mostrada na Tabela 3.21, e pode ser facilmente expandida.

A inser¸c˜ao de dados no servidor ´e feita atrav´es de um script que recebe um pacote de dados do hub e o insere de maneira apropriada no banco de dados. Seu papel ´e desencapsular uma requisi¸c˜ao POST feita pelo hub, ler um pacote codificado na estrutura JSON21 e colocar cada

dado em uma nova entrada no banco de dados.

Este programa de captura ´e capaz de lidar com um conjunto singular de dados instantˆaneos, e tamb´em com uma requisi¸c˜ao que envia simultaneamente uma grande quantidade de dados passados, como ocorre quando o hub permanece sem conex˜ao com a internet e seus dados s˜ao guardados temporariamente no cart˜ao de mem´oria. Neste caso, somente ap´os o restabelecimento da conex˜ao o hub far´a upload da carga de dados.

Documentos relacionados