Ir para o conteúdo

Java Script Lite - API

Sumário das urls utilizadas na API

Módulo url
aes package://libs#sec#crypt/aes.wmlsc
call package://vm#core/call.wmlsc
channel package://libs#sec#channel/channel.wmlsc
comm package://libs#comm/comm.wmlsc
compression package://phpacket/compression.wmlsc
crc package://libs#sec#hash/crc.wmlsc
crypt package://libs#sec#crypt/crypt.wmlsc
cron package://libs#cron/cron.wmlsc
cstd package://libs#db/cstd.wmlsc
db package://libs#db/db.wmlsc
des package://libs#sec#crypt/des.wmlsc
dev package://libs#dev/dev.wmlsc
dv package://libs#sec#hash/dv.wmlsc
eth package://libs#dev/eth.wmlsc
gprs package://libs#dev/gprs.wmlsc
gsm package://libs#dev/gsm.wmlsc
gzip package://vm#stream/gzip.wmlsc
hash package://libs#sec#hash/hash.wmlsc
http package://libs#ms/http.wmlsc
iniFile package://vm#core/inifile.wmlsc
init package://vm#core/init.wmlsc
json package://libs#json/json.wmlsc
map package://vm#core/map.wmlsc
mngrwifi package://phast#config/mngr_wifi.wmlsc
md5 package://libs#sec#hash/md5.wmlsc
nfc package://libs#dev/nfc.wmlsc
phastservice package://phast#applet/service.wmlsc
phdmservice package://libs#phdm/service.wmlsc
printer package://libs#dev/printer.wmlsc
qrcode package://libs#qrcode/qrcode.wmlsc
regex package://libs#regex/regex.wmlsc
rsa package://libs#sec#crypt/rsa.wmlsc
serial package://libs#dev/serial.wmlsc
sha package://libs#sec#hash/sha.wmlsc
stream package://vm#stream/stream.wmlsc
streambuffer package://vm#stream/bfwriter.wmlsc
streamdata package://vm#stream/data.wmlsc
streamendian package://vm#stream/endian.wmlsc
streamfile package://vm#stream/file.wmlsc
streamphtar package://vm#stream/phtar.wmlsc
tlv package://libs#tlv/tlv.wmlsc
touch package://libs#dev/touch.wmlsc
usb package://libs#dev/usb.wmlsc
xml package://libs#xml/xml.wmlsc
wifi package://libs#dev/wifi.wmlsc
wless package://libs#dev/wless.wmlsc

WMLS

Lang

Este módulo contém um conjunto de funções que estão intimamente relacionados com o núcleo da linguagem. As funções deste módulo são especificadas no documento WAP-194. O Java Script Lite suporta a maioria das funções do módulo Lang especificado na WAP-194, exceto pelas seguintes funções:

Funções não suportadas

Função Descrição
parseFloat Não suportado.
isFloat Não suportado.
float Não suportado.

Sumário

Função Descrição
abs Retorna o valor absoluto de um número passado.
min Retorna o menor valor de dois valores passados.
max Retorna o maior valor de dois valores passados.
parseInt Converte um valor passado para inteiro.
isInt Verifica se o valor passado é inteiro.
maxInt Retorna o inteiro máximo.
minInt Retorna o menor inteiro.
random Retorna um valor aleátorio maior que zero e menor que o valor passado.
seed Inicializa uma sequência pseudo-aleátoria.
characterSet Retorna o valor inteiro referente ao tipo de caracter utilizado.

abs

Lang.abs(value) Retorna o valor absoluto do número.

Parâmetros
  • value – Valor númerico.
Retorno

Retorna o valor absoluto do número.

Exemplo
function useAbs() {
  var inteiro = -15;
  Dialogs.alert("Saida: " + Lang.abs(inteiro));
}

Saida:

Saida: 15.

min

Lang.min(value1, value2) Esta função compara os dois valores recebidos.

Parâmetros
  • value1 – Valor númerico.
  • value2 – Valor númerico.
Retorno

Retorna o menor valor passado.

Exemplo
function useMin() {
  var value1 = 10;
  var value2 = 22;
  Dialogs.alert("Saida: " + Lang.min(value1, value2));
}

Saida:

Saida: 10.

max

Lang.max(value1, value2) Esta função compara os dois valores recebidos.

Parâmetros
  • value1 – Valor númerico.
  • value2 – Valor númerico.
Retorno

Retorna o maior valor passado.

Exemplo
function useMax() {
  var value1 = 10;
  var value2 = 22;
  Dialogs.alert("Saida: " + Lang.max(value1, value2));
}

Saida:

Saida: 22.

parseInt

Lang.parseInt(value) Esta função converte uma string para inteiro.

Parâmetros
  • value – String que deseja converter para inteiro.
Retorno

Retorna um inteiro ou invalid.

Exemplo
function useParseInt() {
  var str = "10";
  Dialogs.alert(str + 2);
  Dialogs.alert(Lang.parseInt(str) + 2);
}

Saida:

102.
12.

isInt

Lang.isInt(value) Esta função verifica se o valor passado é um inteiro.

Parâmetros
  • value – Valor que deseja verificar se é um inteiro.
Retorno

Retorna true caso value seja um inteiro e false caso não seja.

Exemplo
function useIsInt() {
  var str = "dez";
  var inteiro = 10;
  Dialogs.alert("É inteiro? " + Lang.isInt(str));
  Dialogs.alert("É inteiro? " + Lang.isInt(inteiro));
}

Saida:

É inteiro: false.
É inteiro: true.

maxInt

Lang.maxInt() Esta função retorna o inteiro maximo.

Retorno

Retorna o inteiro maximo.

Exemplo
function useMaxInt() {
  var x = Lang.maxInt();
  Dialogs.alert(x);
}

Saida:

2147483647.

minInt

Lang.minInt() Esta função retorna o menor valor inteiro.

Retorno

Retorna o menor valor inteiro.

Exemplo
function useMinInt() {
  var x = Lang.minInt();
  Dialogs.alert(x);
}

Saida:

–2147483648.

random

Lang.random(value) Esta função retorna um valor randomico maior que 0 e menor que o valor passado.

Parâmetros
  • value – Valor númerico.
Retorno

Retorna um inteiro ou invalid.

Exemplo
function useRandom() {
  var x = Lang.random(10);
  Dialogs.alert("Valor: " + x);
}

Saida:

Valor: 5.

seed

Lang.seed() Inicializa uma sequência pseudo-aleátoria.

Retorno

Retorna uma string vazia.

Exemplo
function useSeed()
{
 Lang.seed(7);
 var x = Lang.random(10);
 Dialogs.alert("Saida: "x);
 Lang.seed(7);
 var y = Lang.random(10);
 Dialogs.alert("Saida: " + y);
}

Saida:

Saida: 6.
Saida: 6.

characterSet

Lang.characterSet() Esta função retorna um inteiro referente ao tipo do character set.

Retorno

Retorna um inteiro.

Exemplo
function useCharacterSet() {
  Dialogs.alert(Lang.characterSet());
}

Saida:

106.

String

Este módulo contém um conjunto de funções para manipulação de strings. A especificação das funções deste módulo pode ser encontrada no documento [WAP-194][1].
Além das funções definidas pela [WAP-194][1], o Java Script Lite dispõe de algumas funções adicionais descritas a seguir.

Sumário

Função Descrição
getChar Converte o código ASCII recebido em um caractere.
getValue Converte o caractere recebido no código ASCII correspondente.
toLowerCase Retorna uma string convertida para minúsculo.
toUpperCase Retorna uma string convertida para maiúsculo.
toProperCase Retorna uma string onde cada nova palavra, separada por espaço, terá sua primeira letra capitalizada.
normalize Retorna uma string com o mesmo valor textual da string recebida como parâmetro, porém, com sua representação binária em unicode.
length Retorna a quantidade de caracteres que a string possui.
isEmpty Retorna true caso a string esteja vazia e false caso contrário.
charAt Retorna um caractere da string na posição indicada.
subString Retorna uma substring com base nos parâmetros indicados.
find Procura uma substring na string passada.
replace Substitui uma substring por uma nova substring.
elements Retorna a quantidade de elementos de uma string separados por um separador.
elementAt Retorna o elemento na posição especificada.
removeAt Remove o elemento no índice especificado.
replaceAt Substitui o elemento no índice especificado por um novo elemento.
insertAt Insere um novo elemento no índice especificado.
squeeze Substitui multiplos espaços em branco por um.
trim Remove o espaços em branco do começo e do fim da string.
compare Compara duas strings com base em suas posições lexicográficas.
toString Cria uma visualização em string do valor passado.
format Formata o valor passado de acordo com o o format passado.

getChar

String.getChar(code) Converte o argumento recebido (numérico) em um caractere.

Parâmetros
  • code – Valor inteiro entre 0 e 255.
Retorno

Retorna uma string contendo o caractere correspondente em caso de sucesso ou invalid em caso de erro.

Exemplo
function test() {
  var c = String.getChar(97);

  Dialogs.alert("Caractere: " + c);
}

Saida:

Caractere: a

getValue

String.getValue(caractere) Converte o caractere recebido no código ASCII correspondente.

Parâmetros
  • caractere – Uma string contendo o caractere correspondente ao decimal que se deseja encontrar. Apenas o primeiro caractere da string será analisado.
Retorno

Retorna o código ASCII decimal do caractere passado. Em caso de erro, retorna invalid.

Exemplo
function test() {
  var s = String.getValue("a");

  Dialogs.alert("Codigo do caractere: " + s);
}

Saida:

Codigo do caractere: 97

toLowerCase

String.toLowerCase(str)

Esta função converte uma string para minúsculo.

Parâmetros
  • str – String que se deseja converter para minúsculo.
Retorno

Retorna a string convertida para minúsculo. Em caso de erro, retorna invalid.

Exemplo
function test() {
  var s = String.toLowerCase("CASE");

  Dialogs.alert("String em lowercase: " + s);
}

Saida:

String em lowercase: case

toUpperCase

String.toUpperCase(str)

Esta função converte uma string para maiúsculo.

Parâmetros
  • str – String que se deseja converter para maiúsculo
Retorno

Retorna a string convertida para maiúsculo. Em caso de erro, retorna invalid.

Exemplo
function test() {
  var s = String.toUpperCase("case");

  Dialogs.alert("String em uppercase: " + s);
}

Saida:

String em uppercase: CASE

toProperCase

String.toProperCase(str)

Esta função converte a primeira letra de cada palavra de uma string (separada por espaço) para maiúsculo.

Parâmetros
  • str – String que se deseja converter para o proper case.
Retorno

Retorna a string convertida. Em caso de erro, retorna invalid.

Exemplo
function test() {
  var s = String.toProperCase("programando em Java Script Lite");

  Dialogs.alert("String em propercase: " + s);
}

Saida:

String em propercase: Programando Em Java Script Lite

normalize

String.normalize(str)

Esta função normaliza uma string, alterando a sua representação binária para Unicode.

Parâmetros
  • str – A string que se deseja normalizar.
Retorno

A string normalizada em caso de sucesso ou invalid em caso de erro.

Exemplo
function test() {
  var s = String.normalize("você, é, não, número.");

  Dialogs.alert("String normalizada: " + s);
}

Saida:

String normalizada: voce, e, nao, numero.

length

String.length(str)

Esta função retorna a quantidade de caracteres que a string possui.

Parâmetros
  • str – String que deseja saber a quantidade de caracteres.
Retorno

A quantidade de caracteres.

Exemplo
function useLength() {
  var nome = "Phoebus";
  Dialogs.alert("Quantidade de caracteres: " + String.length(nome)); // 7
}

Saida:

Quantidade de caracteres: 7.

isEmpty

String.isEmpty(str)

Esta função irá checar se a string está vazia ou não.

Parâmetros
  • str – String que deseja verifiar se está vazia.
Retorno

Retorna true caso o length da string seja 0 e false caso contrário

Exemplo
function useIsEmpty() {
  var nome1 = "";
  var nome2 = "Phoebus";
  Dialogs.alert("Está vazio? " + String.isEmpty(nome1));
  Dialogs.alert("Está vazio? " + String.isEmpty(nome2));
}

Saida:

Está vazio? true.
Está vazio? false.

charAt

String.charAt(str, index)

Esta função retornara o caractere no índice especificado.

Parâmetros
  • str – String.
  • índice – Posição da string que deseja pegar o caractere.
Retorno

Retorna o caractere na posição especificada.

Exemplo
function useCharAt() {
  var nome = "Phoebus";
  Dialogs.alert("Caractere: " + String.charAt(nome, 2));
}

Saida:

Caractere: o.

subString

String.subString(str, startindex, length)

Esta função retornará uma substring baseada nos parametros passados.

Parâmetros
  • str – String.
  • startIndex – Índice inicial da substring.
  • length – Quantidade de caracteres que deseja retornar na substring.
Retorno

Retorna uma subtring.

Exemplo
function useSubString() {
  var nome = "Phoebus Tecnologia";
  Dialogs.alert("Substring: " + String.subString(nome, 2, 4));
}

Saida:

Substring: oebu

find

String.find(str, substring)

Vai procurar uma substring na string passada.

Parâmetros
  • str – String.
  • substring – Substring a ser procurada na string.
Retorno

Retorna o índice do primeiro caractere da substring caso encontre uma ou -1 caso não encontre uma substring.

Exemplo
function useFind() {
  var nome = "Phoebus Tecnologia";
  Dialogs.alert("Índice: " + String.find(nome, "Tec"));
}

Saida:

Índice: 8

replace

String.replace(str, oldsubstring, newsubstring)

Esta função irá substituir uma substring por outra.

Parâmetros
  • str – String.
  • oldSubString – Substring a ser substituida.
  • newSubString – Substring a ser adicionado no lugar da oldSubString.
Retorno

Retorna uma nova string com a substituição de substrings realizada.

Exemplo
function useReplace() {
  var nome = "Phoebus TI";
  var newNome = String.replace(nome, "TI", "Tecnologia");
  Dialogs.alert("Nova string: " + newNome);
}

Saida:

Nova string: Phoebus Tecnologia.

elements

String.elements(str, separator) Separa a string de acordo com o separador fornecido.

Parâmetros
  • str – String.
  • separator – Separador da string.
Retorno

Retorna a quantidade de elementos da string separados pelo separador.

Exemplo
function useElements() {
  var nome = "Phoebus Phoebus Phoebus";
  Dialogs.alert("Elementos: " + String.elements(nome, " "));
}

Saida:

Quantidade de elementos: 3.

elementAt

String.elementAt(str, index, separator) Esta função separa os elementos de acordo com o separador.

Parâmetros
  • str – String.
  • index – Indica qual elemento após a separação retornar.
  • separator – Separador da string.
Retorno

Retorna o elemento na posição indicada

Exemplo
function useElementsAt() {
  var nome = "Phoebus Tecnologia";
  Dialogs.alert("Elemento: " + String.elementAt(nome, 0, " "));
}

Saida:

Elemento: Phoebus.

removeAt

String.removeAt(str, index, separator) Esta função separa os elementos de acordo com o separador e remove o elemento no indice especificado.

Parâmetros
  • str – String.
  • index – Indica qual elemento após a separação remover.
  • separator – Separador da string.
Retorno

Retorna uma nova string sem o elemento que foi removido.

Exemplo
function useRemoveAt() {
  var nome = "Phoebus Tecnologia";
  var newNome = String.removeAt(nome, 1, " ");
  Dialogs.alert("Nome antigo: " + nome);
  Dialogs.alert("Nome novo: " + newNome);
}

Saida:

Nome antigo: Phoebus Tecnologia.
Nome novo: Phoebus.

replaceAt

String.replaceAt(str, element, index, separator) Esta função separa os elementos de acordo com o separador e remove o elemento no indice especificado.

Parâmetros
  • str – String.
  • element – Novo elemento.
  • index – Indica qual elemento será substituido.
  • separator – Separador da string.
Retorno

Retorna uma nova string com o elemento no indice especificado substituido pelo novo elemento.

Exemplo
function useReplaceAt() {
  var nome = "Phoebus Ti";
  var newNome = String.replaceAt(nome, "Tecnologia", 1, " ");
  Dialogs.alert("Nome: " + nome);
  Dialogs.alert("Novo nome: " + newNome);
}

Saida:

Nome: Phoebus Ti.
Nome novo: Phoebus Tecnologia.

insertAt

String.replaceAt(str, element, index, separator) Esta função separa os elementos de acordo com o separador e remove o elemento no indice especificado.

Parâmetros
  • str – String.
  • element – Novo elemento a ser inserido.
  • index – Posição onde inserir o novo elemento.
  • separator – Separador da string.
Retorno

Retorna uma nova string com o novo elemento inserido na posição especificada.

Exemplo
function useInsertAt() {
  var nome = "Phoebus Tecnologia";
  var newNome = String.insertAt(nome, "Pagamentos", 1, " ");
  Dialogs.alert("Nome: " + newNome);
}

Saida:

Nome: Phoebus Pagamentos Tecnologia.

squeeze

String.squeeze(str) Esta função reduz multiplos espaços consecutivos a um.

Parâmetros
  • str – String.
Retorno

Retorna uma string com seus multiplos espaços consecutivos sendo reduzidos a um.

Exemplo
function useSqueeze() {
  var nome = "Phoebus      Phoebus      Phoebus";
  Dialogs.alert("String: " + String.squeeze(nome));
}

Saida:

String: Phoebus Phoebus Phoebus.

trim

String.trim(str) Esta função remove os espaços em branco do começo e do fim da string.

Parâmetros
  • str – String.
Retorno

Retorna uma string com os espaços do começo da string e do fim removidos.

Exemplo
function useTrim() {
  var nome = "    Phoebus    ";
  Dialogs.alert(String.trim(nome));
}

Saida:

String: Phoebus.

compare

String.compare(str1, str2) Esta função irá comparar as strings com base em suas relações lexicográficas.

Parâmetros
  • str1 – String.
  • str2 – String.
Retorno

Retorna -1 se a str1 estiver em alguma posição anterior em relação a str2. 1 caso str1 esteja a frente de str2. 0 caso sejam identicas.

Exemplo
function useCompare() {
  var str1 = "A";
  var str2 = "B";
  Dialogs.alert("Retorno: " + String.compare(str1, str2));
  Dialogs.alert("Retorno: " + String.compare(str2, str1));
  Dialogs.alert("Retorno: " + String.compare("a", "a"));
}

Saida:

Retorno: -1
Retorno:  1
Retorno:  0

toString

String.toString(value) Esta função irá tentar criar uma representação em string do valor passado.

Parâmetros
  • value – Qualquer valor.
Retorno

Retorna uma representação em string do valor passado. Caso não consiga, retornará invalid.

Exemplo
function useToString() {
  var inteiro = 10;
  var booleano = true;
  Dialogs.alert("String: " + String.toString(inteiro));
  Dialogs.alert("String: " + String.toString(booleano));
}

Saida:

String: 10.
String: true.

format

String.format(format, value) Converte o valor passado para uma string baseada no format passado.

Parâmetros
  • format – width - Quantidade minima de caracteres a serem exibidos e preenche com espaços em branco caso necessário. Precision - Especifica a quantidade de digitos a serem impressos e preenche com zeros caso seja necessário.
  • value – Qualquer valor.
Retorno

Retorna uma representação em string do valor passado. Caso não consiga, retornará invalid.

Exemplo
function useFormat() {
  var str = "now";
  var a = 45;
  var b = String.format("b: %2.5d", a);
  Dialogs.alert(b);
  Dialogs.alert(String.format("Do it %5s", str));
}

Saida:

Saida: 00045.
Saida: Do it  now.

Dialogs

Este módulo contém um conjunto de funções típicas da interface com o usuário. A especificação das funções deste módulo pode ser encontrada no documento WAP-194.
Além das funções definidas pela WAP-194, o Java Script Lite dispõe de algumas funções adicionais descritas a seguir.

Sumário

Função Descrição
getSelection Exibe um menu textual para que seja selecionado um item.
alertExt Mesmo comportamento da função alert definida na WAP-194, porém com timeout parametrizável.
error Exibe um erro no modo texto.

getSelection

Dialogs.getSelection(title, list, selected, timeout)

Exibe um menu textual para que seja selecionado um item.

Parâmetros
  • title – String, título do menu.
  • list – PhList com os itens (ver PhList).
  • selected – Número [1..n] com o índice do item pré-selecionado.
  • timeout – Tempo de espera em segundos.
Retorno

Esta função retorna um inteiro que representa o índice, começando por 1, da opção selecionada. Se houver cancelamento ou se o tempo de espera for atingido sem nenhuma seleção, um retorno com invalid será gerado.

Exemplo
function test() {
  var list = PhList.create();
  PhList.add(list, "item1");
  PhList.add(list, "item2");
  PhList.add(list, "item3");
  var s = Dialogs.getSelection("title", list, 0, 30);

  if (s == 1) {
    Dialogs.alert("Selecionada a opcao 1");
  } else if (s == 2) {
    Dialogs.alert("Selecionada a opcao 2");
  } else if (s == 3) {
    Dialogs.alert("Selecionada a opcao 3");
  } else if (s == 0) {
    Dialogs.alert("Timeout");
  } else {
    Dialogs.alert("Operacao cancelada");
  }
}

Saida:

        title
---------------------
 [1] item1
 [2] item2
 [3] item3
 --

 Selecionada a opcao 1

alertExt

Dialogs.alertExt(message, timeout)

Mesmo comportamento de Dialogs.alert apenas adicionado um tempo de espera.

Parâmetros
  • message – String a ser exibida.
  • timeout – Número com o tempo de espera em segundos. O valor 0 (zero) indicá tempo infinito.
Retorno

String or invalid.

Exemplo
function test() {
  Dialogs.alertExt("Hello World!", 30);
}

Saida:

Hello World!

error

Dialogs.error(erroCode, description, timeout)

Exibe um erro no modo texto.

Parâmetros
  • erroCode – Numérico com o código do erro.
  • description – String com a descrição do erro.
  • timeout – Numérico com o tempo de espera em milisegundos.
Retorno

invalid em caso de erro ou a string vazia.

Exemplo
function test() {
  Dialogs.error(100, "FALHA AO CONECTAR!", 2000);
}

Saida:

     CODIGO: 100
---------------------


 FALHA AO CONECTAR!

Core

PhSystem

A classe interna PhSystem contém diversas funções úteis que recuperam uma variedade de dados, como data/hora, configurações de ambiente, número serial do terminal, e assim por diante.

Sumário

Função Descrição
getTime Retorna o horario do SO (sistema operacional).
getDate Retorna a data do SO (sistema operacional).
getSerialNumber Retorna o número serial do terminal.
delay Suspende a execução do script atual por um tempo especificado em milissegundos.
setDate Modifica a data do SO.
setTime Modifica o horario do SO.
getPOSType Retorna um número de identificação único para cada modelo de terminal.
beep Emite um beep com o intervalo determinado.
statusBar Quando ativada, apresenta informações de status do terminal. Disponível apenas no modo texto.
getTickCount Retorna quanto tempo (em milissegundos) passou desde que a aplicação foi iniciada.
getenv (deprecated)
reset Reinicia o terminal.
call Faz uma chamada de uma função específico de um script.
hasFunction Informa se uma função existe em um certo módulo.
getInfo Obtém informações de dispositivos do terminal.
shutdown Desliga o terminal.
getArguments Retorna o número de parâmetros de uma função extern.
getDayWeek Informa qual o dia da semana de uma data.
loading (deprecated)
specialSOFuncs (deprecated)
setGlobal Cria um atributo de escopo global e o associa a uma chave para identificação. Este atributo pode ser recuperado, no futuro, utilizando a chave de identificação.
getGlobal Recupera um atributo, de um escopo global, que foi previamente associado com uma chave de identificação.
remGlobal Remove um atributo de um escopo global que foi previamente associado com uma chave de identificação.
loadAppModules Esta função é utilizado para recuperar a lista de versões dos modulos carregados no terminal.
sound Emite um som com a nota e duração passados como argumento.

getTime

PhSystem.getTime(mask)

Use getTime para obter o horário do SO (sistema operacional).

Parâmetros
  • mask – Especifica o formato da hora.
  • "HH" – Horas
  • "MM" – Minutos
  • "SS" – Segundos
Retorno

String contendo a hora no formato da máscara passada por parâmetro.

Exemplo
function test() {
  var time = PhSystem.getTime("HH:MM:SS");

  Dialogs.alert("Hora atual: " + time);
}

Saida:

Hora atual: 17:29:40

getDate

PhSystem.getDate(mask)

Use getDate para obter a data do SO (sistema operacional).

Parâmetros
  • mask – Especifica o formato da data.
  • “DD” – Dia
  • “MM” – Mês
  • "YY" – Ano com dois dígitos
  • "YYYY" – Ano com quatro dígitos
Retorno

String contendo a data no formato passado por parâmetro.

Exemplo
function test() {
  var date = PhSystem.getDate("DD/MM/YYYY");

  Dialogs.alert("Data atual: " + date);
}

Saida:

Data atual: 05/04/2017

getSerialNumber

PhSystem.getSerialNumber()

Use getSerialNumber para obter o número serial do terminal.

Retorno

String contendo o número serial do terminal.

Exemplo
function test() {
  var sn = PhSystem.getSerialNumber();

  Dialogs.alert("Numero serial: " + sn);
}

Saida:

Numero serial: 1689090088

delay

PhSystem.delay(ms)

Suspende a execução do script atual por uma quantidade de tempo especificada em milissegundos.

Parâmetros
  • ms – Integer
Retorno
Exemplo
function test() {
  PhSystem.delay(1000); //Aguarda 1 segundo
}

setDate

PhSystem.setDate(Year, Month, Day)

Use setDate para alterar a data do SO.

Parâmetros
  • Year – Integer. Obrigatoriamente maiores que 2000.
  • Month – Integer. Valores precisam estar entre 1 (Janeiro) e 12 (Dezembro)
  • Day – Integer
Retorno

Um retorno invalid é gerado se qualquer dos parâmetros não puderem ser convertidos para inteiro. Em caso de sucesso, retorna true, indicando que a data foi alterada. Em caso de falha, retorna false.

Exemplo
function test() {
  if (PhSystem.setDate(2017, 3, 10)) {
    var newDate = PhSystem.getDate("DD/MM/YYYY");
    Dialogs.alert("Data alterada para: " + newDate);
  }
}

Saida:

Data alterada para: 10/03/2017

setTime

PhSystem.setTime(Hour, Min, Sec)

Use setTime para alterar a hora do SO.

Parâmetros
  • Hour – Integer
  • Min – Integer
  • Sec – Integer
Retorno

Um retorno invalid é gerado se qual quer dos parâmetros não puder ser convertido para um integero. Em caso de sucesso, esta função retorna true, indicando que a hora foi alterada. Em caso de falha, retorna false.

Exemplo
function test() {
  if (PhSystem.setTime(17, 15, 2)) {
    var newTime = PhSystem.getTime("HH:MM:SS");
    Dialogs.alert("Data alterada para: " + newTime);
  }
}

Saida:

Data alterada para: 17:15:02

getPOSType

PhSystem.getPOSType()

PhStstem.getPOSType()

Retorna um número único para cada modelo de terminal. Esse número pode ser mapeado de acordo com as constantes descritas na tabela abaixo.

Os seguintes terminais são suportados atualmente:

Constantes Tipo do Terminal Valor
PhSystem.PCWIN PC/Windows 5
PhSystem.EVX520 VeriFone Vx520 36
PhSystem.EVX680 VeriFone Vx680 37
PhSystem.OVx670 VeriFone Vx670 38
PhSystem.IWL281 Ingenico IWL281 40
PhSystem.ICT250 Ingenico ICT250 41
PhSystem.IWT251 Ingenico IWT251 48
PhSystem.EVX690 VeriFone Vx690 49
PhSystem.PD200 PAX D200 51
PhSystem.PS920 PAX S920 50
PhSystem.M5000 Ingenico M5000 53
Exemplo
function test() {
  if (PhSystem.getPOSType() == PhSystem.PS920) {
    Dialogs.alert("Sou um S920!");
  }
}

Saida:

Sou um S920!

beep

PhSystem.beep(interval)

Emite um beep com o intervalo determinado.

Parâmetros
  • interval – intervalo de tempo em milissegundos. Após o intervalo o beep de mensagem acabará.
Retorno

Retorna um string vazio. Se o argumento interval não puder ser convertido para Integer, será retornado invalid.

Exemplo
function beep_test() {
  PhSystem.beep(100);
}

statusBar

PhSystem.statusBar(show)

Quando ativado, a barra de status apresenta informação relacionada ao status do terminal, como nivel de bateria e sinal GPRS. Disponivel apenas no modo texto.

Parâmetros
  • showboolean. Quando true, exibe a barra de status na tela.
Retorno

Nenhum.

Exemplo
PhSystem.statusBar(Show);

getTickCount

PhSystem.getTickCount()

Retorna quanto tempo (em milissegundos) passou desde que a aplicação foi iniciada.

Retorno

Um número que representa o tempo atual. Caso essa operação não seja suportada, o retorno sera invalid.

Exemplo
function test() {
  var tInit = PhSystem.getTickCount();

  PhSystem.delay(1000);

  var tEnd = PhSystem.getTickCount();

  Dialogs.alert("Tempo decorrido: " + (tInit - tEnd) + "ms");
}

Saida:

Tempo decorrido: 1000ms

getenv (deprecated)

PhSystem.getenv(name)

reset

PhSystem.reset(nextApp, lastApp)

Reinicia o terminal.

Parâmetros
  • nextApp – String. Nome da aplicação a ser iniciada após a reinicialização.
  • lastApp – String. Nome da aplicação atual que está sendo executada.
Retorno

boolean. Retorna false caso não consiga reiniciar o terminal.

Exemplo
function test {

   PhSystem.reset("PhVM", "PhVM");
}

call

PhSystem.call(module, function, params)

Faz uma chamada da função solicitada por parâmetro. A função deve ser "extern" para que o call consiga chamá-la.
Obs.: Caso o número de parâmetros não seja compatível com a lista passada ou caso a função não seja encontrada, o interpretador sairá com erro.

Parâmetros
  • module – Nome do módulo onde se encontra a função.
  • function – Nome da função a ser executada.
  • params – Lista de parâmetros a serem passados para a função.
Retorno
Exemplo
function test {

   var module = "package://test#main.wmlsc";

   PhSystem.call(module, "testCall", ["arg1", "arg2"]);
}

hasFunction

PhSystem.hasFunction(module, function)

Use esta função para verificar se existe uma função em um certo módulo.

Parâmetros
  • module – String. Valor do módulo a ser pesquisado.
  • function – String. Valor relacionado à função que será procurada.
Retorno

Retorna true se existir e false caso não exista a função ou módulo.

Exemplo
function test {

   var module = "package://test#main.wmlsc";
   var func   = "main";

   if(PhSystem.hasFunction(module, func))
   {
      PhSystem.call(module, func, []);
   }
}

getInfo

PhSystem.getInfo(info)

Recupera informações do terminal.

Parâmetros
  • info – Informação a ser recuperada.
Retorno

Retorna a informação solicitada.

Atributos
Atributo Descrição
OS_VERSION Versão do sistema operacional.
MODEL_HARDWARE Modelo do hardware.
FACTORY_DATE Data de fabricação.
COUNTRY_CODE Código do país.
TOUCH_SCREEN_SUPPORT Suporte a interface touch screen.
FLASH_SIZE Tamanho da memória Flash em Kilobytes.
RAM_SIZE Tamanho da memória Ram em Kilobytes.
ETHERNET_SUPPORT Suporte a comunicação ethernet.
MEMORY_CARD_SUPPORT Suporte a cartão de memória.
GSM_GPRS_SUPPORT Suporte a comunicação GPRS.
WIFI_SUPPORT Suporte a comunicação Wifi.
DISPLAY_WIDTH Número de colunas do display textual.
FLASH_FREE Memória Flash disponível em Kilobytes.
RAM_FREE Memória Ram disponível em Kilobytes.
HAS_BATTERY Possui bateria interna
HAS_CHIP Indica a presença de SIM Card no terminal.
NUM_PORT_SERIAL Quantidade de portas seriais.
NUM_PORT_USB Quantidade de portas USB.
NATIVE_MODULES Módulos nativos do terminal
NATIVE_IDENTIFICATION Identificação nativas do terminal
ENCODE_TYPE Conjunto de caracteres do terminal
BATTERY_LEVEL Nível da bateria (Ver seção Níveis de Bateria).
BATTERY_PERCENTAGE Nível da bateria em percentual.
SDK_VERSION Versão do SDK do terminal
BATTERY_CHARGING Inidica se a bateria está carregando
ALL Lista com todas as informações
Níveis de Bateria
Valor Descrição
0 Não possui bateria
1 Nível muito baixo
2 Nível baixo
3 Nível médio
4 Nível alto
5 Totalmente carregado
Exemplo
function test() {
  var osVer = PhSystem.getInfo(PhSystem.OS_VERSION);
  var model = PhSystem.getInfo(PhSystem.MODEL_HARDWARE);
  var hasTouch = PhSystem.getInfo(PhSystem.TOUCH_SCREEN_SUPPORT);

  //Executado em um PAX S920
  Dialogs.alert(
    "Modelo do terminal:         " +
      model +
      "\nVersao do SO:             " +
      osVer +
      "\nPossui touch screen:      " +
      hasTouch
  );
}

Saida:

Modelo do terminal:  S920
Versao do SO:        Prolin2.4.77[D1]
Possui touch screen: true

shutdown

PhSystem.shutdown()

Desliga o terminal.

Exemplo
function test() {
  PhSystem.shutdown();
}

getArguments

PhSystem.getArguments(module, function)

Retorna a quantidade de argumentos que a função do módulo precisa para ser chamada. Obs.: Caso o módulo ou a função não possa ser encontrado invalid será retornado

Parâmetros
  • module – String com o módulo a ser pesquisado (mesmo padrão do pragma use URL
  • function – String com o nome da função desejada (Obrigátoriamente deve ser extern).
Retorno

Inteiro com o número de argumentos necessários para a chamada da função.

Exemplo
function test () {
  var fmodule = Call#getModule(fscript, "package://phast#events/handler.wmlsc");
  var fname   = Call#getFunction(fscript);
  if (PhSystem.getArguments(fmodule, fname) == PhList.count(fparams))
  {
    Error#setLastError(Error#E OKAY());
    PhSystem.call(fmodule, fname, fparams);
  }
}

getDayWeek

PhSystem.getDayWeek(strDate)

Calcula o dia da semana de uma data passada como parâmetro..

Parâmetros
  • strDate – String com a data que se deseja saber o dia da semana.
Retorno

Retorna o número relativo ao dia da semana. (1 = Domingo. 7 = Sábado).

Exemplo
function test() {
  var day = PhSystem.getDayWeek(PhSystem.getDate("DD/MM/YYYY"));

  Dialogs.alert("Dia da semana: " + day);
}

Saida:

Dia da semana: 5

loading (deprecated)

PhSystem.loading(loading)

specialSOFuncs (deprecated)

PhSystem.specialSOFuncs(enableSOMenu, enableReset)

setGlobal

PhSystem.setGlobal(key, value)

Armazena um valor em uma variável de escopo global e a associa a uma chave que poderá ser utilizada, posteriormente, para recuperar o valor armazenado.

Parâmetros
  • key – Chave que será associada à variável de escopo global;
  • value – Valor qeu será armazenado na variável de escopo global.
Retorno

Retorna TRUE em caso de sucesso ou FALSE em caso de erro.

Exemplo
function global_test1() {
  var key = "G_VALUE";
  var value = 10;

  if (PhSystem.setGlobal(key, value)) {
    Dialogs.alert("Global adicionada com o valor: " + value);
  }
}

Saida:

Global adicionada com o valor: 10

getGlobal

PhSystem.getGlobal(key)

Esta função é utilizado para recuperar um valor que foi armazenado em uma variável de escopo global e que foi previamente associada a uma chave de identificação.

Parâmetros
  • key – Chave de identificação utilizada para identificar a variável de escopo global que contém o valor a ser recuperado.
Retorno

Retorna o valor armazenado na variável associada à chave de identificação passada como parâmetro ou invalid em caso de erro.

Exemplo
function global_test1()
{
  var key   = "G_VALUE";

  if (PhSystem.setGlobal(key, 50))
  {
    var value = PhSystem.getGlobal(key);

    if (isvalid value)
    {
      Dialogs.alert("Global recuperada com o valor: " + value);
    }
  }
}

Saida:

Global recuperada com o valor: 50

remGlobal

PhSystem.remGlobal(key)

Esta função é utilizado para remover um valor de uma variável de escopo global wue tenha sido previamente associada à uma chave de identificação

Parâmetros
  • key – Chave de identificação utilizada para identificar a variável de escopo global que contém o valor a ser recuperado.
Retorno

Retorna o valor armazenado na variável associada à chave de identificação passada como parâmetro ou invalid em caso de erro.

Exemplo
function global_test1()
{
  var key   = "G_VALUE";

  if (PhSystem.setGlobal(key, 50))
  {
    var value = PhSystem.remGlobal(key);

    if (isvalid value)
    {
      Dialogs.alert("Global com o valor " + value + " foi removida");
    }
  }
}

Saida:

Global com o valor 50 foi removida

loadAppModules.

PhSystem.loadAppModules(list)

Esta função é utilizada para recuperar a lista de versões dos modulos carregados no terminal.

Parâmetros
  • list (saida) – PhList onde serão inseridas as versões dos módulos (ver PhList).
Retorno

boolean o, true em caso de sucesso, false caso não seja possível preencher a lista ou invalid caso seja passado um argumento inválido.

Exemplo
function loadAppModules() {

   var list = [];

   if (PhSystem.loadAppModules(list))
   {
       for(var i = 0; i < PhList.count(list); i++)
       {
           Dialogs.alert("Module:  " + ModuleVersion#getName(list[i]) +
                         "\nVersion: " + ModuleVersion#getVersion(list[i]));
       }
   }

Saida:

Module:  PhLib
Version: 12.7.0.0
--
Module:  Devices
Version: 1.8.0.0
--
Module:  PhGraphics
Version: 1.2.0.0
--
...

sound

PhSystem.sound(note, duration)

Emite um som com a nota e duração passados como argumento.

Parâmetros
  • note – Inteiro
  • duration – Inteiro com a duração (em ms) do som a ser emitido
Retorno

boolean o, true em caso de sucesso, false caso não seja possível preencher a lista ou invalid caso seja passado um argumento inválido.

Exemplo
function sound() {
  PhSystem.sound(2, 100);
}

PhDisplay

PhDisplay é a implementação da Phoebus de interfaces e definições para manipulação de texto, imagens e fontes da tela (display) do terminal, usando o modo de tratamento gráfico.

Sumário

Função Descrição
clear Limpa o display.
putString Mostra uma mensagem no display. (Compatível com modelos de POS textuais)
putImage (deprecated)
putBMP Mostra uma imagem BMP no display.
light Acende ou apaga a luz de background ou backlight da tela do terminal. (Compatível com modelos de POS textuais)
clearLine Limpa uma determinada linha na tela do terminal. A linha será preenchida de acordo com o estilo especificado. (Compatível com modelos de POS textuais)
maxColumns Retorna o número máximo de colunas suportadas pelo display.
maxLines Retorna o número máximo de linhas suportadas pelo display.
maxPxHeight Retorna o número máximo de pixels do display na vertical.
maxPxWidth Retorna o número máximo de pixels do display na horizontal.
setMode Ajusta para o modo de tratamento gráfico ou texto.
getMode Retorna o modo de tratamento usado pelo terminal.
putStringFmt (deprecated)
getStrFmtWidth (deprecated)
getStrFmtHeight (deprecated)
hasGraphicsSupport Indica se o terminal tem suporte ao modo gráfico.

Estilos de exibição

Estilo Descrição
NORMAL Texto normal.
REVERSE Texto em reverso.
UNDERLINE Texto sublinhado.

Modos de tratamento de operações

Modo Descrição
NONE Modo padrão de tratamento de operações na tela.
TEXT Modo padrão, tratar operações na tela como texto.
GRAPHIC Modo padrão, tratar operações na tela como gráfico.

Tamanhos de fontes

Fonte Descrição
Small Tamanho de fonte pequena.
Medium Tamanho de fonte média.
Large Tamanho de fonte grande.

clear

PhDisplay.clear()

Limpa o display.

Retorno

boolean

Exemplo:

function test() {
  PhDisplay.clear();
}

putString

PhDisplay.putString(line, column, style, message)

Mostra uma mensagem no display. (compatível com modelos de POS textuais)

Parâmetros

line - integer - Valor positivo com a linha onde a mensagem será exibida. A primeira linha inicia em 0 (zero).

column - integer - Valor positivo com a coluna onde a mensagem será exibida. O sentido é da esquerda para direita. A primeira columna inicia em 0 (zero).

style – Estilo usado para tratamento da exibição do texto. Valores possíveis: PhDisplay.Normal, PhDisplay.Reverse, PhDisplay.Underline.

message - string - Mensagem a ser exibida.

Retorno

boolean

Exemplo:

function test() {
  PhDisplay.putString(0, 0, PhDisplay.NORMAL, "Mensagem na tela");
}

Saida:

Mensagem na tela

putImage (deprecated)

PhDisplay.putImage(x, y, file)

putBMP

PhDisplay.putBMP(x, y, bitmap)

Mostra uma imagem (BMP ou PhBMP) no display.

Parâmetros

x - interger - valor positivo com a posição inicial da imagem na horizontal.

y - integer - valor positivo com a posição inicial da imagem na vertical.

bitmap – Imagem Bitmap que será exibida.

Retorno

boolean

Exemplo:

use url Bitmap  "package://libs#ui/tbitmap.wmlsc";

function test () {
    var imageId = 0;
    var image   = PhType.create("bitmap");

    if (Bitmap#load(image, imageId))
    {
        PhDisplay.putBMP(5, 75, image);
    }
}

Saida:

alt text

light

PhDisplay.light(turnOn)

Acende ou apaga a luz de background ou backlight da tela do terminal. (compatível com modelos de POS textuais)

Parâmetros

turnOnboolean - true para acender ou false para apagar.

Retorno

booleano, true em caso de sucesso ou false em caso de parâmetro inválido.

Exemplo:

function test() {
  PhDisplay.light(true);
}

clearLine

PhDisplay.clearLine(line, attribute)

Limpa uma determinada linha na tela do terminal no modo textual. A linha será preenchida de acordo com o estilo especificado. (compatível com modelos de POS textuais)

Parâmetros

line - integer - Número da linha a ser limpa. attribute – Estilo a ser aplicado. Valores possíveis: PhDisplay.Normal, PhDisplay.Reverse, PhDisplay.Underline.

Retorno

boolean

Exemplo:

function test() {
  PhDisplay.clearLine(0, PhDisplay.Normal); //Apaga primeira linha
}

maxColumns

PhDisplay.maxColumns()

Retorna o número máximo de colunas suportadas pelo display no modo textual.

Retorno

Inteiro positivo com o número de colunas.

Exemplo:

var maxCols = PhDisplay.maxColumns();
Dialogs.alert(maxCols);

maxLines

PhDisplay.maxLines()

Retorna o número máximo de linhas suportadas pelo display no modo textual.

Retorno

Inteiro positivo com o número de linhas.

Exemplo:

var maxLins = PhDisplay.maxLines();
Dialogs.alert(maxLins);

maxPxHeight

PhDisplay.maxPxHeight()

Retorna o número máximo de pixels do display na vertical.

Retorno

Inteiro positivo com número máximo de pixels na vertical.

Exemplo:

var pxHeight = PhDisplay.maxPxHeight();
Dialogs.alert(pxHeight);

maxPxWidth

PhDisplay.maxPxWidth()

Retorna o número máximo de pixels do display na horizontal.

Retorno

Inteiro positivo com número máximo de pixels na horizontal.

Exemplo:

var pxWidth = PhDisplay.maxPxWidth();
Dialogs.alert(pxWidth);

setMode

PhDisplay.setMode(mode)

Ajusta para o modo de tratamento gráfico ou texto.

Parâmetros

mode – Inteiro positivo com o modo de tratamento. Valores possíveis: PhDisplay.NONE, PhDisplay.TEXT, PhDisplay.GRAPHIC.

Retorno

boolean, onde**true** em caso de sucesso ou false em caso de parâmetro inválido.

Exemplo:

function test() {
  if (PhDisplay.setMode(PhDisplay.TEXT)) {
    Dialogs.alert("Definido modo de exibicao textual");
  }
}

Saida:

Definido modo de exibicao textual

getMode

PhDisplay.getMode()

Retorna o modo de tratamento do display usado pelo terminal.

Retorno

Inteiro positivo com o modo de tratamento do display. Valores possíveis: PhDisplay.NONE, PhDisplay.TEXT, PhDisplay.GRAPHIC.

Exemplo:

function test() {
  var mode = PhDisplay.getMode();

  if (mode == PhDisplay.TEXT) {
    Dialogs.alert("Modo textual");
  } else {
    Dialogs.alert("Modo grafico");
  }
}

Saida:

Modo grafico

putStringFmt (deprecated)

PhDisplay.putStringFmt(...)

getStrFmtWidth (deprecated)

PhDisplay.getStrFmtWidth(fontName, size, text)

getStrFmtHeight (deprecated)

PhDisplay.getStrFmtHeight(fontName, size, text)

hasGraphicsSupport

PhDisplay.hasGraphicsSupport()

Indica se o terminal tem suporte ao modo gráfico.

Retorno

boolean, onde true caso tenha suporte ou false caso contrário.

Exemplo:

function test() {
  if (PhDisplay.hasGraphicsSupport()) {
    Dialogs.alert("Suporta modo grafico");
  } else {
    Dialogs.alert("Nao suporta modo grafico");
  }
}

Saida:

Suporta modo grafico

PhKeyBoard

PhKeyBoard é a implementação da Phoebus de interfaces e definições para manipulação das entradas no teclado do terminal.

Sumário

Função Descrição
getKey Retorna uma entrada no teclado do terminal.
clear Limpa o buffer do teclado do terminal, que pode conter dados não lidos relacionados a teclas pressionadas.
enable Habilita ou desabilita o teclado do terminal.
backLight Seta a intensidade da luz do teclado.
KEY_ENTER Define o valor 13 para tecla Enter.
KEY_ESC Define o valor 27 para tecla Esc.
KEY_F1 Define o valor 14 para tecla F1.
KEY_F2 Define o valor 15 para tecla F2.
KEY_F3 Define o valor 16 para tecla F3.
KEY_F4 Define o valor 17 para tecla F4.
KEY_UP Define o valor 4 para tecla de seta para cima.
KEY_DOWN Define o valor 3 para tecla de seta para baixo.
KEY_LEFT Define o valor 1 para tecla de seta para esquerda.
KEY_RIGHT Define o valor 2 para tecla de seta para direita.
KEY_ALPHA Define o valor 7 para tecla Insert.
KEY_CLEAR Define o valor 8 para tecla Back Space.
KEY_NONE Definição de valor para nenhuma tecla.
KEY_SHIFT Define o valor 6 para tecla Shift.
KEY_PAPER Define o valor 28 para tecla feed paper.
KEY_HOME Define o valor 11 para tecla Home.
KEY_00 Define o valor 5 para tecla 0.

getKey

PhKeyBoard.getKey(timeout)

Retorna uma entrada no teclado do terminal.

Parâmetros
  • timeout – Inteiro positivo com o tempo, em milisegundos, que a entrada de dados será aguardada. Ou boleano com true indicando bloqueio até que uma entrada seja feita.
Retorno

Inteiro positivo com a entrada válida do teclado ou invalid em caso de parâmetro inválido.

Exemplo
function test () {
    var result = false
    var key    = invalid;

   key = PhKeyBoard.getKey(3000); //Espera 3 segundos

    if (isvalid key && key != PhKeyBoard.KEY_NONE)
    {
        //Esperar até que a mesma tecla seja pressionada novamente
        while (PhKeyBoard.getKey(false) == key)
        {
            result = true;
        }
    }

    return result;
}

clear

PhKeyBoard.clear()

Limpa o buffer do teclado do terminal, que pode conter dados não lidos relacionados a teclas pressionadas.

Exemplo
function test() {
  PhKeyBoard.clear();
}

backLight

PhKeyBoard.backLight(value)

Seta a intensidade da luz do teclado.

Obs: Função disponível apenas nos terminais da linha PAX e Vx520

Parâmetros
  • value – Valor em byte da intensidade de luz do teclado (0 ou 1)
Exemplo
function test() {
  PhKeyBoard.backLight(0);
}

enable

PhKeyBoard.enable(enable)

Habilita ou desabilita o teclado do terminal.

Parâmetros
  • enable – Boleano com true para habilitar e false para desabilitar o teclado.
Retorno

Boleano, true em caso de sucesso ou false em caso de parâmetro inválido.

Exemplo
function test() {
  PhKeyBoard.enable(true);
}

PhLog

Gera log de acordo com o nível especificado durante compilação de scripts.

Sumário

Função Descrição
error Gera log de erro.
warning Gera log de warning.
info Gera log de info.
debug Gera log de debug.
output Configura stream de saida

error

PhLog.error(msg)

Exibe na stream de log mensagem de erro.

Parâmetros
  • msgString ou Buffer com a mensagem a ser exibida no log.
Retorno

Se a função estiver habilitada retorna true em caso de sucesso ou false em caso de erro, senão retorna invalid.

Exemplo
function test() {
  var id = "12345";
  var getId = Dialogs.prompt("ID ", "");

  if (getId != id) {
    PhLog.error("ERRO: ID nao confere");
  }
}

warning

PhLog.warning(msg)

Exibe na stream de log mensagem de warning.

Parâmetros
  • msgString ou Buffer com a mensagem a ser exibida no log.
Retorno

Se a função estiver habilitada retorna true em caso de sucesso ou false em caso de erro, senão retorna invalid.

Exemplo
function test(index) {
  var lista = PhList.create();
  var getIdx = invalid;

  PhList.add(lista, "a");
  PhList.add(lista, "b");
  PhList.add(lista, "c");

  if (index <= PhList.count(lista) - 1) {
    getIdx = PhList.get(lista, index);
  } else {
    PhLog.warning("Indice nao existe na lista");
  }
}

info

PhLog.info(msg)

Exibe na stream de log mensagem de info.

Parâmetros
  • msgString ou Buffer com a mensagem a ser exibida no log.
Retorno

Se a função estiver habilitada retorna true em caso de sucesso ou false em caso de erro, senão retorna invalid.

Exemplo
function test() {
  PhLog.info("[ENTRADA] --> test()");
  /*
   * ... code
   */
  PhLog.info("[SAIDA] ---> test()");
}

debug

PhLog.debug(msg)

Exibe na stream de log mensagem de debug.

Parâmetros
  • msgString ou Buffer com a mensagem a ser exibida no log.
Retorno

Se a função estiver habilitada retorna true em caso de sucesso ou false em caso de erro, senão retorna invalid.

Exemplo
function test() {
  var x = Dialogs.prompt("ID", "");
  PhLog.debug("x = " + x);
}

output

PhLog.output(stream)

Configura uma stream de saída para o log, enquanto não utilizado, a aplicação logará na stream padrão previamente configurada.

Parâmetros
  • streamStream de saida para o log ou invalid para liberar memoria da stream.
Retorno

true em caso de sucesso ou false em caso de erro.

Exemplo
function test () {
 var eth = DeviceEth#create("");
 var stream = invalid;

 if (isvalid Device#connect(eth))
 {
   stream = Comm#socket("127.0.0.1", 16668, Comm#COMM_PRTCL_TCP(), 60000);
   if(Comm#connected(stream))
       PhLog.output(stream); //Configurando stream de saida
   else
     PhLog.info("Socket nao conectado");
 }
 else
 {
   PhLog.error.alert("Device ERROR: " + String.toString(Device#getError(eth)));
 }

 PhLog.output(invalid); //Liberando stream
}

Tipos de Dados

PhList

PhList é a implementação da Phoebus de interfaces e definições para manipulação de lista de objetos.

Sumário

Função Descrição
add Insere um item ao final da lista especificada.
addTo Insere um item em uma posição específica da lista especificada. Caso haja um item na posição indicada, este e os demais serão deslocados para direita.
create Cria um handle para uma lista.
clear Remove todos os elementos da lista.
count Retorna o número de itens presentes em uma lista.
contains Verifica se um elemento está presente na lista.
empty Checa se a lista está vazia.
get Retorna um item da lista na posição indicada.
indexOf Verifica o índice de um item na lista.
isList Verifica se o argumento recebido é uma lista.
remove Remove o item na posição indicada. Os demais serão deslocados para esquerda.
set Substitui um item da lista presente em uma posição específica.

add

PhList.add(list, element)

Insere um item em uma posição específica da lista especificada. Caso haja um item na posição indicada, este e os demais serão deslocados para direita.

Parâmetros
  • listHandle da lista onde o item será inserido.
  • element – Item a ser inserido na lista.
Retorno

boolean o, true em caso de sucesso ou false se não é possível inserir o elemento. Caso não seja possível utilizar os parâmetros invalid será retornado.

Exemplo
function test ()
{
   var list = [[], [], []];

   if (isvalid list)
   {
      PhList.add(list[0], 1);
      PhList.add(list[0], 2);
      PhList.add(list[1], "str1");
      PhList.add(list[1], "str2");
      PhList.add(list[2], true);
      PhList.add(list[2], false);

      for(var i = 0; i < PhList.count(list); i++)
      {
         for(var j = 0; j < PhList.count(list[i]); j++)
         {
           Dialogs.alert("Item ["+ i +"]["+ j +"]: "+ list[i][j]);
         }
      }
   }
}

Saida:

Item[0][0]: 1
--

Item[0][1]: 2
--

Item[1][0]: str1
--

Item[1][1]: str2
--

Item[2][0]: true
--

Item[2][1]: false
--

addTo

PhList.addTo(list, element, index)

Insere um item em uma posição específica da lista.

Parâmetros
  • listHandle da lista onde o item será inserido.
  • element – Item a ser inserido na lista.
  • index – Índice na lista onde o item será inserido.
Retorno

boolean o, true em caso de sucesso ou false se não é possível inserir o elemento. Caso não seja possível utilizar os parâmetros invalid será retornado.

Exemplo
function test () {
    var list = PhList.create();

    if (isvalid list)
    {
        PhList.add(list, "stringTest", 0);

        Dialogs.alert("Item: " + list[0]);
    }
}

Saida:

Item: stringTest

create

PhList.create()

Cria um handle para uma lista.

Obs: Uma lista também pode ser criada utilizando a notação [], permitindo que seja incializada em sua declaração.

Retorno

Um handle para uma lista ou invalid em caso de erro.

Exemplo
function test() {
  var list = PhList.create();
  var list2 = [];
  var list3 = [1, 2, 3];
}

clear

PhList.clear(list)

Remove todos os elementos da lista.

Parâmetros
  • listHandle da lista a ser limpa.
Retorno

boolean o, true em caso de sucesso ou false se não é possível limpar a lista. Caso não seja possível utilizar os parâmetros invalid será retornado.

Exemplo
function test () {
   var list = PhList.create();

    if (isvalid list)
    {
            PhList.add(list, 10);
            PhList.add(list, 15);
            PhList.clear(list);
    }
}

count

PhList.count(list)

Retorna o número de itens presentes em uma lista.

Parâmetros
  • listHandle da lista.
Retorno

Inteiro positivo com o número de elementos da lista. Caso não seja possível utilizar os parâmetros, invalid será retornado.

Exemplo
function test () {
   var list = PhList.create();

    if (isvalid list)
    {
            PhList.add(list, 10);
            PhList.add(list, 15);

            var listCount = PhList.count(list); //Deve retornar 2
    }
}

contains

PhList.contains(list, element)

Verifica se um elemento está presente na lista indicada.

Parâmetros
  • listHandle da lista.
  • element – Elemento a ser encontrado.
Retorno

boolean o, true em caso da lista conter o elemento especificado ou false caso contrário.

Exemplo
function test () {
    var result = false;
    var list   = PhList.create();

    if (isvalid list)
    {
            PhList.add(list, "item 11");
            PhList.add(list, "item 22");

            if (PhList.contais(list, "item 33"))
                result = true;
    }

    return result;
}

empty

PhList.empty(list)

Checa se a lista especificada está vazia.

Parâmetros
  • listHandle da lista.
Retorno

boolean o, false em caso da lista conter elementos ou true caso esteja vazia. Caso não seja possível utilizar os parâmetros invalid será retornado.

Exemplo
function test () {
   var list = PhList.create();

    if (isvalid list)
    {
            PhList.add(list, 10);
            PhList.add(list, 15);

            var listIsEmpty = PhList.empty(list);
    }
}

get

PhList.get(list, index)

Retorna um item da lista na posição indicada.

Obs: O item de uma lista também pode ser recuperado utilizando a notação list[idx], com idx sendo índice do item na lista.

Parâmetros
  • listHandle na lista.
  • index – Índice na lista onde o item deve estar presente.
Retorno

O item na posição indicada, ou lista vazia. Caso não seja possível utilizar os parâmetros, invalid será retornado.

Exemplo
function test () {
   var list = PhList.create();

    if (isvalid list)
    {
            PhList.add(list, 10);
            PhList.add(list, 15);
            PhList.add(list, 20);
            PhList.remove(list, 0);

            var item  = PhList.get(list, 0); //Retorna o 10
            var item2 = list[1]; //Retorna o 15
    }
}

indexOf

PhList.indexOf(list, element)

Verifica o índice de um item, caso esteja presente, na lista.

Parâmetros
  • listHandle da lista.
  • element – Elemento a ser encontrado.
Retorno

Inteiro positivo com o índice da primeira ocorrência do elemento encontrado, ou -1, caso a lista não contenha o elemento indicado.

Exemplo
function test () {
    var result = invalid;
    var list   = PhList.create();

    if (isvalid list)
    {
            PhList.add(list, "item 11");
            PhList.add(list, "item 22");

            result = PhList.indexOf(list, "item 22");
    }

    return result;
}

isList

PhList.isList(obj)

Verifica se o argumento recebido é um PhList.

Parâmetros
  • obj – Objeto a ser verificado.
Retorno

boolean o, true em caso o argumento recebido seja um PhList ou false caso contrário.

Exemplo
function test() {
  var list = PhList.create();

  if (PhList.isList(list)) {
    Dialogs.alert("Lista criada!");
  }
}

remove

PhList.remove(list, index)

Remove o item na posição indicada. Os demais serão deslocados para esquerda.

Parâmetros
  • listHandle da lista onde o item será removido.
  • index – Índice na lista de onde o item será removido.
Retorno

Item removido. Caso não seja possível utilizar os parâmetros, invalid será retornado.

Exemplo
function test () {
   var list = PhList.create();

    if (isvalid list)
    {
            PhList.add(list, 10);
            PhList.add(list, 15);
            PhList.remove(list, 0); //Remove 10
    }
}

set

PhList.set(list, index, element)

Substitui um item da lista presente em uma posição específica.

Obs: O item de uma lista também pode ser substituido utilizando a notação list[idx] = value;.

Parâmetros
  • listHandle da lista onde o item será substituído.
  • index – Índice na lista do item que será substituído.
  • element – Item que irá substituir o que está no índice indicado.
Retorno

boolean o, true em caso de sucesso ou false se não é possível substituir o elemento. Caso não seja possível utilizar os parâmetros invalid será retornado.

Exemplo
function test () {
   var list = PhList.create();

    if (isvalid list)
    {
            PhList.add(list, 10);
            PhList.add(list, 15);
            PhList.set(list, 1, 20); //A lista possui 10 e 20
            list[0] = 30; //A lista possui 30 e 20
    }
}

PhStruct

É uma estrutura contendo diversas variáveis, podendo ser de tipos diferentes, agrupadas de forma a facilitar sua utilização.

Sumário

Função Descrição
create Cria uma nova PhStruct no formato: \"{ATTRIBUTE:TYPE;}\".
get Recupera o valor de um atributo da PhStruct.
set Atribui o valor de uma variável da PhStruct.
getDefinition Recupera a String de definição usada para a criação de uma PhStruct.
define Cria uma nova PhStruct baseado na String de definição passada e lhe atribui um nome.
load Carrega uma PhStruct usando o nome de uma struct já criada.
undefine Remove a String de definição da PhStruct.
getAsPhType Retorna o valor de um atributo da PhStruct como PhType.
copy Faz uma cópia da PhStruct para uma nova referência.
isStruct Verifica se o argumento recebido é uma PhStruct.

create

PhStruct.create(definition)

Cria uma nova PhStruct por definição: \"{ATTRIBUTE:TYPE;}\". Ex.: PhStruct.create (\"{id:word;type:byte;data:list}\");".

Parâmetros
  • definitionString contendo os tipos e atributos que serão usados pela PhStruct.
Retorno

Retorna uma referência para a nova instância da PhStruct ou invalid, em caso de erro.

Exemplo
function test() {
  var stTest = PhStruct.create(
    "{" +
      "  name {first : string; last : string};" +
      "  jobTitle {" +
      "             classe : string;" +
      "             date {" +
      "                    day   : word;" +
      "                    month : word;" +
      "                    year  : word" +
      "                  }" +
      "           };" +
      "  next : struct" +
      "}"
  );
}

get

PhStruct.get(struct, attribute)

Recupera o valor de um atributo da PhStruct.

Parâmetros
  • struct – Referência de uma variável do tipo PhStruct.
  • attribute – Nome do atributo.
Retorno

Retorna o valor específico da PhStruct em caso de sucesso ou invalid, em caso de falha.

Exemplo
function test () {
   var stTest = PhStruct.create (
     "{"                                       +
     "  name {first : string; last : string};" +
     "  jobTitle {"                            +
     "             classe : string;"           +
     "             date {"                     +
     "                    day   : word;"       +
     "                    month : word;"       +
     "                    year  : word"        +
     "                  }"                     +
     "           };"                           +
     "  next : struct"                         +
     "}");
 }

   var result = PhStruct.get(stTest, "name.first");
}

set

PhStruct.set(struct, attribute, value)

Atribui o valor de uma variável da PhStruct.

Parâmetros
  • struct – Referência de uma variável do tipo PhStruct.
  • attribute – Nome do atributo.
  • value – Valor do atributo.
Retorno

Retorna true se conseguir atribuir o valor, false, se não conseguir ou invalid, caso algum parâmetro esteja incorreto.

Exemplo
function test() {
  var result = false;
  var stTest = PhStruct.create(
    "{" +
      "  name {first : string; last : string};" +
      "  jobTitle {" +
      "             classe : string;" +
      "             date {" +
      "                    day   : word;" +
      "                    month : word;" +
      "                    year  : word" +
      "                  }" +
      "           };" +
      "  next : struct" +
      "}"
  );

  result =
    PhStruct.set(stTest, "name.first", "PrimeiroNome") &&
    PhStruct.set(stTest, "name.last", "UltimoNome") &&
    PhStruct.set(stTest, "jobTitle.date.day", "12") &&
    PhStruct.set(stTest, "jobTitle.date.month", "12") &&
    PhStruct.set(stTest, "jobTitle.date.year", "1900") &&
    PhStruct.set(stTest, "next", PhType.create("list"));

  return result;
}

getDefinition

PhStruct.getDefinition(struct)

Recupera a String de definição usada para a criação de uma PhStruct.

Parâmetros
  • struct – Referência de uma variável do tipo PhStruct;
Retorno

Retorna a String de definição ou uma String vazia.

Exemplo
function test () {
   var stTest = PhStruct.create (
     "{"                                       +
     "  name {first : string; last : string};" +
     "  jobTitle {"                            +
     "             classe : string;"           +
     "             date {"                     +
     "                    day   : word;"       +
     "                    month : word;"       +
     "                    year  : word"        +
     "                  }"                     +
     "           };"                           +
     "  next : struct"                         +
     "}");

   if (isvalid stTest)
   {
      Dialogs.alert(PhStruct.getDefinition(stTest));
   }

}

Saida:

 {
    name {first : string; last : string};
    jobTitle {
               classe : string;
               date {
                      day   : word;
                      month : word;
                      year  : word
                    }
             };
    next : struct
 }

define

PhStruct.define(definition, name)

Cria uma nova PhStruct baseado na String de definição passada e lhe atribui um nome.

Parâmetros
  • definitionString contendo os tipos e atributos que serão usados pela PhStruct.
  • nameString contendo o nome da PhStruct.
Retorno

Retorna true, em caso de sucesso ou false, em caso de erro.

Exemplo
function test() {
  var definition =
    "{" +
    "  name {first : string; last : string};" +
    "  jobTitle {" +
    "             classe : string;" +
    "             date {" +
    "                    day   : word;" +
    "                    month : word;" +
    "                    year  : word" +
    "                  }" +
    "           };" +
    "  next : struct" +
    "}";

  if (PhStruct.define(definition, "stTest")) {
    Dialogs.alert("Struct definida");
  }
}

Saida:

Struct definida

load

PhStruct.load(name)

Carrega uma PhStruct usando o nome de uma struct já criada.

Parâmetros
  • nameString contendo o nome PhStruct usado ao chamar a função PhStruct.define().
Retorno

Retorna uma referência para uma PhStruct ou invalid.

Exemplo
function test () {
   var definition =
     "{"                                       +
     "  name {first : string; last : string};" +
     "  jobTitle {"                            +
     "             classe : string;"           +
     "             date {"                     +
     "                    day   : word;"       +
     "                    month : word;"       +
     "                    year  : word"        +
     "                  }"                     +
     "           };"                           +
     "  next : struct"                         +
     "}";

     if (PhStruct.define(definition, "stTest"))
     {
        var stTest = PhStruct.load("stTest");

        if (isvalid stTest)
        {
           Dialogs.alert("Struct carregada");
        }
     }
}

Saida:

Struct carregada

undefine

PhStruct.undefine(name)

Remove a String de definição da PhStruct.

Parâmetros
  • nameString contendo o nome PhStruct usado ao chamar a função PhStruct.define().
Retorno

Retorna true, em caso de sucesso ou false, em caso de erro.

Exemplo
function test() {
  var definition =
    "{" +
    "  name {first : string; last : string};" +
    "  jobTitle {" +
    "             classe : string;" +
    "             date {" +
    "                    day   : word;" +
    "                    month : word;" +
    "                    year  : word" +
    "                  }" +
    "           };" +
    "  next : struct" +
    "}";

  if (PhStruct.define(definition, "stTest")) {
    if (PhStruct.undefine("stTest")) {
      Dialogs.alert("Definicao removida");
    }
  }
}

Saida:

Definicao removida

getAsPhType

PhStruct.getAsPhType(struct, attribute)

Retorna o valor de um atributo da PhStruct como Phtype.

Parâmetros
  • struct – Referência de uma variável do tipo PhStruct;
  • attribute – Nome do atributo.
Retorno

Retorna o valor do atributo específico da estrutura como um PhType ou invalid.

Exemplo
function test() {
  var stTest = PhStruct.create(
    "{" +
      "  name {first : string; last : string};" +
      "  jobTitle {" +
      "             classe : string;" +
      "             date {" +
      "                    day   : word;" +
      "                    month : word;" +
      "                    year  : word" +
      "                  }" +
      "           };" +
      "  next : struct" +
      "}"
  );

  PhStruct.set(stTest, "name.first", "PrimeiroNome");

  var value = PhStruct.getAsPhType(stTest, "name.first");

  Dialogs.alert("value: " + PhType.toString(value));
}

Saida:

PrimeiroNome

copy

PhStruct.copy(newStruct, oldStruct)

Faz uma cópia da PhStruct para uma nova referência.

Parâmetros
  • newStruct – Referência de uma nova variável do tipo PhStruct.
  • oldStruct – Referência da variável original do tipo PhStruct.
Retorno

Retorna true, em caso de sucesso ou false, em caso de erro.

Exemplo
function test() {
  var definition =
    "{" +
    "  name {first : string; last : string};" +
    "  jobTitle {" +
    "             classe : string;" +
    "             date {" +
    "                    day   : word;" +
    "                    month : word;" +
    "                    year  : word" +
    "                  }" +
    "           };" +
    "  next : struct" +
    "}";

  if (PhStruct.define(definition, "stTest")) {
    var newStruct = PhStruct.load("stTest");
    var oldStruct = PhStruct.load("stTest");

    PhStruct.set(oldStruct, "name.first", "PrimeiroNome");
    PhStruct.set(oldStruct, "name.last", "UltimoNome");

    if (PhStruct.copy(newStruct, oldStruct)) {
      Dialogs.alert("name: " + PhStruct.get(newStruct, "name.first"));
    }
  }
}

Saida:

PrimeiroNome

isStruct

PhStruct.isStruct(obj)

Verifica se o argumento recebido é um PhStruct.

Parâmetros
  • obj – Objeto a ser verificado.
Retorno

boolean o, true em caso o argumento recebido seja um PhStruct ou false caso contrário.

Exemplo
function test() {
  var stTest = PhStruct.create("");

  if (PhStruct.isStruct(stTest)) {
    Dialogs.alert("Struct criada!");
  }
}

Saida:

Struct criada!

PhBuffer

Classe responsável por manipular arrays de byte.

Sumário

Função Descrição
create Criar um buffer.
getSize Recupera o tamanho do buffer em bytes.
resize Redimensiona o tamanho do buffer.
get Recupera o valor de um elemento dentro do buffer.
set Ajusta o valor de um elemento dentro de um buffer.
copy Copia uma porção de um buffer passado para outro.
getAsBigEndian Rotina utilitária que interpreta uma porção do buffer como número no formato BigEndian veja: Endianness.
getAsLittleEndian Assim como getAsBigEndian porém no formato LittleEndian
getAsHexString Retorna uma string com notação hexadecimal representando o buffer.
getAsString Retorna o buffer como string.
equals Verifica se dois buffers tem o mesmo conteúdo.
isBuffer Verifica se o argumento recebido é um buffer.

create

PhBuffer.create(source)

Criar um buffer.

Parâmetros
  • sourceString com o conteúdo a ser preenchido no buffer ou inteiro indicando seu tamanho.
    Obs: Pode-se criar um buffer utilizando uma string com notação hexadecimal (0x0000..00). Neste caso, cada byte será representado como dois caracteres na string.
Retorno

Retorna invalid caso haja parâmetros não compativeis com a função, caso contrário, o PhBuffer criado

Exemplo
/**
 * Criar um buffer zerado com tamanho 8
 */
function getIV()
{
  var buffer = PhBuffer.create("0x0000000000000000");

  if (isvalid buffer)
  {
    Dialogs.alert("Buffer criado");
  }
}

Saida:

Buffer criado
/**
 *  Criar um buffer zerado com tamanho 10
 */
function newBuffer() {
  var buffer = PhBuffer.create(10);

  if (isvalid buffer)
  {
    Dialogs.alert("Buffer criado");
  }
}

Saida:

Buffer criado

getSize

PhBuffer.getSize(phbuffer)

Recuperar o tamanho do PhBuffer em bytes.

Parâmetros
  • phbuffer – Controlador para um PhBuffer
Retorno

Inteiro positivo com número de bytes alocados para o buffer. Caso o parâmetro de entrada não seja um PhBuffer o Método retornará invalid

Exemplo
/**
 * Criar um buffer e retornar o tamanho em bytes
 */
function getSize () {
  var buffer = PhBuffer.create("0xAA0000000000EFFF");

  Dialogs.alert("Buffer criado com tamanho: PhBuffer.getSize(buffer));
}

Saida:

Buffer criado com tamanho: 8

resize

PhBuffer.resize(phbuffer, size)

Redimensiona o PhBuffer passado para o novo tamanho indicado por size em bytes. Obs.: Caso o tamanho seja menor que o atual o conteúdo ao final do buffer será descartado.

Parâmetros
  • phbuffer – Controlador para um PhBuffer
  • size – Inteiro positivo com o novo tamanho em bytes
Retorno

boolean o, true em caso de sucesso ou false se não é possível alocar mais memória. Caso não seja possível utilizar os parâmetros invalid será retornado.

Exemplo
function test() {
  var buffer = PhBuffer.create("0xAA0000000000EFFF");

  if (PhBuffer.resize(buffer, 5)) {
    Dialogs.alert("Novo tamanho: " + PhBuffer.getSize(buffer));
  }
}

Saida:

Novo tamanho: 5

get

PhBuffer.get(phbuffer, index)

Recuperar o valor de um item do buffer

Parâmetros
  • phbuffer – Controlador para um PhBuffer
  • index – Inteiro com a posição desejada. Obs.: Veja regras para indices na WAP 194
Retorno

Inteiro com o valor do byte selecionado por index.

Exemplo
function test() {
  var buffer = PhBuffer.create("0xAA0000000000EFFF");

  Dialogs.alert("Valor: " + PhBuffer.get(buffer, 0));
}

Saida:

Valor: 170

set

PhBuffer.set(phbuffer, index, value)

Ajusta uma posição especifica do buffer com o valor desejado. Obs.: O valor será truncado para 8 bits

Parâmetros
  • param – Controlador para um PhBuffer
  • index – Inteiro com a posição desejada. Obs.: Veja regras para indices WAP 194
  • value – Valor a ser ajustado na posição indicada dentro do buffer
Retorno

boolean o, true em caso de sucesso ou false em caso de erro.

Exemplo
function test() {
  var buffer = PhBuffer.create(1);

  if (PhBuffer.set(buffer, 0, 10)) {
    Dialogs.alert("Valor: " + PhBuffer.get(buffer, 0));
  }
}

Saida:

Valor: 10

copy

PhBuffer.copy(src, srcPos, dest, destPos, length)

Copia parte de um PhBuffer para outro.

Parâmetros
  • src – Controlador para um PhBuffer com os bytes a serem copiados
  • srcPos – Posição para inicio da copia
  • dest – Controlador para um PhBuffer destino
  • destPos – Posição do local de destino
  • length – Tamanho total a ser copiado em bytes
Retorno

boolean, true em caso de sucesso ou false caso o destino não comporte a copia

Exemplo
function test() {
  var src = PhBuffer.create("0xAA0000EFFF");
  var dst = PhBuffer.create(5);

  PhBuffer.copy(src, 0, dst, 0, 5);

  var str = PhBuffer.getAsHexString(dst, 0, PhBuffer.getSize(dst));

  Dialogs.alert("valor destino: " + str);
}

getAsBigEndian

PhBuffer.getAsBigEndian(phbuffer, index, length)

Rotina utilitária que interpreta uma porção do buffer como número no formato BigEndian veja: Endianness.

Parâmetros
  • phbuffer – Controlador para um PhBuffer
  • index – Posiçao inicial para leitura
  • length – tamanho do inteiro (2 ou 4)
Retorno

Inteiro com o valor interpretado. Caso não seja possível utilizar os parâmetros invalid será retornado.

Exemplo
function getAsBigEndian() {
  var source = PhBuffer.create("0xAA00");
  Dialogs.alert("valor: " + PhBuffer.getAsBigEndian(source, 0, 2));
}

Saida:

Valor: 43520

getAsLittleEndian

PhBuffer.getAsLittleEndian(phbuffer, index, length)

Rotina utilitária que interpreta uma porção do buffer como número no formato LittleEndian veja: Endianness.

Parâmetros
  • phbuffer – Controlador para um PhBuffer
  • index – Posiçao inicial para leitura
  • length – tamanho do inteiro (2 ou 4)
Retorno

Inteiro com o valor interpretado. Caso não seja possível utilizar os parâmetros invalid será retornado.

Exemplo
function getAsLittleEndian() {
  var source = PhBuffer.create("0xAA00");
  Dialogs.alert(PhBuffer.getAsLittleEndian(source, 0, 2));
}

Saida:

Valor: 170

getAsHexString

PhBuffer.getAsHexString(phbuffer, index, length)

Retorna uma string com notação hexadecimal representando o buffer. Cada byte é convertido para dois chars em hexadecimal.

Parâmetros
  • phbuffer – Controlador para um PhBuffer
  • index – Posiçao inicial para leitura
  • length – tamanho a ser convertido
Retorno

Caso não seja possível utilizar os parâmetros invalid será retornado. ou a string em HEXADECIMAL que representa a porção do buffer selecionada Ex: "0xAA00"

function getAsBigEndian() {
  var buffer = PhBuffer.create(2);

  PhBuffer.set(buffer, 0, 255);
  PhBuffer.set(buffer, 1, 255);

  var size = PhBuffer.getSize(buffer);
  var hexStr = PhBuffer.getAsHexString(buffer, 0, size);

  Dialogs.alert("hexStr: " + hexStr);
}

Saida:

Valor: 0xffff

getAsString

PhBuffer.getAsString(buffer, position, length)

Método utilizado para recuperar uma porção do buffer com uma string

Parâmetros
  • phbuffer – Controlador para um PhBuffer
  • index – Posiçao inicial para leitura
  • length – tamanho a ser convertido
Retorno
Exemplo
function test() {
  var buffer = PhBuffer.create("0x54455354");

  var size = PhBuffer.getSize(buffer);
  Dialogs.alert("Valor: " + PhBuffer.getAsString(buffer, 0, size));
}

Saida:

Valor: TEST

equals

PhBuffer.equals(phbuffer1, phbuffer2)

Compara o conteúdo de dois PhBuffers

Parâmetros
  • phbuffer1 – Controlador para um PhBuffer
  • phbuffer2 – Controlador para um PhBuffer
Retorno

boolean o, true se forem iguais ou false caso contrário. Caso não seja possível utilizar os parâmetros invalid será retornado.

function test() {
  var buf1 = PhBuffer.create("TEST");
  var buf2 = PhBuffer.create("TEST1");

  Dialogs.alert("Equals: " + PhBuffer.equals(buf1, buf2));
}

Saida:

Equals: true

isBuffer

PhBuffer.isBuffer(obj)

Verifica se o argumento recebido é um PhBuffer.

Parâmetros
  • obj – Objeto a ser verificado.
Retorno

boolean o, true em caso o argumento recebido seja um PhBuffer ou false caso contrário.

Exemplo
function test() {
  var buffer = PhBuffer.create("");

  if (PhBuffer.isBuffer(buffer)) {
    Dialogs.alert("Buffer criado!");
  }
}

Saida:

Buffer criado!

PhType

Este módulo fornece funções para prover o acesso ao tipo PhType que pode assumir alguns tipos predefinidos.

Sumário de funções

Função Descrição
create Esta função cria um PhType de acordo com o tipo especificado no parâmetro. (Ver Lista de Tipos).
get Retorna o conteúdo armazenado no tipo passado como parâmetro.
set Atribui o valor passado a um PhType.
getValue Retorna o conteúdo armazenado em um PhType.
setValue Esta função armazena um valor em uma posição especifica do PhType.
reset Reseta o PhType para seu valor default.
size Retorna o tamanho do PhType.
dup Cria uma cópia do PhType.
equals Compara dois PhTypes.
assign Atribui o valor de um PhType de origem a um PhType destino.
resize Altera o tamanho de um PhType.
getType Retorna o tipo de um PhType.
toString Retorna a representação em string de um PhType.
count Retorna a quantidade elementos de um PhType. Este PhType deve ser baseado em listas.
getName (deprecated)
setAttribute Seta atributos em um tipo complexo (CRYPT, COMPRESSED..).
getAttribute Retorna um atributo de um tipo complexo.
isType Verifica se o argumento recebido é um PhType.

Lista de tipos

Tipos Descrição Valor padrão Valor mínimo Valor máximo
PhType.NONE Nenhum - - -
PhType.BYTE Tipo Byte 0 0 255
PhType.SBYTE Tipo Byte Sinalizado 0 -128 127
PhType.WORD Tipo Word 0 0 65.535
PhType.SWORD Tipo Word Sinalizado 0 -65.536 65.535
PhType.DWORD Tipo DWord 0 0 4.294.967.295
PhType.SDWORD Tipo DWord Sinalizado 0 -2.147.483.648 2.147.483.647
PhType.VARINT Tipo que armazena números inteiros e que altera o seu tamanho conforme o valor atribuído 0 0 4.294.967.295
PhType.STRING Tipo String "" 0 caracteres 255 caracteres
PhType.LONGSTRING Tipo String "" 0 caracteres 65.535 caracteres
PhType.BCDSTRING Tipo String no formato BCD "" 0 caracteres 255 caracteres
PhType.BOOLEAN Tipo lógico. (01 Byte) 0 para FALSE ou diferente de zero para TRUE false - -
PhType.MEMO Tipo memorando. Matriz de Strings [0] 0 strings 65.535 strings
PhType.LONGMEMO Tipo memorando. Matriz de LongStrings [0] 0 LongStrings 65.535 LongStrings
PhType.BLOB Vetor de bytes [0x0] 0 65.535
PhType.LONGBLOB Vetor de bytes [0x0] 0 4.294.967.295 posições
PhType.DATE Armazena um inteiro que representa uma data. 00/00/1980 01/01/1980 31/12/2107
PhType.TIME Armazena um inteiro que representa uma hora. 00:00:00 00:00:00 31:63:62
PhType.MONEY Tipo inteiro que representa um valor monetário 0 0 4.294.967.295
PhType.ARRAY Matriz bidimensional de qualquer tipo válido [0] 0 65.535 itens com 65.535 bytes
PhType.VARIANT Tipo variante (pode assumir qualquer tipo válido) null - -
PhType.BITS Vetor de bytes que armazena '1' (0x31) ou '0'(0x30) '' 0 65.535
PhType.ITEMARRAY Vetor de qualquer tipo válido [0] 0 65.535 itens
PhType.STRUCT Matriz de tipos variant [] 0 65.535 itens
PhType.BYTELIST Tipo baseado em lista para armazenar Bytes [] 0 65.535 itens
PhType.WORDLIST Tipo baseado em lista para armazenar Words [] 0 65.535 itens
PhType.DWORDLIST Tipo baseado em lista para armazenar DWords [] 0 65.535 itens
PhType.BOOLEANLIST Tipo baseado em lista para armazenar boolean s [] 0 65.535 itens
PhType.STRINGLIST Tipo baseado em lista para armazenar Strings [] 0 65.535 itens
PhType.LONGSTRINGLIST Tipo baseado em lista para armazenar LongStrings [] 0 65.535 itens
PhType.DATETIME Tipo complexo que armazena um tipo Date e um tipo Time 00/00/1980 00:00:00 00/00/1980 00:00:00 31:63:62 31/12/2107
PhType.BITMAP Tipo complexo utilizado para armazenar uma imagem - - -
PhType.CRYPT Tipo complexo que armazena uma informação criptografada - - -
PhType.COMPRESSED Tipo complexo que armazena um dado comprimido - - -
PhType.VERSION Tipo complexo que armazena uma versão com major, minor, patch e build 1.0.0.0 - -
PhType.TYPE_COUNT Contém a quantidade de tipos - - -

Atributos para os tipos Crypt

Atributo
CRYPT KEY
CRYPT METHOD
CRYPT INIT VECTOR
DATA
CRYPT METHOD NONE
CRYPT METHOD NOT
CRYPT METHOD XOR
CRYPT METHOD PC1
CRYPT METHOD DES
CRYPT METHOD 3DES

Atributos para os tipos Compressed

Atributo
COMPRESSED TYPE
COMPRESSED TYPE NONE
COMPRESSED TYPE ZLIB

create

PhType.create(type)

Esta função cria um PhType de acordo com o tipo especificado no parâmetro. (Ver Lista de Tipos).

Parâmetros
  • type – Atributo da classe ou string com o nome do tipo.
Retorno

Retorna o PhType criado ou invalid em caso de erro.

Exemplo
function exemploCreate() {
    var tipoA = PhTypeCreate(PhType.WORD);
    var tipoB = PhTypeCreate("byte");
    return = (isvalid tipoA && isvalid tipoB);
}

get

PhType.get(type)

Retorna o conteúdo armazenado no tipo passado como parâmetro.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
Retorno

O conteúdo armazenado no tipo, em caso de sucesso, ou invalid em caso de erro.

Exemplo
function exemploGet() {
  var result = 0;
  var esperado = 12345;
  var tipo = PhType.create("word");
  if (isvalid tipo)
  {
    if (isvalid PhType.set(tipo, 12345))
      result = PhType.get(tipo);
  }
  return (result == esperado);
}

set

PhType.set(type, value)

Atribui o valor passado a um PhType.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
  • value – Valor que se deseja atribuir ao tipo previamente criado.
Retorno

Em caso de sucesso retorna o valor que foi atribuído ao tipo. Em caso de erro, retorna invalid.

Exemplo
function exemploSet() {
  var result = 0;
  var esperado = 12345;
  var tipo = PhType.create("word");
  if (isvalid tipo)
    result = PhType.set(tipo, 12345);
  return (result == esperado);
}

getValue

PhType.getValue(type, idx)

Retorna o conteúdo armazenado em um PhType.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
  • idx – Posição do tipo de onde se deseja ler o conteúdo.
Retorno

Retorna a variável armazenada no 'type' e 'idx' passados.

Exemplo
function exemploGetValue(list, id) {
  var result = PhType.getValue(list, id);
  return result;
}

setValue

PhType.setValue(type, idx, value)

Esta função armazena um valor em uma posição especifica do PhType.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
  • idx – Posição do tipo de onde se deseja ler o conteúdo;
  • value – Valor a ser atribuído.
Retorno

Retorna um número inteiro em caso de êxito ou invalid em caso de erro.

Exemplo
function test(list, id, value) {
  var result = PhType.setValue(list, id, value);
  return result;
}

reset

PhType.reset(type)

Reseta o PhType para seu valor default.

Parâmetros
  • type – PhType previamente criado com a função PhType.create().
Exemplo
function exemploReset(type) {
  PhType.reset(type);
}

size

PhType.size(type)

Retorna o tamanho do PhType.

Parâmetros
  • type – PhType previamente criado com a função PhType.create().
Retorno

Retorna o tamanho do PhType passado.

Exemplo
function test() {
  var tByte = PhType.create(PhType.BYTE);
  var tWord = PhType.create(PhType.WORD);
  var tDWord = PhType.create(PhType.DWORD);

  Dialogs.alert("byte size:  " + PhType.size(tByte));
  Dialogs.alert("word size:  " + PhType.size(tWord));
  Dialogs.alert("dword size: " + PhType.size(tDWord));
}

Saida:

byte  size: 1
word  size: 2
dword size: 4

dup

PhType.dup(type)

Cria uma cópia do PhType.

Parâmetros
  • type – PhType previamente criado com a função PhType.create().
Retorno

Retorna um PhType com o mesmo tipo e valor do argumento recebido.

Exemplo
function ExemploDup(type) {
  var typeA = PhType.create(PhType.BYTE);
  var typeB = invalid;

  PhType.set(typeA, 100);

  Dialogs.alert("Tipo original: " + PhType.getType(typeA));
  Dialogs.alert("Valor original: " + PhType.get(typeA));

  typeB = PhType.dup(typeA);

  Dialogs.alert("Tipo da copia: " + PhType.getType(typeA));
  Dialogs.alert("Valor da copia: " + PhType.get(typeA));
}

Saida:

Tipo original: 1
Valor original: 100

Valor da copia: 1
Valor da copia: 100

equals

PhType.equals(type1, type2)

Compara o conteúdo de dois PhTypes.

Parâmetros
  • type1 – PhType previamente criado com a função PhType.create();
  • type2 – PhType previamente criado com a função PhType.create().
Retorno

Retorna um boolean com valor true em caso de sucesso e false em caso de erro.

Exemplo
function exemploEquals(type) {
  var tipoA = PhType.create(type);
  var tipoB = PhType.create(type);
  var result = false;

  PhType.set(tipoA, 100);
  PhType.set(tipoB, 100);

  result = PhType.equals(tipoA, tipoB);
}

assign

PhType.assign(type1, type2)

Atribui o valor de um PhType de origem a um PhType destino.

Parâmetros
  • type1 – PhType previamente criado com a função PhType.create();
  • type2 – PhType previamente criado com a função PhType.create().
Exemplo
function exemploAssign(type) {
  var tipoA = PhType.create(type);
  var tipoB = PhType.create(type);

  PhType.set(tipoA, 100);

  PhType.assign(tipoB, tipoA);
}

resize

PhType.resize(type, size)

Altera o tamanho de um PhType.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
  • size – Nova quantidade de bytes que o tipo passará a representar.
Exemplo
function exemploResize() {
  var strList = PhType.create(PhType.STRINGLIST);

  Dialogs.alert("Tamanho antes: " + PhType.count(strList));

  PhType.resize(strList, 5);

  Dialogs.alert("Tamanho depois: " + PhType.count(strList));
}

Saida:

Tamanho antes: 0
--

Tamanho depois: 5
--

getType

PhType.getType(type)

Retorna o tipo de um PhType.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
Retorno

Retorna um inteiro correspondente ao tipo passado como parâmetro ou invalid em caso de erro.

Exemplo
function test() {
  var tWord = PhType.create(PhType.WORD);

  if (PhType.getType(tWord) == PhType.WORD) {
    Dialogs.alert("Tipo word criado");
  } else {
    Dialogs.alert("Erro ao criar o PhType");
  }
}

Saida:

Tipo word criado

toString

PhType.toString(type)

Retorna a representação em string de um PhType.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
Retorno

Retorna uma string com o conteúdo armazenado no tipo previamente criado, ou invalid em caso de erro.

Exemplo
function exemploToString(type) {
  var tipo = PhType.create(type);
  PhType.set(tipo, 100);

  Dialogs.alert("Str type: " + PhType.toString(tipo));
}

Saida:

Str type: 100

count

PhType.count(type)

Retorna a quantidade elementos de um PhType. Este PhType deve ser baseado em listas.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
Retorno

Retorna a quantidade de elementos contidos no tipo passado como parâmetro, ou invalid em caso de erro.

Exemplo
function exemploCount() {
  var list = PhList.create();
  PhList.add(list, "item1");
  PhList.add(list, "item2");
  PhList.add(list, "item3");
  result = PhType.count(list);
}

getName (deprecated)

PhType.getName(type)

setAttribute

PhType.setAttribute(type, attribute, value)

Seta atributos em um tipo complexo (CRYPT, COMPRESSED..).

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
  • attribute – Um dos tipos descritos na tabela de tipos no início desta sessão;
  • value – Valor do novo aributo.
Retorno

Retorna um boolean em caso de sucesso e invalid em caso de falha.

Exemplo
function exemploSetAttribute(type) {
  var tipo = PhType.create(type);
  PhType.set(tipo, 100);
  var result = PhType.setAttribute(tipo, PhType.boolean, true);
}

getAttribute

PhType.getAttribute(type, attribute)

Retorna um atributo de um tipo complexo.

Parâmetros
  • type – PhType previamente criado com a função PhType.create();
  • attribute – Um dos tipos descritos na tabela de tipos no início desta sessão;
Retorno

Retorna um atributo de um tipo complexo, ou invalid caso haja falha.

Exemplo
function exemploGetAttribute(type) {
  var tipo = PhType.create(type);
  PhType.set(tipo, true);
  var result = PhType.getAttribute(tipo, PhType.boolean);
}

isType

PhType.isType(obj)

Verifica se o argumento recebido é um PhType.

Parâmetros
  • obj – Objeto a ser verificado.
Retorno

boolean o, true em caso o argumento recebido seja um PhType ou false caso contrário.

Exemplo
function test() {
  var tp = PhType.create(PhType.BYTE);

  if (PhType.isType(tp)) {
    Dialogs.alert("PhType criado!");
  }
}

typeof

Retorna um inteiro representando o tipo do dado do valor passado ao typeof

Constantes

Inteiro Descrição
0 Indica que a variavel é do tipo inteiro.
1 Indica que a variabel é do tipo float.
2 Indica que a variabel é do tipo String.
3 Indica que a variabel é do tipo boolean (true/false).
4 Indica que a variabel é invalid.
5 Indica que a variabel é do tipo ponteiro.
6 Indica que a variabel é uma estrutura.

Exemplos

Valor do tipo ponteiro

    var i = 10;
    Dialogs.alert(typeof &i);
    i = PhList.create();
    Dialogs.alert(typeof i);

Saida

5
6

Dispositivos

A biblioteca Devices disponibiliza interfaces para a manipulação dos dispositivos do terminal.

Sumário

Dispositivo Descrição
Device Interface padrão para operações em devices
Eth Interface para uso do Ethernet
Wifi Interface para uso do Wifi
Gprs Interface para uso do GPRS
Gsm Interface para uso do GSM
Wless Interface para uso do Wless
Modem Interface para uso do Modem
Serial Interface para uso do Serial
Usb Interface para uso do Usb
Nfc Interface para uso do NFC
Printer Interface para uso da Impressora
Touch Interface para uso do Touch

Dev

package://libs#dev/dev.wmlsc

O módulo Dev define funções de uso comum a todos os dispositivos.

Sumário

Função Descrição
connect Conectar dispositivo criado
connected Validar se o dispositivo está conectado
createStream Criar um stream genérico para o dispositivo
detectConnection Habilita o processamento da conexão TLS não blocante.
disconnect Desconectar dispositivo
getError Recuperar último erro ocorrido
getInfo Recuperar informações/configurações do dispositivo
getNativeError Recuperar último erro ocorrido na API do dispositivo do terminal
hasSupport Informa se o terminal suporta um determinado tipo de dispositivo
isDev Verifica se a instância é um Device.
waitDataLink Aguarda a conexão da camada física do dispositivo

Códigos de erro

Constantes Descrição
Device#AUTH_ERROR Erro de autenticação
Device#AUTHENTICATION_ERROR Erro de autenticação
Device#BATTERY_LOW A bateria do terminal está baixa
Device#BUSY_MODEM_ERROR Modem ocupado
Device#CANT_ATTACH_ERROR Falha ao estabelecer a conexão
Device#CONNECT_ERROR Falha ao conectar
Device#NO_ANSWER_ERROR Sem resposta do número discado
Device#NO_CABLE_ERROR Sem cabo de rede
Device#NO_CARRIER_ERROR Conexão abortada pela outra ponta do canal de comunicação
Device#NO_CHIP_ERROR Chip de comunicação ausente
Device#NO_CHIP_CONNECTION_ERROR Falha ao estabelecer a conexão utilizando chip
Device#NO_DIAL_TONE_ERROR Não foi capaz detectar tom de discagem na linha conectada ao terminal
Device#NO_ETH_CONNECTION_ERROR Falha ao estabelecer a conexão utilizando Ethernet
Device#NO_MODEM_ERROR Modem ausente
Device#SUCCESS Sucesso
Device#TIMEOUT Esgotado tempo de espera
Device#UNKNOWN_ERROR Erro desconhecido
Device#USER_ABORT Cancelamento pelo operador

Informações do dispositivo

Constante Descrição
Device#FIELD_LOCAL_IP Endereço IP atribuido ao equipamento local representado como DWord
Device#FIELD_NAME Nome do dispositivo
Device#FIELD_TYPE Tipo do dispositivo (ver seção Tipos de Dispositivos)

Tipos de dispositivos

Constante Descrição
Device#TYPE_ETH Ethernet
Device#TYPE_MDM Modem
Device#TYPE_NFC NFC
Device#TYPE_PRINTER Impressora
Device#TYPE_SERIAL Serial (RS232)
Device#TYPE_TOUCH Touch
Device#TYPE_USB USB
Device#TYPE_WIFI WIFI
Device#TYPE_WLESS Wireless Interno (GPRS/GSM)

connect

Device#connect(dev)

Conectar dispositivo criado

Parâmetros
  • dev - Instância de um dispositivo
Retorno

invalid ou boolean indicado se houve sucesso na operação

Exemplo:

use url Device  "package://libs#dev/dev.wmlsc";
use url Printer "package://libs#dev/printer.wmlsc";

function test ()
{
  var dev = Printer#create("");

  if (Device#connect(dev))
  {
    Dialogs.alert("Dispositivo conectado!");
  }
}

Saida:

Dispositivo conectado!

connected

Device#connected(dev)

Validar se o dispositivo está conectado.

Parâmetros
  • dev - Instância de um dispositivo.
Retorno

invalid ou boolean indicando se o dispositivo está conectado ou se está desconectado.

Exemplo:

use url Device  "package://libs#dev/dev.wmlsc";
use url Printer "package://libs#dev/printer.wmlsc";

function test ()
{
  var dev = Printer#create("");

  Device#connect(dev);
  if(Device#connected(dev))
  {
    Dialogs.alert("Dispositivo conectado!");
  }
}

Saida:

Dispositivo conectado!

createStream

Device#createStream(dev)

Criar um stream genérico para o dispositivo.

Parâmetros
  • dev - Instância de um dispositivo conectado;
Retorno

invalid ou stream.

Exemplo:

use url Eth     "package://libs#dev/eth.wmlsc";
use url Device  "package://libs#dev/dev.wmlsc";
use url USB     "package://libs#dev/usb.wmlsc";
use url Stream  "package://vm#stream/stream.wmlsc";

function test ()
{
  var usb    = USB#create("");
  var stream = Device#createStream(usb);

  if(Device#connect(usb))
  {
     var buffer = PhBuffer.create("Teste de Comunicacao");
     var wrote = Stream#write(stream, buffer, 0, PhBuffer.getSize
      (buffer));

     if (wrote >= 0)
     {
       Dialogs.alert("Bytes escritos no stream: " + wrote);
     }
     else
     {
       Dialogs.alert("Erro ao escrever no stream: " + wrote);
     }
  }
}

Saida:

Bytes escritos no stream: 10

detectConnection

Device#detectConnection(check)

Habilita o processamento da conexão TLS não blocante. Quando habilitada, a cada pressionamento de tecla no terminal, será verificado se a conexão não blocante foi estabelecida.

Parâmetros
  • type - [in] check - booleano indicando se habilita ou desabilita a verificação;

disconnect

Device#disconnect(dev)

Desconectar o dispositivo.

Parâmetros
  • dev - Instância de um dispositivo conectado.
Retorno

invalid ou boolean indicado se houve sucesso na operação.

Exemplo:

use url Device  "package://libs#dev/dev.wmlsc";
use url Printer "package://libs#dev/printer.wmlsc";

function test ()
{
  var dev = Printer#create("");

  if (Device#connect(dev))
  {
    Dialogs.alert("Dispositivo conectado!");
  }
  if(Device#disconnect(dev))
  {
    Dialogs.alert("Dispositivo desconectado!");
  }
}

Saida:

Dispositivo desconectado!

getError

Device#getError(dev)

Recuperar último erro ocorrido.

Parâmetros
  • dev - Instância de um dispositivo conectado;
Retorno

invalid ou código de erro (ver seção Códigos de Erro).

Exemplo:

use url Device  "package://libs#dev/dev.wmlsc";
use url Eth    "package://libs#dev/eth.wmlsc";

function test ()
{
  var eth = Eth#create("");
  if(!Device#connect(eth))
  {
    if (Device#getError(eth) == Device#NO_CABLE_ERROR())
    {
      Dialogs.alert("Erro: Sem cabo de rede");
    }
  }
}

Saida:

Erro: Sem cabo de rede

getInfo

Device#getInfo(dev, infoName)

Recuperar informações/configurações do dispositivo.

Parâmetros
  • dev - Instância de um dispositivo conectado;
  • infoName - Informação que se deseja recuperar (ver seção Informações do dispositivo);
Retorno

invalid ou PhType.VARIANT com o valor desejado.

Exemplo:

use url Device  "package://libs#dev/dev.wmlsc";
use url Printer "package://libs#dev/printer.wmlsc";

function test ()
{
  var dev = Printer#create("");
  if (Device#connect(dev))
  {
    var devType = Device#getInfo(dev, Device#FIELD_TYPE());
    if(devType == Device#TYPE_PRINTER())
    {
      var width;
      width = Device#getInfo(dev, Printer#FIELD_PRINT_WIDTH());
      Dialogs.alert("Largura da impressora: " + width);
    }
  }
}

Saida:

Largura da impressora: 40

getNativeError

Device#getNativeError(dev)

Recuperar último erro ocorrido na API do dispositivo do terminal.

Parâmetros
  • dev - Instância de um dispositivo conectado;
Retorno

invalid ou código de erro (ver seção Códigos de Erro).


Exemplo:
use url Device "package://libs#dev/dev.wmlsc";
use url GPRS   "package://libs#dev/gprs.wmlsc";

function test ()
{
  var usb    = USB#create("");
  var stream = Device#createStream(usb);

  if(Device#connect(usb))
  {
     var cfg = createConfig(1, "oprApn.br", "oprName", "oprPwd","0101", true);
     var dev = GPRS#create(cfg);
     if(Device#connect(dev))
     {
       Dialogs.alert("Dispositivo conectado");
     }
     else
     {
       var error = String.toString(Device#getNativeError(dev));
       Dialogs.alert ("Erro Gprs: "  + error);
     }
   }
function createConfig(id, apn, usr, pwd, pin, keep)
{
  var config = PhStruct.create(
               "{" +
                  "id:byte;" +
                  "cid:byte;" +
                  "apn:crypt;" +
                  "usr:crypt;" +
                  "pwd:crypt;" +
                  "pin:crypt;" +
                  "knw:boolean;" +
                "}");

  PhStruct.set(config, "id", id);
  PhStruct.set(config, "cid", 1);

  cryptCfg(PhStruct.get(config, "apn"), PhType.
   CRYPT_METHOD_NONE);
  cryptCfg(PhStruct.get(config, "usr"), PhType.
   CRYPT_METHOD_NONE);
  cryptCfg(PhStruct.get(config, "pwd"), PhType.
   CRYPT_METHOD_NONE);
  cryptCfg(PhStruct.get(config, "pin"), PhType.
   CRYPT_METHOD_NONE);

  PhStruct.set(config, "apn", apn);
  PhStruct.set(config, "usr", usr);
  PhStruct.set(config, "pwd", pwd);
  PhStruct.set(config, "pin", pin);
  PhStruct.set(config, "knw", keep);

  return config;
}

function cryptCfg(crypt, cryptMethod)
{
 var result = false;

if (PhType.getType(crypt) == PhType.CRYPT)
   result = PhType.setAttribute(crypt, PhType.CRYPT_METHOD,
    cryptMethod);

return result;
}

Saida:

Dispositivo conectado.

hasSupport

Device#hasSupport(type)

Informa se o terminal suporta um determinado tipo de dispositivo.

Parâmetros
  • type - [in] Inteiro com o ID do dispositivo;
Retorno

true caso o dispositivo esteja ativo (funcional).

Exemplo:

use url Device  "package://libs#dev/dev.wmlsc";
use url Eth     "package://libs#dev/eth.wmlsc";

function test ()
{
  var wifi = Device#TYPE_WIFI();
  Dialogs.alert("Inteiro que | corresponde a conexão |Wifi: "+wifi);
  if (Device#hasSupport(wifi))
  {
    Dialogs.alert("Este terminal possui suporte a Wifi");
  }
}

Saida:

Inteiro que corresponde a conexão Wifi: 18

Este terminal possui suporte a Wifi.

isDev

Device#isDev(dev)

Verifica se a instância é um Device.

Parâmetros
  • dev - Instância de um dispositivo conectado
Retorno

true se for um Device e false caso contrário.

Exemplo:
use url Device "package://libs#dev/dev.wmlsc";
use url USB    "package://libs#dev/usb.wmlsc";

function configUsb()
{
  var config = PhStruct.create(
  "{"                    +
    "baudrate : sdword;" +
    "parity   : byte;"   +
    "databits : byte;"   +
    "stopbit  : byte,"   +
    "start    : dword;"  +
    "middle   : dword "  +
  "}");
  PhStruct.set(config, "baudrate", 57600);
  PhStruct.set(config, "parity"  , 1);
  PhStruct.set(config, "databits", 7);
  PhStruct.set(config, "stopbit" , 2);
  PhStruct.set(config, "start"   , 1000);
  PhStruct.set(config, "middle"  , 1000);
  return config;
}
function test()
{
  var usb = USB#create(configUsb());
  if(Device#isDev(usb))
  {
     Dialogs.alert("A instancia pertence a um dispositivo");
  }
  else
  {
     Dialogs.alert("A instancia nao |pertence a um dispositivo");
  }
}

Saida:

A instancia pertence a um dispositivo.

Device#waitDataLink(dev, bloking)

Aguarda a conexão da camada física do dispositivo.

Parâmetros
  • dev - Instância de um dispositivo conectado;
  • blocking - Boolean identificando se é blocante ou não.
Retorno

invalid ou boolean indicado se houve sucesso na operação.

Exemplo
use url Device "package://libs#dev/dev.wmlsc";
use url GPRS   "package://libs#dev/gprs.wmlsc";

function test ()
{
  var cfg = createConfig(1, "oprApn.br", "oprName", "oprPwd","0101", true);
  var dev = GPRS#create(cfg);
  if (Device#connect(dev))
  {
    if (Device#waitDataLink(dev, false))
    {
      Dialogs.alert("Datalink conectado");
    }
  }
}

Saida:

Datalink conectado

Eth

package://libs#dev/eth.wmlsc

Interface para uso do dispositivo Ethernet.

Sumário

Função Descrição
create Criar uma instância do device Ethernet

Informações do Ethernet

Constantes Descrição
Eth#FIELD_TYPE Recupera se a configuração do IP é manual (1) ou DHCP (2)
Eth#FIELD_GATEWAY Recupera o gateway configurado
Eth#FIELD_NETMASK Recupera a mascara de rede configurada
Eth#FIELD_RESTART_AFTER_CONFIG Indica se é preciso reiniciar o terminal após a configuração

create

Eth#create(config)

Criar uma instância do device Ethernet

Parâmetros
  • config String vazia ("") para utilizar configuração padrão/anterior ou PhStruct defido como:
"{" +
"ipLocal       : dword;" + // Se for zero usara DHCP
  "netmask       : dword;" +
  "gateway       : dword;" +
  "}";
Retorno

invalid ou dispositivo Ethernet criado.

Exemplo
use url Eth    "package://libs#dev/eth.wmlsc";
use url Device "package://libs#dev/dev.wmlsc";


function test ()
{
  var eth = Eth#create("");

  if(Device#isDev(eth))
  {
    Dialogs.alert("Dispositivo Ethernet criado.");
  }
}

Saida:

Dispositivo Ethernet criado

Wifi

package://libs#dev/wifi.wmlsc

Interface para uso do dispositivo Wifi.

Sumário

Função Descrição
create Criar device Wifi
setIPConfig Responsável por configurar o IP do dispositivo Wifi
getIPConfig Responsável por carregar as configurações de IP do dispositivo Wifi

Tipos de Rede Wifi

Constantes Descrição
Wifi#TYPE_INFRA O dispositivo será conectado a um ponto de acesso
Wifi#TYPE_ADHOC O dispositivo será conectado diretamente a outro dispositivo Wifi.

Tipos de Autenticação Wifi

Constantes Descrição
Wifi#AUTH_NONE Nenhuma autenticação
Wifi#AUTH_WEP Autenticação WEP
Wifi#AUTH_WPA_PSK Autenticação WPA_PSK
Wifi#AUTH_WPA_EAP Autenticação WPA_EAP
Wifi#AUTH_WPA2_PSK Autenticação WPA2_PSK
Wifi#AUTH_WPA2_EAP Autenticação WPA2_EAP

Tipos de Encriptação para Rede Wifi

Constantes Descrição
Wifi#CRYPT_NONE Nenhuma encriptação
Wifi#CRYPT_WEP Encriptação WEP
Wifi#CRYPT_TKIP Encriptação TKIP
Wifi#CRYPT_WEP128 Encriptação WEP128
Wifi#CRYPT_AES_CCM Encriptação AES_CCM
Wifi#CRYPT_WEPX Encriptação AES_CCM

Modos de configuração IP

Constantes Descrição
Wifi#IP_DHCP IP definido automaticamente
Wifi#IP_ESTATICO IP definido manualmente

create

Wifi#create(config)

Criar device Wifi

Parâmetros
  • config PhStruct com a estrutura:
"{";
"type:word;" + //Tipo da conexao (TYPE_INFRA ou TYPE_ADHOC)
"ssid:string;" + //Nome da rede
"auth:word;" + //Tipo de autenticacao
"sec:word;" + //Tipo de encriptacao
"pwd:crypt;" + //Senha da Rede
"bk:boolean;" + //Indica se a conexao sera blocante
"knw:boolean;" + //Manter rede ativa (keep network alive)
"timeout:dword" + //Tempo de espera
"fb:string;" /* path para o script que implementa a funcao
                        feedback, que sera chamada por callback
                        para informar o progresso do
                        estabelecimento da conexao Wifi. */ +
  "}";

onde fb é o path do script que implementa a função feedback, que será chamada por callback para informar o progresso do estabelecimento da conexão Wifi.

Retorno

invalid ou dispositivo Wifi criado.

setIPConfig

Wifi#setIPConfig(device, config)

Responsável por configurar o IP do dispositivo Wifi

Parâmetros
  • device Instância de um dipositivo Wifi
  • config PhStruct no formato:
"{" +
"type:word;" + //Tipo da configuracao IP (IP_DHCP ou IP_ESTATICO)
"ip:dword;" + //IP representado como DWord
"netmask:dword;" + //Mascara da rede
"gateway:dword" + //Gateway da rede
  "}";
Retorno

boolean indicando se a configuração foi realizada e invalid em caso de erro

getIPConfig

Wifi#getIPConfig(device)

Responsável por carregar as configurações de IP do dispositivo Wifi

Parâmetros
  • device Instância de um dipositivo Wifi
Retorno

PhStruct no formato:

"{" +
"type:word;" + //Tipo da configuracao IP (IP_DHCP ou IP_ESTATICO)
"ip:dword;" + //IP representado como DWord
"netmask:dword;" + //Mascara da rede
"gateway:dword" + //Gateway da rede
  "}";
Exemplo
use url CommUtil "package://devices#dev/comm_util.wmlsc";
use url Device   "package://libs#dev/dev.wmlsc";
use url Menu     "package://tefui#ui/menu.wmlsc";
use url Input    "package://phui#input/input.wmlsc";
use url Wifi     "package://libs#dev/wifi.wmlsc";
use url Message  "package://tefui#ui/message.wmlsc";

function test ()
{
 var result = false;
 var config  = PhStruct.create("{type:word; ssid:string; auth:word; sec:word; pwd:crypt; bk:boolean; knw:boolean; fb:string; timeout:dword}");

 PhStruct.set(config, "fb", "package://tefui#ui/processing.wmlsc");
 PhStruct.set(config, "knw",     true);

 var wifi = Wifi#create(config);

 var networks = Wifi#availableNetworks(wifi, true, false, invalid);

 var network = selectNetwork(networks);

 if (isvalid network)
 {
   var type = PhType.getValue(PhType.getValue(network[0], 0), 0);
   var ssid = PhType.getValue(PhType.getValue(network[1], 0), 0);
   var auth = PhType.getValue(PhType.getValue(network[2], 0), 0);
   var pwd  = "";
   var sec  = PhType.getValue(PhType.getValue(network[3], 0), 0);

   var input = Input#inputString("Senha:", invalid, &pwd, invalid, 1, 255,
   (Input#CHAR_ALFA()), String.getValue('.'), true);

   if (input == Input#INPUT_OK())
   {
     PhStruct.set(config, "type",    type);
     PhStruct.set(config, "ssid",    ssid);
     PhStruct.set(config, "auth",    auth);
     PhStruct.set(config, "sec",     sec);
     PhStruct.set(config, "pwd",     pwd);
     PhStruct.set(config, "bk",      true);
     PhStruct.set(config, "timeout", 30000);

     wifi = Wifi#create(config);

     if (Device#connect(wifi))
     {
       Message#showMessage("Conectado a " + ssid, Message#DELAY_MESSAGE(), Message#BEEP_MESSAGE());
       result = CommUtil#socketConnect();
     }
     else
     {
       Message#showMessage("Falha ao conectar", Message#DELAY_ERROR(), Message#BEEP_ERROR());
     }
   }
 }

 return result;
}

function selectNetwork(networks)
{
 var network = invalid;

 var count  = PhType.count(networks);
 var items  = [];

 for(var idx = 0; idx < count; idx++)
 {
   var temp = PhType.getValue(PhType.getValue(networks, idx),0);

   PhList.add(items, PhType.toString(PhType.getValue(temp, 1)));
 }

 var selected  = Menu#showMenu("Selecione uma Rede: ", [items, 0], false, false);

 if(isvalid selected)
 {
   network = PhType.get(PhType.getValue(PhType.getValue(networks, selected),0));
 }

 return network;
}

Saida:

Menu com redes disponíveis

MngrWifi

package://phast#config/mngr_wifi.wmlsc

Funções para persistencia de redes wifis locais

Sumário

Função Descrição
availableNetworks Esta função é responsável por pesquisar as redes Wifi disponiveis
saveNetwork Esta função é responsável adicionar uma nova rede Wifi
savedNetworks Esta função é responsável por listar os (Redes Wifi) que foram configuradas pelo terminal
forgetNetwork Esta função é responsável remover um profile(Rede Wifi) o mais conhecido por esquecer de uma rede Wifi

availableNetworks

MngrWifi#availableNetworks()

Esta função é responsável por pesquisar as redes Wifi disponiveis

Parâmetros

Não há

Retorno

PhType.STRUCT com as informações das redes localizadas

saveNetwork

Wifi#saveNetwork(config)

Esta função é responsável adicionar uma nova rede Wifi

Parâmetros
  • config PhStruct no formato "{ssid:string}".
Retorno

true se a rede foi salva com sucesso ou false se houve erro na gravação dos dados

savedNetworks

MngrWifi#savedNetworks ()

Esta função é responsável por listar os (Redes Wifi) que foram configuradas pelo terminal

Parâmetros
  • Não há
Retorno

PhType.STRUCT com as informações das redes salvas

forgetNetwork

MngrWifi#forgetNetwork(id)

Esta função é responsável remover um profile (esquecer rede Wifi).

Parâmetros
  • id Id da rede (indice do profile. Ver Wifi#savedNetworks).
Retorno

true em caso sucesso e false em caso de erro

Gprs

package://libs#dev/gprs.wmlsc

Interface para uso do dispositivo Gprs.

Sumário

Função Descrição
create Criar uma instância do device Gprs

create

Gprs#create(config)

Criar uma instância do device Gprs

Parâmetros
  • config PhStruct defido como:
"{" +
"id  : byte;" + //Id do dispositivo
"cid : byte;" + //Id da conexao
"apn : crypt;" + //APN da operadora do SIM card
"usr : crypt;" + //Nome do usuario do SIM card
"pwd : crypt;" + //Senha do SIM usuario do SIM card
"pin : crypt;" + //PIN do SIM card
"knw : boolean;" + //Manter conexao de rede (Keep alive)
"}";
Retorno

invalid ou dispositivo Gprs criado.

Exemplo
use url Device "package://libs#dev/dev.wmlsc";
use url GPRS   "package://libs#dev/gprs.wmlsc";

function test ()
{
 var cfg = createConfig(1, "oprApn.br", "oprName", "oprPwd","0101", true);
 var dev = GPRS#create(cfg);

 if(Device#isDev(dev))
 {
   if (Device#connect(dev))
   {
     Dialogs.alert("Dispositivo Gprs conectado");
   }
 }

}


function createConfig(id, apn, usr, pwd, pin, keep)
{
  var config = PhStruct.create(
               "{" +
                  "id:byte;" +
                  "cid:byte;" +
                  "apn:crypt;" +
                  "usr:crypt;" +
                  "pwd:crypt;" +
                  "pin:crypt;" +
                  "knw:boolean;" +
                "}");

  PhStruct.set(config, "id", id);
  PhStruct.set(config, "cid", 1);

  cryptCfg(PhStruct.get(config, "apn"), PhType.CRYPT_METHOD_NONE);
  cryptCfg(PhStruct.get(config, "usr"), PhType.CRYPT_METHOD_NONE);
  cryptCfg(PhStruct.get(config, "pwd"), PhType.CRYPT_METHOD_NONE);
  cryptCfg(PhStruct.get(config, "pin"), PhType.CRYPT_METHOD_NONE);

  PhStruct.set(config, "apn", apn);
  PhStruct.set(config, "usr", usr);
  PhStruct.set(config, "pwd", pwd);
  PhStruct.set(config, "pin", pin);
  PhStruct.set(config, "knw", keep);

  return config;
}

function cryptCfg(crypt, cryptMethod)
{
 var result = false;

 if (PhType.getType(crypt) == PhType.CRYPT)
   result = PhType.setAttribute(crypt, PhType.CRYPT_METHOD, cryptMethod);

 return result;
}

Saida:

Dispositivo Gprs criado

Gsm

package://libs#dev/gsm.wmlsc

Interface para uso do dispositivo Gsm.

Sumário

Função Descrição
create Criar uma instância do device Gsm

create

Gsm#create(config)

Criar uma instância do device Gsm

Parâmetros
  • config PhStruct definido como:
"{" +
  "modemProto   : byte;" +
  "mode         : byte;" +
  "phone        : crypt;" +
  "usr          : crypt;" +
  "pwd          : crypt;" +
  "}";
Retorno

invalid ou dispositivo Gsm criado.

Exemplos
use url Device "package://libs#dev/dev.wmlsc";
use url Gsm   "package://libs#dev/gsm.wmlsc";

function test ()
{
 var cfg = createConfig(2, 0, "oprName", "18987898","usr", "123");
 var dev = Gsm#create(cfg);

 if(Device#isDev(dev))
 {
   if (Device#connect(dev))
   {
     Dialogs.alert("Dispositivo Gsm conectado");
   }
 }

}


function createConfig(modemProto, mode, phone, usr, pwd)
{
  var config = PhStruct.create(
  "{"                       +
    "modemProto   : byte;"  +
    "mode         : byte;"  +
    "phone        : crypt;" +
    "usr          : crypt;" +
    "pwd          : crypt;" +
 "}");

  PhStruct.set(config, "modemProto", modemProto);
  PhStruct.set(config, "mode", mode);

  cryptCfg(PhStruct.get(config, "phone"), PhType.CRYPT_METHOD_NONE);
  cryptCfg(PhStruct.get(config, "usr"), PhType.CRYPT_METHOD_NONE);
  cryptCfg(PhStruct.get(config, "pwd"), PhType.CRYPT_METHOD_NONE);

  PhStruct.set(config, "phone", phone);
  PhStruct.set(config, "usr", usr);
  PhStruct.set(config, "pwd", pwd);

  return config;
}

function cryptCfg(crypt, cryptMethod)
{
 var result = false;

 if (PhType.getType(crypt) == PhType.CRYPT)
   result = PhType.setAttribute(crypt, PhType.CRYPT_METHOD, cryptMethod);

 return result;
}

Saida:

Dispositivo Gsm criado

Wless

package://libs#dev/wless.wmlsc

Implementa funcionalidades comuns ao GPRS e GSM.

Informações do WLess

Constantes Descrição
Wless#FIELD_SIGNAL_LEVEL Nivel de sinal do Modem Wireless
Wless#FIELD_NOISE_LEVEL Nivel de ruído
Wless#FIELD_OPER_NAME Nome da operadora em uso
Wless#FIELD_SIM_CARD_SERIAL Número serial do SIM card em uso
Wless#FIELD_OPER_ID ID do SIM card em uso
Wless#FIELD_SIM_CARD_NUMBER Número do SIM card em uso
Wless#FIELD_MODE Modo de conexão (GSM ou GPRS)
Wless#FIELD_GEOLOCAL Geolocalizacao
Wless#FIELD_EXTENDED_ERROR Erro estendido
Wless#FIELD_APN APN da operadora em uso
Exemplos
use url Device "package://libs#dev/dev.wmlsc";
use url GPRS   "package://libs#dev/gprs.wmlsc";
use url Wless "package://libs#dev/wless.wmlsc";

function test ()
{
 var cfg = createConfig(1, "oprApn.br", "oprName", "oprPwd","0101", true);
 var dev = GPRS#create(cfg);

 if(Device#isDev(dev))
 {
   if (Device#connect(dev))
   {
     Dialogs.alert("Dispositivo Gprs conectado");
     Dialogs.alert("Sinal: " + Device#getInfo(Wless#FIELD_SIGNAL_LEVEL()));
   }
 }

}

Saida:

Dispositivo Gprs conectado
Sinal: 70

Serial

package://libs#dev/serial.wmlsc

Interface para uso do dispositivo Serial.

Sumário

Função Descrição
create Criar uma instância do device Serial

create

Serial#create(config)

Criar uma instância do device Serial

Parâmetros
  • config PhStruct definido como:
"{" +
"porta    : byte;" + // Porta COM a ser utilizada
"baudrate : sdword;" /* Taxa de transmissao dos dados.
                              Velocidades possiveis :
                              50, 75, 110, 300, 600, 1200,
                              2400, 4800, 9600, 19200, 38400,
                              57600, 93750, 115200, 187500 */ +
"parity   : byte;" /* Paridade. Valores possiveis :
                              None (0), Impar(1), Par(2) */ +
"databits : byte;" /* Numero de bits de dados.
                              Valores possiveis: 7 e 8. */ +
"stopbit  : byte," /* Bit de parada. Valores possiveis:
                              1 -> 1, 2 -> 2, 5 -> 1.5 */ +
"start    : dword;" + // Timeout para inicio da recepcao
"middle   : dword " + // Timeout entre a recepcao de bytes
  "}";
Retorno

invalid ou dispositivo Serial criado.

Exemplos
use url Device "package://libs#dev/dev.wmlsc";
use url Serial   "package://libs#dev/serial.wmlsc";

function test ()
{

  var config = PhStruct.create(
  "{"                    +
    "porta    : byte;"   +
    "baudrate : sdword;" +
    "parity   : byte;"   +
    "databits : byte;"   +
    "stopbit  : byte,"   +
    "start    : dword;"  +
    "middle   : dword "  +
  "}");

  PhStruct.set(config, "porta"   , 0);
  PhStruct.set(config, "baudrate", 9600);
  PhStruct.set(config, "parity"  , 0);
  PhStruct.set(config, "databits", 8);
  PhStruct.set(config, "stopbit" , 1);
  PhStruct.set(config, "start"   , 5000);
  PhStruct.set(config, "middle"  , 500);

  var serial = Serial#create(config);

  if(Device#isDev(serial))
  {
     Dialogs.alert("Dispositivo Serial criado");
  }
}

Saida:

Dispositivo Serial criado

Usb

package://libs#dev/usb.wmlsc

Interface para uso do dispositivo Usb.

Informações do Usb

Constantes Descrição
Usb#FIELD_BAUDRATE Largura de banda do Usb (50, 75, 110, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 e 115200.)
Usb#FIELD_PARITY Paridade (0 - None, 1 - Odd, 2 - Even)
Usb#FIELD_DATABITS Quantidade de bits para dados (0, 7, 8)
Usb#FIELD_STOPBIT Quantidade de bits de parada ( 1, 2, 5 (1.5) )

Sumário

Função Descrição
create Criar uma instância do device Usb

create

Usb#create(config)

Criar uma instância do device Usb

Parâmetros
  • config PhStruct definido como:
"{" +
"baudrate : sdword;" /* Taxa de transmissao dos dados.
                              Velocidades possiveis :
                              50, 75, 110, 300, 600, 1200,
                              2400, 4800, 9600, 19200, 38400,
                              57600, 93750, 115200, 187500 */ +
"parity   : byte;" /* Paridade. Valores possiveis :
                              None (0), Impar(1), Par(2) */ +
"databits : byte;" /* Numero de bits de dados.
                              Valores possiveis: 7 e 8. */ +
"stopbit  : byte," /* Bit de parada. Valores possiveis:
                              1 -> 1, 2 -> 2, 5 -> 1.5 */ +
"start    : dword;" + // Timeout para inicio da recepcao
"middle   : dword " + // Timeout entre a recepcao de bytes
  "}";
Retorno

invalid ou dispositivo Usb criado.

Exemplos
use url Device "package://libs#dev/dev.wmlsc";
use url Usb   "package://libs#dev/usb.wmlsc";

function test ()
{

  var config = PhStruct.create(
  "{"                    +
    "baudrate : sdword;" +
    "parity   : byte;"   +
    "databits : byte;"   +
    "stopbit  : byte,"   +
    "start    : dword;"  +
    "middle   : dword "  +
  "}");

  PhStruct.set(config, "baudrate", 9600);
  PhStruct.set(config, "databits", 8);
  PhStruct.set(config, "parity"  , 0);
  PhStruct.set(config, "stopbit" , 1);
  PhStruct.set(config, "start"   , 1000);
  PhStruct.set(config, "middle"  , 1000);

  var usb = Usb#create(config);

  if(Device#isDev(usb))
  {
     Dialogs.alert("Dispositivo Usb criado");
  }
}

Saida:

Dispositivo Usb criado

Nfc

package://libs#dev/nfc.wmlsc

Interface para uso do dispositivo Nfc.

Sumário

Função Descrição
create Criar uma instância do device NFC
detect Faz a detecção de um dispositivo NFC
authorize Realiza a autorização de um bloco para leitura/escrita
readBlockData Realiza a leitura do bloco passado
writeBlockData Realiza a escrita de dados em um bloco

create

Nfc#create()

Criar uma instância do device NFC

Retorno

invalid ou controlador do device para NFC

detect

Nfc#detect(dev)

Faz a detecção de um dispositivo NFC

Parâmetros
  • dev Instância de dispositivo NfC.
Retorno

PhList - Lista onde o primeiro item é o tipo do cartão e segundo elemento é o uid (numero de serie) do cartão. invalid Caso não consiga fazer o detect do cartão.

authorize

Nfc#authorize(dev, block, key)

Realiza a autorização de um bloco para leitura/escrita

Parâmetros
  • dev Instância de dispositivo NfC
  • block Numero do bloco que deseja realizar escrita/leitura
  • key Chave para leitura/escrita de um bloco especifico
Retorno
  • 0 Caso consiga realizar a autorização
  • -4 Caso passe parametros errados
  • -5 Erro de autorização (key incorreta)

readBlockData

Nfc#readBlockData(dev, block)

Realiza a leitura do bloco passado

Parâmetros
  • dev Instância de dispositivo NfC
  • block Numero do bloco que deseja realizar leitura
Retorno
  • PhBuffer Em caso de sucesso, retorna um buffer com os dados do bloco
  • -7 Erro durante a leitura do cartão

writeBlockData

Nfc#readBlockData(dev, buffer, block)

Realiza a escrita de dados em um bloco

Parâmetros
  • dev Instância de dispositivo NfC
  • buffer PhBuffer com os dados que deseja escrever no cartão
  • block Numero do bloco que deseja realizar escrita
Retorno

Retorna a quantidade de bytes escrita no cartão ou -6 caso não consiga realizar a escrita.

Nfc#getData(config)

Recupera os dados de uma tag NFC detectada

Parâmetros
  • dev Instância de dispositivo Nfc.
Retorno

PhBuffer em caso de sucesso ou invalid em caso de erro

Exemplos
use url Device "package://libs#dev/dev.wmlsc";
use url Nfc    "package://libs#dev/nfc.wmlsc";

function test ()
{

  var config = PhStruct.create(
  "{"                    +
    "minSize : word;"    +
    "maxSize : maxSize;" +
    "beep    : boolean;" +
  "}");

  PhStruct.set(config, "maxSize", 16);
  PhStruct.set(config, "minSize", 16);
  PhStruct.set(config, "beep",    true);

  var nfc = Nfc#create(config);

  if(Device#connect(nfc))
  {
     var detect = false;

     while(!detect)
     {
        detect = Nfc#detect(nfc);

        if(detect)
        {
          var uid     = Nfc#getUID(nfc);
          var data    = Nfc#getUID(nfc);
          var strUid  = PhBuffer.getAsHexString(uid, 0, PhBuffer.getSize(uid));
          var strData = PhBuffer.getAsHexString(data, 0, PhBuffer.getSize(data));

          Dialogs.alert("tag UID: "  + strUid);
          Dialogs.alert("tag data: " + strData);
        }
     }
  }
}

Saida:

tag UID: 0x8804E855
--

tag data: 0xFFE8A001

Printer

package://libs#dev/printer.wmlsc

Implementação para uso da impressora.

Sumário

Função Descrição
create Cria device printer.
write Escreve dados com a impressora.
checkPaper Verifica a exixtencia de bobina para impressão.
feedPaper Deixa o papel em ponto de corte.
setFont Seta a fonte de impressão.
setFontSize Seta a fonte e o tamanho da altura e largura dos caracteres.
printBC Imprimi código de barras em duas dimensões.

Tipos de alinhamento na impressão

Constantes Valor Descrição
Printer#ALIGN_NONE 0 Sem alinhamento
Printer#ALIGN_CENTER 1 Centralizado
Printer#ALIGN_LEFT 2 Alinhado à esquerda
Printer#ALIGN_RIGHT 3 Alinhado à direita
Printer#ALIGN_JUSTIFY 4 Justificado

Informações da impressora

Constantes Valor Descrição
Printer#FIELD_PRINT_WIDTH 500 Número de colunas para impressão.
Printer#FIELD_PRINTED_LINES 501 Quantidade de linhas já impressas pelo terminal.

create

Printer#create(config)

Cria device printer para escrita de dados da impressora.

Parâmetros
  • config: String vazia ("");
Retorno

invalid ou Printer criado.


write

Printer#write(dev, data, align)

Escreve dados com a impressora.

Parâmetros
  • dev: instância de dispositivo printer criada a partir de Printer#create;
  • data: dados a serem impressos pode ser string ou streamFile;
  • align: alinhamento da informação a ser impressa;
Retorno

true em caso de sucesso ou false indicando erro.


checkPaper

Printer#checkPaper(dev)

Verifica a existência de bobina para impressão.

Parâmetros
  • dev: instância de dispositivo printer criada a partir de Printer#create;
Retorno

true indica presença de papel e false indica falta.


feedPaper

Printer#feedPaper(dev)

Deixa o papel em ponto de corte.

Parâmetros
  • dev: instância de dispositivo printer criada a partir de Printer#create;
Retorno

true em caso de sucesso ou false indicando erro.


setFont

Printer#setFont(fontName)

Seta a fonte de impressão. Obs.: Atualmente esta função é suportada apenas em terminais PAX S920

Parâmetros
  • fontName: string com o nome da fonte (a fonte deve estar carregada no terminal)
Retorno

true em caso de sucesso ou false caso a fonte não esteja carregada.


setFontSize

Printer#setFontSize(fontName, width, height)

Seta a fonte e o tamanho da altura e largura dos caracteres.

Obs.: Atualmente esta função é suportada apenas em terminais PAX S920.

Parâmetros
  • fontName: string com o nome da fonte a ser utilizada.
  • width: tamanho da largura dos caracteres.
  • height: tamanho da altura dos caracteres.
Retorno

true em caso de sucesso ou false em caso de erro.


printBC

Printer#printBC(dev, data)

Imprime código de barras na horizontal

Parâmetros
  • dev : Dispositivo tipo TYPE_PRINTER
  • data: Dados do tipo TYPE_STRING a serem usados para gerar o BC;
Retorno

true em caso de sucesso ou false em caso de erro.


Exemplos:
use url Device  "package://libs#dev/dev.wmlsc";
use url Printer "package://libs#dev/printer.wmlsc";

function test ()
{
  var dev = Printer#create("");

  if (Device#connect(dev))
  {
     Printer#setFontSize("COURIER.TTF", 10, 20);

     if (Printer#checkPaper(dev))
     {
       Printer#write(dev, "PRINT TEST", Printer#ALIGN_CENTER());
       Printer#feedPaper(dev);
     }
  }

}

Saida:

    PRINT TEST

Touch

package://libs#dev/touch.wmlsc

Interface para uso do dispositivo Touch

Sumário

Função Descrição
create Criar device Touch
add Incluir uma área sensível ao toque na tela.
remove Remover uma área previamente adicionada.
isSupported Indica se há suporte a touchscreen no terminal.
wait Aguarda uma área registrada ser selecionda (tocada).

create

Touch#create(config)

Criar device Touch

Parâmetros
  • config String vazia ("") para configuração padrão
Retorno

invalid ou Touch criado

add

Touch#add(x, y, width, height, code, beep)

Incluir uma área sensível ao toque na tela.

Parâmetros
  • x Inteiro que representa a posição (X) horizontal em pixel.
  • y Inteiro que representa a posição (Y) vertical em pixel.
  • width Inteiro que representa a largura em pixel.
  • height Inteiro que representa a altura em pixel.
  • code Valor associado a região.
  • beep Duração do beep ao tocar a área. Se for 0, nenhum beep será emitido.
Retorno

Id da área adicionada e invalid caso touchscreen não seja suportado ou ocorra erro.

remove

Touch#remove(id)

Remover uma área previamente adicionada.

Parâmetros
  • id Inteiro que representa o ID da área.
Retorno

true caso encontre e remova a área ou false caso contrário.

isSupported

Touch#isSupported()

Indica se há suporte a touchscreen no terminal.

Retorno

true caso suporte e false caso não suporte.

wait

Touch#wait(timeout)

Aguarda uma área registrada ser selecionda (tocada).

Parâmetros
  • timeout Inteiro que representa o tempo de espera (ms).
Retorno

Id da área selecionada, -1 em timeout e invalid caso touchscreen não seja suportado ou ocorra erro.

Exemplos
use url Device  "package://libs#dev/dev.wmlsc";
use url Touch   "package://libs#dev/touch.wmlsc";

function test ()
{
  if (Touch#isSupported())
  {
    var touch = Touch#create("");

    if (Device#connect(touch))
    {
      var id = Touch#add(0, 0, 10, 10, 0, 0);

      if (isvalid id && (id >= 0))
      {
         if (Touch#wait(10000) >= 0)
         {
            Dialogs.alert("Toque detectado");
         }
         else
         {
            Dialogs.alert("Nenhuma area foi tocada");
         }

         Touch#remove(id);
      }
    }
  }
}

Saida:

Toque detectado

VM

Implementa scripts de uso geral da VM (Virtual Machine). Máquina Virtual proprietária responsável pela interpretação dos scripts compilados e instalados no dispositivo.

Core

Script Descrição
Call Fornece funções para execução direta de scripts.
Init Fornece funções para interpretação de arquivos .ini
Map Fornece funções para manipulação de listas mapeadas (chave, valor)
iniFile Fornece funções para manipulação de listas mapeadas (chave, valor)

Call

package://vm#core/call.wmlsc
Sumário de Funções
Função Descrição
call Executa diretamente uma função em um script.
getModule Extrai o módulo da string informada como parâmetro
getFunction Extrai a função da string informada como parâmetro
call

Call#call (function_path, params); Executa diretamente uma função em um script. A função obrigatoriamente deve conter o modificador extern em sua assinatura

Parâmetros
  • function_path - string contendo o pacote com o script e a função a ser executada no formato package://pacote/script.wmlsc# funcao
  • params - PhList contendo os parâmetro a serem passados para a função.
Retorno

invalid em caso de falha ou o retorno espeífico da função executada.


getModule

Call#getModule (function_path, default_module); Extrai o módulo da string informada como parâmetro

Parâmetros
  • function_path - string contendo o pacote com o script e a função a ser executada no formato package://pacote/script.wmlsc# funcao
  • default_module - módulo default que será retornado caso a função não consiga extrair o módulo do path.
Retorno

módulo extraído ou default_module


getFunction

Call#getFunction (function_path); Extrai a função da string informada como parâmetro

Parâmetros
  • function_path - string contendo o pacote com o script e a função a ser executada no formato package://pacote/script.wmlsc# funcao
Retorno

invalid em caso de falha ou a string com a função extraída de function_path

Exemplo
use url Call  "package://vm#core/call.wmlsc";

/*Funcao que sera executada via chamada call */
extern function exibeAlert()
{
  Dialogs.alert("Executando atraves da chamada call");
}

function testeCall()
{
  var function_path = "package://scripttest/doc.wmlsc#exibeAlert";
  Dialogs.alert("Modulo: " + Call#getModule(function_path, "module default"));
  Dialogs.alert("function: " + Call#getFunction(function_path));
  Call#call(function_path, []);
}
Saída
Modulo: package://scripttest/doc.wmlsc
function: exibeAlert
Executando atraves da chamada call

Init

package://vm#core/init.wmlsc

Implementação de um parser de arquivos INI. Através dessa api é possível carregar um aarquivo ini para um objeto Map.

Constantes Descrição
Init#G_PHVM_INI_FILENAME retorna o nome do arquivo ini "PHVM.INI"
Sumário de Funções
Função Descrição
getSession Retorna as chaves e valores de uma sessão.

getSession

Init#getSession (stream, session); Retorna as chaves e valores de uma sessão.

Parâmetros
  • stream - vm#stream com os dados.
  • session - Nome da sessão a ser recuperado o valor da chave.
Retorno

map com chave,valor ou invalid em caso de erro.

Veja: map.wmlsc

Exemplo
use url StreamFile   "package://vm#stream/file.wmlsc";
use url Ini          "package://vm#core/init.wmlsc";
use url Map          "package://vm#core/map.wmlsc";

function testeINI()
{
  var stream = StreamFile#createExt("cfg", StreamFile#O_RDONLY());
  if (isvalid stream)
  {
    var map    = Ini#getSession(stream, "General");
    if (isvalid map)
      Dialogs.alert("Skin: " + Map#get(map, "skinName"));
    else
      Dialogs.alert("Sessao nao encontrada");
  }
  else
    Dialogs.alert("Nao foi possivel abrir o arquivo");
}
Saída
Skin: VX690;

Map

package://vm#core/map.wmlsc

Map é uma das implementações que compõem o core dos scripts de uso geral da VM (Virtual Machine). Sendo responsável pelo provimento de funções que viabilizam a manipulação de listas mapeadas (chave, valor). Um objeto Map é um simples mapa de chave/valor que pode ter seus elementos iterados por ordem de inserção. Abaixo listamos as funções nativas de Map e um exemplo descritivo da implementação dessas funções.


Sumário de Funções
Função Descrição
create Cria um map (lista mapeada com chave, valor)
isMap Verifica se o objeto informado é um map
put insere um ítem (chave, valor) no map
get recupera um valor do map
remove remove um ítem do map
keys retorna as chaves que constam no map
values retorna os valores que constam no map
size retorna a quantidade de itens no map
isEmpty Verifica se o map está vazio
putOrder Insere ítens ordenadamente no map
concat Concatena um map em outro map

create

Map#create()

Cria um objeto map (lista mapeada com chave, valor).

Parâmetros

Não há.

Retorno

Map criado.


isMap

Map#isMap(map)

Verifica se o objeto informado é um map.

Parâmetros
  • map - objeto map criado através de #create();
Retorno

true se o objeto informado é um map. false se o objeto não é um map.


put

Map#put(map, key, value)

Insere um ítem (chave, valor) no map. Se o ítem já existir será sobreposto.

Parâmetros
  • map - objeto map criado através de #create();
  • key - Chave para o valor (value);
  • value - valor que se deseja salvar;
Retorno

true sucesso ou false em caso de falha;


get

Map#get(map, key)

Recupera um valor do map conforme a chave informada.

Parâmetros
  • map - objeto map criado através de #create();
  • key - Chave para o valor (value);
Retorno

invalid no caso de erro ou o valor da chave.


remove

Map#remove(map, key)

Mediante a passagem de uma chave do Map o valor é removido.

Parâmetros
  • map - objeto map criado através de #create();
  • key - Chave para o valor (value);
Retorno

true sucesso ou false em caso de falha;


keys

Map#keys(map)

Retorna as chaves que constam no map.

Parâmetros
  • map - objeto map criado através de #create();
Retorno

PhList com com as chaves que existem no map.


values

Map#values(map)

Retorna os valores que constam no map.

Parâmetros
  • map - objeto map criado através de #create();
Retorno

PhList com com os valores que existem no map.


size

Map#size(map)

Retorna a quantidade de itens no map.

Parâmetros
  • map - objeto map criado através de #create();
Retorno

inteiro com a quantidade de ítens.


isEmpty

Map#isEmpty(map)

Verifica se o map está vazio.

Parâmetros
  • map - objeto map criado através de #create();
Retorno

true em caso de sucesso ou false em caso contrário.


putOrder

Map#putOrder(map, key, value)

Insere ítens ordenadamente no map.

Parâmetros
  • map - objeto map criado através de #create();
  • key - Chave para o valor (value);
  • value - valor que se deseja salvar;
Retorno

true sucesso ou false em caso de falha.


concat

Map#concat(map1, map2)

Concatena um map em outro map.

Parâmetros
  • map1 - Mapa de destino que receberá novos valores;
  • map2 - Mapa que será concatenado;
Retorno

map1 contendo os dois maps ou invalid em caso de erro.


Exemplo:
use url Map          "package://vm#core/map.wmlsc";

function testeMap()
{
  var map = Map#create();
  if (Map#isMap(map))
  {
    Dialogs.alert("Map valido");
    if (Map#isEmpty(map))
    {
      Dialogs.alert("Map está vazio");
    }
    Map#put(map, "Chave1", "valor1");
    Map#put(map, "Chave2", "valor2");
    Map#put(map, "Chave3", "valor3");
    Map#put(map, "Chave4", "valor4");
    var qtd = Map#size(map);
    Dialogs.alert("Qtd de itens: " + qtd);

    var keys = Map#keys(map);
    for (var x = 0; x < PhList.count(keys); x++)
      Dialogs.alert(keys[x]);

    var values = Map#values(map);
    for (x = 0; x < PhList.count(values); x++)
      Dialogs.alert(values[x]);

    Map#remove(map, "Chave3");

    values = Map#values(map);
    for (x = 0; x < PhList.count(values); x++)
      Dialogs.alert(values[x]);

    var map2 = Map#create();

    Map#put(map2, "key1", "value1");
    Map#put(map2, "key2", "value2");

    map = Map#concat(map, map2);

    keys = Map#keys(map);
    for (x = 0; x < PhList.count(keys); x++)
    {
      Dialogs.alert(keys[x] + " = " + Map#get(map, keys[x]));
    }
    var key = Map#get(map, "Chave1");
    Dialogs.alert(key);
  }
}
Saída
Map valido
Map está vazio
Qtd de itens: 4

Chave1
Chave2
Chave3
Chave4

Valor1
Valor2
Valor3
Valor4

Valor1
Valor2
Valor4

Chave1 = valor1
Chave2 = valor2
Chave4 = valor4
key1 = value1
key2 = value2

valor1

iniFile

package://vm#core/inifile.wmlsc

Interface para leitura e escrita de arquivos INI.

Sumário de Funções
Função Descrição
create Cria um stream de um arquivo ini para leitura e escrita. Retorna um map - phast#utils/map.
getSession Retorna as chaves e valores de uma sessão.
getSection Retorna as chaves e valores de uma sessão a partir de um map - phast#utils/map.
readSectionsFromStream Retorna um Map com os nome das sessão na propriedade key a partir de um stream do arquivo.
readSections Retorna uma PhList com os nome das sessão na propriedade key.
sectionExists Verifica se a sessao existe. Retorna true ou false.
deleteSection Retorna as chaves e valores de uma sessão.
addSection Adiciona uma sessão ao map que representa o arquivo ini.
addSectionWithValue Adiciona uma sessão com chave/valor ao map que representa o arquivo ini.
deleteKey Remove uma chave do map que representa o arquivo ini.
KeyExists Verifica se a sessao existe. Retorna True ou False.
getString String ou invalid em caso de erro.
setString Atribuí um valor string a uma chave. Retorna boolean true/false
setInteger Atribuí um valor integer a uma chave. Retorna boolean true/false
getInteger Retorna integer ou invalid em caso de erro.
flush Método que escreve os dados do map que representa o ini em mémoria no arquivo físico.

create

IniFile#create (fileName); Cria um stream de um arquivo ini para leitura e escrita. Retorna um map - phast#utils/map.

Parâmetros
  • fileName - string com o nome do arquivo.
Retorno

map com chave,valor ou invalid em caso de erro.

Veja: map.wmlsc

Exemplo
use url IniFile    "package://vm#core/inifile.wmlsc";
use url Map          "package://vm#core/map.wmlsc";

extern function sample01()
{
  var ini = IniFile#create("f.ini");
  //lendo todas as sessões do arquivo ini
  var sNameSection = IniFile#readSections(ini);

  for (var i = 0; i < PhList.count(sNameSection); i++)
  {
      Dialogs.alertExt("sessao name: " + String.toString(sNameSection[i]),  1);
  }

}

getSession

IniFile#getSession (stream, session); Retorna as chaves e valores de uma sessão.

Parâmetros
  • stream - vm#stream com os dados.
  • session - Nome da sessão a ser recuperado o valor da chave.
Retorno

map com chave,valor ou invalid em caso de erro.

Veja: map.wmlsc

Exemplo
use url StreamFile "package://vm#stream/file.wmlsc";
use url IniFile    "package://vm#core/inifile.wmlsc";
use url Map        "package://vm#core/map.wmlsc";

function testeINI()
{
  var stream = StreamFile#createExt("cfg", StreamFile#O_RDONLY());
  if (isvalid stream)
  {
    var map    = IniFile#getSession(stream, "General");
    if (isvalid map)
      Dialogs.alert("Skin: " + Map#get(map, "skinName"));
    else
      Dialogs.alert("Sessao nao encontrada");
  }
  else
    Dialogs.alert("Nao foi possivel abrir o arquivo");
}
Saída
Skin: VX690;

getSection

IniFile#getSection (map, sessionName); Retorna as chaves e valores de uma sessão a partir de um map que representa o arquivo ini.

Parâmetros
  • map - map - phast#utils/map
  • sessionName - Nome da sessão a ser recuperado o valor da chave.
Retorno

map com chave,valor ou invalid em caso de erro.

Veja: map.wmlsc

Exemplo
use url IniFile    "package://vm#core/inifile.wmlsc";
use url Map          "package://vm#core/map.wmlsc";

extern function sample02()
{
  var ini = IniFile#create("f.ini");
  //lendo todas as key/value de uma sessão do arquivo ini
  var str = Input#getString ("Digite a Sessão:", "", "", 15, invalid, true);
  if (String.length(str) > 0)
  {
      var sections = IniFile#getSection(ini, str);
      var keys     = Map#keys(sections);
      var values   = Map#values(sections);

      for (var i = 0; i < Map#size(sections); i++)
      {
          Dialogs.alertExt(
                String.toString(keys[i] )
              + " = "
              + String.toString(values[i]),
              2);
      }
  }
}

readSectionsFromStream

IniFile#readSectionsFromStream (stream); Retorna um Map com os nome das sessão na propriedade key a partir de um stream do arquivo.

Parâmetros
  • stream vm#stream com os dados
Retorno

map com chave,valor ou invalid em caso de erro.

Veja: map.wmlsc

Exemplo

Vide exemplo SampleIni do SDK.


readSections

IniFile#readSections (map); Retorna um Map com os nome das sessão na propriedade key a partir de um stream do arquivo.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
Retorno

PhList com as chaves ou invalid.

Exemplo

Vide exemplo SampleIni do SDK.


sectionExists

IniFile#sectionExists (map, sectionName); verifica se a sessao existe. Retorna True ou False.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • sectionName - string com o nome da sessão.
Retorno

Boolean true/false

Exemplo

Vide exemplo SampleIni do SDK.


deleteSection

IniFile#deleteSection (map, sectionName); Remove a sessão do map que representa o arquivo ini.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • sectionName - string com o nome da sessão.
Retorno

boolean true/false

Exemplo

Vide exemplo SampleIni do SDK.


addSection

IniFile#addSection (map, sectionName); Adiciona uma sessão ao map que representa o arquivo ini.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • sectionName - string com o nome da sessão.
Retorno

boolean true/false

Exemplo

Vide exemplo SampleIni do SDK.


addSectionWithValue

IniFile#addSectionWithValue (map, sectionName, keyValues); Adiciona uma sessão com chave/valor ao map que representa o arquivo ini.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • sectionName - string com o nome da sessão.
  • keyValues - map phast#utils/map que representa a informação chave e valor da sessão.
Retorno

boolean true/false

Exemplo

Vide exemplo SampleIni do SDK.


deleteKey

IniFile#deleteKey (map, sectionName, keyValues); Remove uma chave do map que representa o arquivo ini.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • sectionName - string com o nome da sessão.
  • keyValues - map phast#utils/map que representa a informação chave e valor da sessão.
Retorno

boolean true/false

Exemplo

Vide exemplo SampleIni do SDK.


KeyExists

IniFile#KeyExists (map, sectionName, key); Verifica se a sessao existe. Retorna True ou False.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • sectionName - string com o nome da sessão.
  • key - string chave a ser encontrada
Retorno

boolean true/false

Exemplo

Vide exemplo SampleIni do SDK.


getString

IniFile#getString (map, section, key, defaultValue); Retorna string ou invalid em caso de erro.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • section - string com o nome da sessão.
  • key - string chave a ser encontrada
  • defaultValue - string com valor default que será retornado caso o valor pesquisado não seja encontrado.
Retorno

String

Exemplo

Vide exemplo SampleIni do SDK.


setString

IniFile#setString (map, section, key, value); Atribuí uma string ao map que representa o arquivo ini.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • section - string com o nome da sessão.
  • key - string chave a ser encontrada
  • value - string a ser atribuída.
Retorno

Boolean true/false.

Exemplo

Vide exemplo SampleIni do SDK.


setInteger

IniFile#setInteger (map, section, key, value); Atribuí um integer ao map que representa o arquivo ini.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • section - string com o nome da sessão.
  • key - string chave a ser encontrada
  • value - integer a ser atribuído.
Retorno

Boolean true/false.

Exemplo

Vide exemplo SampleIni do SDK.


getInteger

IniFile#getInteger (map, section, key, defaultValue); Retorna um integer ou invalid em caso de erro.

Parâmetros
  • map - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
  • section - string com o nome da sessão.
  • key - string chave a ser encontrada
  • defaultValue - string com valor default que será retornado caso o valor pesquisado não seja encontrado.
Retorno

Integer

Exemplo

Vide exemplo SampleIni do SDK.


flush

IniFile#flush (ini); Método que escreve os dados que esta do map que representa o ini em mémoria no arquivo físico. Para que as alterações realizadas sejam persistidas fisicamente é necessário executar esse método.

Parâmetros
  • ini - map phast#utils/map com os dados do arquivo ini carregado a partir do método create
Retorno

void

Exemplo

Vide exemplo SampleIni do SDK.


Stream

Script Descrição
StreamBuffer Direciona fluxo de dados (stream) para buffers
StreamData Permite leitura e escrita de tipos nativos em streams de dados
StreamEndian Implementa envio de dados big endian em stream de dados
StreamFile Fornece abstração de leitura e escrita de arquivos
Gzip Fornece abstração de leitura e escrita no formato GZ
StreamPhTAR Fornece abstração de leitura e escrita no formato TAR
Stream Fornece interface padrão para leitura e escrita de dados

StreamBuffer

package://vm#stream/bfwriter.wmlsc

StreamBuffer é uma das implementações que compõem o core dos scripts de uso geral da VM (Virtual Machine). Sendo responsável pelo provimento de funções que viabilizam cópia de dados no buffer, a escrita dos mesmos e o controle do fluxo dessa operação. Abaixo listamos as funções nativas de StreamBuffer e um exemplo descritivo da implementação dessas funções.

Sumário de Funções
Função Descrição
create Decora um stream para cópia de dados em buffer.
write Escrita de dados em buffer, os dados são enviados pelo flush.
flush Envia dados em memória para o destino correto.

Constantes

Constantes Valor
StreamBuffer#FLUSH_NONE 0
StreamBuffer#FLUSH_READ 1
StreamBuffer#FLUSH_WRITE 2
StreamBuffer#FLUSH_ALL 3

create

StreamBuffer#create(stream);

Decora (prepara) um stream para cópia de dados em buffer.

Parâmetros
  • stream - stream já existente;
Retorno

Stream decorado para escrita em buffer.


write

StreamBuffer#write(self, buffer)

Escrita de dados em buffer, os dados são enviados pelo flush.

Parâmetros
  • self - controlador de stream previamente criado por StreamBuffer#create;
  • buffer - com os dados que se deseja enviar;
Retorno

Número de bytes enviados ou -1.


flush

StreamBuffer#flush(stream, type)

Envia dados em memória para o destino correto.

Parâmetros
  • stream - controlador de stream previamente criado por StreamBuffer#create;
  • type - inteiro expresso por constante; - vide listagem
Retorno

-1 em caso de erro ou caso contrário 0.


Exemplo:

use url Map          "package://vm#core/map.wmlsc";

extern function test()
{
 var stream =  StreamBuffer#create(StreamCore#create(invalid, PhBuffer.create(0), invalid));
  if (isvalid stream)
  {
    var str = StreamBuffer#write(stream, PhBuffer.create("Teste do buffer"));
    var flh = StreamBuffer#flush(stream, 2 );
    if(flh == 0)
    {
     Dialogs.alert("dados gravados com sucesso");
    }
    else if(flh == -1)
    {
     Dialogs.alert("erro ao gravar!");
    }
  }
  else
  {
    Dialogs.alert("falha ao gravar");
  }
}
Saída
dados gravados com sucesso

StreamData

package://vm#stream/data.wmlsc

Permite leitura e escrita de tipos nativos em streams de dados.

Formatos
Constantes Descrição Valor
SHORT_BIGENDIANN Big Endian 2 bytes 0
SHORT_LITTLEENDIANN Little Endian 2 bytes 1
LONG_BIGENDIANN Big Endian 4 bytes 2
LONG_LITTLEENDIANN Little Endian 4 bytes 3
Sumário de Funções
Função Descrição
writeString Escreve uma string no stream.
readString Lê uma string do stream.
writeInteger Escreve no stream um inteiro no formato indicado
readInteger Lê do stream um inteiro no formato indicado
writePhType Escreve no stream o tipo PhType com o formato CSTD
readPhType Lê do stream o tipo PhType com o formato CSTD
writeString

StreamData#writeString(stream, value); Escreve uma string no stream.

Parâmetros
  • stream - Controlador de stream previamente criado
  • value - Valor que será convertido para string e copiado
Retorno

número de bytes copiados ou número negativo indicando o erro

readString

StreamData#readString(stream, length); Lê uma string do stream.

Parâmetros
  • stream - Controlador de stream previamente criado
  • length - tamanho máximo da string
Retorno

invalid ou a string lida


writeInteger

StreamData#writeInteger(stream, value, format); Escreve no stream um inteiro no formato indicado

Parâmetros
  • stream - Controlador de stream previamente criado
  • value - Valor que será convertido e copiado
  • format - #ENDIANNESS
Retorno

número de bytes copiados ou número negativo indicando o erro

readInteger

StreamData#readInteger(stream, length); Lê do stream um inteiro no formato indicado

Parâmetros
  • stream - Controlador de stream previamente criado
  • length - tamanho máximo da string
Retorno

invalid ou o valor lido

writePhType

StreamData#writePhType(stream, phtype); Escreve no stream o tipo PhType com o formato CSTD

Parâmetros
  • stream - Controlador de stream previamente criado
  • phtype - Valor que será escrito
Retorno

número de bytes copiados ou número negativo indicando o erro


readPhType

StreamData#readPhType(stream, phtype); Escreve no stream o tipo PhType com o formato CSTD

Parâmetros
  • stream - Controlador de stream previamente criado
  • PhType que será ajustado com o valor lido do stream
Retorno

número de bytes lidos ou número negativo indicando o erro

Exemplo
use url StreamData   "package://vm#stream/data.wmlsc";
use url StreamFile   "package://vm#stream/file.wmlsc";
use url StreamCore   "package://vm#stream/stream.wmlsc";

function testeStreamData()
{

  var fileData = StreamFile#createExt("TST", StreamFile#O_CREAT());
  var dataTypeStr = PhType.create(PhType.STRING);
  var dataTypeInt = PhType.create(PhType.WORD);
  var dataStr = "Teste String";
  var dataInt = 1;

  /* Gravar */
  StreamData#writeString(fileData, dataStr);
  StreamData#writeInteger(fileData, dataInt, StreamData#SHORT_LITTLEENDIANN());

  PhType.set(dataTypeStr, "Teste PhType");
  PhType.set(dataTypeInt, 2);

  StreamData#writePhType(fileData, dataTypeStr);
  StreamData#writePhType(fileData, dataTypeInt);

  /* Ler */
  StreamCore#seek(fileData, 0, StreamCore#SEEK_SET());

  Dialogs.alert(StreamData#readString(fileData, 12));
  Dialogs.alert(StreamData#readInteger(fileData, StreamData#SHORT_LITTLEENDIANN()));

  var TypeStr = PhType.create(PhType.STRING);
  StreamData#readPhType(fileData, TypeStr);
  Dialogs.alert(PhType.get(TypeStr));

  var TypeInt = PhType.create(PhType.WORD);
  StreamData#readPhType(fileData, TypeInt);
  Dialogs.alert(PhType.get(TypeInt));

}
Saída
Teste String
1
Teste PhType
2

StreamEndian

package://vm#stream/endian.wmlsc

Implementa envio de dados big endian em stream de dados.

Sumário de Funções
Função Descrição
create Cria um stream decorado com big endianness.
write Escreve dados no stream
read Lê dados do stream
available Retornar quantos bytes há no canal

create

StreamEndian#create(stream, format) Cria um stream decorado com big endianness.

Parâmetros
  • stream - Controlador de stream previamente criado
  • format - ver formatos stream/data
Retorno

Stream decorado


write

StreamEndian#write(self, buffer) Escreve dados no stream

Parâmetros
  • self - Controlador de stream previamente criado
  • buffer - PhBuffer com os dados que se deseja enviar
Retorno

numero de bytes enviados ou -1


read

StreamEndian#read(self, buffer) Lê dados do stream

Parâmetros
  • self - Controlador de stream previamente criado
  • buffer - PhBuffer que receberá os dados lidos
Retorno

numero de bytes lidos ou -1


available

StreamEndian#available(self) Retornar quantos bytes há no canal

Parâmetros
  • self - Controlador de stream previamente criado
Retorno

numero de bytes que poderá ser lido.

Exemplo
use url StreamLen    "package://vm#stream/endian.wmlsc";
use url StreamFile   "package://vm#stream/file.wmlsc";
use url StreamCore   "package://vm#stream/stream.wmlsc";

function testeEndian()
{
var file = StreamFile#createExt("TST", StreamFile#O_CREAT());
  var endian = StreamLen#create(file, StreamData#SHORT_LITTLEENDIANN());

  StreamLen#write(endian, PhBuffer.create("Teste Endian"));

  StreamCore#seek(file, 0, StreamCore#SEEK_SET());

  Dialogs.alert("Disponivel: " + StreamLen#available(endian));

  var readBuffer = PhBuffer.create("");
  PhBuffer.resize(readBuffer, StreamLen#available(endian));
  StreamLen#read(endian, readBuffer);
  Dialogs.alert(PhBuffer.getAsString(readBuffer, 0, PhBuffer.getSize(readBuffer)));

}
Saída
Disponivel: 12
Teste Endian

StreamFile

package://vm#stream/file.wmlsc

Fornece abstração de leitura e escrita de arquivos.

Permissões
Constantes Descrição
StreamFile#O_CREAT Criará o arquivo vázio
StreamFile#O_WRONLY Abrirá o arquivo com permissão de escrita
StreamFile#O_RDONLY Abrirá o arquivo com permissão de leitura
StreamFile#O_RDWR Abrirá o arquivo com permissão de leitura e escrita
StreamFile#O_APPEND Abrirá o arquivo para atualização já posicionado ao final do mesmo
StreamFile#O_TRUNC Abrirá o arquivo para escrita, caso exista o tamanho será 0
StreamFile#O_CODEFILE Indica que os bytes copiados para esse stream devem ser tratados como executável
StreamFile#O_RAWNAME Forçar API usar exatamente o nome passado para acessar o arquivo
StreamFile#O_FLASH_MODE Forçar API a usar o sistema de arquivo na memoria FLASH
StreamFile#O_VOLATILE Indica que arquivo criado com esse modo será voltátil, ou seja, quando o arquivo for fechado o contéudo será perdido
StreamFile#O_CACHE Habilita o cache
Sumário de Funções
Função Descrição
create Cria um novo stream para manipulação de arquivos
createExt Criar um novo stream para manipulação de arquivos na flash se o terminal suportar, caso contrário cria um stream na memoria padrão
erase Apagar o arquivo
eraseExt Apagar o arquivo com suporte a memória flash
getRealName Retorna o nome real do arquivo criado em disco
rename Renomear o arquivo
createVolatile Criar um novo stream para manipulação de arquivo em memoria volatil
getContext retorna o nome do contexto da aplicação
createDir Criar um novo diretório
compress Comprime um arquivo
uncompress Descomprime um arquivo
create

StreamFile#create(filename, mode)

Criar um novo stream para manipulação de arquivos

Parâmetros
  • filename - O nome do recurso que será criado
  • mode - Permissões do arquivo Ver Constantes
Retorno

Boolean - true em caso de sucesso ou false caso contrário


createExt

StreamFile#createExt(filename, mode)

Criar um novo stream para manipulação de arquivos na flash se o terminal suportar, caso contrário cria um stream na memoria padrão. Obs: A função também oferece suporte ao O_FLASH_MODE para Terminal Vx670

Parâmetros
  • filename - O nome do recurso que será criado
  • mode - Ver Constantes
Retorno

true em caso de sucesso ou false caso contrário


erase

StreamFile#erase(filename, mode)

Apagar o arquivo

Parâmetros
  • filename - O nome do recurso que será criado
  • mode - 0 (Zero) ou #O_RAWNAME
Retorno

true em caso de sucesso ou false caso contrário


eraseExt

StreamFile#eraseExt(filename, mode)

Apagar o arquivo com suporte a memória flash

Funções de stream suportadas read/seek Obs: A função também oferece suporte ao O_FLASH_MODE para Terminal Vx670

Parâmetros
  • filename - O nome do recurso que será criado
  • mode - 0 (Zero) ou #O_RAWNAME
Retorno

true em caso de sucesso ou false caso contrário


getRealName

StreamFile#getRealName(filename)

Retorna o nome real do arquivo criado em disco

Parâmetros
  • filename - Nome original do arquivo
Retorno

Invalid ou String


rename

StreamFile#rename(filename, newname, mode)

Renomear o arquivo

Parâmetros
  • filename - O nome do recurso que será criado
  • newName - Novo nome do arquivo
  • mode - 0 (Zero) ou #O_RAWNAME
Retorno

true em caso de sucesso ou false caso contrário


createVolatile

StreamFile#createVolatile(filename) Criar um novo stream para manipulação de arquivo em memoria volatil

Funções de stream suportadas write/read/seek

Parâmetros
  • filename - O nome do recurso que será criado. Tamanho até 4 bytes
  • mode - 0 (Zero) ou #O_RAWNAME internamente oferece suporte ao O_FLASH_MODE para Terminal Vx670
Retorno

invalid em caso de erro ou um handle para o stream file

getContext

StreamFile#getContext()

retorna o contexto da aplicação em execução

Retorno

String que representa o nome do contexto, geralmente é um nome do app em caixa alta.


Exemplo
use url StreamFile   "package://vm#stream/file.wmlsc";

function testeFile()
{

  var file = StreamFile#createExt("TST", StreamFile#O_CREAT());
  if (StreamFile#rename("TST", "TST2", 0))
    Dialogs.alert("Arquivo renomeado");
  else
    Dialogs.alert("Falha ao renomear");

  if (StreamFile#erase("TST2", 0))
    Dialogs.alert("Arquivo excluido");
  else
    Dialogs.alert("Falha ao excluir");
}
Saída
Arquivo renomeado
Arquivo excluido
createDir

StreamFile#createDir(path_)

Cria um novo diretório

Parâmetros
  • path_ - Path onde o diretório será criado
Retorno

Invalid ou Boolean - (true em caso de sucesso ou false caso contrário)


compress

StreamFile#compress(origName, destName)

Comprime um arquivo em Zip

Parâmetros
  • origName - Nome do arquivo a ser comprimido
  • destName - Nome do destido do arquivo a ser comprimido
Retorno

Invalid ou Boolean - (true em caso de sucesso ou false caso contrário)


uncompress

StreamFile#uncompress(origName, destName)

Descomprime um arquivo Zip

Parâmetros
  • origName - Nome do arquivo a ser descomprimido
  • destName - Nome do destido do arquivo a ser descomprimido
Retorno

Invalid ou Boolean - (true em caso de sucesso ou false caso contrário)


Gzip

package://vm#stream/gzip.wmlsc

Fornece abstração de leitura e escrita no formato GZ.

Sumário de Funções
Função Descrição
create Criar um novo stream para manipulação de arquivos dentro do gzip
createExt Criar um novo stream para manipulação de arquivos dentro do gzip
processed Retorna o offset do arquivo.
flushWrite Transforma o stream em Gzip.
Funções
create

Gzip#create(stream, buffered) Criar um novo stream para manipulação de arquivos dentro do gz

Funções de stream suportadas read/seek

Parâmetros
  • stream - Controlador de stream a ser decorado
  • buffered - Indicará o tamanho do buffer interno de trabalho
Retorno

invalid em caso de erro ou um handle para o stream gz

Exemplo
use url StreamFile "package://vm#stream/file.wmlsc";
use url GZ         "package://vm#stream/gzip.wmlsc";

function testeGzip()
{
  var file = StreamFile#createExt("ZIP", StreamFile#O_RDONLY());
  var gzip = GZ#create(file, 4096);
  if (isvalid gzip)
    Dialogs.alert("Gzip criado com sucesso");
  else
    Dialogs.alert("Falha ao criar o Gzip");
}
Saída
Gzip criado com sucesso
createExt

Gzip#createExt(stream, buffered, isWrite) Criar um novo stream para manipulação de arquivos dentro do gz

Funções de stream suportadas read/seek

Parâmetros
  • stream - Controlador de stream a ser decorado
  • buffered - Indicará o tamanho do buffer interno de trabalho
  • isWrite - Boolean - Indica se há permissão para escrita.
Retorno

invalid em caso de erro ou um handle para o stream gz

processed

Gzip#processed(stream) Retorna o offset do arquivo.

Parâmetros
  • stream - Controlador de stream
Retorno

invalid ou o número de bytes para o deslocamento(offset)

flushWrite

Gzip#flushWrite(stream) Transforma o stream em Gzip.

Parâmetros
  • stream - Controlador de stream
Retorno

invalid

StreamPhTAR

package://vm#stream/phtar.wmlsc

Abstração para escrita e leitura no formato TAR.

Sumário de Funções
Função Descrição
create Criar um novo stream para leitura de arquivos dentro do tar
first Ajusta para que os bytes lidos sejam do primeiro arquivo no tar
next Ajusta para o próximo arquivo no tar
add Adiciona um arquivo ao tar
create

StreamPhTAR#create(stream) Criar um novo stream para leitura de arquivos dentro do tar

Parâmetros
  • stream - Stream no qual há os bytes referentes ao TAR
Retorno

invalid em caso de erro ou um handle para o stream


first

StreamPhTAR#first(tarstream); Ajusta para que os bytes lidos sejam do primeiro arquivo no tar

Também limpará os erros das etapas anteriores

Parâmetros
  • stream - Controlador do stream TAR
Retorno

invalid em caso de erro ou o nome do arquivo que está sendo lido no stream tar


next

StreamPhTAR#next(tarstream); Ajusta para o próximo arquivo no tar

Também limpará os erros das etapas anteriores

Parâmetros
  • stream - Controlador do stream TAR
Retorno

invalid em caso de erro ou o nome do arquivo que está sendo lido no stream tar

Exemplo
use url StreamFile "package://vm#stream/file.wmlsc";
use url TAR        "package://vm#stream/phtar.wmlsc";

function TesteTar()
{
  var file = StreamFile#createExt("TAR", StreamFile#O_RDONLY());
  var tar = TAR#create(file);
  if (isvalid tar)
  {
    Dialogs.alert("Tar criado com sucesso");
    var nome = TAR#first(tar);
    Dialogs.alert("nome: " + nome);

    nome = TAR#next(tar);
    Dialogs.alert("nome: " + nome);
  }
  else
    Dialogs.alert("Falha ao criar o Tar");
}
Saída
Tar criado com sucesso
nome: arquivo1
nome: arquivo2

add

StreamPhTAR#add(tarstream, path, filename); Adiciona um arquivo ao tar

Parâmetros
  • stream - Controlador do stream TAR
  • path - Diretório do arquivo
  • fileName - Nome do arquivo.
Retorno

invalid ou boolean


Stream

package://vm#stream/stream.wmlsc

Interface padrão para operações de escrita e leitura de dados.

Tipos Operações
Constantes Descrição
Stream#OPERATION_WRITE Operação de escrita está sendo executada
Stream#OPERATION_READ Operação de leitura está sendo executada
Stream#OPERATION_NOP Operação de espera, usado para espera de dados
Tipos de Flush
Constantes Descrição
Stream#FLUSH_NONE Apenas liberar recursos
Stream#FLUSH_READ Descarregar bytes a serem lidos
Stream#FLUSH_WRITE Descarregar bytes já escritos
Stream#FLUSH_ALL Descarregar todos
Constantes Descrição
Stream#SEEK_SET Move o ponteiro de arquivo para o início
Stream#SEEK_CUR Posição corrente do ponteiro de arquivo
Stream#SEEK_END Move o ponteiro de arquivo para o fim
Erros
Constantes Descrição
Stream#E_SUCCESS Sucesso
Stream#E_CANCELED Cancelamento
Stream#E_TIMEOUT Timeout
Stream#E_UNKNOW Erro desconhecido
Stream#E_NO_DATA Sem dados
Stream#E_POS_INV Posição inválida
Stream#E_ER_OP_INV Operação não suportada pelo stream
Stream#E_ER_WRITE Erro de escrita
Stream#E_ER_READ Erro de leitura
Stream#E_ER_SCKT_BASE Erros base API de socket
Sumário de Funções
Função Descrição
create Criar um stream de dados
read Leitura de dados do stream
write Escrita de dados do stream
seek Move o ponteiro no stream
flush Enviar dados em memória para o destino correto
available Indicará p numero de bytes disponiveis no stream para função de leitura
copy Copia dados entre streams
getType Recupera o tipo ou o módulo que implementa o stream
getCustom Recupera o parâmetro customization
getParent Recupera o stream pai do stream informado
getTimeout Recupera o tempo de espera na leitura/escrita de dados
setTimeout Ajusta o tempo de espera na leitura/escrita de dados
getLastError Recuperar o código de erro da ultima operação sobre o stream
setLastError Definir o código de erro da ultima operação sobre o stream
setFeedback Ajustar o módulo que tem o tratamento de feedback
getFeedback Recuperar o módulo que trata o feedback
feedback Função de callback para casos de operações de grande custo
create

Stream#create(stream, source, customization); Criar um stream de dados

Parâmetros
  • stream - Stream a ser decorado ou invalid
  • source PhFile | PhComm | PhBuffer | Módulo em script que implementará operações no stream
  • customization - Será mantido no stream podendo ser recuperado por getCustom(stream)
Retorno

invalid ou stream criado


read

Stream#read(stream, buffer, start, length); Leitura de dados do stream

Parâmetros
  • stream - Controlador de stream previamente criado
  • buffer - Deverá ser um PhBuffer que receberá os dados
  • start - Posição no buffer que receberá o primeiro byte
  • length - Quantidade de bytes que deverá ser copiado
Retorno

número de bytes lidos ou número negativo indicando o erro


write

Stream#write(stream, buffer, start, length); Escrita de dados no stream

Parâmetros
  • stream - Controlador de stream previamente criado
  • buffer - Deverá ser um PhBuffer que fornecerá os dados
  • start - Posição no buffer que será lido o primeiro byte
  • length - Quantidade de bytes que deverá ser copiado
Retorno

return número de bytes copiados ou número negativo indicando o erro


seek

Stream#seek(stream, offset, origin); Move o ponteiro no stream

Parâmetros
  • stream - Controlador de stream previamente criado
  • offset - Numero de bytes para o deslocamento
  • origin - Ponto de partida para o deslocamento
Retorno

Numero de bytes deslocados ou negativo com o código de erro.

Validar se o status não é PHSTREAM_ER_OP_INV


flush

Stream#flush(stream, type); Enviar dados em memória para o destino correto

Parâmetros
  • stream - Controlador de stream previamente criado
  • type - Tipo de flush
Retorno

true se obteve sucesso, caso contrário false


available

Stream#available(stream); Indicará o numero de bytes disponiveis no stream para função de leitura

Parâmetros
  • stream - Controlador de stream previamente criado
Retorno

Inteiro com o numero de bytes que pode ser lido


copy

Stream#copy(outStream, inStream, length, block); Copia length dados do inStream para outStream

As posições atuais nos streams serão respeitadas

Parâmetros
  • outStream - Destino para os bytes em istream
  • inStream - Fonte dos bytes que serão copiados para outStream
  • length - Número de bytes que devem ser copiados
  • block - Tamanho dos blocos a serem copiados
Retorno

Inteiro com o numero de bytes copiados


getType

Stream#getType(stream); Recupera o tipo ou o módulo que implementa o stream

Parâmetros
  • stream - Controlador de stream previamente criado
Retorno

Integer com o tipo ou String com a URI do módulo


getCustom

Stream#getCustom(stream); Recupera o parâmetro customization

Parâmetros
  • stream - Controlador de stream previamente criado
Retorno

o valor que foi passado para customization no create


getParent

Stream#getParent(stream); Recupera o stream pai do stream passado

Parâmetros
  • stream - Controlador de stream previamente criado
Retorno

Stream pai do stream informado no parâmetro


getTimeout

Stream#getTimeout(stream); Recupera o tempo de espera na leitura/escrita de dados

Parâmetros
  • stream - Controlador de stream previamente criado
Retorno

inteiro em ms contendo o tempo do timeout


setTimeout

Stream#setTimeout(stream, timeout); Ajusta o tempo de espera na leitura/escrita de dados

Parâmetros
  • stream - Controlador de stream previamente criado
  • timeout - Tempo de espera na leitura/escrita de dados
Retorno

true se obteve sucesso, caso contrário false


getLastError

Stream#getLastError(stream); Recuperar o código de erro da ultima operação sobre o stream

Parâmetros
  • stream - Controlador de stream previamente criado
Retorno

0 caso não tenha ocorrido nenhum erro registrado ou o código de erro


setLastError

Stream#setLastError(stream, code); Ajusta o código de erro da ultima operação sobre o stream

Parâmetros
  • stream - Controlador de stream previamente criado
  • Zero para limpar ou um código de erro válido
Retorno

true se obteve sucesso, caso contrário false


setFeedback

Stream#setFeedback(stream, module); Ajustar o módulo que tem o tratamento de feedback

Parâmetros
  • stream - Controlador de stream previamente criado
  • module - Módulo com a implementação da função: extern feedback(self, operation, step, total)
Retorno

true se obteve sucesso, caso contrário false


getFeedback

Stream#getFeedback(stream); Recuperar o módulo que trata o feedback

Parâmetros
  • stream - Controlador de stream previamente criado
Retorno

módulo que trata o feedback. String vazia indicará que não há tratamento


feedback

Stream#feedback(stream, operation, step, total); Função de callback para casos de operações de grande custo. Essa função sempre DEVE ser NÃO blocante. No caso de cancelamento o stream ficará com o erro #PHSTREAM_CANCELED

Parâmetros
  • stream - Controlador de stream previamente criado
  • operation - pode ser #OPERATION_WRITE ou #OPERATION_READ
  • step - o passo corrente dentro do total
  • total - total ou zero quando não se sabe o total
Retorno

true para continuar o processamento ou false para cancelar

Exemplo
use url StreamCore   "package://vm#stream/stream.wmlsc"

function TesteStream()
{
  var buffer = PhBuffer.create("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget ligula eu lectus lobortis condimentum.");
  var saida = PhBuffer.create("");
  PhBuffer.resize(saida, PhBuffer.getSize(buffer));
  var stream = StreamCore#create(invalid, buffer, invalid);
  var streamext = StreamCore#create(invalid, saida, saida);
  StreamCore#seek(buffer, 0, StreamCore#SEEK_SET());
  Dialogs.alert("disponivel: " + StreamCore#available(stream));

  /* Ler 10 bytes do stream */
  var buffer2 = PhBuffer.create(10);
  StreamCore#read(stream, buffer2, 0, 10);
  Dialogs.alert("saida: " + PhBuffer.getAsString(buffer2, 0, 10));

  buffer2 = PhBuffer.create("Ipsum Lorem");

  Dialogs.alert("tipo:" + StreamCore#getType(stream));

  StreamCore#seek(stream, 0, StreamCore#SEEK_SET());
  if (StreamCore#write(stream, buffer2, 0, 10) > 0)
  {
    StreamCore#flush(stream);
    Dialogs.alert("dados gravados com sucesso");
  }
  else
    Dialogs.alert("falha ao gravar");

  StreamCore#seek(stream, 0, StreamCore#SEEK_SET());

  StreamCore#copy(streamext, stream, 10, 1024);
  StreamCore#flush(streamext);

  var custom = StreamCore#getCustom(streamext);

  Dialogs.alert("saida: " + String.toString(PhBuffer.getAsString(custom, 0, 10)));
}
disponivel: 106
saida: Lorem ipsu
tipo:2
dados gravados com sucesso
saida:Ipsum Lore

Compression

package://phpacket/compression.wmlsc

Prover interface para uso de compressão de dados.

#### Sumário de Funções

Função Descrição
compression Compacta um buffer passado.
unCompression Descompacta um buffer passado.

Constantes Descrição
COMPRESSION_NONE() Tipo de compressão nulo.
COMPRESSION_GZIP() Tipo de compressão GZiP.
COMPRESSION_ZIP() Tipo de compressão ZIP.

compression

Compression#compression(streamIn, streamOut, Lenght, compressionType, &writed)

Comprimir os dados de entrada.

Parâmetros
  • streamIn - Stream - Buffer a ser processado.
  • streamOut - Stream - Buffer processado
  • Lenght - Inteiro - Lengh dos dados a serem copiados
  • compressionType - Inteiro - Tipo da compactação de acordo as constantes.
  • &writed - Inteiro - armazena por referência a quantidade de bytes escritos
Retorno

true ou false.

Obs: "writed" contém o número de bytes escritos e o "streamOut" o Buffer processado.


Exemplo
use url Compression "package://phpacket/compression.wmlsc";
use url Stream      "package://vm#stream/stream.wmlsc";

function test()
{
 var writed = 0;
 var bufferIn      = PhBuffer.create(2);
 PhBuffer.set(bufferIn, 0, 255);
 PhBuffer.set(bufferIn, 1, 255);

 var streamIn      = Stream#create(invalid, bufferIn , "");

 var bufferOut = PhBuffer.create(2);
 var streamOut = Stream#create(invalid, bufferOut, "");

 var isCompression = Compression#compression(streamIn, streamOut, Stream#available(streamIn), Compression#COMPRESSION_GZIP(), &writed);

 var result = invalid;
 if(isCompression)
 {
   result = streamOut;
 }

 PhLog.debug("Quantidade de bytes: "+writed);
 PhLog.debug("Compressão ok? "+String.toString(isCompression));
 return result;
}

Saída

- Quantidade de bytes: 28
- Compressão ok? true

unCompression

Compression#unCompression(streamIn, streamOut, Lenght, compressionType)

Descompactar os dados de entrada.

Parâmetros
  • streamIn - Stream - Buffer a ser processado.
  • streamOut - Stream - Buffer processado
  • Lenght - Inteiro - Lengh dos dados a serem compiados
  • compressionType - Inteiro - Tipo da compactação de acordo as constantes.
Retorno

true ou false.

Obs: "streamOut" contém o Buffer processado


Exemplo
use url Compression "package://phpacket/compression.wmlsc";
use url Stream      "package://vm#stream/stream.wmlsc";

function test()
{
 var writed = 0;
 var bufferIn      = PhBuffer.create(2);
 PhBuffer.set(bufferIn, 0, 255);
 PhBuffer.set(bufferIn, 1, 255);
 var streamIn      = Stream#create(invalid, bufferIn , "");
 var buffer = PhBuffer.create(2);
 var stream = Stream#create(invalid, buffer, "");
 var isCompression = Compression#compression(streamIn, stream, Stream#available(streamIn), Compression#COMPRESSION_GZIP(), &writed);
 var isUnCompression = false;

 if(isCompression)
 {
   var tmpBuffer = PhBuffer.create(0);
   var unStream = Stream#create(invalid, tmpBuffer, "");

   Stream#seek(stream, 0, Stream#SEEK_SET());
   isUnCompression = Compression#unCompression(stream, unStream, Stream#available(stream), Compression#COMPRESSION_GZIP());
 }

 var result = invalid;
 if(isUnCompression)
 {
   result = unStream;
 }

 PhLog.debug("Descompactação ok? "+String.toString(isUnCompression));
 return result;
}

Saída

- Descompactação ok? true

Comunicação

Comm

package://libs#comm/comm.wmlsc

Implementa funções para uso de comunicação.

Sumário

Função Descrição
socket Criar um stream TCP/IP Já conectando ao destino.
direct Criar um Stream de fluxo de dados direto com o device.
disconnect Desconectar. Depois dessa chamada as funções de stream retornarão erro.
connected Função utilitária para checar o estado da conexão.
isComm Verifica se a instância é uma conexão.
waitConnection Torna blocante o estabelecimento de uma conexão socket.
socketListen Abre uma porta socket para escuta (não blocante). A realização da escuta é feita em background e a detecção do estabelecimento de uma conexão deverá ser observada através da função connected().

Funções


socket

Comm#socket(ip, porta, protocol, timeout, useTLS, CAfile, serverName, certName, cache)

Criar um stream TCP/IP Já conectando ao destino

  • Obs. Caso socket não blocante seja suportado o mesmo será aplicado. A conexão será checada novamente no primeiro write ou read do stream
Parâmetros
  • ip - string que representa o endereço (IPv4) da maquina destino
  • port - porta destino (inteiro)
  • protocol - Comm#COMM_PRTCL_TCP() ou Comm#COMM_PRTCL_UDP()
  • timeout - tempo de espera em ms
  • useTLS - usar protocolo de segurança TLS na comunicação
  • caFile - string com o nome do certificado digital a ser utilizado com o protocolo TLS
  • serverName - string com endereço do servidor
  • certName - string do nome do certificado
  • cache - Indica se vai usar mecanismo de cache
Retorno

Stream para fluxo de dados ou invalid


direct

Comm#direct(dev)

Criar um Stream de fluxo de dados direto com o device

Parâmetros
  • dev - controlador do device
Retorno

Stream para fluxo de dados ou invalid


disconnect

Comm#disconnect(handle)

Desconectar o socket. Depois dessa chamada as funções de stream retornarão erro.

Parâmetros
  • handle - criado anteriormente com Comm#socket() ou Comm#direct()
Retorno

não há


connected

Comm#connected(handle)

Função utilitária para checar o estado da conexão

Parâmetros
  • handle - criado anteriormente com Comm#socket() ou Comm#direct()
Retorno

booelan indicando se o socket está ou não conectado


isComm

Comm#isCom(handle)

Verifica se a instancia é uma conexão

Parâmetros
  • handle - criado anteriormente com Comm#socket() ou Comm#direct()
Retorno

true se for uma conexão ou false caso contrário.,


waitConnection

Comm#waitConnection(handle)

Torna blocante o estabelecimento de uma conexão socket

Parâmetros
  • handle - criado anteriormente com Comm#socket() ou Comm#direct()
Retorno

true se conseguiu estabelecer a conexão ou false se falhou


socketListen

Comm#socketListen(protocol, port)

Abre uma porta socket para escuta (não blocante). A realização da escuta é feita em background e a detecção do estabelecimento de uma conexão deverá ser observada através da função Comm#connected().

Parâmetros
  • protocol - Comm#COMM_PRTCL_TCP() ou Comm#COMM_PRTCL_UDP()
Retorno

Stream para fluxo de dados ou invalid

Exemplo
use url Comm         "package://libs#comm/comm.wmlsc";


function testeComm(useTLS, dev)
{
  var caFile = invalid;
  if (useTLS)
    caFile = "certicado.pem";
  var socket = Comm#socket("192.168.0.1", "1234", Comm#COMM_PRTCL_TCP(), 60000, useTLS, caFile);

  if (! isvalid socket)
  {
    socket = Comm#direct(dev);
    if (! isvalid socket)
    {
      Dialogs.alert("Conexao falhou!");
    }
  }

  if (Comm#isComm(socket) && Comm#connected(socket))
  {
    Dialogs.alert("Socket conectado com sucesso!");
    Comm#disconnect(socket);
    Dialogs.alert("Socket desconectado!");
  }

  /* Testando conexao blocante */
  socket = Comm#socket("192.168.0.1", "1234", Comm#COMM_PRTCL_TCP(), 60000, invalid, invalid);
  Dialogs.alert("Vai bloquear aqui");
  Comm#waitConnection(socket);
  Dialogs.alert("consegiu, timeout ou foi cancelada");

  if (Comm#isComm(socket) && Comm#connected(socket))
  {
    Comm#disconnect(socket);
  }

  /* Testando recebimento de conexao */
  socket = Comm#socketListen(Comm#COMM_PRTCL_TCP(), "1234");
  while (! Comm#connected(socket));

  if (Comm#connected(socket))
    Dialogs.alert("conectou");
  else
    Dialogs.alert("conexao falhou");
}
Saída
Socket conectado com sucesso!
Socket desconectado!
Vai bloquear aqui
consegiu, timeout ou foi cancelada
conectou

Http

package://libs#ms/http.wmlsc

Disponibiliza fuções para a comunicação utilizando o protocolo Http.

Sumário

Função Descrição
create Cria uma sessão Http
request Envia uma requisição Http
getInfo Recupera informações da sessão Http
get Envia uma requisição utilizando o método GET
post Envia uma requisição utilizando o método POST
head Envia uma requisição utilizando o método HEAD
put Envia uma requisição utilizando o método PUT
del Envia uma requisição utilizando o método DELETE
getStatusCode Retorna o código de status da resposta (ver HTTP Status Messages)
getContentLength Retorna o tamanho do conteúdo da resposta.
getSentLength Retorna a quantidade de dados enviados.
getReceivedLength Retorna a quantidade de dados recebidos.
addHeader Adiciona parametros ao Header da requisição.

Métodos Http

Constantes Descrição
Http#GET Método GET
Http#POST Método POST
Http#HEAD Método HEAD
Http#PUT Método PUT
Http#DELETE Método DELETE

Informações do Http

Constantes Descrição
Http#STATUS_CODE Código de status da resposta (ver HTTP Status Messages)
Http#CONTENT_LENGTH Retorna o tamanho do conteúdo da resposta
Http#BODY_LENGTH_SENT Retorna a quantidade de dados enviados
Http#BODY_LENGTH_RECEIVED Retorna a quantidade de dados recebidos

Códigos de retorno

Constantes Descrição
Http#SUCCESS Executado com sucesso
Http#UNKNOWN_ERROR Erro desconhecido
Http#ERROR_INVALID_HANDLE HTTP Session invalido (ver create)
Http#ERROR_SOCKET_INVALID Tentando utilizar um handle de stream inválido (ver create)
Http#ERROR_SOCKET_RECV Erro ao receber os dados
Http#ERROR_SOCKET_SEND Erro ao enviar os dados
Http#ERROR_HEADER_RECV Erro ao receber os headers do servidor
Http#ERROR_BAD_VERB Método HTTP incorreto ou não suportado
Http#ERROR_LONG_INPUT Recebido parametro com tamanho maior que o suportado
Http#ERROR_BAD_URL Erro no parse da url
Http#ERROR_BAD_HEADER Erro ao identificar os elementos recebidos no header
Http#ERROR_NOT_IMPLEMENTED Funcionalidade ainda não implementada
Http#EOS Fim da mensagem no stream
create

Http#create(stream);

Cria uma sessão Http

Parâmetros
  • stream handle da conexão para envio e recepção dos dados (ver Comm)
Retorno

Http Session criado ou invalid em caso de erro

Exemplos
use url Http   "package://libs#ms/http.wmlsc";
use url Comm   "package://libs#comm/comm.wmlsc";
use url Device "package://libs#dev/dev.wmlsc";
use url Eth    "package://libs#dev/eth.wmlsc";

function test ()
{
   var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("192.168.1.176", 8082,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          Dialogs.alert("Sessao Http criada");
        }
      }
   }

}

Saida:

Sessao Http criada
request

Http#request(httpSession, method, requestUrl, output, data);

Envia uma requisição Http

Parâmetros
  • httpSession Handle para Http Session criado
  • method Metodo Http que sera utilizado na requisição
  • requestUrl Endereço do recurso desejado
  • output Stream de saida para recepção dos dados
  • data String contendo os dados para envio ao servidor
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url Device     "package://libs#dev/dev.wmlsc";
use url Eth        "package://libs#dev/eth.wmlsc";

function test ()
{
   var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("127.0.0.1", 8080,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          var buffer = PhBuffer.create(0);
          var stream = Stream#create(invalid, buffer, "");

          Http#request(httpSession, Http#GET(), "http://127.0.0.1:8080", stream, "");
          Stream#flush(stream);

          PhLog.debug("Response: " + PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer)));
          PhLog.debug("Size: " + PhBuffer.getSize(buffer));

        }
      }
   }
}

Saida:

Response: respostaTeste
Size: 13
getInfo

Http#getInfo(httpSession, info);

Recupera informações da sessão Http

Parâmetros
  • httpSession Handle para Http Session criado
  • info Codigo da informação desejada
Retorno

Informação desejada ou invalid em caso de erro

Exemplos
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url Device     "package://libs#dev/dev.wmlsc";
use url Eth        "package://libs#dev/eth.wmlsc";
use url Map        "package://vm#core/map.wmlsc";

function test ()
{
   var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("127.0.0.1", 8080,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          var buffer = PhBuffer.create(0);
          var stream = Stream#create(invalid, buffer, "");
          var params = Map#create();

          Http#request(httpSession, Http#GET(), "http://127.0.0.1:8080", stream, "");
          Stream#flush(stream);

          PhLog.info("Status Code: " + Http#getInfo(httpSession, Http#STATUS_CODE()));

        }
      }
   }
}

Saida:

Status Code: 200
get

Http#get(httpSession, requestUrl, output, params)

Envia uma requisição utilizando o método GET

Parâmetros
  • httpSession Handle para Http Session criado
  • requestUrl Endereço do recurso desejado
  • output Stream de saida para recepção dos dados
  • params Map contendo parametros a serem enviados
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Message    "package://tefui#ui/message.wmlsc";
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url GlobalComm "package://phast#comm/global_comm.wmlsc";
use url CommSelect "package://phast#comm/select.wmlsc";

function test ()
{
 var requestUrl = "http://127.0.0.1:3000/users";
 var addr   = "127.0.0.1";
 var hostIp = Comm#dnsLookup(addr);
 var MODULE_NAME = "HTTPPOST";

 GlobalComm#resetUsedPriorityLevels();

 var ret = GlobalComm#startConnection(MODULE_NAME, hostIp, 3000, invalid, true);

 if(ret == GlobalComm#E_COMM_OK())
 {
   var global = GlobalComm#getGlobalComm();
   var comm   = CommSelect#getConnectionComm(global);

   if (isvalid comm)
   {
     var httpSession = Http#create(comm);
     var buffer      = PhBuffer.create(0);
     var stream      = Stream#create(invalid, buffer, "");

     var httpRet = Http#get(httpSession,  requestUrl,  stream,  invalid);

     if (httpRet == Http#SUCCESS() || httpRet == Http#EOS())
     {
       Dialogs.alert("Response: " + PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer)));
       Message#showMessage("Status code: " + Http#getStatusCode(httpSession), Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
     }
     else
     {
       Message#showMessage("Falha no request Http: " + httpRet, Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
     }
   }
   else
   {
     Message#showMessage("Falha ao conectar!", Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
   }
 }
 else
 {
   Message#showMessage("Falha ao conectar!", Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
 }

 GlobalComm#finishConnection(MODULE_NAME);
}

Saida:

Response: {"name":"testandoGet"}
Status code: 200
post

Http#post(httpSession, requestUrl, output, params, data)

Envia uma requisição utilizando o método POST

Parâmetros
  • httpSession Handle para Http Session criado
  • requestUrl Endereço do recurso desejado
  • output Stream de saida para recepção dos dados
  • params Map contendo os parametros a serem enviados
  • data String contendo os dados para envio ao servidor
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Message    "package://tefui#ui/message.wmlsc";
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url GlobalComm "package://phast#comm/global_comm.wmlsc";
use url CommSelect "package://phast#comm/select.wmlsc";
use url Json "package://libs#json/json.wmlsc";

function test ()
{
 var requestUrl = "http://127.0.0.1:3000/users";
 var addr   = "127.0.0.1";
 var hostIp = Comm#dnsLookup(addr);
 var MODULE_NAME = "HTTPPOST";

 GlobalComm#resetUsedPriorityLevels();

 var ret = GlobalComm#startConnection(MODULE_NAME, hostIp, 3000, invalid, true);

 if(ret == GlobalComm#E_COMM_OK())
 {
   var global = GlobalComm#getGlobalComm();
   var comm   = CommSelect#getConnectionComm(global);

   if (isvalid comm)
   {
     var httpSession = Http#create(comm);
     var buffer      = PhBuffer.create(0);
     var stream      = Stream#create(invalid, buffer, "");
     var json = Json#create();

     Json#add(json,  "name",  "testandoPost");

     var httpRet = Http#post(httpSession,  requestUrl,  stream, invalid, Json#encode(json));

     if (httpRet == Http#SUCCESS() || httpRet == Http#EOS())
     {
       Dialogs.alert("Response: " + PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer)));
       Message#showMessage("Status code: " + Http#getStatusCode(httpSession), Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
     }
     else
     {
       Message#showMessage("Falha no request Http: " + httpRet, Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
     }
   }
   else
   {
     Message#showMessage("Falha ao conectar!", Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
   }
 }
 else
 {
   Message#showMessage("Falha ao conectar!", Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
 }

 GlobalComm#finishConnection(MODULE_NAME);
}

Saida:

Response: {"name":"testandoPost"}
Status code: 201
put

Http#put(httpSession, requestUrl, output, params, data)

Envia uma requisição utilizando o método PUT

Parâmetros
  • httpSession Handle para Http Session criado
  • requestUrl Endereço do recurso desejado
  • output Stream de saida para recepção dos dados
  • params Map contendo os parametros a serem enviados
  • data String contendo os dados para envio ao servidor
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Message    "package://tefui#ui/message.wmlsc";
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url GlobalComm "package://phast#comm/global_comm.wmlsc";
use url CommSelect "package://phast#comm/select.wmlsc";
use url Json "package://libs#json/json.wmlsc";

function test (id)
{
 var requestUrl = "http://127.0.0.1:3000/users/" + id;
 var addr   = "127.0.0.1";
 var hostIp = Comm#dnsLookup(addr);
 var MODULE_NAME = "HTTPPUT";

 GlobalComm#resetUsedPriorityLevels();

 var ret = GlobalComm#startConnection(MODULE_NAME, hostIp, 3000, invalid, true);

 if(ret == GlobalComm#E_COMM_OK())
 {
   var global = GlobalComm#getGlobalComm();
   var comm   = CommSelect#getConnectionComm(global);

   if (isvalid comm)
   {
     var httpSession = Http#create(comm);
     var buffer      = PhBuffer.create(0);
     var stream      = Stream#create(invalid, buffer, "");
     var json = Json#create();

     Json#add(json,  "name",  "testandoPut");

     var httpRet = Http#put(httpSession,  requestUrl,  stream, invalid, Json#encode(json));

     if (httpRet == Http#SUCCESS() || httpRet == Http#EOS())
     {
       Dialogs.alert("Response: " + PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer)));
       Message#showMessage("Status code: " + Http#getStatusCode(httpSession), Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
     }
     else
     {
       Message#showMessage("Falha no request Http: " + httpRet, Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
     }
   }
   else
   {
     Message#showMessage("Falha ao conectar!", Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
   }
 }
 else
 {
   Message#showMessage("Falha ao conectar!", Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
 }

 GlobalComm#finishConnection(MODULE_NAME);
}

Saida:

Response: {"name":"testandoPut"}
Status code: 201
del

Http#del(httpSession, requestUrl, output, params, data)

Envia uma requisição utilizando o método DELETE

Parâmetros
  • httpSession Handle para Http Session criado
  • requestUrl Endereço do recurso desejado
  • output Stream de saida para recepção dos dados
  • params Map contendo parametros a serem enviados
  • data string contendo os dados para envio ao servidor
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Message    "package://tefui#ui/message.wmlsc";
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url GlobalComm "package://phast#comm/global_comm.wmlsc";
use url CommSelect "package://phast#comm/select.wmlsc";

function test (id)
{
 var requestUrl = "http://127.0.0.1:3000/users/" + id;
 var addr   = "127.0.0.1";
 var hostIp = Comm#dnsLookup(addr);
 var MODULE_NAME = "HTTPDELETE";

 GlobalComm#resetUsedPriorityLevels();

 var ret = GlobalComm#startConnection(MODULE_NAME, hostIp, 3000, invalid, true);

 if(ret == GlobalComm#E_COMM_OK())
 {
   var global = GlobalComm#getGlobalComm();
   var comm   = CommSelect#getConnectionComm(global);

   if (isvalid comm)
   {
     var httpSession = Http#create(comm);
     var buffer      = PhBuffer.create(0);
     var stream      = Stream#create(invalid, buffer, "");

     var httpRet = Http#del(httpSession,  requestUrl,  stream,  invalid, invalid);

     if (httpRet == Http#SUCCESS() || httpRet == Http#EOS())
     {
       Dialogs.alert("Response: " + PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer)));
       Message#showMessage("Status code: " + Http#getStatusCode(httpSession), Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
     }
     else
     {
       Message#showMessage("Falha no request Http: " + httpRet, Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
     }
   }
   else
   {
     Message#showMessage("Falha ao conectar!", Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
   }
 }
 else
 {
   Message#showMessage("Falha ao conectar!", Message#DELAY_ALERT(), Message#BEEP_MESSAGE());
 }

 GlobalComm#finishConnection(MODULE_NAME);
}

Saida:

Status code: 204

Http#head(httpSession, requestUrl, output, params)

Envia uma requisição utilizando o método HEAD

Parâmetros
  • httpSession Handle para Http Session criado
  • requestUrl Endereço do recurso desejado
  • output Stream de saida para recepção dos dados
  • params Map contendo parametros a serem enviados
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url Device     "package://libs#dev/dev.wmlsc";
use url Eth        "package://libs#dev/eth.wmlsc";
use url Map        "package://vm#core/map.wmlsc";

function test ()
{
   var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("127.0.0.1", 8080,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          var buffer = PhBuffer.create(0);
          var stream = Stream#create(invalid, buffer, "");
          var params = Map#create();

          Map#put(params,  "id", 1);

          Http#head(httpSession, "http://127.0.0.1:8080", stream, params);
          Stream#flush(stream);

          PhLog.debug("Response: " + PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer)));
          PhLog.debug("Size: " + PhBuffer.getSize(buffer));

        }
      }
   }
}

Saida:

Response: respostaTeste
Size: 13
getStatusCode

Http#getStatusCode(httpSession)

Retorna o código de status da resposta (ver HTTP Status Messages)

Parâmetros
  • httpSession Handle para Http Session criado
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url Device     "package://libs#dev/dev.wmlsc";
use url Eth        "package://libs#dev/eth.wmlsc";
use url Map        "package://vm#core/map.wmlsc";

function test ()
{
   var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("127.0.0.1", 8080,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          var buffer = PhBuffer.create(0);
          var stream = Stream#create(invalid, buffer, "");
          var params = Map#create();

          Http#request(httpSession, Http#GET(), "http://127.0.0.1:8080", stream, "");
          Stream#flush(stream);

          PhLog.info("Status Code: " + Http#getStatusCode(httpSession));

        }
      }
   }
}

Saida:

Status Code: 200
getContentLength

Http#getContentLength(httpSession)

Retorna o tamanho do conteúdo da resposta.

Parâmetros
  • httpSession Handle para Http Session criado
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url Device     "package://libs#dev/dev.wmlsc";
use url Eth        "package://libs#dev/eth.wmlsc";
use url Map        "package://vm#core/map.wmlsc";

function test ()
{
   var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("127.0.0.1", 8080,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          var buffer = PhBuffer.create(0);
          var stream = Stream#create(invalid, buffer, "");
          var params = Map#create();

          Http#request(httpSession, Http#GET(), "http://127.0.0.1:8080", stream, "");
          Stream#flush(stream);

          PhLog.info("Content length: " + Http#getContentLength(httpSession));

        }
      }
   }
}

Saida:

Content length: 13
getSentLength

Http#getSentLength(httpSession)

Retorna a quantidade de dados enviados.

Parâmetros
  • httpSession Handle para Http Session criado
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url Device     "package://libs#dev/dev.wmlsc";
use url Eth        "package://libs#dev/eth.wmlsc";
use url Map        "package://vm#core/map.wmlsc";

function test ()
{
   var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("127.0.0.1", 8080,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          var buffer = PhBuffer.create(0);
          var stream = Stream#create(invalid, buffer, "");
          var params = Map#create();

          Http#request(httpSession, Http#POST(), "http://127.0.0.1:8080", stream, "testHttp");
          Stream#flush(stream);

          PhLog.info("Sent length: " + Http#getSentLength(httpSession));

        }
      }
   }
}

Saida:

Sent length: 8
getReceivedLength

Http#getReceivedLength(httpSession)

Retorna a quantidade de dados recebidos.

Parâmetros
  • httpSession Handle para Http Session criado
Retorno

Inteiro com o codigo de erro do request (0 == SUCCESS).

Exemplos
use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url Device     "package://libs#dev/dev.wmlsc";
use url Eth        "package://libs#dev/eth.wmlsc";
use url Map        "package://vm#core/map.wmlsc";

function test ()
{
   var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("127.0.0.1", 8080,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          var buffer = PhBuffer.create(0);
          var stream = Stream#create(invalid, buffer, "");
          var params = Map#create();

          Http#request(httpSession, Http#GET(), "http://127.0.0.1:8080", stream, "");
          Stream#flush(stream);

          PhLog.info("Received length: " + Http#getReceivedLength(httpSession));

        }
      }
   }
}

Saida:

Received length: 20
addHeader

Http#addHeader(httpSession, requestField, value)

Adiciona campos no cabeçario de uma requisição HTTP/HTTPS.

Parâmetros
  • httpSession Handle para Http Session criado
  • requestField Campo da requisição
  • value Valor atribuído ao campo da requisição
Exemplos
package samplehttp;

use url Http       "package://libs#ms/http.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";
use url Comm       "package://libs#comm/comm.wmlsc";
use url Device     "package://libs#dev/dev.wmlsc";
use url Eth        "package://libs#dev/eth.wmlsc";
use url Json       "package://libs#json/json.wmlsc";

extern function execute()
{
  var eth = Eth#create("");

   if (Device#connect(eth))
   {
      var socket = Comm#socket("127.0.0.1", 3000,
                   Comm#COMM_PRTCL_TCP(), 30000, false, invalid);

      if (isvalid socket)
      {
        var httpSession = Http#create(socket);

        if (isvalid httpSession)
        {
          var buffer = PhBuffer.create(0);
          var stream = Stream#create(invalid, buffer, "");

          var json = Json#create();
          Json#add(json,  "id",  6);
          Json#add(json,  "name",  "phoebus");
          Json#add(json,  "location",  "Brazil");

                  Http#addHeader(httpSession, "Authorization", "Bearer " + "token");
                  Http#addHeader(httpSession, "Accept-Encoding", "gzip");

          var strJson = Json#encode(json);
          Http#post(httpSession, "http://127.0.0.1:3000/users", stream, invalid, strJson);
          Stream#flush(stream, Stream#FLUSH_WRITE());
          Dialogs.alert("Response: " + PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer)));
          Dialogs.alert("Size: " + PhBuffer.getSize(buffer));

        }
      }
   }
}

Saida:

Response: 200

Mensageria

Json

package://libs#json/json.wmlsc

Interface para uso do parser Json (Java Script Object Notation)

Sumário

Função Descrição
add Adiciona um ítem ao Json
getAt Retorna o valor de um determinado índice do JSON
create Cria um objeto Json
count Retorna a quantidade de itens do objeto json ou do ítem
decode Transforma a string recebida em um objeto Json
decodeUTF8 Converte uma string UTF-8 para ISO-8859-1 (padrão windows)
encode Transforma o objeto Json recebido em uma string no formato JSON
get Retorna um ítem do Json
getKey Retorna a chave de um determinado índice do JSON
isJson Verifica se a instância pertence a classe JSON.

Funções


add

Json#add(json, key, value)

Adiciona um item ao Json

Parâmetros
  • Objeto json
  • Identificador do ítem requisitado
  • Valor de algum tipo nativo (int, boolean ou string) ou um objeto JSON
Retorno

Retorna true em caso de sucesso ou false em caso de falha.


getAt

Json#getAt(json, index)

Retorna o valor de um determinado índice do JSON

Parâmetros
  • json - Objeto json
  • index - Index do valor
Retorno

Retorna o valor do índice informado no parâmetro.


create

Json#create()

Cria um objeto Json

Parâmetros

Não há

Retorno

Objeto Json criado


count

Json#count(json)

Retorna a quantidade de itens do objeto json ou do item

Parâmetros

Objeto json

Retorno

A quantidade de itens no array ou um número negativo caso o parâmetro passado não seja válido.


decode

Json#decode(string)

Transforma a string recebida em um objeto Json

Parâmetros

string no formato Json

Retorno

Objeto Json ou invalid caso não seja possível fazer o parse da string recebida.


decodeUTF8

Json#decodeUTF8(string)

Converte uma string UTF-8 para ISO-8859-1 (padrão windows) Caracteres que não possam ser convertidos serão substituídos por uma interrogação invertida

Parâmetros

string no formato UTF-8

Retorno

string no formato ISO-8859-1


encode

Json#encode(json)

Transforma o objeto Json recebido em uma string no formato JSON

Parâmetros

Objeto Json

Retorno

string no formato Json


get

Json#get(json, key)

Retorna um item do Json. Podem ser retornados itens com algum tipo nativo (int, boolean ou string) ou um objeto JSON

Parâmetros
  • Objeto json
  • Identificador do ítem requisitado
Retorno

O valor do item com o identificador requisitado ou invalid caso o item não exista.


getKey

Json#getKey(json, index)

Retorna a chave de um determinado índice do JSON

Parâmetros
  • Objeto json
  • index
Retorno

Retorna a chave do índice informado no parâmetro.


isJson

Json#isJson(json)

Verifica se a instancia pertence a classe JSON.

Parâmetros

Objeto json

Retorno

Retorna true se for um JSON e false caso contrário.

Exemplo
use url Json         "package://libs#json/json.wmlsc";



function testeJson()
{
  var strJson = '{'                          +
                  '"botaoExemplo": {'        +
                     '"area": {'             +
                       '"x": 20,'            +
                       '"y": 20,'            +
                       '"w": 90,'            +
                       '"h": 50 '            +
                      '},'                   +
                     '"background": {'       +
                       '"image": {'          +
                         '"name": "BOT1",'   +
                         '"code": 13,'       +
                         '"align": ['        +
                           '"left",'         +
                           '"vertical"'      +
                         ']'                 +
                        '}'                  +
                      '},'                   +
                      '"label": {'           +
                        '"visible": true,'   +
                        '"align": ['         +
                          '"center",'        +
                          '"vertical"'       +
                        ']'                  +
                      '}'                    +
                    '}'                      +
                 '}';
  var json = Json#decode(strJson);
  if (isvalid json)
  {
    if (Json#isJson(json))
    {
      Dialogs.alert("obj json:"+String.toString(json));
      Dialogs.alert("Qtd de itens: " +  String.toString(Json#count(json)));
      Dialogs.alert(Json#encode(json));

      var botao = Json#get(json, "botaoExemplo");
      Dialogs.alert(Json#encode(Json#get(botao, "background")));

      var label = Json#get(botao, "label");
      Dialogs.alert("label antes: " + Json#encode(label));

      Json#add(label, "teste", "teste add");
      Dialogs.alert("label depois: " + Json#encode(label));
    }
    else
      Dialogs.alert("Nao eh um obj json");
  }
  else
    Dialogs.alert("Json invalido");
}
Saída
{
  "botaoExemplo": {
   "area": {
     "y": 20,
     "w": 90,
     "h": 50
    },
   "background": {
     "image": {
       "name": "BOT1",
       "code": 13,
       "align": [
         "left",
         "vertical"
       ]
      }
    },
    "label": {
      "visible": true,
      "align": [
        "center",
        "vertical"
      ]
    }
  }
 }
Qtd de itens: 1
"image": {
     "name": "BOT1",
     "code": 13,
     "align": [
       "left",
       "vertical"
     ]
  }
label antes: {
      "visible": true,
      "align": [
        "center",
        "vertical"
      ]
    }
label depois: {
      "visible": true,
      "align": [
        "center",
        "vertical"
      ],
      "teste": "teste add"
    }

XML

package://libs#xml/xml.wmlsc

Utilitário para uso da linguagem de marcação XML

Sumário

Função Descrição
create Criar um objeto XML.
getText Obtém o texto da uma tag XML.
getChild Obtém um elemento filho pelo nome.
getTag Obtém o nome da tag root do objeto XML.
getAttribute Obtém o valor de um atributo xml pelo nome.
addChild Adiciona um elemento filho em um objeto XML.
setAttribute Adicionar um atributo em um objeto XML.
count Retorna a quantidade de elementos filho uma objeto XML.
parse Transforma a string em um objeto XML.
toString Transforma um objeto XML em uma string.
childAt Obtém um elemento XML filho a partir do indice.
saveToFile Salva o objeto passado em um arquivo xml.
isXml Verifica se um objeto é do tipo XML.

Funções


create

XML#create(tagname);

Retorna um objeto xml.

Parâmetros
**tagName** - String que indica o nome da tag do objeto xml a ser criado.

Exemplo:

use url XML    "package://libs#xml/xml.wmlsc";

var xml = XML#create("tag");
Dialogs.alert(XML#isXml(xml));

Saida:

True

getText

XML#getText(xmlObj);

Retorna o conteudo no objeto xml passado

Parâmetros
**xmlObj** - Objeto xml.

Exemplo:

use url XML    "package://libs#xml/xml.wmlsc";

var xml = XML#parse("<hello>Ola!</hello>");
var result = XML#getText(xml);
Dialogs.alert(result);

Saida:

"Ola!"

getChild

XML#getChild(xmlObj, "child");

Retorna o filho ou invalid caso não ache um filho com o nome passado.

Parâmetros
**xmlObj** - Objeto xml.

**child** - Objeto xml filho que deseja pegar.

Exemplo:

use url XML    "package://libs#xml/xml.wmlsc";

 var xml = XML#parse("<hello><f>Ola!</f></hello>");
 var result = XML#getChild(xml, "f");
 Dialogs.alert(XML#isXml(result));

Saida:

true

getTag

XML#getTag(xmlObj);

Retorna o nome da tag do objeto xml passado

Parâmetros
**xmlObj** - Objeto xml.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xml = XML#create("root");
  var tagName = XML#getTag(xml);
  Dialogs.alert(tagName);

Saida:

"root"

getAttribute

XML#getAttribute(xmlObj, AttributeName);

Retorna o valor do atributo

Parâmetros
**xmlObj** - Objeto xml.

AttributeName - Nome do atributo que deseja pegar o valor.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xml = XML#parse("<produto preco='2000'>Computador</produto>");
  var att = XML#getAttribute(xml, "preco");
  Dialogs.alert(att);

Saida:

"2000"

addChild

XML#addChild(parent, child);

Adiciona um conteudo ao xml passado

Parâmetros
**parent** - Objeto xml pai.
**child** - Conteudo a ser adicionado ao pai. Pode ser um outro objeto XML ou um texto

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xmlPai = XML#create("pai");
  var xmlFilho = XML#create("filho");
  XML#addChild(xmlPai, xmlFilho);
  var filho = XML#getChild(xmlPai, "filho");
  Dialogs.alert(XML#isXml(filho));

  var root = XML#create("root");
  XML#addChild(root,"sou a tag root");
  Dialogs.alert(XML#getText(root));

Saida:

true
"sou a tag root"

setAttribute

XML#setAttribute(xmlObj, chave, valor);

Adiciona um atributo ao objeto xml passado.

Parâmetros
**xmlObj** - Objeto xml.

chave - Chave do atributo.

valor - Valor do atributo.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var root = XML#create("produto");
  XML#setAttribute(root, "preco", "200");
  Dialogs.alert(XML#getAttribute(root, "preco"));

Saida:

"200"

count

XML#count(xmlObj);

Conta a quantidade de filhos do objeto xml passado.

Parâmetros
**xmlObj** - Objeto xml.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xml = XML#parse("<produtos><produto></produto><produto></produto><produto></produto></produtos>");
  Dialogs.alert(XML#count(xml));

Saida:

3

parse

XML#parse(stringXml);

Retorna um objeto xml a partir da string passada.

Parâmetros
**stringXml** - String no formato xml que deseja converter para um objeto xml.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xml = XML#parse("<produtos><produto></produto><produto></produto><produto></produto></produtos>");
  Dialogs.alert(XML#isXml(xml));

Saida:

true

toString

XML#toString(xml);

Transforma um objeto xml em uma string

Parâmetros
**xml** - Objeto xml.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xml = XML#create("cliente");
  var nome = XML#create("nome");
  XML#addChild(nome, "phoebus");
  XML#addChild(xml, nome);
  Dialogs.alert(XML#toString(xml));

Saida:

"<?xml version='1.0' encoding='UTF-8'?><cliente><nome>phoebus</nome></cliente>"

childAt

XML#childAt(xml, index);

Retorna o filho do xml passado baseado na posição passada.

Parâmetros
**xml** - Objeto xml.

**index** - Posição que o filho de encontra.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xml = XML#parse("<pai><filho1></filho1><filho2></filho2></pai>");
  var filho2 = XML#childAt(xml, 1);
  Dialogs.alert(XML#isXml(filho2));
  Dialogs.alert(XML#toString(filho2));

Saida:

true
"<?xml version='1.0' encoding='UTF-8'?><filho2></filho2>"

saveToFile

XML#saveToFile(xml, stream);

Salva o objeto passado em um arquivo xml. Retorna true caso consiga e false caso contrario.

Parâmetros
**xml** - Objeto xml.

**stream** - Stream onde será salvo o objeto.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xml = XML#parse("<pai><filho1></filho1><filho2></filho2></pai>");
  var stream = File#createExt(fileName, File#O_CREAT());
  var result = XML#saveToFile(xml, stream);
  return result;

Saida:

true

isXml

XML#isXml(xmlObj);

Retorna true caso o parametro passado seja um objeto xml.

Parâmetros
**xml** - Objeto xml.

Exemplo:

  use url XML    "package://libs#xml/xml.wmlsc";

  var xml = XML#create("root");
  Dialogs.alert(XML#isXml(xml));

Saida:

true

Tlv

package://libs#tlv/tlv.wmlsc

Implementa suporte a tipos de dados TLV (Tag-Length-Value)

Veja: https://en.wikipedia.org/wiki/Type-length-value

Sumário

Função Descrição
create Cria um objeto TLV
set Ajusta o valor do obejto TLV
get Recupera o valor de um objeto TLV
load Cria um objeto para manipulação de uma coleção TVL. Porém será adicionado os elemntos TLV presentes no stream
save Serializa a coleção passada

Funções

create

Tlv#create(tag, value)

Criar um objeto TLV

Parâmetros
  • tag - Valor da etiqueta para o dado informado
  • value - PhBuffer com o valor da TAG a ser copiado
Retorno

Objeto tlv


set

Tlv#set(tlv, value)

Ajustar o valor do obejto TLV

Parâmetros
  • tlv - Objeto a ser ajustado criado com libs#tlv/tlv# create
  • value - PhBuffer com o valor da TAG a ser configurado
Retorno

Objeto tlv atualizado


get

Tlv#get(tlv)

Recuperar o valor de um objeto TLV

Parâmetros
  • tlv - Objeto a ser ajustado criado com libs#tlv/tlv.wmlsc# create
Retorno

Copia dos dados em um PhBuffer


load

Tlv#load(stream)

Recuperar o valor de um objeto TLV

Parâmetros

stream - stream com os dados no formato BER-TLV

Retorno

invalid em caso de erro ou o manipulador da coleção


save

Tlv#save(stream, list)

Serializar a coleção passada

Parâmetros

*stream - stream que recebeá os dados no formato BER-TLV *list - Phlist para ser serializada ou objeto TLV

Retorno

invalid indica problemas nos parâmetros ou numero de obj serializados


Exemplo
use url Tlv        "package://libs#tlv/tlv.wmlsc";
use url StreamCore "package://vm#stream/stream.wmlsc";


function BufferLoad(tlvObj)
{
 var buffer = PhBuffer.create(0);
 var stream = StreamCore#create(invalid, buffer, "");
 Tlv#save(stream, tlvObj);

 StreamCore#flush(stream);

 return buffer;
}

function testeTLVFull()
{
 var tlv = Tlv#create(0x1, PhBuffer.create("teste load"));
 var newTlv = Tlv#set(tlv, PhBuffer.create("teste do set"));
 var valueBuffer = Tlv#get(newTlv);
 var valor = PhBuffer.getAsString(valueBuffer, 0, PhBuffer.getSize(valueBuffer));
 Dialogs.alert("valor: " + valor);

 var buffer = PhBuffer.create(0);
 var stream = StreamCore#create(invalid, buffer, "");

  if (isvalid stream)
  {
    if (Tlv#save(stream, tlv))
    {
      StreamCore#seek(stream, StreamCore#SEEK_SET(),0);

      var loadTLV = Tlv#load(stream);
      if (isvalid loadTLV)
      {
        var result = typeof(loadTLV) == 6;
        if (result)
        {
          var newBuffer = bufferLoad(loadTLV);
          if (isvalid newBuffer)
          {
            valor = PhBuffer.getAsString(newBuffer, 0, PhBuffer.getSize(newBuffer));
            Dialogs.alert("valor recuperado: " + valor);
          }
          else
            Dialogs.alert("Falha no get");
        }
        else
          Dialogs.alert("result: "+String.toString(result));
      }
      else
        Dialogs.alert("Falha no loadTLV");
    }
    else
      Dialogs.alert("Falha ao salvar o tlv");
   }
   else
     Dialogs.alert("stream invalido");
}
Saída
valor: teste do set
valor recuperado: teste do set

Utilitários

QRCode

package://libs#qrcode/qrcode.wmlsc

Componente para geração de QR codes (Quick Response Code)

Veja: https://pt.wikipedia.org/wiki/C%C3%B3digo_QR

Sumário

Função Descrição
create Cria um objeto QR Code
encode Codifica um QR Code
setParam Configura algum parâmetro específico para a geração do QR Code
setVersion Define a versão do QR Code
setMode Define o modo de codificação dos dados de entrada para a geração do QR Code
setEcLevel Define o nível de correção de erros na geração do QR Code.
setMaskType Define o padrão de máscara para a geração do QR Code.

Constantes utilizadas

Format
Constantes Valor
QRCode#FMT_BMP 1
QRCode#FMT_PBM 3
QRCode#FMT_JSON 5
QRCode#FMT_DIGIT 6
QRCode#FMT_ASCII 7

Params
Constantes Valor
QRCode#PARAM_VERSION 0x00
QRCode#PARAM_MODE 0x01
QRCode#PARAM_ECLEVEL 0x02
QRCode#PARAM_MASKTYPE 0x03

Input coding modes
Constantes Valor Descrição
QRCode#MODE_AUTO -1 Automatic selection
QRCode#MODE_NUMERIC 0 Numeric
QRCode#MODE_ALNUM 1 Alphanumeric
QRCode#MODE_8BIT 2 8-bit
QRCode#MODE_KANJI 3 Chinese characters

Error Correction Levels
Constantes Valor Descrição
QRCode#EC_LEVEL_L 0 Level L - Approx 7%
QRCode#EC_LEVEL_M 1 Level M - Approx 15%
QRCode#EC_LEVEL_Q 2 Level Q - Approx 25%
QRCode#EC_LEVEL_H 3 Level H - Approx 30%

Funções


create

QRCode#create(string)

Cria um objeto QR Code conforme a string recebida como parâmetro

Parâmetros

string dados que serão codificados

Retorno

QR Code criado ou invalid caso não seja possível criar o QRCode


encode

QRCode#encode(qr, format, scale, stream)

Codifica um QR Code conforme os parâmetros recebidos.

Parâmetros
  • qr - QR Code criado
  • format - Formato de saída do QR codificado (ver seção de constantes)
  • scale - Define o nível de ampliação do QR Code gerado (1-16)
  • stream - Stream de saída para os dados codificados
Retorno

true em caso de sucesso, ou false caso contrario


setParam

QRCode#setParam(qr, param, value)

Configura algum parâmetro específico para a geração do QR Code

Parâmetros
  • qr - QR Code criado
  • param - Parâmetro a ser configurado (ver seção de constantes)
  • value - Valor a ser configurado no parâmetro
Retorno

true em caso de sucesso, ou false caso contrario


setVersion

QRCode#setVersion(qr, version)

Define a versão do QR Code. As versões estão entre 1 e 40. Na versão 1, a capacidade é de 20 caracteres alfanuméricos (EC Level M). Na versão 40, a capacidade é de 3391 caracteres alfanuméricos (EC Level M).

Por padrão a versão é definida automaticamente.

Parâmetros
  • qr - QRCode criado
  • version - Inteiro (1-40) com a versão a ser utilizada.
Retorno

true em caso de sucesso, ou false caso contrario


setMode

QRCode#setMode(qr, mode)

Define o modo de codificação dos dados de entrada para a geração do QR Code.

Parâmetros
  • qr - QRCode criado
  • mode - Modo a ser utilizado (ver seção de constantes).
Retorno

true em caso de sucesso, ou false caso contrario


setEcLevel

QRCode#setEcLevel(qr, ecLevel)

Define o nível de correção de erros na geração do QR Code. A correção de erros permite que um QRCode seja decodificado mesmo que esteja parcialmente danificado.

Por padrão o nível de correção definido é EC_LEVEL_L.

Parâmetros
  • qr - QRCode criado
  • ecLevel - Nivel de correção a ser utilizado (ver seção de constantes).
Retorno

true em caso de sucesso, ou false caso contrario


setMaskType

QRCode#setMaskType(qr, maskType)

Define o padrão de máscara para a geração do QR Code.

Por padrão a máscara é definida automaticamente.

Parâmetros
  • qr - QRCode criado
  • maskType - Inteiro (0-7) com a máscara a ser utilizada.
Retorno

true em caso de sucesso, ou false caso contrario

Exemplo
use url QRCode     "package://libs#qrcode/qrcode.wmlsc";


function testeQrCodeFull()
{
  var qrStr = "https://pt.wikipedia.org/wiki/Codigo_QR";
  var qr = QRCode#create(qrStr);
  var result;
  if (isvalid qr)
  {
    Dialogs.alert("QRCode criado com sucesso");
    var buffer = PhBuffer.create(0);
    var stream = StreamCore#create(invalid, buffer, "");
    if (QRCode#encode(qr, QRCode#FMT_BMP(), 4, stream))
    {
      result = QRCode#setParam(qr, QRCode#PARAM_MODE(), QRCode#MODE_AUTO());
      result = result && QRCode#setVersion(qr, 2);
      result = result && QRCode#setMode(qr, QRCode#MODE_NUMERIC());
      result = result && QRCode#setEcLevel(qr, QRCode#EC_LEVEL_H());
      result = result && QRCode#setMaskType(qr, 7);
      if (result)
        Dialogs.alert("Testes executados com sucesso");
      else
        Dialogs.alert("Falha ao executar os testes");
    }
    else
      Dialogs.alert("Falha ao codificar o QRCode");
  }
  else
  {
    Dialogs.alert("Falha ao criar o QRCode");
  }
}
Saída
QRCode criado com sucesso
Testes executados com sucesso

Cron

package://libs#cron/cron.wmlsc

Fornece funções para agendamento e execução de tarefas baseadsas em relógio, similar às utilizadas em sistemas operacionais UNIX.

Sumário

Função Descrição
cronExpression Faz o parse de uma expressão cron e cria um objeto CronExpression.
cronNextFireDate Indica a próxima data/hora em que a tarefa será executada.
cronExpression

Cron#cronExpression(expression)

Faz o parse de uma expressão cron e cria um objeto CronExpression.

Parâmetros
  • expression - String com a representação do novo objeto a ser criado.
Retorno

String com a descrição do erro ou um handle para o objeto CronExpression.

cronNextFireDate

Cron#cronNextFireDate(cron, afterdate)

Indica a próxima data/hora em que a tarefa será executada.

Parâmetros
  • cron - Handle do objeto CronExpression, obtido através da função cronExpression.
  • afterdate - Indica a partir de que data/hora inicial será checado o próximo evento.
Retorno

Datetime da próxima execução ou invalid em caso de erro.

Exemplo
use url cron     "package://libs#cron/cron.wmlsc";
use url Datetime "package://libs#date/datetime.wmlsc";

function cronTest()
{
 var cron         = cron#cronExpression("0 19 23 * * ?"); /* Executa as 23:19 todo dia */
 var datetime     = Datetime#getDateTime();               /* Data e hora correntes ex: 10/04/2017 17:30:00 */
 var nextDatetime = cron#cronNextFireDate(cron, datetime);

 Dialogs.alert("Proxima data/hora do cron: " + dateTimeAsStr("DD/MM/YY HH:MM:SS", nextDatetime));
}
Saída
Próxima data/hora do cron: 10/04/17 23:19:00

Regex

package://libs#regex/regex.wmlsc

Interface para uso de expressões regulares

Sumário

Função Descrição
compile Cria um objeto Json
match Transforma o objeto Json recebido em uma string no formato JSON
search Transforma a string recebida em um objeto Json
sub Retorna a quantidade de itens do objeto json ou do ítem

Metacaracteres suportados

Metacaractere Descrição
\ Escape
^ Inicio da string
. Qualquer caractere
$ Fim da string
| Alternação (ou)
() Agrupamento
[] Classe de caracteres
* 0 ou mais ocorrências
+ 1 ou mais ocorrências
? 1 ou 0 ocorrência
{n} Extamente n ocorrências
{n,} No mínimo n ocorrências
{n,m} No mínimo n e no máximo m ocorrências

Caracteres de escape

Caractere Descrição
\t Tabulação
\n Nova linha
\r Retorno do cursor
\f Nova página

Classes pré-definidas

Classe Descrição
\w Alfanumérico [0-9a-zA-Z]
\W Não-alfanumérico
\s Espaço
\S Diferente de espaço
\d Dígitos (0-9)
\D Não-dígitos
\x Dígitos hexadecimais
\X Dígitos não hexadecimais
\c Caracteres de controle
\C Caracteres que não sejam de controle
\p Pontuação
\P Não pontuação
\b Limite da palavra (borda)
\B Caracteres que não estejam no limite da palavra

Códigos de Erro

Constantes Descrição
Regex#NO_MATCH Nenhuma correspondência.
Regex#BADPAT Expressão inválida
Regex#ECOLLATE Agrupamento inválido
Regex#ECTYPE Classe de caractere desconhecida
Regex#EESCAPE Escape inválido
Regex#ESUBREG Referência inválida
Regex#EBRACK Uso incorreto dos operadores '[]'
Regex#EPAREN Uso incorreto dos operadores '()'
Regex#BADBR Uso incorreto dos operadores '{}'
Regex#ERANGE Conteúdo inválido em '{}'
Regex#ESPACE Problemas na alocação de memória
Regex#BADRPT Uso inválido dos operadores de repetição

Configurações Adicionais

Constantes Descrição
Regex#FLAG_NONE Comportamento padrão
Regex#FLAG_EXTENDED Habilitar padrões extendidos
Regex#FLAG_IGNORE_CASE Não faz restrições entre maiúsculas e minúsculas
Regex#FLAG_NEWLINE Trata o '\n' como um caractere de fim de linha
Regex#FLAG_NOSUB Ignora subexpressões. A string deverá corresponder ao padrão inteiro. A função irá retornar 0 se uma correspondência foi encontrada e um código de erro caso contrário.

Funções

compile

Regex#compile(pattern, flags)

Compila um padrão e retorna uma instância do Regex.

Parâmetros
  • pattern - Padrão procurado
  • flags - Opções (Ver seção Configurações Adicionais)
Retorno

Instância do Regex, código erro (ver seção Códigos de Erro) ou invalid em caso de parâmetros incorretos

Exemplos
use url Regex "package://libs#regex/regex.wmlsc";

function test ()
{
  var patterns = "(http|https|file):\\/\\/((\\w+\\.)" +
                 "{1,}\\w*)\\/\\?((\\w*)=(\\w*)&?){0,}";
  var re = Regex#compile(patterns, Regex#FLAG_NONE());

  if (isvalid re)
  {
    Dialogs.alert("Padrao compilado");
  }

}

Saida:

Padrao compilado
match

Regex#match(pattern, input, flags)

Validar se há ocorrencias do pattern em input.

Parâmetros
  • pattern - String com padrão procurado ou instância do Regex (ver Regex#compile)
  • input - String onde será feita a busca
  • flags - Opções (Ver seção Configurações Adicionais)
Retorno

Índice para a próxima busca na string em caso de sucesso ou código de erro caso contrário (ver seção Códigos de Erro)

Exemplos
use url Regex "package://libs#regex/regex.wmlsc";

function test ()
{
  var patterns = "(http|https|file):\\/\\/((\\w+\\.)" +
                 "{1,}\\w*)\\/\\?((\\w*)=(\\w*)&?){0,}";
  var re = Regex#compile(patterns, Regex#FLAG_NONE());

  if (isvalid re)
  {
    var phUrl   = "http://www.phoebus.com.br/?id=1";
    var matches = Regex#match(re, phUrl, Regex#FLAG_NONE());

    if (matches >= 0)
    {
      Dialog.alert("Padrao encontrado.");
    }
  }

}

Saida:

Padrao encontrado.

Regex#search(pattern, input, flags, captures)

Procura pelo padrão em pattern e retorna uma lista com as ocorrências

Parâmetros
  • pattern - Padrão procurado
  • input - String onde será feita a busca
  • flags - Opções (Ver seção Configurações Adicionais)
  • captures - PhType.STRINGLIST que será preenchido com as ocorrências encontradas
Retorno

Índice para a próxima busca na string em caso de sucesso ou código de erro caso contrário (ver seção Códigos de Erro)

Exemplos
use url Regex "package://libs#regex/regex.wmlsc";

function test ()
{
  var patterns = "(http|https|file):\\/\\/((\\w+\\.)" +
                 "{1,}\\w*)\\/\\?((\\w*)=(\\w*)&?){0,}";
  var re = Regex#compile(patterns, Regex#FLAG_NONE());

  if (isvalid re)
  {
    var phUrl  = "http://www.phoebus.com.br/?id=1";
    var groups = PhType.create(PhType.STRINGLIST);
    if (Regex#search(re, phUrl, Regex#FLAG_NONE(), groups) >= 0)
    {
      for (var i = 0; i < PhType.count(groups); i++)
      {
        Dialogs.alert("group: " + String.toString(PhType.getValue(groups, i)));
      }
    }

  }

}

Saida:

group: http://www.phoebus.com.br/?id=1
--

group: http
--

group: www.phoebus.com.br
--

group: com.
--

group: id=1
--

group: id
--

group: 1
sub

Regex#sub(pattern, repl, string, flags, count)

Substitui a ocorrência encontrada pela string em repl

Parâmetros
  • pattern - Padrão procurado
  • repl - String para substituição
  • string - String onde será feita a substituição
  • flags - Opções (Ver seção Configurações Adicionais)
  • count - Número de ocorrências que podem ser substituidas
Retorno

String modificada ou código erro (ver seção Códigos de Erro)

Exemplos
use url Regex "package://libs#regex/regex.wmlsc";

function test ()
{
  var patterns = "(http|https|file):\\/\\/((\\w+\\.)" +
                 "{1,}\\w*)\\/\\?((\\w*)=(\\w*)&?){0,}";
  var re = Regex#compile(patterns, Regex#FLAG_NONE());

  if (isvalid re)
  {
    var phUrl   = "http://www.phoebus.com.br/?id=1";
    var newUrl = Regex#sub(re, "\\1://\\2/?\\5=3", phUrl, Regex#FLAG_NONE(), 1);

    Dialogs.alert("newUrl: " + String.toString(newUrl));

  }

}

Saida:

newUrl: http://www.phoebus.com.br/?id=3

PhdmService

package://libs#phdm/service.wmlsc

O Phdm (Phoebus Download Manager) é o serviço responsável pelo deploy remoto de aplicações no POS.

Constantes

Tamanhos

Tamanhos definidos para o paramSet

Constantes Valor
PhdmService#SIZE_BYTE 1
PhdmService#SIZE_WORD 2
PhdmService#SIZE_DWORD 4

Constantes Valor
PhdmService#SIZE_TYPE_BIG_ENDIAN 2
PhdmService#SIZE_TYPE_LITTLE_ENDIAN 3
PhdmService#SIZE_TYPE_SHORT_BIG 4
PhdmService#SIZE_TYPE_SHORT_LITTLE 1

Comandos
Constantes Valor Descrição
PhdmService#CMD_DM_VERSION 0xA1 TAG do comando que retorna a versão da aplicação de telecarga
PhdmService#CMD_DM_BOOT 0xA2 TAG do comando que realiza tratamentos especiais no boot
PhdmService#CMD_DM_UPDATE 0xA3 TAG do comando que configura e executa todo o processo de telecarga
PhdmService#CMD_DM_RESET 0xA4 TAG do comando que apaga todas as configurações e arquivos de download

Tags - Parâmetros de entrada
Constantes Valor Descrição
PhdmService#TAG_DM_FRAGMENT 0x1F01 Tamanho em bytes do fragmento
PhdmService#TAG_DM_HASH 0x1F02 Estratégia de verificação de integridade dos dados
PhdmService#TAG_DM_COMPRESSION 0x1F03 Estratégia de compressão dos dados
PhdmService#TAG_DM_TIMEOUT 0x1F04 Timeout para a recepção dos dados, em milissegundos
PhdmService#TAG_DM_SIZE_HEADER 0x1F05 Tipo de tamanho enviado no cabeçalho do protocolo PhDM
PhdmService#TAG_DM_INTERRUPTION_LIMIT 0x1F06 Quantidade limite de interrupções no processo de telecarga
PhdmService#TAG_DM_LOGICAL_NUMBER 0x1F07 Identificação lógica do terminal
PhdmService#TAG_DM_APP_VERSIONS 0x3F08 Template com pares de tags de aplicação: nome + versão
PhdmService#TAG_DM_VERSION_NAME 0x1F08 Nome e versão da aplicação
PhdmService#TAG_DM_LOG 0x1F0B Habilita o registro de informações durante a telecarga
PhdmService#TAG_DM_APPID 0x1F10 Identificação da aplicação alvo da telecarga
PhdmService#TAG_DM_PROJECTID 0x1F11 Identificação do projeto de telecarga
PhdmService#TAG_DM_SITEID 0x1F12 identificação do estabelecimento
PhdmService#TAG_DM_MSG_PROGRESS_TT 0x1F13 Mensagem com título de progresso
PhdmService#TAG_DM_MSG_PROGRESS 0x1F14 Mensagem de progresso com cancelamento
PhdmService#TAG_DM_MSG_PROGRESS_OBRG 0x1F15 Mensagem de progresso obrigatória
PhdmService#TAG_DM_MSG_DEPLOY 0x1F16 Mensagem de carregamento de arquivos
PhdmService#TAG_DM_MSG_INSTALL 0x1F17 Mensagem de atualização concluída

Tags - Parâmetros de saída
Constantes Valor Descrição
PhdmService#CMD_DM_RETURN 0x3F20 Reposta para todos os comandos
PhdmService#TAG_DM_RETURN 0x1F20 TAG utilizada para o retorno dos comandos
PhdmService#TAG_DM_VERSION 0x1F21 Informa a versão do módulo de telecarga

Retornos dos comandos
Constantes Valor Descrição
PhdmService#RET_DM_OK 0 Sucesso na execução da operação
PhdmService#RET_DM_INVPARAM 1 Parâmetro de entrada inválido
PhdmService#RET_DM_MISSPARAM 2 Faltando um parâmetro de entrada do comando
PhdmService#RET_DM_NOT_CONNECTED 3 Comando enviado antes da conexão ter sido estabelecida
PhdmService#RET_DM_UNAUTHORIZED 4 Telecarga não autorizada para o terminal em questão
PhdmService#RET_DM_BUSY 5 Falha na telecarga devido a uma sobrecarga do sistema
PhdmService#RET_DM_CONNECTION_ERROR 6 A conexão não se encontra mais estabelecida
PhdmService#RET_DM_RECEIVE_TIMEOUT 7 Timeout na recepção dos dados
PhdmService#RET_DM_INTERRUPTED 8 Telecarga interrompida pelo operador
PhdmService#RET_DM_DEPLOY_ERROR 9 Os recursos vindos na telecarga encontram-se indisponíveis
PhdmService#RET_DM_INSTALL_ERROR 10 Falha na instalação das aplicações
PhdmService#RET_DM_ALLOC_MEMORY 11 Problema na alocação de memória
PhdmService#RET_DM_REQUEST_ERROR 12 Problema no envio do request da telecarga
PhdmService#RET_DM_RESPONSE_ERROR 13 Problema no início da resposta da telecarga

Erros
Constantes Valor Descrição
PhdmService#RET_ERR_NOK -1 Erro na execução da operação
PhdmService#RET_ERR_ACCESS -2 Sem previlégios para executar a operação com a aplicação de telecarga
PhdmService#RET_ERR_MEMORY -3 Problemas ao solicitar memória
PhdmService#RET_ERR_SEND -4 Não foi possível enviar o comando para a aplicação de telecarga
PhdmService#RET_ERR_REC -5 Não foi possível ler o comando da aplicação de telecarga
PhdmService#RET_ERR_PARAM -6 Algum parâmetro não pode ser processado na troca de comandos com a aplicação
PhdmService#RET_ERR_CONNECTED -7 A aplicação já solicitou um connect com a aplicação de telecarga
PhdmService#RET_ERR_OVERFLOW -8 O tamanho do comando ultrapassa o limite estabelecido
PhdmService#RET_ERR_INSUFFICIENT_BUFFER -9 O tamanho do valor da tag TAG_DM_VERSION ultrapassa o tamanho do buffer alocado
PhdmService#RET_ERR_EMPTY_VERSION -10 A tag TAG_DM_VERSION veio vazia

Funções

Sumário
Função Descrição
init Inicializa a aplicação PhDM Client
open Inicializa o meio de comunicação com a aplicação PhDM Client
close Finaliza o meio de comunicação com a aplicação PhDM Client
paramSet Seta um valor do tipo Byte, Word, DWord, String ou grupo de bytes em um parâmetro de entrada
paramSetStrList Seta um valor template em um parâmetro de entrada
cmdVersion Retorna a versão do módulo de telecarga no formato M.m.p (Major, Minor e Patch)
cmdBoot Comando necessário para tratar pendências de telecargas anteriores, não concluídas
cmdUpdate Inicia ou continua o processo de telecarga

init

PhdmService#init()

Inicializa a aplicação PhDM Client.

Parâmetros

Não há

Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url PhdmService  "package://libs#phdm/service.wmlsc";


function testePhdm()
{
  var result = PhdmService#init();
  if (result)
  {
    Dialogs.alert("Servico Phdm iniciado com sucesso");
  }
  else
    Dialogs.alert("Falha ao iniciar o servico Phdm");
}
Saída
Servico Phdm iniciado com sucesso

open

PhdmService#open()

Inicializa o meio de comunicação com a aplicação PhDM Client.

Parâmetros

Não há

Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url PhdmService  "package://libs#phdm/service.wmlsc";


function testePhdm()
{
  var result = PhdmService#open();
  if (result)
  {
    Dialogs.alert("Comunicacao iniciada com sucesso");
  }
  else
    Dialogs.alert("Falha ao iniciar a comunicacao");
}
Saída
Comunicacao iniciada com sucesso

close

PhdmService#close()

Finaliza o meio de comunicação com a aplicação PhDM Client.

Parâmetros

Não há

Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url PhdmService  "package://libs#phdm/service.wmlsc";


function testePhdm()
{
  if (PhdmService#open())
  {
    if (PhdmService#close())
      Dialogs.alert("Comunicacao finalizada com sucesso");
    else
      Dialogs.alert("Falha ao encerrar a comunicacao");
  }
  else
    Dialogs.alert("Falha ao iniciar a comunicacao");
}
Saída
Comunicacao finalizada com sucesso

paramSet

PhdmService#paramSet(tag, value)

Seta um valor do tipo Byte, Word, DWord, String ou grupo de bytes em um parâmetro de entrada.

Parâmetros
  • tag - Valor da TAG que deve ser do tipo template
  • value - PhType com valor para a tag
Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url PhdmService  "package://libs#phdm/service.wmlsc";


function testePhdm2()
{
  var result = PhdmService#paramSet(PhdmService#TAG_DM_INTERRUPTION_LIMIT(), PhType.set(PhType.create(PhType.BYTE), 3));
  if (result)
  {
    Dialogs.alert("Parametro setado com sucesso");
  }
  else
    Dialogs.alert("Falha ao setar o parametro");
}
Saída
Parametro setado com sucesso

paramSetStrList

PhdmService#paramSetStrList(tag, value)

Seta um valor template em um parâmetro de entrada.

Cria a TAG que tem como dado uma lista de tags com o mesmo valor porém do tipo primitivo

Parâmetros
  • tag - Valor da TAG que deve ser do tipo template
  • values - Lista com valores das tags primitivas
Retorno

true em caso de sucesso e false em caso de falha. invalid em caso de erro.

Exemplo
use url PhdmService  "package://libs#phdm/service.wmlsc";


function testePhdm3()
{
  var version = PhdmService#cmdVersion();
  var result = PhdmService#paramSetStrList(PhdmService#TAG_DM_APP_VERSIONS(),
    [PhType.set(PhType.create(PhType.STRING), "PhDMClient"), version]);
  if (result)
  {
    Dialogs.alert("Parametro setado com sucesso");
  }
  else
    Dialogs.alert("Falha ao setar o parametro");
}
Saída
Parametro setado com sucesso

cmdVersion

PhdmService#cmdVersion()

Retorna a versão do módulo de telecarga no formato M.m.p (Major, Minor e Patch); por exemplo, "1.0.0".

Parâmetros

Não há

Retorno

version String com a versão do módulo de telecarga, no formato M.m.p (Major, Minor e Patch), por exemplo, "1.0.0". (previamente alocado). Ou invalid em caso de erro.

Exemplo
use url PhdmService  "package://libs#phdm/service.wmlsc";


function testePhdm3()
{
  var version = PhdmService#cmdVersion();
  if (isvalid version)
  {
    Dialogs.alert("Versao recuperada com sucesso");
  }
  else
    Dialogs.alert("Falha ao recuperar a versao");
}
Saída
Versao recuperada com sucesso

cmdBoot

PhdmService#cmdBoot()

Comando necessário para tratar pendências de telecargas anteriores, não concluídas.

Parâmetros

Não há

Retorno

true caso de sucesso, false em caso de falha no envio do comando ou invalid em caso contrário

Exemplo
use url PhdmService  "package://libs#phdm/service.wmlsc";


function testePhdm4()
{
  var result = PhdmService#cmdBoot();
  if (result)
  {
    Dialogs.alert("Comando executado com sucesso");
  }
  else
    Dialogs.alert("Falha na execucao do comando");
}
Saída
Comando executado com sucesso

cmdUpdate

PhdmService#cmdUpdate()

Inicia ou continua o processo de telecarga. Se uma telecarga prévia foi interrompida, ela será continuada através desta mesma operação.

Parâmetros

Não há

Retorno

true caso de sucesso ou false em caso de falha no envio do comando e um dos seguintes valores em caso contrário:

  • RET_DM_INVPARAM
  • RET_DM_MISSPARAM
  • RET_DM_NOT_CONNECTED
  • RET_DM_UNAUTHORIZED
  • RET_DM_BUSY
  • RET_DM_CONNECTION_ERROR
  • RET_DM_RECEIVE_TIMEOUT
  • RET_DM_INTERRUPTED
  • RET_DM_DEPLOY_ERROR
  • RET_DM_INSTALL_ERROR
Exemplo
use url PhdmService  "package://libs#phdm/service.wmlsc";


function testePhdm4()
{
  var versions = [ "APP1 1.0", "APP2 2.0", "_APP3 5.6", invalid ];

  PhdmService#open();

  PhdmService#paramSet(PhdmService#TAG_DM_FRAGMENT(), PhType.set(PhType.create(PhType.DWORD), 2048));
  PhdmService#paramSet(PhdmService#TAG_DM_LOGICAL_NUMBER(), PhType.set(PhType.create(PhType.STRING), "00000001"));
  PhdmService#paramSet(PhdmService#TAG_DM_SIZE_HEADER(), PhType.set(PhType.create(PhType.BYTE), 4));
  PhdmService#paramSet(PhdmService#TAG_DM_INTERRUPTION_LIMIT(), PhType.set(PhType.create(PhType.BYTE), 10));
  PhdmService#paramSet(PhdmService#TAG_DM_APPID(), PhType.set(PhType.create(PhType.DWORD), 1010));
  PhdmService#paramSet(PhdmService#TAG_DM_PROJECTID(), PhType.set(PhType.create(PhType.DWORD), 1061));
  PhdmService#paramSetStrList(PhdmService#TAG_DM_APP_VERSIONS(), versions);

  PhdmService#paramSetStr(PhdmService#TAG_DM_SITEID(), "1");

  if (PhdmService#cmdUpdate())
    Dialogs.alert("Comando executado com sucesso");
  else
    Dialogs.alert("Falha na execucao");

  PhdmService#close();
}
Saída
Comando executado com sucesso

PhastService

package://phast#applet/service.wmlsc

É o serviço responsável por registrar e executar serviços no Phast.

Sumário

Função Descrição
register Registrar um serviço para ser chamado pelo Phast.
execute Executa o serviço que foi registrado anteriormente no Phast.

register

PhastService#register(service, script, func, inputs)

Registrar um serviço para ser chamado pelo Phast.

Parâmetros
  • service - string com o nome do serviço que sera registrado.
  • script - string com o módulo do script que representa o serviço que será executado.
  • func - string com o nome da função que será chamada.
  • inputs - lista com os parametros de entrada.
Retorno

void

Exemplo
use url AppletService "package://phast#applet/service.wmlsc";


extern function publicServices()
{
  var script = "package://tef/services.wmlsc";

  AppletService#register("tef.enable",             script, "paymentEnable",    1);
}

execute

PhastService#execute(service, params)

Executa o serviço que foi registrado anteriormente.

Parâmetros
  • service - string com o nome do serviço que sera registrado.
  • params - lista com os parametros do serviço.
Retorno

void

Exemplo
use url Service      "package://phast#applet/service.wmlsc";

extern function tefEnabled()
{
  Service#execute("tef.enable", [true]);
}

Persistência

Db

package://libs#db/db.wmlsc

Implementa a manipulação de banco de dados.

Arquivos binários baseados em estruturas utilizando o padrão CSTD. CSTD (Communication Standard) é um formato de banco de dados proprietário desenvolvido pela Phoebus, que funciona como um modelo de dados hierárquico. Podendo conter uma ou mais sub-tabelas dentro de uma mesma tabela.

Sumário

Função Descrição
open Abre uma nova conexão de banco de dados
openFromStream Abre uma nova conexão de banco de dados a partir de um stream de dados
insert Insere um novo registro no banco de dados
getSubTable Retorna a sub tabela associada ao registro e index da table atual
first Move o ponteiro do registro para o primeiro registro da tabela
last Move o ponteiro do registro para o último registro da tabela
next Avança o ponteiro para o próximo registro da tabela, caso exista.
prior Retrocede o ponteiro para o registro anterior da tabela, caso exista.
exportSubTable Exporta uma subtabela para uma nova tabela separada ou em um arquivo.
count Retorna o número de registros na tabela
set Persiste o registro atual com os valores encontrados em todos os campos da estrutura definida para a tabela
get Recupera o registro atual da tabela e carrega os valores dos campos da estrutura definida para a tabela
setField Atribui o valor ao campo na estrutura definida para a tabela
getField Obtém o valor de um campo previamente carregado
seek Move o registro atual para a posição determinada pelo index
erase Deleta uma tabela do banco de dados
recordDelete Deleta o registro atual
size Retorna o tamanho físico que a tabela ocupa no dispositivo de armazenamento em bytes.
recordSize Retorna o tamanho, em bytes, dos registros contidos em table
recordGet Carrega os valores encontrados no registro atual para a definição da estrutura
recordUpdate Atualiza o registro atual com os valores encontrados em todos os campos da estrutura definida para a table.
setStruct atribui a definição da estrutura que irá conter os valores dos registros à tabela informada no parâmetro.
getStruct Recupera a definição da estrutura que irá conter os valores dos registros
recordNumber Retorna o número de registros da tabela
getOwner Retorna o dono da tabela
subTablesSize Retorna o tamanho de uma tabela e suas respectivas sub-tabelas
getLFG Recupera o valor LFG
insertSubTable Esta função configura uma estrutura hierárquica adicionando uma sub-tabela à tabela passada por parâmetro
setLFG Atribui o valor LFG
copy Copia uma tabela
isDB Verifica se a instancia pertence a classe PH_DB
structAsBuffer Transforma uma struct em um buffer
getName Recupera o nome da tabela
getItem Retorna uma cópia do registro atual apontado pelo db
find Retorna o primeiro registro de um db com um id específico
findNext Retorna o próximo registro de um db com um id específico
getAll Retorna uma lista com todos os registros de um db.
tableCopy Copia todos os registros da tabela src para a tabela dst. A cópia inclui subtables
tableCopyLimit Copia limitadamente registros da tabela src para a tabela dst. A cópia inclui subtables
recordCopy Copia um registro da tabela src para a tabela dst. A cópia inclui subtables
filter Retorna uma lista com todos os registros de um db que passaram no critério
open

Db#open(stream, struct_);

Abre uma nova conexão de banco de dados. Se o arquivo não existir será criado.

Parâmetros
  • stream - Stream para manipulação de arquivos que deve apontar para o banco de dados ou uma string com o nome do arquivo.
  • struct_ PhStruct ou definição da estrutura que contém a estrutura a ser registrada. Esse parâmetro não deve conter subestruturas.
Retorno

Um objeto Table ou invalid se o parâmetro de entrada não for válido. false é retornado em caso de erros.

openFromStream

Db#openFromStream(stream, struct_)

Abre uma nova conexão de banco de dados através de um stream de dados

Parâmetros
  • stream - Stream para manipulação de arquivos que deve apontar para o banco de dados.
  • struct_ PhStruct ou definição da estrutura que contém a estrutura a ser registrada. Esse parâmetro não deve conter subestruturas.
Retorno

Um objeto Table ou invalid se o parâmetro de entrada não for válido. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";
use url StreamFile "package://vm#stream/file.wmlsc";

function testeDb()
{
  var definition = "{codigo:string; nome:string}";
  var file = StreamFile#createExt("DBTS", StreamFile#O_CREAT());
  var tb = db#openFromStream(file, definition);
  if (isvalid tb)
  {
    Dialogs.alert("tabela criada com sucesso!");
  }
  else
  {
    Dialogs.alert("Erro na criacao da tabela");
  }
  return tb;
}
Saída
tabela criada com sucesso!

insert

Db#insert(table)

Insere um novo registro no banco de dados

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de open.
Retorno
  • true - se a inserção for feita com sucesso. false é retornado em caso de erros.
Exemplo
use url Db         "package://libs#db/db.wmlsc";
use url StreamFile "package://vm#stream/file.wmlsc";

function testeDb()
{
  var definition = "{codigo:string; nome:string}";
  var file = StreamFile#createExt("DBTS", StreamFile#O_CREAT());
  var tb = Db#openFromStream(file, definition);
  if (isvalid tb)
  {
    Dialogs.alert("tabela criada com sucesso!");
  }
  else
  {
    Dialogs.alert("Erro na criacao da tabela");
  }
  return tb;
}


function testeDb2(tb)
{
 if (isvalid tb)
 {
   var data = Db#getStruct(tb);
   PhStruct.set(data, "codigo", "1234");
   PhStruct.set(data, "nome", "Produto teste");
   if (Db#insert(tb))
   {
     Dialogs.alert("Registro inserido com sucesso");
   }
   else
   {
     Dialogs.alert("Falha na insercao do registro");
   }
 }
 else
 {
   Dialogs.alert("Tabela invalida");
 }
}

function main()
{
 testeDb2(testeDb());
}
Saída
tabela criada com sucesso!
Registro inserido com sucesso

getSubTable

Db#getSubTable(table, index)

Retorna a sub tabela associada ao registro e index da table atual

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de open.
  • index - posição da subtabela requisitada. Se um valor menor que zero é recebido, será assumido o valor zero. Da mesma forma, para um valor maior que o número de subtabelas existentes vai retornar o último existente.
Retorno

Um objeto table se a operação foi feita com sucesso ou invalid se um parâmetro de entrada não for apropriado ou em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb3(tb)
{

if (isvalid tb)
{
  Db#insertSubTable(tb, "{}");
  var subTable = Db#getSubTable(tb, 0);
  if (isvalid subTable)
  {
    Dialogs.alert("Sub Tabela recuperada com sucesso");
  }
  else
  {
    Dialogs.alert("Falha na recuperacao da subtabela");
  }
}
else
{
  Dialogs.alert("Tabela invalida");
}
}
Saída
Sub Tabela recuperada com sucesso

first

Db#first(table)

Seta o ponteiro do registro para o primeiro registro da tabela

Parâmetros

table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().

Retorno
  • true se a operação foi feita com sucesso. false é retornado em caso de erros.
Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb4(table)
{
  if (isvalid table)
  {
    if (Db#first(table))
    {
      Dialogs.alert("Estou no primeiro registro");
    }
    else
    {
      Dialogs.alert("Falha na execucao do metodo first");
    }
  }
  else
  {
    Dialogs.alert("Tabela invalida");
  }
}
Saída
Estou no primeiro registro

last

Db#last(table)

Seta o ponteiro do registro para o último registro da tabela

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb5(table)
{
  if (isvalid table)
  {
    if (Db#last(table))
    {
      Dialogs.alert("Estou no último registro");
    }
    else
    {
      Dialogs.alert("Falha na execucao do metodo last");
    }
  }
  else
  {
    Dialogs.alert("Tabela invalida");
  }
}
Saída
Estou no último registro

next

Db#next(table)

Avança o ponteiro para o próximo registro da tabela, caso exista

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb6(table)
{
  if (isvalid table)
  {
    if (Db#next(table))
    {
      Dialogs.alert("Avancei um registro");
    }
    else
    {
      Dialogs.alert("Falha na execucao do metodo next");
    }
  }
  else
  {
    Dialogs.alert("Tabela invalida");
  }
}
Saída
Avancei um registro

prior

Db#prior(table)

Retrocede o ponteiro para o registro anterior da tabela, caso exista

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb7(table)
{
  if (isvalid table)
  {
    if (Db#prior(table))
    {
      Dialogs.alert("Retrocedi um registro");
    }
    else
    {
      Dialogs.alert("Falha na execucao do metodo prior");
    }
  }
  else
  {
    Dialogs.alert("Tabela invalida");
  }
}
Saída
Retrocedi um registro

exportSubTable

Db#exportSubTable(table, index, stream)

Tabelas devem conter uma ou mais subtabelas. A função exportSubTable permite salvá-las numa nova tabela separada ou em um arquivo.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
  • index - Identifica a subtabela, onde 0 é o índice do primeiro, 1 é o índice do segundo e assim por diante.
  • stream - Stream para manipulação de arquivos onde a subtabela será copiada.
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";
use url StreamFile "package://vm#stream/file.wmlsc";

function testeDb8(table)
{
 if (isvalid table)
 {
   Db#insertSubTable(table, "{}");
   var temp = Db#getSubTable(table, 0);
   var file = StreamFile#createExt("SAIDA", StreamFile#O_CREAT());
   if (Db#exportSubTable(table, 0, file))
   {
     Dialogs.alert("sub tabela exportada com sucesso");
   }
   else
   {
     Dialogs.alert("erro na exportacao da sub tabela");
   }
 }
 else
 {
   Dialogs.alert("Erro na abertura da tabela");
 }
}
Saída
sub tabela exportada com sucesso

count

Db#count(table)

Retorna o número de registros na tabela. Esse número é independente da posição do registro atual.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

O número de registros em caso de sucesso, ou invalid se o parâmetro de entrada não for apropriado ou em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb9(table)
{
 if (isvalid table)
 {
   var qtd = Db#count(table);
   if (qtd)
     Dialogs.alert("O numero de registros eh: " + String.toString(qtd));
   else
     Dialogs.alert("Falha na execucao");
 }
 else
 {
   Dialogs.alert("Erro na abertura da tabela");
 }
}
Saída
O numero de registros eh: 1

set

Db#set(table)

  • Persiste o registro atual com os valores encontrados em todos os campos da estrutura definida para a tabela.
Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

*true** se a operação foi feita com sucesso. **false** é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb10(table)
{
 if (isvalid table)
 {
   var estrutura = Db#getStruct(table);
   var nome   = PhStruct.get(estrutura, "nome");

   PhStruct.set(estrutura, "nome", "Teste do set");
   if (Db#set(table))
     Dialogs.alert("Tabela setada com sucesso");
   else
     Dialogs.alert("Falha na execucao do metodo");
 }
 else
 {
   Dialogs.alert("Tabela invalida");
 }
}
Saída
Tabela setada com sucesso

get

Db#get(table)

Recupera o registro atual da tabela e carrega os valores dos campos na estrutura definida para a tabela.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";
use url StreamFile "package://vm#stream/file.wmlsc";

function testeDb11()
{
 var definition = PhStruct.create("{codigo:string; nome:string}");
 var file = StreamFile#createExt("DBTS", StreamFile#O_RDONLY());
 var tb = Db#openFromStream(file, definition);

 if (isvalid tb)
 {
   if (Db#get(tb))
   {
     Dialogs.alert("Nome: "+ PhStruct.get(definition, "nome"));
   }
   else
     Dialogs.alert('Falha na execucao do metodo');
 }
 else
 {
   Dialogs.alert("Tabela invalida");
 }
}
Saída
Nome: Teste do set

setField

Db#setField(table, field, value);

Atribui o valor ao campo na estrutura definida para a tabela.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
  • field - Indica o campo cujo valor deve ser setado.
  • value - Valor do novo campo.
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb12(table)
{
  if (isvalid table)
  {
    if (Db#setField(table, "nome", "Teste SetField"))
      Dialogs.alert('Campo setado com sucesso');
    else
      Dialogs.alert('Falha na execucao do metodo');
  }
  else
  {
    Dialogs.alert("Tabela invalida");
  }
}
Saída
Campo setado com sucesso

getField

Db#getField(table, field);

Obtém o valor de um campo previamente carregado.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
  • field - Indica o campo cujo valor deve ser recuperado.
Retorno

O valor contido no campo especificado, em caso de sucesso. Retorna invalid se os parâmetros passados não forem válidos.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb13(table)
{
 if (isvalid table)
 {
   var nome = Db#getField(table, "nome");
   if (isvalid nome)
     Dialogs.alert('Nome recuperado: ' + nome);
   else
     Dialogs.alert('Falha na execucao do metodo');
 }
 else
 {
   Dialogs.alert("Tabela invalida");
 }
}
Saída
Nome recuperado: Teste do Set

seek

Db#seek(table, index);

Move o registro atual para a posição determinada pelo index.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
  • index - Identifica a posição requisitada. O intervalo varia de 0 a (número de registros - 1). Valores fora desse intervalo serão convertidos para um dos limites.
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb14(table)
{
 if (isvalid table)
 {
   if (Db#seek(table, 0))
     Dialogs.alert('Estou no registro 0');
   else
     Dialogs.alert('Falha na execucao do metodo');
 }
 else
 {
   Dialogs.alert("Erro na abertura da tabela");
 }
}
Saída
Estou no registro 0

erase

Db#erase(table);

Deleta uma tabela do banco de dados.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb15(table)
{
 if (isvalid table)
 {
   if (Db#erase(table))
     Dialogs.alert('Tabela excluida com sucesso');
   else
     Dialogs.alert('Falha na execucao do metodo');
 }
 else
 {
   Dialogs.alert("Tabela invalida");
 }
}
Saída
Tabela excluida com sucesso

recordDelete

Db#recordDelete(table);

Deleta o registro atual e move o ponteiro para o próximo registro. Se o último registro estiver apagado, o ponteiro será movido para o registro anterior, caso exista.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb16(table)
{
 if (isvalid table)
 {
   if (Db#recordDelete(table))
     Dialogs.alert('O registro corrente foi excluido');
   else
     Dialogs.alert('Falha na execucao do metodo');
   }
   else
   {
     Dialogs.alert("Tabela invalida");
   }
}
Saída
O registro corrente foi excluido

size

Db#size(table);

Retorna o tamanho físico, em bytes, que a tabela ocupa no dispositivo de armazenamento.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

O tamanho da tabela ou invalid se o parâmetro de entrada não for apropriado.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb17(table)
{
 if (isvalid table)
 {
   var size = Db#size(table);
   if (isvalid size)
     Dialogs.alert('O tamanho da tabela eh: ' + String.toString(size) + " bytes");
   else
     Dialogs.alert('Falha na execucao do metodo');
 }
 else
 {
   Dialogs.alert("Tabela invalida");
 }
}
Saída
O tamanho da tabela eh: 45 bytes

recordSize

Db#recordSize(table);

Retorna o tamanho, em bytes, dos registros contidos em table

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

O tamanho do registro ou invalid se o parâmetro de entrada não for apropriado.

Exemplo
use url Db         "package://libs#db/db.wmlsc";

function testeDb18(table)
{
 if (isvalid table)
 {
   Db#seek(table, 1);
   var size = Db#recordSize(table);
   if (isvalid size)
     Dialogs.alert('O tamanho do registro eh: ' + String.toString(size) + " bytes");
   else
     Dialogs.alert('Falha na execucao do metodo');
 }
 else
 {
   Dialogs.alert("Tabela invalida");
 }
}
Saída
O tamanho da registro eh: 44 bytes

recordGet

Db#recordGet(table);

Veja DB#get()


recordUpdate

Db#recordUpdate(table);

Veja Dbb#set()


setStruct

Db#setStruct(table, struct_);

atribui a definição da estrutura que irá conter os valores dos registros à tabela informada no parâmetro.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
  • struct_ - Estrutura de dados que irá conter os valores dos registros. Deve ser um objeto da classe PhStruct.
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Db         "package://libs#db/db.wmlsc";
use url StreamFile "package://vm#stream/file.wmlsc";


function testeDb22()
{
 var def = "{codigo:string; nome:string;}";
 var file = StreamFile#createExt("DBTS", StreamFile#O_RDWR());
 var table = Db#openFromStream(file, def);
 if (isvalid table)
 {
   /* A estrutura original so contem codigo e nome
    * sera adicionado o campo qtd:word;
    */
   var definition = PhStruct.create("{codigo:string; nome:string; qtd:word}");
   if (Db#setStruct(table, definition))
   {
     Db#seek(table, 1);
     Db#setField(table, "qtd", 1);
     Dialogs.alert("Codigo: " + PhStruct.get(definition, "codigo"));
     Dialogs.alert("Nome: " + PhStruct.get(definition, "nome"));
     Dialogs.alert("Qtd: " + String.toString(PhStruct.get(definition, "qtd")));
     Db#set(table);
   }
   else
     Dialogs.alert("Erro na redefinicao da estrutura");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Codigo: 1234
Nome: Produto teste
Qd: 1

getStruct

Db#getStruct(table);

Recupera a definição da estrutura que irá conter os valores dos registros.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

Um objeto da classe PhStruct se a operação for bem sucedida. Em caso de erros, é retornado invalid.

Exemplo
use url Db         "package://libs#db/db.wmlsc";
use url StreamFile "package://vm#stream/file.wmlsc";


function testeDb23()
{
 var def = "{codigo:string; nome:string; qtd:word}";
 var file = StreamFile#createExt("DBTS", StreamFile#O_RDONLY());
 var table = Db#openFromStream(file, def);
 if (isvalid table)
 {
   var definition = Db#getStruct(table);
   if (isvalid definition)
   {
     Db#seek(table, 1);
     Dialogs.alert("Codigo: " + PhStruct.get(definition, "codigo"));
     Dialogs.alert("Nome: " + PhStruct.get(definition, "nome"));
     Dialogs.alert("Qtd: " + String.toString(PhStruct.get(definition, "qtd")));
   }
   else
     Dialogs.alert("Erro na recuperacao da definicao da estrutura");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Codigo: 1234
Nome: Produto teste
Qd: 1

recordNumber

Db#recordNumber(table);

Retorna o número do registro corrente na tabela.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

O número do registro onde está posicionado o ponteiro de registros da tabela.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb24(table)
{
 if (isvalid table)
 {
   for(var x = 0; x < Db#count(table); x++)
   {
     Db#seek(table, x);
     Dialogs.alert("Estou no registro: " + String.toString(Db#recordNumber(table)));
   }
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Estou no registro: 0
Estou no registro: 1

getOwner

Db#getOwner(table);

Retorna o proprietário da tabela. Se a tabela é o proprietário então a própria tabela é retornada.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

Um objeto Table se a operação ocorrer corretamente ou invalid em caso de erro ou de parâmetro incorreto.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb25(table)
{
 if (isvalid table)
 {
   Dialogs.alert("table: " + String.toString(table));
   var owner = Db#getOwner(table);
   if (isvalid owner)
   {
     Dialogs.alert("table Owner: " + String.toString(owner));
   }
   else
     Dialogs.alert("Falha ao retornar o proprietario da tabela");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
table: [PhDB, refCount: 3]
table Owner: [PhDB, refCount: 4]

subTablesSize

Db#subTablesSize(table);

Retorna o tamanho de uma tabela e suas respectivas sub-tabelas.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
Retorno

Um número inteiro referente ao tamanho da tabela, e sub-tabelas, passada por parâmetro ou invalid caso ocorra algum erro.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb26(table)
{
 if (isvalid table)
 {
   var size = Db#subTablesSize(table);
   if (isvalid size)
   {
     Dialogs.alert("Tamanho das subtables: " + String.toString(size));
   }
   else
     Dialogs.alert("Erro ao retornar o tamanho das subtabelas");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Tamanho das subtables: 0

getLFG

Db#getLFG(table, field);

Recupera o valor LFG. LFG (Large Field Group) Este grupo de campos se destina a campos geralmente grandes, em que sua completa leitura não seria possível em alguns equipamentos por falta de memória.

Na leitura do registro apenas a referência é atualizada, deixando para o programador providenciar uma forma segura de recuperar/utilizar os dados contidos nesses campos.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
  • field - Objeto que representa o LFG.
Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb27(table)
{
 if (isvalid table)
 {
   var fd = StreamFile#create("BG01", StreamFile#O_RDONLY());
   if (Db#getLFG(table, fd))
   {
     Dialogs.alert("Campo LFG recuperado com sucesso");
   }
   else
     Dialogs.alert("Falha ao recuperar o campo LFG");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Campo LFG recuperado com sucesso

insertSubTable

Db#insertSubTable(table, definition);

Esta função configura uma estrutura hierárquica adicionando uma sub-tabela à tabela passada por parâmetro. A partir deste modelo de inserção uma tabela pode ter mais de uma sub-tabela mas pode ter apenas uma tabela pai.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
  • definition - Objeto do tipo PhStruct ou PhDB ou alguma definição de estrutura que contenha a estrutura a ser armazenada.
Retorno

Um objeto do tipo table em caso de sucesso (esta tabela representa a nova sub-tabela recém inserida) em caso de erro será retornado invalid.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb27(table)
{
 if (isvalid table)
 {
   var subTable = Db#insertSubTable(table, "{codigoSubTable:string; descricaoSubTable:string}");
   if (isvalid subTable)
   {
     Dialogs.alert("Subtabela inserida com sucesso");
   }
   else
     Dialogs.alert("Falha na insercao da subtable");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Subtabela inserida com sucesso

setLFG

Db#setLFG(table, field);

Atribui o valor LFG. LFG (Large Field Group) Este grupo de campos se destina a campos geralmente grandes, em que sua completa leitura não seria possível em alguns equipamentos por falta de memória. Na leitura do registro apenas a referência é atualizada, deixando para o programador providenciar uma forma segura de recuperar/utilizar os dados contidos nesses campos.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia de PhDb#open() ou PhDb#getSubTable().
  • field - Objeto que representa o LFG.
Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb28(table)
{
 if (isvalid table)
 {
  var fd = StreamFile#create("BG01", StreamFile#O_RDONLY());
  if (Db#setLFG(table, fd))
  {
    Dialogs.alert("Campo LFG setado com sucesso");
  }
  else
    Dialogs.alert("Falha ao setar o campo LFG");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Campo LFG setado com sucesso

copy

Db#copy(dest, src);

Copia uma tabela.

Parâmetros
  • dest - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
  • src - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb29(table)
{
 if (isvalid table)
 {
    var def = "{codigo:string; nome:string; qtd:word}";
    var file = StreamFile#create("DBT2", StreamFile#O_CREAT());
    var dest = Db#openFromStream(file, def);
    if (Db#copy(dest, table))
    {
      Dialogs.alert("Tabela copiada com sucesso");
    }
    else
      Dialogs.alert("Falha ao copiar a tabela");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Tabela copiada com sucesso

isDB

Db#isDB(table);

Verifica se a instancia pertence a classe PH_DB.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
Retorno

true se o objeto pertence à classe PH_DB e false em caso contrário.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb30(table)
{
 if (isvalid table)
 {
   if (Db#isDB(table))
   {
     Dialogs.alert("O objeto pertence a classe PH_DB");
   }
   else
     Dialogs.alert("O objeto nao pertence a classe PH_DB");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
O objeto pertence a classe PH_DB

structAsBuffer

Db#structAsBuffer(Struct);

Transforma uma struct em um buffer

Parâmetros
  • Struct - referência de uma variável do tipo PhStruct
Retorno

buffer - buffer que receberá o conteúdo da PhStruct

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb31(table)
{
 if (isvalid table)
 {
   var structure = Db#getStruct(table);
   if (isvalid structure)
   {
     var buffer = Db#structAsBuffer(structure);
     if (isvalid buffer)
     {
       Dialogs.alert("Structure: " + PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer)));
     }
     else
       Dialogs.alert("Falha ao converter a estrutura");
   }
   else
     Dialogs.alert("Falha ao recuperar a estrutura");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Structure: 1234 Produto teste

getName

Db#getName(table);

Retorna o nome do arquivo em disco associado à tabela.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
Retorno

name - string com o nome do arquivo em disco.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb32(table)
{
 if (isvalid table)
 {
   var nome = Db#getName(table);
   Dialogs.alert("Name: " + nome);
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Name: DBTS

getItem

Db#getItem(table);

Retorna uma cópia do registro atual apontado pelo db. A cópia é feita para que o objeto retornado não seja alterado por manipulações futuras do db.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
Retorno

struct - PhStruct com a cópia da estrutura na posição corrente de table

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb33(table)
{
  if (isvalid table)
  {
    var structure = Db#getStruct(table);
    if (isvalid structure)
    {
      if (Db#get(table))
      {
        var buffer = Db#structAsBuffer(structure);
        var bufStr = PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer));

        var item = Db#getItem(table);
        buffer2 = Db#structAsBuffer(item);
        bufStr2 = PhBuffer.getAsString(buffer2, 0, PhBuffer.getSize(buffer2));
        /*
         * Observe que sao os mesmos dados com referencias diferentes, ou seja, e uma copia
         * da struct original da tabela. Sendo assim, essa struct nao afetara os dados da
         * struct original
         */
        Dialogs.alert("registro da tabela: " + bufStr + " referencia: " + String.toString(structure));
        Dialogs.alert("registro da tabela: " + bufStr2 + " referencia: " + String.toString(item));
      }
      else
        Dialogs.alert("Falha ao recuperar os dados para a estrutura");
    }
    else
      Dialogs.alert("Falha ao recuperar a definicao da tabela");
  }
  else
    Dialogs.alert("Tabela invalida");
}
Saída
registro da tabela: 1234 Produto teste referencia: [PhStruct, refCount 3]
registro da tabela: 1234 Produto teste referencia: [PhStruct, refCount 2]

find

Db#find(table, id);

Retorna o primeiro registro de um db com um id específico. A tabela deve obrigatoriamente conter um campo nomeado "id" em sua estrutura.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
  • id - inteiro com o valor do id a ser encontrado
Retorno

cópia do registro na posição corrente de id ou invalid se não encontrar o registro

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb32(table)
{
 if (isvalid table)
 {
   var id = 5;
   item = Db#find(table, id);
   if (isvalid item)
     Dialogs.alert("Item com o id " + id + " existe na tabela" );
   else
     Dialogs.alert("Item nao encontrado");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Item com o id 5 existe na tabela

findNext

Db#findNext(table, id);

Retorna o próximo registro de um db com um id específico. A tabela deve obrigatoriamente conter um campo nomeado "id" em sua estrutura.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
  • id - inteiro com o valor do id a ser encontrado
Retorno

cópia do registro na posição corrente de id ou invalid se não encontrar o registro

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb32(table)
{
 if (isvalid table)
 {
   var id = 5;
   item = Db#find(table, id);
   if (isvalid item)
   {
     for (i = 1; isvalid (item = Db#findNext(table, id)); i++);
     Dialogs.alert("Existe(m) " + i + "Items com o id " + id + " na tabela" );
   }

   else
     Dialogs.alert("Item nao encontrado");
 }
 else
   Dialogs.alert("Tabela invalida");
}
Saída
Exite(m) 2 Items com o id 5 na tabela

getAll

Db#getAll(table);

Retorna uma lista com todos os registros de um db.

Parâmetros
  • table - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
Retorno

Lista com cópia de todos registros de table

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb34(table)
{
  if (isvalid table)
  {
    var all = Db#getAll(table);
    for (var x = 0; x < PhList.count(all); x++)
    {
      var buffer = Db#structAsBuffer(all[x]);
      var str = PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer));
      Dialogs.alert(str);
    }
  }
  else
    Dialogs.alert("Tabela invalida");
}
Saída
1234 Produto teste
1234 Produto teste 2

tableCopy

Db#tableCopy(dst, src);

Copia todos os registros da tabela src para a tabela dst. A cópia inclui subtables.

Parâmetros
  • dst - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
  • src - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb35(table)
{
  if (isvalid table)
  {
    var def = "{codigo:string; nome:string; qtd:word}";
    var file = StreamFile#create("DBT2", StreamFile#O_CREAT());
    var dest = Db#openFromStream(file, def);
    if (Db#tableCopy(dest, table))
    {
       Dialogs.alert("Tabela copiada com sucesso");
     }
     else
       Dialogs.alert("Falha ao copiar a tabela");
  }
  else
    Dialogs.alert("Tabela invalida");
}
Saída
Tabela copiada com sucesso

tableCopyLimit

Db#tableCopyLimit(dst, src, limit);

Copia limitadamente registros da tabela src para a tabela dst. A cópia inclui subtables.

Parâmetros
  • dst - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
  • src - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
  • limit - n primeiros registro a copiar
Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb36(table)
{
  if (isvalid table)
  {
    var def = "{codigo:string; nome:string; qtd:word}";
    var file = StreamFile#create("DBT2", StreamFile#O_CREAT());
    var dest = Db#openFromStream(file, def);
    /* Copiar apenas os 5 primeiro registros */
    if (Db#tableCopyLimit(dest, table, 5))
    {
       Dialogs.alert("Tabela copiada com sucesso");
     }
     else
       Dialogs.alert("Falha ao copiar a tabela");
  }
  else
    Dialogs.alert("Tabela invalida");
}
Saída
Tabela copiada com sucesso

recordCopy

Db#recordCopy(dst, src);

Copia um registro da tabela src para a tabela dst. A cópia inclui subtables.

Parâmetros
  • dst - detino dos dados. Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
  • src - origem dos dados. Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
Retorno

true em caso de sucesso e false em caso de falha.

Exemplo
use url Db         "package://libs#db/db.wmlsc";


function testeDb37(table)
{
  if (isvalid table)
  {
    var def = "{codigo:string; nome:string; qtd:word}";
    var file = StreamFile#create("DBT2", StreamFile#O_CREAT());
    var dest = Db#openFromStream(file, def);
    Db#seek(table, 1);
    if (Db#recordCopy(dest, table))
    {
       Dialogs.alert("Registro copiado com sucesso");
     }
     else
       Dialogs.alert("Falha ao copiar o registro");
  }
  else
    Dialogs.alert("Tabela invalida");
}
Saída
Registro copiado com sucesso

filter

Db#filter(db, criteria_function, extraction_function);

Retorna uma lista com todos os registros de um db que passaram no critério da função criteria_function.

O retorno da função extraction_function serve para popular a lista retornada com dados do registro ao invés do próprio registro.

Parâmetros
  • db - Objeto table resultante de uma chamada prévia do PhDB.open ou PhDB.getSubTable;
  • criteria_function - função que controla o criterio utilizado na filtragem dos registros.
  • extraction_function - função que popula a lista retornada
Retorno

Lista com a cópia dos registros que atendem ao critério ou invalid

Exemplo
use url Db         "package://libs#db/db.wmlsc";


extern function criteria(db)
{
  var codigo = Db#getField(db, "codigo");
  return String.compare(codigo, "1235") == 0;
}


extern function extractRec(db)
{
  var element = PhStruct.create("{codigo:string; nome:string; qtd:word}");

  PhStruct.set(element, "codigo",  Db#getField(db, "codigo"));
  PhStruct.set(element, "nome",  Db#getField(db, "nome"));
  PhStruct.set(element, "qtd",  Db#getField(db, "qtd"));
  return element;
}


function testeDb38(table)
{

  if (isvalid table)
  {
    var all = Db#filter(table, "package://scripttest/doc.wmlsc#criteria" , "package://scripttest/doc.wmlsc#extractRec");
    if (isvalid all && PhList.count(all) > 0)
    {
      for(var i = 0; i < PhList.count(all); i++)
      {
        var buffer = Db#structAsBuffer(all[i]);
        if (isvalid buffer)
        {
          var str = PhBuffer.getAsString(buffer, 0, PhBuffer.getSize(buffer));
          Dialogs.alert("elemento: " + str);
        }
        else
          Dialogs.alert("Falha ao converter struct");
      }
    }
    else
      Dialogs.alert("Falha ao realizar o filtro");
  }
  else
    Dialogs.alert("Tabela invalida");
}
Saída
elemento: 1235 Product teste

Cstd

package://libs#db/cstd.wmlsc

Disponibiliza funções para a comunicação utilizando o Communication Standard (encapsulamento de tabelas Db)

Sumário
Função Descrição
create Cria uma estrutura CSTD para comunicação.
getField Obtém o valor de um campo da estrutura CSTD.
setField Seta o valor de um campo na estrutura definida.
attachDB Anexa uma table a estrutura CSTD
pack Salva o cstd em um stream
unpack Carrega os dados em uma estrututa cstd a partir de um Stream
size Calcula o tamanho dos dados que estão armazenados em CSTD
Constantes
Constante Valor Descrição
Cstd#HDR_COMM 0 Identifica o cabeçalho de comunicação.
Cstd#HDR_APP 1 Identifica o cabeçalho da aplicação.
Cstd#MAIN_DB 2 Identifica a tabela principal.

create

Cstd#create(def_header, def_main )

Cria uma estrutura CSTD para comunicação

Parâmetros
  • def_header - definição do header da aplicação
  • def_main - definição do main
Retorno

Um objeto CSTD ou invalid se os parâmetros de entrada não forem válidos.

Exemplo
use url Cstd "package://libs#db/cstd.wmlsc";

function test () {
  var strc   = "{field1:word;field2:byte;field3:version;field4:string}";
  var hdrApp = PhStruct.create("{id:word}"),
  var mainDB = PhStruct.create("{id:word}");
  var result = isvalid Cstd.create("", "") && isvalid Cstd.create("", mainDB) && isvalid Cstd.create(hdrApp, mainDB) && isvalid Cstd.create(strc, strc) && isvalid Cstd.create(hdrApp, strc) && isvalid Cstd.create("{id:word;id2:byte}", "{id:byte;field:version}");
  if (result)
  {
    Dialogs.alert("testes de create do CSTD executaram com sucesso");
  }
  else
    Dialogs.alert("Erro ao criar os objetos CSTD");
Saída
testes de create do CSTD executaram com sucesso
````

getField

Cstd#getField(cstd, type, field);

Obtém o valor de um campo da estrutura CSTD.

Parâmetros
  • cstd - Objeto table resultante de uma chamada prévia do Cstd#create({}, {});
  • type - #HDR_COMM, #HDR_APP, #MAIN_DB
  • field - Indica o campo cujo valor deve ser recuperado.
Retorno

O valor contido no campo especificado, em caso de sucesso. Retorna invalid se os parâmetros passados não forem válidos.

Exemplo
use url Cstd "package://libs#db/cstd.wmlsc";

function test (cstd)
{
  var datetime = Cstd.getField(cstd, Cstd.HDR_APP, "timestamp");
  if (isalid datetime)
  {
    Dialogs.alert("Campo recuperado com sucesso");
  }
  else
    Dialogs.alert("Falha no retorno do campo");
}
Saída
Campo recuperado com sucesso
````

setField

Cstd#setField(cstd, type, field, value);

Seta o valor de um campo na estrutura definida.

Parâmetros
  • cstd - Objeto table resultante de uma chamada prévia do Cstd#create({}, {});
  • type - #HDR_COMM, #HDR_APP, #MAIN_DB
  • field - field Indica o campo cujo valor deve ser setado.
  • value - Valor do novo campo.
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Cstd "package://libs#db/cstd.wmlsc";

function test (cstd)
{
  var result = Cstd.setField(cstd, Cstd.HDR_COMM, "posType", 5);
  if (result)
    Dialogs.alert("campo setado com sucesso");
  else
    Dialogs.alert("falha na escrita do campo");
}
Saída
campo setado com sucesso
````

attachDB

Cstd#attachDB(cstd, table);

Anexa uma table a estrutura CSTD

Parâmetros
  • cstd - Objeto table resultante de uma chamada prévia do Cstd#create({}, {});
  • table - Objeto table resultante de uma chamada prévia do PhDB#open ou PhDB#getSubTable.
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Cstd "package://libs#db/cstd.wmlsc";
use url Db   "package://libs#db/db.wmlsc";

function test ()
{
  var cstd   = Cstd.create("{}", "{}");
  var file = StreamFile#create("DBTS", StreamFile#O_RDONLY());
  var tb = Db#openFromStream(file, "{codigo:string; nome:string}");

  var result = PhCSTD.attachDB(cstd, tb);
  if (result)
    Dialogs.alert("Tabela anexada com sucesso");
  else
    Dialogs.alert("Erro ao anexar a tabela");
}
Saída
Tabela anexada com sucesso
````

pack

Cstd#pack(cstd, stream);

Salva o cstd em um stream

Parâmetros
  • cstd - Objeto table resultante de uma chamada prévia do Cstd#create({}, {});
  • stream - Stream para manipulação de arquivos/buffer.
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Cstd "package://libs#db/cstd.wmlsc";
use url Db   "package://libs#db/db.wmlsc";

function test ()
{
  var buffer = PhBuffer.create(0);
  var cstd   = Cstd.create("{}", "{}");

  var result = Cstd#pack(cstd, buffer);

  if (result)
    Dialogs.alert("cstd salvo com sucesso");
  else
    Dialogs.alert("Erro ao salvar");
}
Saída
cstd salvo com sucesso
````

unpack

Cstd#unpack(cstd, stream);

Carrega os dados em uma estrutura cstd a partir de um Stream

Parâmetros
  • cstd - Objeto table resultante de uma chamada prévia do Cstd#create({}, {});
  • stream - Stream para manipulação de arquivos/buffer.
Retorno

true se a operação foi feita com sucesso. false é retornado em caso de erros.

Exemplo
use url Cstd       "package://libs#db/cstd.wmlsc";
use url Db         "package://libs#db/db.wmlsc";
use url StreamFile "package://vm#stream/file.wmlsc";
use url Stream     "package://vm#stream/stream.wmlsc";

function test ()
{
  var stream = StreamFile#createExt("TESTE", StreamFile#O_RDWR());
  var cstd   = Cstd#create("{}", "{}");

  Stream#seek(stream, 0, Stream#SEEK_SET());

  if (! Cstd#unPack(cstd, stream))
    Dialogs.alert("Erro ao carregar");
  else
    Dialogs.alert("stream carregado com sucesso");
}
Saída
stream carregado com sucesso
````

size

Cstd#size(cstd);

Calcula o tamanho dos dados que estão armazenados em CSTD

Parâmetros
  • cstd - Objeto table resultante de uma chamada prévia do Cstd#create({}, {});
Retorno

tamanho em bytes que estão armazenados na estrutura

Exemplo
use url Cstd       "package://libs#db/cstd.wmlsc";

function test ()
{
  var cstd   = Cstd#create("{}", "{}");


  var size = cstd#size(cstd);
  Dialogs.alert("Tamanho dos dados: " + String.toString(size));
}
Saída
Tamanho dos dados: 10
````

Segurança

package://libs#secSec

Implementa funções para uso de segurança como criptografia e hash. Está dividido em 3 grupos de scripts.

  • Channel
Script Descrição
Channel Implementa algoritmos de criptografia sobre stream de dados
  • Crypt
Script Descrição
AES Implementação para uso de criptografia AES
Crypt Implementa funções para criptografia
DES Implementação para uso de criptografia DES
RSA Implementação para uso de criptografia RSA
  • Hash
Script Descrição
CRC Implementação para uso de criptografia CRC
DV Implementação para uso de dígito verificador
HASH Implementação para uso de algoritinmos de hash
MD5 Implementação para uso de criptografia MD-5 (Message Digest 5)
SHA Implementação para uso de criptografia SHA (Secure Hash Algorithm)

Channel

package://libs#sec#channel/channel.wmlsc

Implementação para uso de algoritinmos de criptografia sobre stream de dados.

Sumário

Função Descrição
create Criar um novo stream para canal seguro
session Recuperar dados da sessão anterior
isAvailable Indica se há suporte para criptografia sobre stream de dados


create

Channel#create(stream, session);

Criar um novo stream para canal seguro.

Funções de stream suportadas read/write

Parâmetros
  • stream - Controlador de stream a ser decorad
  • session - dados de uma sessão valida (pode ser invalid, criará uma sessão nova)
Retorno

invalid em caso de erro ou um handle para o stream seguro


session

Channel#session(stream);

Recuperar dados da sessão anterior.

Parâmetros
  • stream - Controlador de stream a ser decorad
Retorno

PhBuffer com os dados da sessão ou invalid em caso de erro.


isAvailable

Channel#isAvailable();

Indica se há suporte para criptografia sobre stream de dados

Parâmetros

Não há

Retorno

invalid ou false em caso de erro ou true em caso de sucesso.


Exemplo
function testeChannel()
{
  var result;
  var dev  = DeviceEth#create("");
  if (!SecStream#isAvailable())
  {
    Dialogs.alert ("SEM suporte a canal seguro?!");
    result  = false;
  }
  if (Device#connect(dev))
  {
    var socket = Comm#socket("127.0.0.1", "1234", Comm#COMM_PRTCL_TCP(), 30000, false, invalid);
    if (isvalid socket)
    {
      Dialogs.alert("Canal seguro");
      var sec = SecStream#create(StreamBuffer#create(StreamLen#create(socket, StreamData#SHORT_BIGENDIANN())), "");
      var session = SecStream#session(sec);
        if (isvalid session)
          Dialogs.alert("Sessao OK");
    }
  }

}
Saída
Sessao OK

Crypt

Sumário

AES

package://libs#sec#crypt/aes.wmlsc

Implementação para uso de criptografia AES. Advanced Encryption Standard (Padrão de Criptografia Avançada)

veja: https://pt.wikipedia.org/wiki/Advanced_Encryption_Standard

Sumário
Função Descrição
create Cria um controlador de criptografia AES


create

AES#create(mode, key)

Cria um controlador de criptografia AES.

Parâmetros
  • mode - Crypt#ECB ou Crypt#CBC
  • key - PhBuffer com 16, 24 ou 32 bytes (invalid gera randomicamente)
Retorno

controlador para funções em crypt.wmls


Exemplo
function testeAES()
{
  var key = PhBuffer.create("0x11223344556677880011335577991133");
  var iv = PhBuffer.create("0x11223344556677880011335577991133");

  var handler = AES#create(Crypt#CBC(iv), key);
  if (isvalid handler)
    Dialogs.alert("AES Criado com sucesso");
  else
    Dialogs.alert("Falha ao criar o AES");
}
Saída
AES Criado com sucesso

Crypt

package://libs#sec#crypt/crypt.wmlsc

Implementação de criptografia utilizando os algoritmos vistos anteriormente (AES, DES e RSA).

Sumário
Função Descrição
encrypt criptografa os dados recebidos por parâmetro
decrypt recupera os dados criptografados anteriormente com afunção crypt.
reset retorna o objeto cript ao estado inicial
description Recupera o nome do controlador
isCrypt Validar se o controlador passado é compativel com as funções da lib crypt


encrypt

Crypt#encrypt(crypt, data, output, len);

Criptografa os dados recebidos por parâmetro

Parâmetros
  • crypt - Controlador de criptografia pode ser DES ou RSA.
  • data - (PhBuffer, String ou Stream) Dados a serem criptografados
  • output - (PhBuffer ou Stream) Destino do dado processado
  • len - (Inteiro) valor que deve ser consumido de data
Retorno

result invalid em caso de problema com os parâmetros ou boolean true indicando sucesso. False - erro na api de criptografia


decrypt

Crypt#decrypt(crypt, data, output, len);

Recupera os dados criptografados anteriormente com afunção crypt.

Parâmetros
  • crypt - Controlador de criptografia pode ser DES ou RSA.
  • data - (PhBuffer, String ou Stream) Dados a serem criptografados
  • output - (PhBuffer ou Stream) Destino do dado processado
  • len - (Inteiro) valor que deve ser consumido de data
Retorno

result invalid em caso de problema com os parâmetros ou boolean true indicando sucesso. False - erro na api de criptografia


reset

Crypt#reset(crypt);

Retorna o objeto cript ao estado inicial.

Usado geralmente em algoritimos como DES#CBC que é acumulativo

Parâmetros
  • crypt - Controlador de criptografia pode ser DES ou RSA.
Retorno

Não há


description

Crypt#description(crypt);

Recupera o nome do controlador

Parâmetros
  • crypt - Controlador de criptografia pode ser DES ou RSA.
Retorno

String com o nome do algoritinmo sendo usado


isCrypt

Crypt#isCrypt(crypt);

Validar se o controlador passado é compativel com as funções da lib crypt

Parâmetros
  • crypt - Controlador de criptografia pode ser DES ou RSA.
Retorno

boolean true em caso de sucesso


Exemplo
function testeCrypt()
{
  var key = PhBuffer.create("0x11223344556677880011335577991133");
  var  iv = PhBuffer.create("0x1122334455667788");
  var handler = DES#create(DES#DES3(), Crypt#CBC(iv), key);
  var input   = "TEST";
  var outbuffer = PhBuffer.create(0);
  var out = PhBuffer.create("0xcfb6f60c16dc2dc9");
  var outlen = PhBuffer.getSize(out);
  if (! isvalid handler )
  {
    Dialogs.alert ("Controlador invalido");
    return;
  }
  else
  {
    /* Encriptacao */
    Crypt#reset(handler);
    if (!Crypt#encrypt(handler, input, outbuffer, String.length(input)))
    {
       Dialogs.alert("Falha na encriptacao");
       return;
    }
    /* Decriptacao */
    Crypt#reset(handler);
    if (!Crypt#decrypt(handler, out, outbuffer, outlen))
    {
       Dialogs.alert("Falha na decriptacao");
       return;
    }

  }
  Dialogs.alert("Testes realizados com sucesso");
}
Saída
Testes realizados com sucesso

DES

package://libs#sec#crypt/des.wmlsc

Implementação para uso de criptografia DES. Data Encryption Standard (Padrão de Criptografia de dados)

veja: https://pt.wikipedia.org/wiki/Data_Encryption_Standard

Tipos
Constantes Valor
DES#DES1 0x01
DES#DES3 0x02
Sumário
Função Descrição
create Cria um controlador de criptografia DES


create

DES#create(type, mode, key)

Cria um controlador de criptografia DES.

Parâmetros
  • type - #DES1 ou #DES3
  • mode - Crypt#ECB ou Crypt#CBC
  • key - PhBuffer com 8 até 24 bytes (invalid gera randomicamente)
Retorno

controlador para funções em crypt.wmls


Exemplo
function des()
{
  var ID = "des3_cbc_";
  var key = PhBuffer.create("0x11223344556677880011335577991133");
  var iv = PhBuffer.create("0x1122334455667788");
  var handler = DES#create(DES#DES3(), Crypt#CBC(iv), key);
  if (isvalid handler)
    Dialogs.alert("DES Criado com sucesso");
  else
    Dialogs.alert("Falha ao criar o DES");
}
Saída
DES Criado com sucesso

RSA

package://libs#sec#crypt/rsa.wmlsc

Implementação para uso de criptografia RSA.

veja: https://pt.wikipedia.org/wiki/RSA

Tipos
Constantes Valor
RSA#RSA_PKCS1_PADDING 0x02
RSA#RSA_PKCS1_OAEP_PADDING 0x03
RSA#RSA_NO_PADDING 0x00
Sumário
Função Descrição
create Cria um controlador de criptografia RSA
builtin Cria um controlador utilizando chave publica


create

RSA#create(module, exp, padding);

Cria um controlador de criptografia RSA.

Parâmetros
  • module - PhBuffer ou BigInt
  • exp - PhBuffer ou BigInt
  • padding - #RSA_PKCS1_PADDING
Retorno

controlador para funções em crypt.wmls


builtin

Cria um controlador utilizando chave publica.

RSA#builtin(alias, padding);

Parâmetros
  • alias - nome da chave
  • padding - #RSA_PKCS1_PADDING
Retorno

controlador para funções em crypt.wmls


Exemplo
function testeRSA()
{
  var rsa = RSA#create(PhBuffer.create("0xa5261939975948bb7a58dffe5ff54e65f0498f9175f5a09288810b8975871e99"+
                                         "af3b5dd94057b0fc07535f5f97444504fa35169d461d0d30cf0192e307727c06"+
                                         "5168c788771c561a9400fb49175e9e6aa4e23fe11af69e9412dd23b0cb6684c4"+
                                         "c2429bce139e848ab26d0829073351f4acd36074eafd036a5eb83359d2a698d3"),
            PhBuffer.create("0x010001"), RSA#RSA_NO_PADDING());
  if (isvalid rsa)
    Dialogs.alert("Sucesso ao criar o RSA");
  else
    Dialogs.alert("Falha ao criar o RSA");

  var rsa2 = RSA#builtin("test", RSA#RSA_NO_PADDING());
  if (isvalid rsa2)
    Dialogs.alert("Sucesso ao criar o RSA builtin");
  else
    Dialogs.alert("Falha ao criar o RSA builtin");
}
Saída
Sucesso ao criar o RSA
Sucesso ao criar o RSA builtin

Hash

Implementa algoritmos de hash criptográfico.

Veja:
https://pt.wikipedia.org/wiki/MD5
https://pt.wikipedia.org/wiki/SHA-1
https://pt.wikipedia.org/wiki/CRC

Sumário

Script Descrição
CRC Implementação para uso de criptografia CRC
DV Implementação para uso de dígito verificador
HASH Implementação para uso de algoritinmos de hash
MD5 Implementação para uso de criptografia MD-5 (Message Digest 5)
SHA Implementação para uso de criptografia SHA (Secure Hash Algorithm)

CRC

package://libs#sec#hash/crc.wmlsc

Cria um controlador CRC32 para uso com as funções do script hash.wmlsc

create

CRC#create(value);

Parâmetros
  • value - valor inicial
Retorno

Controlador criado ou invalid em caso de falha

DV

package://libs#sec#hash/dv.wmlsc

Fornece funções para cálculo de dígitos verificadores

Módulos
Constantes Valor
DV#MODULO_10 0
DV#MODULO_11 1
DV#MODULO_11_CPF 6
DV#MODULO_11_CNPJ 7
DV#MODULO_11_0 9
DV#MODULO_NONE 255
create

DV#create(codigo, modulo);

Cria um controlador de DV baseado no módulo informado

Parâmetros
  • codigo - código que se deseja calcular ou comparar o dígito verificador. Para o cálculo, informar o código sem o dígito. Para a checagem informar o código com o dígito.
  • modulo - indica o algoritmo a ser aplicado no cálculo.
Retorno

o Controlador de Dígito verificador criado ou invalid em caso de erro.


calculate

DV#calculate(controlador);

Calcula o dígito verificador

Parâmetros
  • controlador - controlador criado com create, o qual já possui o código a ser calculado o dígito
Retorno

dígito verificador calculado.


check

DV#check(controlador);

Realiza o cálculo do dígito verificador e compara com o informado no código.

Parâmetros
  • controlador - controlador criado com create, o qual já possui o código a ser comparado o dígito
Retorno

true se o dígito informado com o código confere com o calculado.

false se o dígito informado com o código não confere com o calculado.


Exemplo
function testDV()
{
  /* Para o calculo, informar sem os digitos */
  var cpf1   = "012345678";
  /* Para a checagem, incluir os digitos */
  var cpf2   = "01234567809";

  var ctrl1   = DV#create(cpf1, DV#MODULO_11_CPF());
  var digito = DV#calculate(ctrl1, DV#MODULO_11_CPF());
  Dialogs.alert("Digito do cpf informado: " + digito);

  var ctrl2  = DV#create(cpf2, DV#MODULO_11_CPF());
  if (DV#check(ctrl2))
    Dialogs.alert("O CPF estah correto.");
  else
    Dialogs.alert("CPF invalido");

}
Saída
Digito do cpf informado: 09
O CPF estah correto.

Hash

package://libs#sec#hash/hash.wmlsc

Fornece funções para cálculos de hash utilizando os controladores vistos acima
veja:

  • CRC
  • MD5
  • Sha
update

Hash#update(safe, data, len);

Atualizar o controlador com novos dados

Parâmetros
  • safe - controlador que deve ser criado com hash API
  • data - stream, string ou PhBuffer com os dados a serem computados
  • len - numero de bytes que devem ser processados
Retorno

boolean true em caso de sucesso, invalid poderá ser retornado caso não seja possivel converter alguma parâmetro


digest

Hash#digest(safe);

Calcula o hash de acordo com o controlador informado.

Parâmetros
  • safe - controlador que deve ser criado com hash API
Retorno
  • 0 - invalid caso safe não seja valido
  • 1 - PhBuffer com o hash

description

Hash#description(safe);

Recupera o nome do controlador.

Parâmetros
  • safe - controlador que deve ser criado com hash API
Retorno

String com o nome do algoritinmo sendo usado


isHash

Hash#isHash(safe);

Recupera o nome do controlador.

Parâmetros
  • safe - controlador que deve ser criado com hash API

MD5

package://libs#sec#hash/md5.wmlsc

Cria um controlador MD5 para uso com as funções do script hash.wmlsc

create

MD5#create();

Parâmetros

Não há

Retorno

Controlador criado ou invalid em caso de falha


SHA

package://libs#sec#hash/sha.wmlsc

Cria um controlador Sha para uso com as funções do script hash.wmlsc

create

SHA#create();

Parâmetros

Não há

Retorno

Controlador criado ou invalid em caso de falha

Exceções

Ao desenvolver na PhVM é possível que sua aplicação lançe exceções que são respostas da máquina virtual quanto ao desenvolvidomento. Segue abaixo os tipos de exceções que podem ser lançados pela PhVM:

Tipo Código Descrição
eWIR_StackDirty -2 Ocorre quando em uma concorrência(threads) o script que chamou a trhead é liberado antes do final da thread.
eWIR_InternalError -1 Ocorre quando é um erro genérico não mapeado pela API
eWIR_OK 0 Uso interno da PhVM.
eWIR_VerificationFailed 1 Ocorre quando chamadas remotas passam urls ou funções que não existem.
eWIR_FatalLibraryFunctionError 2 Uso interno da PhVM.
eWIR_InvalidFunctionArguments 3 Ocorre quando o número de parametros não correspondem com o número de argumentos
eWIR_ExternalFunctionNotFound 4 Ocorre quando o método não existe ou é chamado de forma externa por outro script e o método não possuí o modificador "extern"
eWIR_UnableToLoadCompilationUnit 5 Ocorre quando a PhVm não encontrou o script compilado. Geralmente há erro no import da url.
eWIR_AccessViolation 6 Ocorre quando alguma parte do software tenta acessar um endereço de memória inválido, ou que já esteja em uso.
eWIR_StackUnderflow 7 Ocorre quando a PhVm tenta remover o objeto da pilha que ja não existe.
eWIR_ProgrammedAbort 8 Ocorre quando o usuário utiliza o método Lang.abort().
eWIR_StackOverflow 9 Ocorre quando o número de chamadas de funções (geralmente aninhadas) superam o numero máximo da pilha 1024.
eWIR_OutOfMemory 10 Normalmente, este erro ocorre quando a aplicação consome mais memória que o limite máximo permitido pelo sistema operacional para o processo.
eWIR_UserInitiated 11 esse erro sobe quando o usuário utiliza o método Lang,exit().
eWIR_SystemInitiated 12 Erro no processamento interno da VM não conseguiu iniciar algum dispositivo ou alocar memoria por exemplo

Referências

  1. WAP-194, Wireless Application Protocol WMLScript Standard Libraries Specification, Version 1.3. (2000). Disponível em: http://www.wapforum.org/tech/documents/WAP-194-WMLScriptLibs-20000324-a.pdf