VZTECH / Mbed 2 deprecated main_src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Embed: (wiki syntax)

« Back to documentation index

vz_protocol.h File Reference

vz_protocol.h File Reference

Implementa as principais funcionalidades do protocolo de comunicação entre os CBx -> Header e Header -> CBx. More...

Go to the source code of this file.

Functions

uint16_t vz_checksum (uint8_t *buffer, size_t length)
 Calcula o checksum do pacote.
uint8_t * parse_vz_pkg (int *ext, int *port, volatile uint8_t *type, uint8_t *cb_buffer)
 Esta é a função responsável por, dado um pacote recebido dos CBx, quebra-lo em ramal( ext ), porta, type e dados.
uint8_t * build_cb_package (const int ext, const int port, const uint8_t type, const char *cb_buffer, const uint8_t seq_num, const int length, uint8_t *pkg)
 Função responsavel por montar o pacote para envio para o CBx seguindo o formato do protocolo VZ.
int init_ranges (void)
 Obtém uma referência de clock de um servidor.
void print_clock (uint8_t *buffer)
 Converte o current_time do sistema para string.

Variables

 __pad0__
 Registra o numero do menor ramal conhecido pela header até o momento.
int end
 Registra o numero do maior ramal conhecido pela header até o momento.
const uint8_t VZ_HEADER_OFFSET = 7
 Indica o inicio dos dados recebidos efetivamente no pacote VZ.
const uint8_t CLOCK_SYNC_SIZE = 14
 Indica o numero de bytes ocupados pelo relogio no pacote transmitido.
const uint8_t SEQ_NUM_SIZE = 1
 Indica o numero de bytes ocupados para uso de sequence number.
const uint8_t SEQ_NUM_PLACE = 7
 Indica o numero de bytes ocupados para uso de sequence number.
const uint8_t CB_AUDIO_DATA_SIZE = 240
 Indica o numero de pacotes enviados pelo CBx referente a dados de audio.
const uint8_t TIMESLICE_PLACE = 22
 Indica o local ( em relação ao começo do pacote ) onde se encontra o timeslice.
const uint8_t TYPE_PLACE = 6
 Indica o local ( em relação ao começo do pacote ) onde se encontra o timeslice.
const uint16_t BASE_PORT = 5000
 Estabelece o menor ramal aceito para tratamento.
const uint8_t u8_MAX_CB_IN_A_BRANCH = 52
 Estabelece o nro máximo de CBx em um mesmo ramo.
const uint8_t BOOT = 0x00
 Indica o tipo boot, enviado pelo CBx, assim que o mesmo liga ou sofre reboot.
const uint8_t REGISTRY = 0x02
 Tipo de registro, enviado pelo CBx, quando o mesmo quer se registrar, enviado pela Header para verificar se determinado CBx ainda esta ativo.
const uint8_t REGISTRY_ACK = 0x02 bitor BIT7
 "ack de resposta" do tiop REGISTRY
const uint8_t INVITE = 0x04
 Representa o tipo de pedido de invite, enviado pelo CBx sempre quando o mesmo quer iniciar uma ligação com o server.
const uint8_t INVITE_ACK = 0x04 bitor BIT7
 "ack de resposta" do tiop INVITE
const uint8_t AUDIO = 0x08
 Pacotes do tipo audio são trocados entre Header e CBx durante a ligação, representam os dados RTP.
const uint8_t TELEMETRY = 0x10
 Define o tipo de pacote de telemetria enviado pelo CBx.
const uint8_t BOOTLOADER_CBX = 0x03
 Define o tipo de pacote para a gravação do CBx.
const uint8_t CB_BYE = 0x20
 Representa o tipo de pacote que o CBx envia para a Header solicitando o final da ligação.
const uint8_t CB_BYE_ACK = 0x20 bitor BIT7
 "ack de resposta" do tiop CB_BYE
const uint8_t PROMPT = 0x01
 Identifica o tipo de pacote responsavel por mandar comandos executáveis no Cbx.
const uint8_t FLOOD = 0x40
 Representa os pacotes de flood, úteis para validação de comunicação Header-CBx.
const uint8_t FW = 0x50
 Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.
const uint8_t FW1 = 0x51
 Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.
const uint8_t FW2 = 0x52
 Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.
const uint8_t FW3 = 0x53
 Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.
const uint8_t FW4 = 0x54
 Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.
const uint8_t FW5 = 0x55
 Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.
const uint8_t FW6 = 0x56
 Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.
const uint8_t CB_STATS = 0x07
 Tipo de comunicação de estatisticas de rede, enviadas pela CBx.
const uint8_t CB_STATS_ACK = 0x07 bitor BIT7
 "ack de resposta" do tiop CB_STATS_ACK
const uint16_t BROADCAST_EXT = 0xf0f3
 Ramal de broadcast, usado na comunicação Header -> CBx.
const uint8_t DO_NOTHING = 0x7f
 Representa o tipo de idle, importante para algumas comunicações.
const uint16_t RX_CB_IDLE = 300
 Tempo maximo ( countdown em segundos ) que a Header espera por algum pacote no lado fibra, deixa de tickar o wdt.
const uint16_t ETH_CONNECT_TIMEOUT = 330
 Tempo maximo ( countdown em segundos ) que a Header espera tentando conectar na interface ETH, deixa de tickar o wdt quando chega em zero.
const uint16_t RTP_MSG_SIZE = 160
 Tamanho em bytes ocupados pelos pacotes de audio no sentido * -> Header -> CBx.
uint32_t pkg_zero
 Contador de pacotes contendo somente zeros.
uint32_t pkg_ckserr
 Contador de pacotes em que o checksum resultou divergente do calculado/recebido.
uint32_t pkg_cksok
 Contador de pacotes em que o checksum resultou o mesmo calculado e o recebido.

Detailed Description

Implementa as principais funcionalidades do protocolo de comunicação entre os CBx -> Header e Header -> CBx.

Author:
Jhonatan Casale
Version:
1
Date:
2014-11-05

Definition in file vz_protocol.h.


Function Documentation

uint8_t* build_cb_package ( const int  ext,
const int  port,
const uint8_t  type,
const char *  cb_buffer,
const uint8_t  seq_num,
const int  length,
uint8_t *  pkg 
)

Função responsavel por montar o pacote para envio para o CBx seguindo o formato do protocolo VZ.

Parameters:
extO ramal do CBx destino deste pacote.
portA porta do CBx destino deste pacote.
typeO tipo do pacote que será enviado para o CBx.
cb_bufferOs dados que serão colocados nesse pacote.
seq_numO numero do sequência deste pacote.
lengthO tamanho ( em bytes ) dos dados que serão enviados.
pkgUm ponteiro que recebera o pacote montado e pronto para envio.
Returns:
O pacote montado e pronto para envio.

Exemplo:

 ...
  int ext = 1011;
  port = 1011;
  type = __REGISTRY__;
  send2callboxes( __build_cb_package__( ext, port, type, 
              ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); 
 ...

Definition at line 131 of file vz_protocol.cpp.

int init_ranges ( void   )

Obtém uma referência de clock de um servidor.

Parameters:
bufferImprime a referência do relógio nesta posição de memória.
Note:
Por definição de projeto, o relógio ocupa 14 bytes, seguindo o formato

| ano | ano | ano | ano | mes | mes | dia | dia | hora | hora | minuto | minuto | segundo | segundo |

Exemplo:

20141105101235

Definition at line 9 of file vz_protocol.cpp.

uint8_t* parse_vz_pkg ( int *  ext,
int *  port,
volatile uint8_t *  type,
uint8_t *  cb_buffer 
)

Esta é a função responsável por, dado um pacote recebido dos CBx, quebra-lo em ramal( ext ), porta, type e dados.

Parameters:
extUm ponteiro para onde sera setado o ramal do CBx que enviou este pacote.
portUm ponteiro para onde sera setado a porta do CBx que enviou este pacote.
typeUm ponteiro para onde sera setado o type de mensagem enviada pelo CBx.
cb_bufferO pacote que se deseja decodificar.
Returns:
NULL, caso em que o checksum( cc ) calculado não bater com o cc recebido no pacote, retorna NULL também em pacotes do tipo flood, ou no caso em que o pacote recebido para processamento apontar para NULL; em todos esses casos os valores de ext, port e type devem ser desconsiderados para manter a integridade do processamento; retorna um ponteiro para o inicio dos dados enviados pelo CBx e seta ramal, porta e type nos casos em que o pacote recebido for válidado pelo protocolo.

Exemplo:

 ...
  int ext, port, type;
  uint8_t * data, buffer[ __CB_BUFFER_SIZE__ ];
      //assumindo que os dados vindos do Call_Box estão armazenados em buffer;
  data = __parse_vz_pkg__( &ext, &port, &type, buffer );
 ...
Note:
Formato do pacote VZ :

| E | E | P | P | C | C | T | [ Seq_num | Audio ] | 14[ Clock | Audio ] | [ TS | Audio ] |...|

E = Ext = Ramal

P = Port = Porta

C = Checksum

T = Type = Tipo

Seq_num = Sequence Number = Numero de sequencia

Clock = 14 bytes to sync

...= demais __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__ bytes

Definition at line 18 of file vz_protocol.cpp.

void print_clock ( uint8_t *  buffer )

Converte o current_time do sistema para string.

Parameters:
bufferBuffer de escrita onde sera preenchido com o current_time no formato VZ

Exemplo:

 ...
  char buffer [ 16 ];
  print_clock ( buffer );
 ...

Definition at line 239 of file vz_protocol.cpp.

uint16_t vz_checksum ( uint8_t *  buffer,
size_t  length 
)

Calcula o checksum do pacote.

Parameters:
bufferUm ponteiro para a região de memória onde os dados de interesse estão localizados.
lengthO numero de elementos que serão considerados no cálculo do checksum
Returns:
0 - caso em que o vetor apontado por buffer estiver setado em NULL. O checksum propriamente calculado caso contrário.

Exemplo:

 ...
  // onde cb_buffer contém os dados vindos do Call_Box, Obs. as posições 4 e 5 contém o MSB e LSB do CC calculado pelo Call_Box.
  uint16_t cc = ( uint16_t )cb_buffer[ 4 ] << 8 or cb_buffer[ 5 ];
  if( cc != __checksum__( cb_buffer, __CB_BUFFER_SIZE__ ) ){
      //faça alguma coisa ...
  }
 ...

Definition at line 223 of file vz_protocol.cpp.


Variable Documentation

Registra o numero do menor ramal conhecido pela header até o momento.

Definition at line 25 of file vz_protocol.h.

const uint8_t AUDIO = 0x08

Pacotes do tipo audio são trocados entre Header e CBx durante a ligação, representam os dados RTP.

Definition at line 72 of file vz_protocol.h.

const uint16_t BASE_PORT = 5000

Estabelece o menor ramal aceito para tratamento.

Definition at line 51 of file vz_protocol.h.

const uint8_t BOOT = 0x00

Indica o tipo boot, enviado pelo CBx, assim que o mesmo liga ou sofre reboot.

Definition at line 57 of file vz_protocol.h.

const uint8_t BOOTLOADER_CBX = 0x03

Define o tipo de pacote para a gravação do CBx.

Definition at line 78 of file vz_protocol.h.

const uint16_t BROADCAST_EXT = 0xf0f3

Ramal de broadcast, usado na comunicação Header -> CBx.

Definition at line 120 of file vz_protocol.h.

const uint8_t CB_AUDIO_DATA_SIZE = 240

Indica o numero de pacotes enviados pelo CBx referente a dados de audio.

Definition at line 42 of file vz_protocol.h.

const uint8_t CB_BYE = 0x20

Representa o tipo de pacote que o CBx envia para a Header solicitando o final da ligação.

Definition at line 81 of file vz_protocol.h.

const uint8_t CB_BYE_ACK = 0x20 bitor BIT7

"ack de resposta" do tiop CB_BYE

Definition at line 84 of file vz_protocol.h.

const uint8_t CB_STATS = 0x07

Tipo de comunicação de estatisticas de rede, enviadas pela CBx.

Definition at line 114 of file vz_protocol.h.

const uint8_t CB_STATS_ACK = 0x07 bitor BIT7

"ack de resposta" do tiop CB_STATS_ACK

Definition at line 117 of file vz_protocol.h.

const uint8_t CLOCK_SYNC_SIZE = 14

Indica o numero de bytes ocupados pelo relogio no pacote transmitido.

Definition at line 33 of file vz_protocol.h.

const uint8_t DO_NOTHING = 0x7f

Representa o tipo de idle, importante para algumas comunicações.

Definition at line 123 of file vz_protocol.h.

int end

Registra o numero do maior ramal conhecido pela header até o momento.

Definition at line 7 of file vz_protocol.cpp.

const uint16_t ETH_CONNECT_TIMEOUT = 330

Tempo maximo ( countdown em segundos ) que a Header espera tentando conectar na interface ETH, deixa de tickar o wdt quando chega em zero.

Definition at line 129 of file vz_protocol.h.

const uint8_t FLOOD = 0x40

Representa os pacotes de flood, úteis para validação de comunicação Header-CBx.

Definition at line 90 of file vz_protocol.h.

const uint8_t FW = 0x50

Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.

Definition at line 93 of file vz_protocol.h.

const uint8_t FW1 = 0x51

Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.

Definition at line 96 of file vz_protocol.h.

const uint8_t FW2 = 0x52

Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.

Definition at line 99 of file vz_protocol.h.

const uint8_t FW3 = 0x53

Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.

Definition at line 102 of file vz_protocol.h.

const uint8_t FW4 = 0x54

Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.

Definition at line 105 of file vz_protocol.h.

const uint8_t FW5 = 0x55

Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.

Definition at line 108 of file vz_protocol.h.

const uint8_t FW6 = 0x56

Tipo para redirecionamento semn tratamento para uma determinada porta UDP pré-configurada.

Definition at line 111 of file vz_protocol.h.

const uint8_t INVITE = 0x04

Representa o tipo de pedido de invite, enviado pelo CBx sempre quando o mesmo quer iniciar uma ligação com o server.

Definition at line 66 of file vz_protocol.h.

const uint8_t INVITE_ACK = 0x04 bitor BIT7

"ack de resposta" do tiop INVITE

Definition at line 69 of file vz_protocol.h.

uint32_t pkg_ckserr

Contador de pacotes em que o checksum resultou divergente do calculado/recebido.

Definition at line 3 of file vz_protocol.cpp.

uint32_t pkg_cksok

Contador de pacotes em que o checksum resultou o mesmo calculado e o recebido.

Definition at line 5 of file vz_protocol.cpp.

uint32_t pkg_zero

Contador de pacotes contendo somente zeros.

Definition at line 4 of file vz_protocol.cpp.

const uint8_t PROMPT = 0x01

Identifica o tipo de pacote responsavel por mandar comandos executáveis no Cbx.

Definition at line 87 of file vz_protocol.h.

const uint8_t REGISTRY = 0x02

Tipo de registro, enviado pelo CBx, quando o mesmo quer se registrar, enviado pela Header para verificar se determinado CBx ainda esta ativo.

Definition at line 60 of file vz_protocol.h.

const uint8_t REGISTRY_ACK = 0x02 bitor BIT7

"ack de resposta" do tiop REGISTRY

Definition at line 63 of file vz_protocol.h.

const uint16_t RTP_MSG_SIZE = 160

Tamanho em bytes ocupados pelos pacotes de audio no sentido * -> Header -> CBx.

Definition at line 132 of file vz_protocol.h.

const uint16_t RX_CB_IDLE = 300

Tempo maximo ( countdown em segundos ) que a Header espera por algum pacote no lado fibra, deixa de tickar o wdt.

Definition at line 126 of file vz_protocol.h.

const uint8_t SEQ_NUM_PLACE = 7

Indica o numero de bytes ocupados para uso de sequence number.

Definition at line 39 of file vz_protocol.h.

const uint8_t SEQ_NUM_SIZE = 1

Indica o numero de bytes ocupados para uso de sequence number.

Definition at line 36 of file vz_protocol.h.

const uint8_t TELEMETRY = 0x10

Define o tipo de pacote de telemetria enviado pelo CBx.

Definition at line 75 of file vz_protocol.h.

const uint8_t TIMESLICE_PLACE = 22

Indica o local ( em relação ao começo do pacote ) onde se encontra o timeslice.

Definition at line 45 of file vz_protocol.h.

const uint8_t TYPE_PLACE = 6

Indica o local ( em relação ao começo do pacote ) onde se encontra o timeslice.

Definition at line 48 of file vz_protocol.h.

const uint8_t u8_MAX_CB_IN_A_BRANCH = 52

Estabelece o nro máximo de CBx em um mesmo ramo.

Definition at line 54 of file vz_protocol.h.

const uint8_t VZ_HEADER_OFFSET = 7

Indica o inicio dos dados recebidos efetivamente no pacote VZ.

Definition at line 30 of file vz_protocol.h.