% Leitura dos sensores de orientação (inclinómetro e giroscópio)
%
% [array,rx,error,errorstr,tries]=readorient(H)
%
% Entradas:
% H    => Handler das comunicações com o Master
%
% Saídas:
% array    => [inclinómetro 1, inclinómetro 2, giroscópio 1, giroscópio 2]
% rx       => Mensagem de baixo nível recebida
% error    => Código de erro, se existente
% errorstr => String descritiva do erro
% tries    => Número de tentativas para efectuar a comunicação
%
% (c) Milton Ruas da Silva, 2006

function [array,rx,error,errorstr,tries]=readorient(H)

% Carregamento em memória das constantes
data;

% Construção da mensagem a enviar
What=bitand(bitshift(SENSORS_ORIENTATION,SENSORS_LOC),SENSORS_MASK);
message=buildmessage(OP_READ_SENSORS,0,What);

% Envio da mensagem de request e leitura da resposta
[rx,tries]=sendmessage(H,message);

% Error indica se ocorreu algum erro na mensagem de resposta
error=(rx(1)~=MESSAGE_SUCESS || rx(2)~=message(2));

% O array servos indica o parametro pedido para cada um dos servos
array=[];

if (~error)
    for i=3:USART_RECV_LENGTH, array=[array intsigned(double(rx(i)),8)]; end
    errorstr='';
% Na ocorrencia de um erro, definir a string de erro
else
    if (rx(2)~=message(2))
        errorstr='Type packet is different from the source!';
    else
        errorstr='Unknown error!';
    end
    cportreset(H);
end
