frente

Terminais Sem Fios X64


Interligação XRML




Programa de Terminal XRML



Funções Gerais

Funções de Input / Output (T_Read)

Funções de Listas

Funções de Variaveis

Funções de Goto

Funções de Duplicação de ecrans Offline

Funções de RFID

Todas as funções estão definidas na DLL 'RIOCOM.DLL'. A DLL tem que ser incorporada na Linguagem de programação utilizada. Os exemplos em Download estão em VB. Pode ser utilizado o emulador para correr os exemplos sem ter que se recorrer a hardware externo.

O XRML funciona com ecrans que são enviados para o terminal. Pode ser comparado com o HTML na medida em que o terminal pede ao PC um ecran e o PC o envia. No entanto quando o terminal pede um ecran ao PC este pode enviar o ecran pedido ou outros ecrans, por exemplo em situações de erro.
Os ecrans que o PC envia podem ter uma validade temporária, ou seja posso enviar um ecran para o terminal que vai ser valido por 10 segundo ou para sempre.
Para o terminal enviar dados para o PC envia o ecran de volta para o PC. O programa do PC deve correr exactamente o mesmo código que usou para gerar esse ecran e a DLL actualiza as variáveis.

Vamos ver como funciona. O Timer esta continuamente à procura de informação que a antena enviará para a aplicação. O diagrama resume a parte importante deste procedimento.

DIAGRMA1


Então, se acontecer alguma coisa, podemos ver que temos duas opções: receber um ecran do terminal ou o terminal pedir-nos um ecran.

Se receber, o procedimento é o seguinte:
procedure TForm1.ReceiveScreen(TerminalID,ScrName:String);
begin
  T_RefreshScreen(TerminalId, ScrName);
  DoScreen(ScrName);
//AQUI TEM A INFORMAÇÃO, A PARTIR DE AQUI A SUA APLICAÇÃO TERÁ DE UTILIZAR-LA COMO FOR NECESSÁRIO
end;

Este procedimento actualiza as variáveis do PC com as introduzidas no terminal. Depois dum refresh e dum DoScreen as variáveis estão actualizadas no PC. Neste ponto já tem a informação. E termina esta chamada do TIMER.

A outra opção é um AskScreen. Primeiro temos de saber quando se produz e como. As possibilidades são muitas, em geral todas as funções que têm como parâmetro o nome dum ecran produzem um AskScreen.
Outra situação é quando o terminal faz um reset e uma tecla é carregada, o ecran pelo qual se pergunta  é sempre por defeito 'START'. O PC então pode enviar ecrans (os que quiser) e os envia como não executáveis (na função  T_InitScreen com flags diferentes  scr_flag_execute) e o último como executável(scr_flag_execute).
Neste momento o terminal começa a funcionar como off-line e com a funcionalidade programada.

As outras situações funcionam de forma análoga a este exemplo:
No procedimento DoScreen são desenhados os ecrans, por tanto as possibilidades são muitas. Neste exemplo:

procedure TForm1.DoScreen(ScrName:String);
begin
if Pchar(ScrName)='LE REF'
 then
  begin

   T_Say('>');
   T_GetText(barcode,10,GetText_flag_Barcode + GetText_flag_ExitEnter);
   T_NewLine;
   T_PrintString('>');
   T_PrintString(Description);

   T_Beep(50,50);
   T_Read;
   T_SendScreenToPc('LE REF', scr_flag_update_pc_now + scr_flag_auto_destroy );
   T_GotoScreen('LE REF');
  end;
end;

Existem muitas coisas que precisam duma análise, mas a última função (T_GotoScree) diz ao terminal que vá ao ecran LE REF. O que acontece é que o terminal chama este ecran, que neste caso é ele próprio. Aqui um AskScreen é produzido porque o ecran tinha sido destruído com a scr_flag_auto_destroy e tem de ser carregado de novo. Pode ser que o ecran que o programa quer esteja na memoria e não faça com que aconteça um AskScreen. Também pode ser enviado o número de ecrans que o programador ache necessário.


A maioria dos programas quando acontece um AskScreen seguem a seguinte sequência:

-SÃO INICIALIZADOS OU DÃO VALOR ÁS VARIAVEIS ÁS QUE UMA REFERENCIA É FEITA NESTE ECRAN E É FEITO UM  T_InitScreen.
-O ECRAN É CRIADO (DoScreen)
-O ECRAN É ENVIADO T_SendScreen.

Esta é a maneira habitual do AskScreen.






Funções Gerais


InitializeComm
int __stdcall InitializeComm(int ComPort,int BaudRate);

Abre a Porta série para comunicações e inicializa as comunicações.
ComPort deve ser 1,2,3...
BaudRate deve ser 9600,19200,38400

Se a ComPort for 0 então é procurado automaticamente uma ComPort com a base ligada.
Nesta situação a função retorna 0 se não encontrar a base ou o numero da ComPort Aberta.



ForceResetOnAllTerminal
void __stdcall ForceResetOnTerminal();

Esta função deve ser usada depois do T_InitializeComm, e faz com que os terminais se o PC for desligado no meio de uma sessão façam um restet automático, evitando assim ter que se fazer um reset.



TerminateComm
void __stdcall TerminateComm(int ComPort);

Fecha a porta.

ForceResetOnTerminal
void __stdcall ForceResetOnTerminal(char *TerminalId);

Da proxima vez que este terminal tentar comunicar vai receber uma ordem para fazer um reset.


T_ResetComunications
int __stdcall T_ResetComunications();

Este comando permite que um terminal restabeleça comunicações com o PC depois de se sair e entrar na aplicação do PC.

Em situação normal depois de haver uma quebra nas comunicações é preciso fazer um reset no botão de reset do terminal.

Para utilizar este comando é obrigatório que o programa no PC ao sair faça T_SaveScreens e ao reiniciar faça T_LoadScreens.

Se não se fizer T_SaveScreens e T_LoadScreens o programa encrava.


T_SaveScreens
int __stdcall T_SaveScreens(char *filename)

Enquanto a DLL comunica com os terminais vai mantendo em memoria uma copia da memoria dos terminais para poder optimizar as comunicações.

Os terminais ao comunicarem com o PC só transmitem alterações aos ecrans.

Esta função grava em disco o estado da memoria dos terminais.


T_LoadScreens
int __stdcall T_LoadScreens(char *filename)

Enquanto a DLL comunica com os terminais vai mantendo em memoria uma copia da memoria dos terminais para poder optimizar as comunicações.

Os terminais ao comunicarem com o PC só transmitem alterações aos ecrans.

Esta função le do disco o estado da memoria dos terminais.


T_SaveComunicationStatus
int __stdcall T_SaveComunicationStatus( char *filename)
Enquanto a DLL comunica com os terminais vai mantendo em memoria uma copia da memoria dos terminais para poder optimizar as comunicações.

Esta função grava em disco o estado da memoria dos terminais referente ás comunicações.

O uso desta função evita ter que se fazer T_ResetComunications se o PC for desligado.


T_LoadComunicationStatus
int __stdcall T_LoadComunicationStatus( char *filename)
Enquanto a DLL comunica com os terminais vai mantendo em memoria uma copia da memoria dos terminais para poder optimizar as comunicações.

Esta função lé do disco o estado da memoria dos terminais referente ás comunicações.

O uso desta função evita ter que se fazer T_ResetComunications se o PC for desligado.


T_InitScreen
int __stdcall T_InitScreen(char *TerminalId,char *ScreenName,int ScreenFlags,int ScreenCursor,int ScreenValidate);

char *TerminalId
Ponteiro para o nome do terminal. O nome deve ser composto por : XXXXXXDD, onde XXXXXX numa instalação deve ser igual e o DD deve ser diferente. Exp. "TESTE 01","TESTE 02"

char *ScreenName
Ponteiro para o nome do Ecran.
O nome do ecran pode ser de qualquer tamanho.

char *ScreenFlags

int ScreenCursor
Posição inicial do cursor no ecran. Conta o numero de Gets...() realizados.

Int ScreenValidate
Segundo em que o Ecran perde validade.
O Segundo actual pode ser calculado por:((Date - 35065) + Time) * 24 * 60 * 60 em VB


T_SendScreen
int __stdcall T_SendScreen();

Envia o Ecran actual para o Terminal. Deve ser efectuado depois de se fazer um T_InitScreen.
Envia Ecran do PC para o TERMINAL.



T_WaitAnyScreenFromPc
int __stdcall T_WaitAnyScreenFromPc();

O Terminal fica para sempre á espera que o PC envie algum ecran.

T_RefreshScreen
int __stdcall T_RefreshScreen(char *TerminalId,char *ScreenName);

Sempre que se recebe um Ecran do terminal deve-se actualizar as nossas variáveis no PC. Para isso deve-se fazer T_RefreshScreen seguido do mesmo codigo que foi utilizado para criar um Ecran.


T_SetLcdLightPower
int __stdcall T_SetLcdLightPower(char state);

Liga ou desliga a iluminação do Display.


T_SetSeconds
int __stdcall T_SetSeconds(int seconds);

Em VB para acertar o relógio de terminal pode ser:
T_SetSeconds ((Date - 35065) + Time) * 24 * 60 * 60



RIOCOM_AutoAdjustSeconds
int __stdcall RIOCOM_AutoAdjustSeconds()

Acerta as horas no terminal em todas as comunicações com o PC. As Horas internas do PC são enviadas para o terminal.


T_ReadSeconds

int __stdcall T_ReadSeconds();

Retorna o numero de segundos no terminal.


T_SetLaserParameter
int __stdcall T_SetLaserParameter(int parameter,int value);

Configura o Laser.

T_Beep
int __stdcall T_Beep(int duration,int periodo);

Faz um Beep no Terminal.



T_Alarm
int __stdcall T_Alarm(char delay,char freq_duration,char freq_min,char freq_max,char repeat_n)
Faz um beep um pouco mais elaborado.  O seguinte código exemplifica o que acontece.

FOR X=1 TO repeat_n
    FOR N= freq_min TO freq_max
        Beep(delay,N)
    NEXT
NEXT

T_SendScreenToPc
int __stdcall T_SendScreenToPc(char *ScreenName,int scr_flags);

Envia o Ecran para um buffer que será enviado para o PC.

ScreenName , Nome do ecran a enviar.
scr_flags , Altera todas as flags deste ecran.

Este comando utiliza as seguintes flags:

#define scr_flag_update_pc_if_possible 4
O terminal envia este ecran por radio para o PC mas só tenta 1 vez.
Se não conseguir enviar guarda os dados num buffer interno e envia quando possível.

#define scr_flag_update_pc_now 8
O terminal envia este ecran por radio para o PC , tenta para sempre.
Se não conseguir enviar fica encravado até estar numa zona com cobertura.

#define scr_flag_update_pc_later 16
O terminal envia este ecran por radio para o PC mas não agora.
Põe os dados no buffer de envio mas não tenta enviar.


T_SendScreenToNull
int __stdcall T_SendScreenToNull(char *ScreenName,int scr_flags);

Este comando é identico ao anterior mas não põe nada no buffer.

Envia o Ecran para Null. Importante usar se se quiser por exemplo cancelar o envio de um ecran.
Deve-se usar em conjunto com a flag scr_flag_restore_fields_after_send

T_ChangeUpsideDown
int __stdcall T_ChangeUpsideDown(char flag);

Inverte o display. Não funciona no emulador.


T_PrintString
int __stdcall T_PrintString(char *txt);

Imprime uma string no ecran na posição actual do cursor.

T_PrintLarge
int __stdcall T_PrintLarge(char *txt);

Imprime uma string no ecran na posição actual do cursor.
Fonte grande.

T_PrintInverse
int __stdcall T_PrintInverse(char *txt);
Imprime centrado em Inverso Vídeo.

T_NewLine
int __stdcall T_NewLine();

Muda de Linha

T_Cls
int __stdcall T_Cls();

Apaga o Ecran

T_WaitChar
unsigned char __stdcall T_WaitChar();

Retorna a tecla primida.


T_Delay
int __stdcall T_Delay(int miliseconds);


O Terminal fica parado . Útil para mostrar um ecran de resultado sem obrigar a primir uma tecla.
T_CheckIfReceiveData
int __stdcall T_CheckIfReceiveData(char *TerminalId,char *Screen_Name,char *DataType,int *RawDataSize,char *RawData)

Deve-se periodicamente verificar se temos dados novos.

#define data_type_send_screen_zipped 1
#define data_type_ask_screen 2
#define data_type_reset 3
#define data_type_send_screen_unzipped 4
#define data_type_softreset 5
#define data_type_send_CAddress 6
#define data_type_send_raw_data 7

Para o programador o screen zipped ou unzipped é o mesmo.
Quando o terminal pede um ecran é porque não o tem em memoria e precisa dele.
Reset é quando se faz um reset ao terminal.

Exemplo em VB:

Private Sub Timer1_Timer()
Dim TerminalId As String
Dim ScreenName As String
Dim DataType As Byte
TerminalId = Space(8)
ScreenName = Space(50)
Do While T_CheckIfReceiveData(TerminalId, ScreenName, DataType)
ScreenName = Trim(ScreenName)
If Len(ScreenName) > 0 Then
ScreenName = Left(ScreenName, Len(ScreenName) - 1)
End If
Select Case DataType
Case data_type_reset
' Reset (TerminalId)
Case data_type_send_screen_zipped
ReceiveScreen TerminalId, ScreenName
Case data_type_send_screen_unzipped
ReceiveScreen TerminalId, ScreenName
Case data_type_ask_screen
AskScreen TerminalId, ScreenName
End Select
ScreenName = Space(50)
Loop
End Sub

Ao gravar o programa na eeprom na realidade está-se a gravar o programa num ficheiro eeprom.bin.


Pode ser utilizado com o devkit e receber um programa compilado que se envie para a porta série.


Podem vários emuladores correr ao mesmo tempo desde que tenham o TerminalId com nomes diferentes.


T_SetFunctionKeys
int __stdcall T_SetFunctionKeys(char *txt)

Este comando define as teclas de função que depois vão ser visualizadas com a flag GetText_flag_ForceFunctionKeys.
Parametros: char *txt
String de 4 caracteres sendo F1,F2,F3 e F4. Por exemplo se se chamar a função T_SetFunctionKeys("1234"); define-se o F1='1', F2='2', F3='3', F4='4'. Esta função deve ser utilizada em conjunto com as funções T_OnF1GotoScreen, T_OnF2GotoScreen...

T_SetLargeFunctionKeys

int _stdcall T_SetLargeFunctionKeys(char *txt,unsigned char NumberOfKeys)

Este comando define as teclas de função que depois vão ser visualizadas com a flag GetText_flag_ForceFunctionKeys.

A diferença da função anterior é que permite definir mais do que um caracter por tecla.

Exemplo:
T_SetLargeFunctionKeys("MENU"+chr(27)+"SAIR"+chr(27),5)

O Primeiro parametro é o texto a aparecer no ecran. O ultimo caracter é a tecla que vai ser enviada para o terminal quando se carrega na respectiva tecla de função. Para quase todas as aplicações o caracter 27 (ESC) é o ideal pois faz com que o T_Read termine.

O Segundo parametro é o numero de caracteres por tecla. Neste exemplo "MENU"(4) + chr(27)(1) =(5)

Assim ficaria definida a primeira e a segunda tecla de função.
Podem-se definir 8 teclas de função. Para aceder ao segundo grupo de 4 deve-se primir o Shift( Seta para cima).

Esta função pode ser utilizada em conjunto com as funções T_OnF1GotoScreen, T_OnF2GotoScreen...




T_ChangeScreenFormat
int __stdcall T_ChangeScreenFormat(int ScreenFormat)

Este comando define o tipo de fonte usado em todos os ecrans.

Linha 1 --> (Letra grande ) +1
Linha 2 --> (Letra grande ) +2
Linha 3 --> (Letra grande ) +4
Linha 4 --> (Letra grande ) +8
etc

Por exemplo para um ecran todo com letra pequena :
T_ChangeScreenFormat(0)

Linha 1 e 4 c/ letra grande:
T_ChangeScreenFormat(1+8)

#define f_DefineMultipleBases 107

#define f_GetExit 108


T_DefineMultipleBases
int __stdcall T_DefineMultipleBases(int position,char *txt,char *base_name)

Permite que o terminal depois de arrancar pergunte a que base se deve ligar. Pode ter interesse para usar o mesmo terminal com programas diferentes, ou com PC's diferentes.

O base_name de ser o nome da base, por exemplo 'BAS00'(nome da base por defeito).



Funções de Goto


T_GotoScreen
int __stdcall T_GotoScreen(char *ScreenName);

Quando este comando for executado o Terminal muda para o ecran "ScreenName"


T_OnEscapeGotoScreen
int __stdcall T_OnEscapeGotoScreen(char *ScreenName);

Quando o utilizador primir a tecla Esc o terminal vai para o ecran "ScreenName"


T_OnF1GotoScreen
int __stdcall T_OnF1GotoScreen(char *ScreenName);

Quando o utilizador primir a tecla F1 o terminal vai para o ecran "ScreenName"
As teclas de função devem ser definidas com a função "T_SetFunctionKeys" e activadas num campo de input com a text_flag GetText_flag_ForceFunctionKeys.


T_OnF2GotoScreen
int __stdcall T_OnF2GotoScreen(char *ScreenName);

Quando o utilizador primir a tecla F2 o terminal vai para o ecran "ScreenName"
As teclas de função devem ser definidas com a função "T_SetFunctionKeys" e activadas num campo de input com a text_flag GetText_flag_ForceFunctionKeys.



T_OnF3GotoScreen
int __stdcall T_OnF3GotoScreen(char *ScreenName);

Quando o utilizador primir a tecla F3 o terminal vai para o ecran "ScreenName"
As teclas de função devem ser definidas com a função "T_SetFunctionKeys" e activadas num campo de input com a text_flag GetText_flag_ForceFunctionKeys.



T_OnF4GotoScreen
int __stdcall T_OnF4GotoScreen(char *ScreenName);

Quando o utilizador primir a tecla F4 o terminal vai para o ecran "ScreenName"
As teclas de função devem ser definidas com a função "T_SetFunctionKeys" e activadas num campo de input com a text_flag GetText_flag_ForceFunctionKeys.




T_IfVar1EqVar2Goto
int __stdcall T_IfVar1EqVar2Goto(char *VariableName1,char *VariableName2,char *ScreenName);

Se o conteudo da variavel1 = variavel2 o terminal vai para o ecran "ScreenName"



T_IfVar1GreaterVar2Goto
int __stdcall T_IfVar1GreaterVar2Goto(char *VariableName1,char *VariableName2,char *ScreenName);

Se o conteúdo da variavel1 > variavel2 o terminal vai para o ecran "ScreenName"



T_IfVar1LessVar2Goto
int __stdcall T_IfVar1LessVar2Goto(char *VariableName1,char *VariableName2,char *ScreenName);


T_IfVar1NotEqVar2Goto
int __stdcall T_IfVar1NotEqVar2Goto(char *VariableName1,char *VariableName2,char *ScreenName);

Se o conteúdo da variavel1 <> variavel2 o terminal vai para o ecran "ScreenName"





Funções de Duplicação de ecrans Offline



T_MarkScreenAsChanged
int __stdcall T_MarkScreenAsChanged()

Esta função permite marcar o ecran actual para mais tarde ser enviado com a função T_SendChangedScreensToPc.


T_ReadCurrentScreenIndex

int __stdcall T_ReadCurrentScreenIndex()

Esta função retorna o valor do index do ecran.
Se o ecran for criado com a função:

T_CreateOrEditScreenIndexOnLastCursorPosition - O indice será a ultima posição do cursor antes de chamar o ecran.

T_CreateOrEditScreenIndexOnLastNumericalValue - O indice será o valor da ultima variavel lida com o GetNumerical.

T_CreateOrEditScreenIndexOnLastCursorPosition
int __stdcall T_CreateOrEditScreenIndexOnLastCursorPosition(char *ScreenName)

Cria e salta para uma copia do ecran indexada pela posição do cursor ( Numero linha).
ATENÇÂO O ECRAN ORIGINAL TEM QUE ESTAR EM MEMORIA.

T_CreateOrEditScreenIndexOnLastNumericalValue
int __stdcall T_CreateOrEditScreenIndexOnLastNumericalValue(char *ScreenName)

Cria e salta para uma copia do ecran indexada pela ultima variavel numerica editada.
A variavel editada tem que ser numerica e tem que ter a flag GetText_flag_ScreenIndex (65536) activa.

GetNumerical &var,len,GetText_flag_ScreenIndex

ATENÇÂO O ECRAN ORIGINAL TEM QUE ESTAR EM MEMORIA.


T_SendChangedScreensToPc
int __stdcall T_SendChangedScreensToPc(int scr_flags)

Envia todos os ecrans marcados com T_MarkScreenAsChanged e todos os novos ecrans criados com ( T_CreateOrEditScreenIndexOnLastCursorPosition ou T_CreateOrEditScreenIndexOnLastNumericalValue).


Funções de Browse



As seguintes funções devem ser usadas em conjunto e terminadas com a função T_Read. 
  

T_Read
int __stdcall T_Read();

Esta função é equivalente á já antiga função de read do clipper.
Depois de uma série de T_Say e T_Get... deve-se terminar com um T_Read.
O Terminal quando executa um T_Read pára e dá ao utilizador a possibilidade editar os campos de input.
Para sair do T_Read deve-se primir ESC ou então um dos T_Gets deve ser o T_GetCheckEnter.

Esta função retorna a linha em que se saiu do Read.

T_Say

int __stdcall T_Say(char *txt);

Deve-se utilizar em conjunto com o T_Get... e o T_Read.
Ao fazer T_Read o cursor posiciona-se no texto do T_Say, e permite executar o T_Get...

T_NoSay
int __stdcall T_NoSay(unsigned char size);

Deve-se utilizar em conjunto com o T_Get... e o T_Read.
Deve ser utilizado quando se quer que o cursor fique em cima do campo de input com um tamanho (size).


T_Scroll
int __stdcall T_Scroll(char *txt_fix,char *txt_rot);

Deve-se utilizar em conjunto com o T_Get... e o T_Read.
Imprime o txt_fix e se o cursor estiver parado em cima roda o txt_rot.



As seguintes funções devem ser usadas em conjunto e terminadas com a função T_Read e seguidas a uma das funçoes anteriores.

T_GetText
int __stdcall T_GetText(char *txt,int size,int flags);

'txt' deve ser um apontador para uma zona de memoria livre para receber o texto com o tamanho 'size'.
Em VB deve-se declarar uma variável tipo string e em seguida inicializa-la com espaços. Para que a DLL pense que a string está vazia deve-se começar com o chr(0) como no exemplo anterior.

T_GetTextTemplate
int __stdcall T_GetTextTemplate(char *txt,char *templates,int flags)

'txt' deve ser um apontador para uma zona de memoria livre para receber o texto com o tamanho strlen(template).

Em VB deve-se declarar uma variável tipo string e em seguida inicializa-la com espaços. Para que a DLL pense que a string está vazia deve-se começar com o chr(0) como no exemplo anterior.

No campo template deve-se criar uma mascara com os caracteres validos.

Exemplo:

T_Say "5 Alpha :"
T_GetTextTemplate barcode, "%%%%%", GetText_flag_Barcode
T_NewLine

T_Say "5 Alpha/Num :"
T_GetTextTemplate barcode, "@@@@@", GetText_flag_Barcode
T_NewLine

T_Say "5 Num :"
T_GetTextTemplate barcode, "#####", GetText_flag_Barcode
T_NewLine

T_Say "5 Q+4 :"
T_GetTextTemplate barcode, "Q###", GetText_flag_Barcode
T_NewLine



T_GetTextFromList
int __stdcall T_GetTextFromList(int *number,int size,char *ScreenName);


T_GetTextFromList2
int __stdcall T_GetTextFromList(int *number,int size,char *ScreenName,char *ListName,int flags);

Equivalente ao GetTextFromList mas permite alterar as flags e activar uma lista diferente.
O GetTextFromList trabalha sempre com a lista previamente activada e com as flags previamente activadas.


T_GetNumerical
int __stdcall T_GetNumerical(int *Number,int size,int flags);

Equivalente ao GetText mas recebe um int de 32 bits em vez de uma string.
O Size é o tamanho do campo de input.

T_GetLink
int __stdcall T_GetLink(char *ScreenName,int Value,char FastKey);

Qundo se primir enter nesta opção é chamado o ecran "ScreenName".
Se se primir uma FastKey o cursor muda para o GetLink equivalente e chama o ecran "ScreenName"

Exemplo 2.


T_GetCheckEnter
int __stdcall T_GetCheckEnter();

Para ser utilizado com o T_Say.
Exp.
T_Say "OK"
T_GetCheckEnter

Faz com que o cursor se estiver no OK e se premir Enter abandone o Ecran


T_GetEditDate
int __stdcall T_GetEditDate();


Permite o utilizador alterar a data do terminal.


T_GetEditTime
int __stdcall T_GetEditTime();

Permite o utilizador alterar a hora do terminal.

T_ShowDate
int __stdcall T_ShowDate();


T_ShowTime
int __stdcall T_ShowTime();


T_ShowWeekDay
int __stdcall T_ShowWeekDay();


T_GetOption
int __stdcall T_GetOption(int *position,char *List,int LenList,int NumberOfElements);

Esta opção permite seleccionar um elemento de uma lista. Por exemplo um 'Yes' ou 'No'.

T_GetOptionGotoScreen
int __stdcall T_GetOptionGotoScreen(int *position,char *List,int LenList,int NumberOfElements,char *ScreenList);

Esta opção permite seleccionar um elemento de uma lista e saltar para um ecran de acordo com o elemento seleccionado. Os elementos da lista devem ser separados pelo Chr(0), assim como os elementos dos ecrans.

Exemplo:
T_GetOptionGotoScreen ( posicao, "Yes"+chr(0)+"No"+chr(0) , 8 , 2 , "Ecran1"+chr(0)+"Ecran2"+chr(0) )

Neste exemplo ao sair do T_Read o programa salta para o ecran1 ou ecran2 em função de 'Yes' ou 'No '


T_GetVariable
int __stdcall T_GetVariable(char *VariableName,int size,int flags);

Função equivalente ao T_GetNumerical mas com variáveis locais do terminal.
Permite que o utilizador edite o valor de uma variável local do terminal.

T_StartRepeat
int __stdcall T_StartRepeat(int *times);


T_EndRepeat
int __stdcall T_EndRepeat();


T_GetRepeat
int __stdcall T_GetRepeat(unsigned char times);


T_GetExitNow
int __stdcall T_GetExitNow()

O terminal abandona a função T_Read se o cursor estiver em cima desta linha.


T_ExitReadWithRadio
int __stdcall T_ExitReadWithRadio()

O terminal, depois de se fazer Read(), fica com o teclado activo, para se poder fazer browse do ecran. O modulo de rádio fica em recepção. Se o PC enviar um ecran para o terminal nesta situação o terminal passa para a instrução a seguir ao read, que deverá ser: T_WaitAnyScreenFromPc.

Atenção:
    O uso desta função deve ser ponderado porque o terminal fica a consumir muito ( 30 mA ), sendo o consumo normal de 1 mA.
    O Teclado pode passar a funcionar ligeiramente pior.


T_OnRadioGotoScreen
int __stdcall T_OnRadioGotoScreen(char *ScreenName)

Esta função deve ser usada em conjunto com a função T_ExitReadWithRadio. Nesta situação o T_WaitAnyScreenFromPc, não deve ser usado.
Deve ser usada em conjunto com o Read().


T_OnTimerGotoScreen
int __stdcall T_OnTimerGotoScreen(int timer,char *ScreenName)

Permite chamar um ecran em Background dentro de um Read(). O timer é o tempo em segundos.


Esta função deve ser usada  sozinha, porque internamente ela contem um T_say e um T_Get...

T_PutTextOnList
int __stdcall T_PutTextOnList(char *txt,int Value,char FastKey);

Funções de RFID

T_WriteTagIt
int __stdcall T_WriteTagIt(char position,char size,char *data)

Escreve dados no cartão. 



T_ReadTagIt
int __stdcall T_ReadTagIt(char position,char size,char *data)

Le dados do cartão.


Funções com Variáveis


T_ReserveVariable
int __stdcall T_ReserveVariable(char *VariableName);

T_WriteVariable
int __stdcall T_WriteVariable(char *VariableName,int valor);

T_ReadVariable
int __stdcall T_ReadVariable(char *VariableName);

T_AddVariable
int __stdcall T_AddVariable(char *VariableNameDest,char *VariableNameSrc1,char *VariableNameSrc2);

T_MulVariable
int __stdcall T_MulVariable(char *VariableNameDest,char *VariableNameSrc1,char *VariableNameSrc2);

T_DivVariable
int __stdcall T_DivVariable(char *VariableNameDest,char *VariableNameSrc1,char *VariableNameSrc2);

T_IfVar1EqVar2Goto
int __stdcall T_IfVar1EqVar2Goto(char *VariableName1,char *VariableName2,char *ScreenName);

T_IfVar1GreaterVar2Goto
int __stdcall T_IfVar1GreaterVar2Goto(char *VariableName1,char *VariableName2,char *ScreenName);

T_IfVar1LessVar2Goto
int __stdcall T_IfVar1LessVar2Goto(char *VariableName1,char *VariableName2,char *ScreenName);

T_IfVar1NotEqVar2Goto
int __stdcall T_IfVar1NotEqVar2Goto(char *VariableName1,char *VariableName2,char *ScreenName);




Funções de Listas



T_PutTextOnList
int __stdcall T_PutTextOnList(char *txt,int Value,char FastKey);

T_SetGetTextFromListFlags
int __stdcall T_SetGetTextFromListFlags(int flags)

Define o aspecto do GetTextFromList em todas as ocorrencias futuras.
Exemplo: T_SetGetTextFromListFlags GetText_flag_NotUnderline + GetText_flag_DontShowZero


T_GetTextFromList
int __stdcall T_GetTextFromList(int *number,int size,char *ScreenName);

T_CreateListIndex
int __stdcall T_CreateListIndex(char *ListName,int size);

Cria na memoria do terminal um index para uma lista. O 'size' é o numero de elementos que a lista pode conter.
O Terminal internamente gasta (8*size) bytes de memoria, para manter a lista.

A sequencia de comandos para criar uma lista deve ser:

T_CreateListIndex "Utilizadores",10
T_ActivateListIndex "Utilizadores"

T_PutTextOnList ... põe na lista de "Utilizadores" os vários elementos
T_PutTextOnList ... põe na lista de "Utilizadores" os vários elementos
T_PutTextOnList ... põe na lista de "Utilizadores" os vários elementos

O T_PutTextOnList pode ser executado de vários ecrans diferentes.
Depois de activar uma lista TODOS os T_PutTextOnList estão relacionados com a lista activada.

T_GetTextFromList... Vai buscar um elemento da Lista activada.

T_DestroyListIndex
int __stdcall T_DestroyListIndex(char *ListName);

Liberta a memoria do terminal, matando a lista.

T_ActivateListIndex
int __stdcall T_ActivateListIndex(char *ListName);

Activa uma lista.

T_DesactivateListIndex
int __stdcall T_DesactivateListIndex();

Desactiva a lista activada.

T_CreateListIndex "LISTA COMIDAS", 1000
T_ActivateListIndex "LISTA COMIDAS"

ListName > Nome a dar a uma lista. Pode ser uma lista de comidas ou de utilizadores.
Min,Max valores limites da Lista. Estes valores não podem ser muito grandes pois gastam memoria no terminal.

Exemplo,
T_CreateListIndex "LISTA COMIDAS", 1000
Gasta 8Kb de memoria RAM no terminal para criar 1000 índices .

Para Introduzir Dados numa lista primeiro tem que se activar a Lista.
T_ActivateListIndex "LISTA COMIDAS"

Em seguida utiliza-se o comando PutTextOnList para introduzir dados.






T_Cls
T_PrintInverse "MENU"
T_NewLine
T_Say "1-Pedir"
T_GetLink "DADOS DO PEDIDO", 0, Asc("1")
T_NewLine
T_Say "2-Conta"
T_GetLink "CONTA", 0, Asc("2")
T_NewLine
T_Say "3-Anular"
T_GetLink "ANULAR", 0, Asc("3")
T_NewLine
T_Say "4-Horas"
T_GetLink "HORAS", 0, Asc("4")
T_NewLine
T_Beep 50, 50
T_Read

int __stdcall T_GetLink(char *ScreenName,int Value,char FastKey);

int Value (Opcional se 0 não é usado)
Para ser utilizado em conjunto com o GetTextFromList, ao fazer Enter no GetTextFromList se o Value for igual o Terminal posiciona o cursor nesse campo.

FastKey
Tecla rápida para entrar num menu.






T_Cls
T_PrintInverse "EMENTA"
T_NewLine
T_NewLine
T_Say "1-Carne"
T_GetLink "CARNE", 10, Asc("1")
T_NewLine
T_Say "2-Peixe"
T_GetLink "PEIXE", 20, Asc("2")
T_NewLine
T_Say "3-Vinhos"
T_GetLink "VINHO", 30, Asc("3")
T_NewLine
T_Say "4-Bebidas"
T_GetLink "BEBIDAS", 40, Asc("4")
T_NewLine
T_Say "5-Sobremesas"
T_GetLink "SOBREMESA", 50, Asc("5")
T_NewLine
T_Beep 50, 50
T_Read




T_Cls
T_PrintInverse "PEDIDO"
T_NewLine
T_Say "Mesa :"
T_GetText mesa, 3, GetText_flag_Number
T_NewLine
st = "NAO" + Chr(0) + "SIM" + Chr(0)
T_Say "Factura :"
T_GetOption factura, st, Len(st), 2
T_NewLine
T_Say "OK"
T_GetLink "PEDIR", 0, 0
T_Beep 50, 50
T_Read

int __stdcall T_GetOption(int *position,char *List,int LenList,int NumberOfElements);

int *position Ponteiro para a posicão do cursor. Depois de executado o valor é alterado.
char *List Ponteiro para uma String contendo uma lista dos vários elementos , separados por chr(0)
int LenList Tamanho total da String
int NumberOfElements Numero de elementos na string






Seguido de um 'Enter'
O Nome 'Ze Carioca' automaticamente é posto vindo do ecran "UTILIZADORES", visto que o 'Ze Carioca' é o utilizador numero 1.


Password = Chr(0) + Space(10)
Utilizador = 0
T_Cls
T_ActivateListIndex "LISTA UTIL"
T_PrintInverse "LOGIN"
T_NewLine


T_Say "Utiliza.:"
T_GetTextFromList Utilizador, 10, "UTILIZADORES"
T_NewLine


nome = ListaUtilizadores(Utilizador)


T_Say "Password:"
T_GetText Password, 10, GetText_flag_ExitEnter + GetText_flag_Underline
T_NewLine
T_Beep 50, 50
T_Read


A Função GetTextFromList aceita um numero como input.


No Terminal Horizontal :
Se se primir a tecla '.' , Automaticamente é chamado o Ecran ScreenName.


No Terminal Vertical :
As teclas de função mostram um '?' .
Se se premir a tecla 'F1', Automaticamente é chamado o Ecran ScreenName.




Nesta situação o valor em number é usado para se posicionar no novo ecran.
Se no novo ecran existir um valor no (campo (Value de PutTextOnList) = number) o cursor posiciona-se ai.


Se se criar uma Lista com as devidas funções ao introduzir um numero seguido de Enter , aparece o texto correspondente da Lista.

Para definir o aspecto da linha de input pode-se utilizar a função T_SetGetTextFromListFlags. Esta função define o aspecto do GetTextFromList em todas as suas ocorrencias no futuro.


int __stdcall T_GetTextFromList(int *number,int size,char *ScreenName);
int *number Apontador para um elemento.
int size Tamanho do campo de input




horas = Time
T_Cls
T_PrintString ("Horas actuais:")
T_NewLine
T_PrintLarge horas
T_NewLine
T_NewLine
T_NewLine
T_NewLine
T_Beep 50, 50
key = T_WaitChar
T_GotoScreen "MENU"





T_Cls
T_PrintInverse "DADOS PESSOAIS"
T_NewLine
T_Say "Nome: "
T_GetText nome, 10, GetText_flag_Underline
T_NewLine
T_NoSay 5
T_GetText tel, 10, GetText_flag_Underline
T_NewLine
T_Read





T_Cls
T_PrintInverse "CARNES"
T_NewLine
T_NewLine
T_Say "1-Bife"
T_GetLink "Bife", 0, Asc("1")
T_NewLine
T_PutTextOnList "Feijoada", 12, Asc("2")
T_NewLine
T_PutTextOnList "Ovos ", 13, Asc("3")
T_NewLine
T_PutTextOnList "Costoletas", 14, Asc("4")
T_NewLine
T_Beep 50, 50
T_Read

int __stdcall T_PutTextOnList(char *txt,int Value,char FastKey);

char *txt Texto que retorna ao T_GetTextFromList depois de primir enter.
int Value Valor que retorna ao T_GetTextFromList depois de primir enter.
char FastKey Tecla rápida.

P.S.
Se antes de executar este ecran se se fizer T_ActivateListIndex então é criado um indice automaticamente.
Ao fazer T_GetTextFromList se existir um indice e se se introduzir um Numero valido quando se faz enter automaticamente o campo é substituido pelo texto valido.




Primir Enter e



O ecran é redesenhado com a linha de pedidos aumentada 3 *


T_Cls
T_PrintInverse "PEDIDO"
T_ActivateListIndex "LISTA COMIDAS"
T_NewLine
T_PrintString "Prato Qt"
T_NewLine
T_StartRepeat NumeroPedidos
For n = 1 To NumeroPedidos
T_NoSay 15
T_GetTextFromList pratos(n), 15, "LISTA"
T_PrintString " "
T_NoSay 4
T_GetNumerical qt(n), 4, 0
T_NewLine
T_EndRepeat
Next
T_Say "(+++)"
T_GetRepeat 3
T_NewLine
T_Read

Ao fazer GetRepeat o codigo entre StartRepeat e EndRepeat é repetido n vezes.
No exemplo acima a linha de pedir os pratos é aumentada 3 vezes.




Dim nome As String
Dim tel As String
tel = Chr(0) + Space(10)
nome= Chr(0) + Space(10)

T_InitScreen TerminalId, "TESTE", scr_flag_execute, 0, 0
T_Cls
T_PrintInverse "DADOS PESSOAIS"
T_NewLine
T_Say "Nome: "
T_GetText nome, 10, GetText_flag_Underline
T_NewLine
T_Say "Tel : "
T_GetText tel, 10, GetText_flag_Underline
T_NewLine
T_Read


T_SendScreen



ScrFlags


#define scr_flag_execute 1
Ao enviar um Ecran para o terminal com este atributo o terminal para de receber ecrans e executa este ecran.

#define scr_flag_changed 2
Nao Usado

#define scr_flag_update_pc_if_possible 4
O terminal envia este ecran por radio para o PC mas só tenta 1 vez.
Se não conseguir enviar guarda os dados num buffer interno e envia quando possivel.

#define scr_flag_update_pc_now 8
O terminal envia este ecran por radio para o PC , tenta para sempre.
Se não conseguir enviar fica encravado até estar numa zona com cobertura.

#define scr_flag_update_pc_later 16
O terminal envia este ecran por radio para o PC mas não agora.
Põe os dados no buffer de envio mas não tenta enviar.

#define scr_flag_auto_destroy 32
Depois de ser visto este ecran perde validade no terminal.

#define scr_flag_ask_pc_answer 64
Não Usado.

#define scr_flag_ask_pc_update 128
Não Usado.

#define scr_flag_restore_fields_after_send 256
Depois de enviar por radio este ecran volta ao aspecto inicial.

#define scr_flag_dont_stop 512
A utilizar quando se quer enviar um ecran para o terminal, que ele seja executado, mas que o terminal não pare.
Muito util se se estiver a enviar para o terminal ecrans com Listas para que ele aprenda as listas.
T_PutTextOnList



Text flags


#define text_flag_Protected -1
Campo não pode ser editado.

#define text_flag_AutoExit -2
Se o cursor estiver na ultima posição sai.

#define text_flag_Password -4
****
#define text_flag_Number -8
Só aceita numeros

#define text_flag_ExitEnter -16
Com Enter termina o Ecran

#define text_flag_ExitAlways -32
Ao sair do campo termina o Ecran

#define text_flag_Barcode -64
Liga o Barcode

#define text_flag_NotUnderline -128
Mostra campo de Input Nao Sublinhado

#define text_flag_Link -256
NAO UTILIZAR

#define text_flag_NewText -512
Limpa o Texto

#define text_flag_NumberRightAligned -1024
Alinha um numero á direita.
#define text_flag_DontShowZero -2048
Se o campo tiver o valor zero, não mostra nada.
#define text_flag_ForceFunctionKeys -4096
Mostra as teclas de função defenidas com a função T_SetFunctionKeys .
Se se primir uma tecla de função o terminal vai para o ecran T_OnFxGotoScreen

#define text_flag_NoFunctionKeys -8096
#define Text_flag_AutoexitfieldON -16384
Equivalente ao AutoExit , mas sai no ultimo character
#define Text_flag_OnlyExitIfTemplateOK -32768
Se se estiver a usar templates para ler codigos de barras só sai deste campo se a leitura estiver ok.

#define Text_flag_ScreenIndex -65536
Usar sempre em conjunto com a função T_CreateOrEditScreenIndexOnLastNumericalValue, para definir qual o valor a ser usado como index.




T_Cls
T_PrintInverse "VARIAVEIS"
T_NewLine
T_WriteVariable "VALOR1", 12
T_WriteVariable "UNIDADE", 1
T_AddVariable "VALOR1", "VALOR1", "UNIDADE"
T_Say "Result ."
T_GetVariable "VALOR1", 10, 0
T_Read

As variaveis utilizadas no terminal são locais do terminal. Estão na memoria do terminal. São independentes do ecran.

Para manter uma variavel na memoria entre resets do terminal deve-se no primeiro ecran reservar as respectivas variaveis.

T_ReserveVariable

Pode-se utilizar as funções condicionais para ter pequenos programas a correr no terminal sem ter que vir ao PC.



Página Principal


Contactos


Download


Manual de Interligação


Programa de terminal XRML