User:Jenerps/sandbox

Protocolo de Programação XVM Todos os pacotes enviados para e pelo dispositivo começam com o caractere> (Maior) e terminam com a string <[CR] [LF] (Menor e Enter (caracteres com valor ASCII 13 e 10)).

As mensagens do protocolo XVM são compostas de quatro partes que são delimitadas por uma ";" (Ponto e vírgula), são as seguintes partes:


 * 1) Mensagem;
 * 2) ID = número do ID do dispositivo;
 * 3) # ID da mensagem;
 * 4) * Checksum;

Mensagens

As mensagens comummente começam com as letras S, Q, R ou C dependendo da ação a ser tomada e seguida das letras do comando. Em seguida segue uma série de caracteres variáveis que são os parâmetros do comando. A primeira letra pode ser: S = Set; é usado para gravar parâmetros no dispositivo. Q = Query; Ele é usado para perguntar o valor dos parâmetros para o dispositivo. C = clear; é usado para gravar variáveis em zero. R = Response; indica a resposta do dispositivo a um comando S, Q ou C. ID do dispositivo O Equipamento sai de fábrica com um ID; que por default é os últimos 4 dígitos do seu numero serial.
 * O ID que é um identificador que pode ser modificado pelo usuário.
 * Ele é um número hexadecimal de 4 dígitos responsavel por permitir que você a reconheça o equipamento dentro da sua platafroma.
 * Alguns recursos especiais do equipamento, são acessados incluindo uma carácter apos o número de identificação.

Número da mensagem O protocolo dos equipamentos Virloc sao baseados em pergunta e resposta, as mensagens são numeradas para identificar que a resposta pertence a uma determinada pergunta enviada. Quando o Virloc envia uma reporte gerado por um evento, a mensagem carrega um número identificador de 0x0001 a 0x7FFF e a plataforma em resposta a essa mensagem deve enviar uma confirmação (ACK) com o mesmo número de mensagem. Se a plataforma enviar um comando para o Virloc, a mensagem enviada deverá ter um número de 0x8000 para o 0xFFFF e o Virloc responderá a essa mensagem conforme apropriado, mas terá o mesmo número de mensagem que a gerou. Check SUM Em formato hexadecimal que é calculado por um XOR OR exclusivo com todos os códigos ASCII de caracteres que compõem a mensagem começando com ">" e terminando no último ";" incluído, mas não incluindo, o indicador "*" de Check SUM.

Cálculo de Check SUM Exemplo em C: /* get chksum */ int r; unsigned char chksum; chksum = 0;

for (r = 0; r < strlen(modem.rxbuff); r++) { if ((modem.rxbuff[r] == '*') &&(modem.rxbuff[r-1] == ';')) break; else chksum = chksum ^ modem.rxbuff[r]; }

Exemplo em C #:

public static string calculateChecksum(string data) {    int r;     int calc = 0; byte caracter; string calculated_checksum; for (r = 0; r < data.Length; r++) {      if ((data[r] == '*') && (data[r-1] == ';')) break; caracter = (byte)data[r]; calc = calc ^ (byte)caracter; }    calculated_checksum = calc.ToString("X"); return calculated_checksum; }

Se o check Sum calculado corresponder à recebida e não for uma mensagem de resposta, você deverá confirmar a recepção correta respondendo à seguinte mensagem: > ACK; ID = 1017; # 0093; * 52 <[CR] [LF] Onde: > ACK Identificador de tipo de mensagem ID = 1017 ID do equipamento < Fim da mensagem [CR] [LF] Fim da cadeia Para determinar que não é uma mensagem de resposta, basta comparar que o número da mensagem recebida é menor que 0x8000. Isso ocorre porque as mensagens geradas pelo Virlocs têm um intervalo de 0x0000 a 0x7FFF e as geradas a partir do PC devem ter um intervalo de valores de 0x8000 a 0xFFFF. Se a recepção não for confirmada, o Virloc enviará a mensagem até XX vezes para cada tentativa de sessão de comunicação telefônica, ou seja, todas as mensagens devem ser respondidas. Este protocolo é aquele usado por qualquer uma das mídias, com as quais todas as mensagens enviadas a ele serão respondidas com o número da mensagem correspondente, se as receberem bem. O dispositivo analisa a mensagem recebida, se for uma mensagem com resposta, responde com a mensagem correspondente e o número da mensagem igual ao recebido. Se a mensagem não tiver resposta, responda com> ACK; ID = 0003; # ABC0; * 2C <[CR] [LF].
 * 1) 0093 Número da mensagem (o mesmo que foi recebido)
 * 52 check Sum desta mensagem
 * 52 check Sum desta mensagem
 * 52 check Sum desta mensagem