Eu fui encarregado de escrever algum código para uma cabeça PTZ usando o protocolo Pelco-D, que usa RS485 (2 fios). O código destina-se a ser executado em um Raspi, então eu primeiro descobri como conseguir isso. Uma vez que fiquei satisfeito por poder trocar dados entre o Pi e o PTZ, sentei-me no meu laptop para escrever algum código real e liguei o PTZ a ele através do Ex-1333V usb para o adaptador serial que nós adquirimos para esta finalidade. Ele pode fazer RS232, 422 e 485. Apareceu para funcionar bem o suficiente com apenas os drivers padrão do Ubuntu, pelo menos ambas as portas foram devidamente reconhecidas.
Mas não consegui enviar dados para a cabeça. O indicador de transferência no adaptador se acendeu, mas a cabeça não se moveu. Para o diagnóstico, conectei meu laptop ao Pi. Mais uma vez o indicador acendeu, mas o pi não recebeu nada. Então eu tentei o contrário, enviando do Pi e recebendo no laptop. Isso funcionou sem problemas. Comecei a mexer com a configuração e, finalmente, percebi que o pi estava recebendo um sinal quando o adaptador foi definido para RS232. Os dados estavam confusos, é claro, mas pelo menos alguma coisa estava passando.
Então comecei a pensar sobre o CD do driver fornecido com o adaptador. Pode ser que o driver converta os dados antes de enviá-los através do USB, em vez de convertê-los no adaptador? Isso obviamente não seria tratado pelos drivers padrão. Essa é a suposição de que estou trabalhando atualmente, de qualquer forma.
Então eu peguei os drivers linux no cd, o que acabou sendo um tar contendo um arquivo c, um arquivo de cabeçalho e um makefile. Eu não estou muito familiarizado com o material linux de baixo nível, então fiquei um pouco confuso. Claro, eu poderia construí-lo, mas então o que? Voltando-me para a má desculpa dos adaptadores para um manual, a única coisa que consegui encontrar foi a boa sugestão para "por favor, siga as instruções para instalar os drivers da porta USB na sua distribuição linux em particular". Então eu fui procurar por isso, e encontrei ... nada.
O que me traz aqui. Admito francamente que esta é a primeira vez que estou trabalhando com o serial, então pode haver outras coisas que não estou entendendo aqui, e você deveria se libertar para indicá-las. Mas no momento eu acho que esses pilotos são minha melhor aposta, então alguém poderia me explicar como instalá-los?
ADENDO:
Eu escrevi acima que eu achava que poderia construir o projeto C com facilidade, mas na verdade não tentei. Não vi nenhum ponto nisso sem saber o que fazer depois. Eu assumi errado, como a construção produz um erro. Aqui está a saída do make:
gcc -Wall -D__KERNEL__ -DMODULE -I/lib/modules/4.13.0-37-generic/build/include -D__SMP__ -DSMP -I/usr/src/linux-4.13.0-37-generic/drivers/usb/serial/ -O -c -o ftdi_sio.o ftdi_sio.c
In file included from /lib/modules/4.13.0-37-generic/build/include/linux/kernel.h:6:0,
from ftdi_sio.c:251:
/lib/modules/4.13.0-37-generic/build/include/linux/linkage.h:7:10: fatal error: asm/linkage.h: No such file or directory
#include <asm/linkage.h>
Eu pesquisei o erro, mas não consegui definir o que fazer. Aparentemente, deve haver um link simbólico para alguns cabeçalhos de sistema neste local, mas não é, mas não consigo descobrir para qual cabeçalho o link deve apontar exatamente. Se eu interpretar o makefile correto (realmente não estou familiarizado com o makefile, nunca fui além de "make this-project-i-downloaded", que geralmente funcionou), ele está apenas tentando construir um arquivo objeto (.o):
# This Makefile has been simplified as much as possible, by putting all
# generic material, independent of this specific directory, into
# ../Rules.make. Read that file for details
# The usb serial headers
INCLUDEUSBSER := $(shell echo "/usr/src/linux-'uname -r'/drivers/usb/serial/")
TOPDIR := $(shell pwd)
#TOPDIR = .
include $(TOPDIR)/Rules.make
CFLAGS += -I$(INCLUDEUSBSER) -O
OBJS = ftdi.o
all: $(OBJS)
ftdi.o: ftdi_sio.o
$(LD) -r $^ -o $@
install:
install -d $(INSTALLDIR)
install -c $(OBJS) $(INSTALLDIR)
clean:
rm -f *.o *~ core
Há também um arquivo de regras bastante longo, mas duvido que ajude muito se eu postar a coisa toda. Parece ser tirado e modificado de um livro, como por seu cabeçalho:
# This file is part of the sample code for the book "Linux Device Drivers",
# second edition. It is meant to be generic and is designed to be recycled
# by other drivers. The comments should be clear enough.
# It partly comes from Linux Makefile, and needs GNU make.
Então talvez alguém já saiba como parece.