[GTER] Display ServerU
Patrick Tracanelli
eksffa at freebsdbrasil.com.br
Mon Feb 1 19:49:37 -02 2016
Exatamente, o primeiro passo é como o Alexandre mencionou, ter o device.
Tanto LCM, keypad quanto controle programável de bypass vão precisar de modulos complementares.
Ja passou dessa fase? Os downloads dos módulos de kernel tanto pro display quanto do keypad em:
http://main.mia.serveru.us/pub/l/ServerU/plcm/
Voce precisa compilar para a mesma versão de kernel do VyOS, uma vez passando essa fase basta scriptar ou programar.
O pacote tem 2 demos escritos em C que permitem manipular, e o próprio utility que voce pode usar via shell script mesmo.
Prepare o ambiente com mesma glibc e kernel e envie o modulo pra la. O pacote ja vem com modulo compilado mas sabe como é, o ideal é vc sempre compilar vc mesmo. Se tiver problemas abra um ticket conosco :-)
http://support.serveru.us/index.php?/ServerU/Knowledgebase/Article/View/62/0/how-to-control-serveru-plcm-device-your-self
http://support.serveru.us/index.php?/ServerU/Knowledgebase/Article/View/74/0/controle-das-interfaces-bypass-no-serveru
Temos alguns usuarios de Linux que reportaram sucesso ao usar também o lcdproc quanto utility quanto daemon, ja que ele suporta uma gama de LCDs de 2 linhas em porta paralela, serial e UART. Mas o que recomendamos é o driver acima e fazer acesso direto pela utility adequada.
Seguem samples.
/*
* ServerU PLCM Utility
*
* ServerU - http://www.ServerU.com.br http://www.ServerU.us
* PLCM with 2 lines with 4 keys pad model Netmap L100 & Netmap L800
*
* Developed and teste for/on FreeBSD RELENG_8, RELENG_9, RELENG_10
* Ported and tested on Linux 2.4, Linux 2.6, Linux 3.0, 3.1 and 3.2
*
* Porting Notes: parei de usar a &plcm e passei a mandar o (int) direto;
* os valores dos botoes do keypad sao diferentes tambem o retorno do
* hardware;
*
*
*/
#include <sys/file.h>
#include <stdio.h>
#include <string.h>
//#include "serveru-plcm-util.h"
#include "../serveru-plcm-util.h"
int main(int argc,char *argv[])
{
int devfd;
unsigned char tmp_str[20];
if (argc < 2) {
printf("Erro! Exemplo de uso:\n %s \"Valor na PLCM1...\" \"Valor na PLCM2...\"\n",argv[0]);
return(1);
}
iopl(3);
printf("ServerU PCL Test Sample - Write @LCM1 and @LCM2\n");
devfd = open("/dev/plcm_drv",O_RDWR);
if( devfd == -1 )
{
printf("Can not open /dev/plcm_drv\n");
return -1;
}
ioctl(devfd,PLCM_IOCTL_CLEARDISPLAY,0);
//show input string
printf("Input1: %s\n",argv[1]);
printf("Input2: %s\n",argv[2]);
memset(tmp_str,0,20);
strcpy(tmp_str,argv[1]);
ioctl(devfd,PLCM_IOCTL_SET_LINE,1);
write(devfd,tmp_str,20);
memset(tmp_str,0,20);
strcpy(tmp_str,argv[2]);
ioctl(devfd,PLCM_IOCTL_SET_LINE,2);
write(devfd,tmp_str,20);
close(devfd);
return 0;
}
#!/bin/sh
#
# ServerU PLCM Utility
#
# ServerU - http://www.ServerU.com.br http://www.ServerU.us
# PLCM with 2 lines with 4 keys pad model Netmap L100 & Netmap L800
#
# Example useless shell script
#
# Remember LCM display 1 and 2 has 21 chars limit.
#
./serveru-plcm-util -LCM1
/bin/echo -n "Attention! Important!" > /dev/plcm_drv
./serveru-plcm-util -LCM2
/bin/echo -n "This is just a test. " > /dev/plcm_drv
count=20
while [ $count -gt 0 ] ; do
./serveru-plcm-util -Off
sleep 0.3
./serveru-plcm-util -On
sleep 0.3
count=$(( $count -1 ))
done
./serveru-plcm-util -On
/*
* ServerU PLCM Utility
*
* ServerU - http://www.ServerU.com.br http://www.ServerU.us
* PLCM with 2 lines with 4 keys pad model Netmap L100 & Netmap L800
*
* Developed and teste for/on FreeBSD RELENG_8, RELENG_9, RELENG_10
* Ported and tested on Linux 2.4, Linux 2.6, Linux 3.0, 3.1 and 3.2
*
* Porting Notes: parei de usar a &plcm e passei a mandar o (int) direto;
* os valores dos botoes do keypad sao diferentes tambem o retorno do
* hardware;
*
*
*/
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/file.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <err.h>
#include "serveru-plcm-util.h"
int usage(int devfd) {
printf("Comando Invalido\n");
printf("Uso: serveru-plcm-util [-stop|-On|-Off|-DispOff|-DispOn|-LCM1|-LCM2|-Keypad|-Read1|-Read2|-Clear]\n");
printf("ServerU LCM Utility by ServerU Inc\n");
close(devfd);
return 0;
}
int main(int argc, char *argv[])
{
struct _plcm plcm;
int devfd;
unsigned char Ret_Message1[40] = "";
unsigned char Ret_Message2[40] = "";
int i = 0;
unsigned char Keypad_Value = 0, Pre_Value = 0, Counter = 0;
unsigned char Keypad_Message[40] = "";
unsigned char Up[] = "Up ";
unsigned char Down[] = "Down ";
unsigned char Left[] = "Left ";
unsigned char Right[] = "Right";
unsigned char detect_press;
unsigned char detect_dir;
int MaxTestTime = 1 ; // 15 Sec
devfd = open("/dev/plcm_drv", O_RDWR);
if(devfd == -1)
{
printf("Cant open: /dev/plcm_drv\n");
return -1;
}
if(argc == 2)
{
// Inicializa Defaults ServerU
Keypad_Message[40] = "";
plcm.amg=0;
ioctl(devfd, PLCM_IOCTL_DISPLAY_B, 0); // desliga blink
ioctl(devfd, PLCM_IOCTL_DISPLAY_C, 0);
if(strcmp("-stop", argv[1]) == 0)
{
plcm.amg=0;
ioctl(devfd, PLCM_IOCTL_STOP_THREAD, 0);
printf("plcm_drv stopped.\n");
close(devfd);
return 0;
}
if(strcmp("-On", argv[1]) == 0)
{
plcm.amg=1;
ioctl(devfd, PLCM_IOCTL_BACKLIGHT, 1);
close(devfd);
return 0;
}
if(strcmp("-Off", argv[1]) == 0)
{
plcm.amg=0;
ioctl(devfd, PLCM_IOCTL_BACKLIGHT, 0);
close(devfd);
return 0;
}
if(strcmp("-LCM1", argv[1]) == 0)
{
plcm.amg=1;
ioctl(devfd, PLCM_IOCTL_SET_LINE, 1);
close(devfd);
return 0;
}
if(strcmp("-LCM2", argv[1]) == 0)
{
plcm.amg=2;
ioctl(devfd, PLCM_IOCTL_SET_LINE, 2);
close(devfd);
return 0;
}
if(strcmp("-Keypad", argv[1]) == 0)
{
Keypad_Message[40] = "";
plcm.amg=1;
ioctl(devfd, PLCM_IOCTL_SET_LINE, 1);
do{
plcm.amg=0;
//ioctl(devfd, PLCM_IOCTL_GET_KEYPAD, &plcm);
ioctl(devfd, PLCM_IOCTL_GET_KEYPAD, 0); // Linux
//Keypad_Value=plcm.key_value;
Keypad_Value=ioctl(devfd, PLCM_IOCTL_GET_KEYPAD, 0); // Linux
detect_press=(Keypad_Value & 0x40);
detect_dir=(Keypad_Value & 0x28);
switch(detect_dir)
{
case 0x00:
strcpy(Keypad_Message,"2-");
break;
case 0x20:
strcpy(Keypad_Message,"1-");
break;
case 0x08:
strcpy(Keypad_Message,"3-");
break;
case 0x28:
strcpy(Keypad_Message,"4-");
break;
// Mas no Linux os valores podem ser outros
/*
case 0xC7:
strcpy(Keypad_Message, "1-");
break;
case 0xE7:
strcpy(Keypad_Message, "2-");
break;
case 0xEF:
strcpy(Keypad_Message, "3-");
break;
case 0xCF:
strcpy(Keypad_Message, "4-");
break;
*/
}
switch(detect_press)
{
// Press e Release funcional igual no FreeBSD e Linux
case 0x40:
strcat(Keypad_Message,"Press ");
case 0x00:
strcat(Keypad_Message,"Release");
}
//printf("Value:%x:%s\n",plcm.key_value,Keypad_Message);
printf("Value:%x:%s\n",Keypad_Value,Keypad_Message);
plcm.amg=0;
//write(devfd, Keypad_Message, 40);
Pre_Value = Keypad_Value;
MaxTestTime--;
if(MaxTestTime == 0)
{
break;
}
}while(1);
close(devfd);
return 0;
}
if(strcmp("-DispOff", argv[1]) == 0)
{
plcm.amg=0;
ioctl(devfd, PLCM_IOCTL_DISPLAY_D, 0);
close(devfd);
return 0;
}
if(strcmp("-DispOn", argv[1]) == 0)
{
plcm.amg=1;
ioctl(devfd, PLCM_IOCTL_DISPLAY_D, 1);
close(devfd);
return 0;
}
if(strcmp("-Read1", argv[1]) == 0)
{
plcm.amg=2;
ioctl(devfd, PLCM_IOCTL_SET_LINE, 2);
read(devfd, Ret_Message1, sizeof(Ret_Message1));
printf("Read LCM1: %s\n", Ret_Message1);
close(devfd);
return 0;
}
if(strcmp("-Read2", argv[1]) == 0)
{
plcm.amg=2;
ioctl(devfd, PLCM_IOCTL_SET_LINE, 2);
read(devfd, Ret_Message2, sizeof(Ret_Message2));
printf("Read LCM2: %s\n", Ret_Message2);
close(devfd);
return 0;
}
if(strcmp("-Clear", argv[1]) == 0)
{
plcm.amg=0;
ioctl(devfd, PLCM_IOCTL_CLEARDISPLAY, 0);
plcm.amg=0;
ioctl(devfd, PLCM_IOCTL_RETURNHOME, 0);
close(devfd); return 0;
}
usage(devfd); return 0;
}
usage(devfd);
}
> On 01/02/2016, at 15:47, Alexandre J. Correa (Onda) <alexandre at onda.net.br> wrote:
>
> http://www.serveru.us/pt/doc/lcm-util
>
> ele tem um device no /dev para gerenciar isto, no site acima fala mais sobre...
>
> se o kernel não estiver com o driver, precisa carregar/instalar para ter acesso.
>
>
> Em 01/02/2016 13:31, Rafael Galdino escreveu:
>> Boa tarde srs.
>>
>> alguém já colocou o serverU para mostrar CPU, Banda etc... no display
>> utilizando o Vyos?
>> --
>> gter list https://eng.registro.br/mailman/listinfo/gter
>
>
> --
> Sds.
>
> Alexandre Jeronimo Correa
> Sócio-Administrador
>
> Office: +55 34 3351 3077
>
> Onda Internet
> www.onda.net.br
>
> --
> gter list https://eng.registro.br/mailman/listinfo/gter
--
Patrick Tracanelli
FreeBSD Brasil LTDA.
Tel.: (31) 3516-0800
316601 at sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"
More information about the gter
mailing list