
% Carregamento em memória das constantes
data
scu_id=15
param=3
servos=[-10 -10 -10]
val=servos;
operation=3;
% Construção da mensagem a enviar
%message=buildmessage(OP_APPLY_JOINT,scu_id,param,servos);
% Mensagem de resposta esperada
%receive=uint8([MESSAGE_SUCESS message(2:end) zeros(1,USART_RECV_LENGTH-USART_SEND_LENGTH)])

%function message=buildmessage(operation,scu_id,param,val)

% Carregamento das constantes em memória
%data;

% Tratamento dos argumentos em falta
% if (nargin<4)                           % Valores default nos campos de dados
%     val=zeros(1,USART_SEND_LENGTH-2);
% end
% if (nargin<3)                           % Parametro a consultar/aplicar
%     param=0;
% end
% if (nargin<2)                           % Slave Controller Unit a considerar
%     scu_id=0;
% end
% if (nargin==0)                          % Tipo de mensagem default
%     operation=OP_READ_EXTBUFF;
% end

% ===== Construção do pacote de tipo ======================================
% Cálculo do padrão binário referente à operação
operation_patt=bitand(bitshift(operation,OPERATION_LOC),OPERATION_MASK)
% Cálculo do padrão binário devido ao SCU a lidar
scuID_patt=bitand(bitshift(scu_id,SCUID_LOC),SCUID_MASK)
% Cálculo do padrão binário devido ao id do dispositivo
param_patt=bitand(bitshift(param,PARAM_LOC),PARAM_MASK)

% Or entre os vários padrões
type=bitor(bitor(operation_patt,scuID_patt),param_patt)
% =========================================================================

% Construção da restante mensagem

% Truncagem dos dados e conversão para inteiro sem sinal
val1=[val zeros(1,USART_SEND_LENGTH-2-length(val))]         % Compleção dos dados
val=intunsigned(val1(1:USART_SEND_LENGTH-2),8)              % Truncatura dos dados
message=uint8([MESSAGE_REQ,type,val])  % Mensagem final

