function [curr_gear]=communication(TCP_OBJECT,new_gear)

% Limpa o buffer de entrada:
flushinput(TCP_OBJECT);
% Limpa o buffer de saida:
flushoutput(TCP_OBJECT);
% Faz um set á caixa com a mudança nova:
fprintf(TCP_OBJECT,sprintf('sg %d',new_gear));
% Enquanto não tem nada para ler aguarda:
while(get(TCP_OBJECT,'BytesAvailable')==0)
    pause(0.01)
end
% Assim que há algo para ler, vai-se buscar a linha:
temp1=fgetl(TCP_OBJECT);
% Verifica-se a terceira posição da mensagem:
[read_string1]=sscanf(temp1,'%*c%*c %*c%*c %c');
% Avalia essa posição
switch read_string1
    % Caso seja código de mudança inválida:
    case 'i'
        % Diz que a mudança é inválida:
        disp('Invalid gear!')
        % Mudança de estado de erro:
        curr_gear=-1;
    % Caso esteja em modo manual:
    case 'm'
        % Diz que o modo manual precisa de ser desligado:
        disp('Change to Automatic!')
        % Mudança de estado de erro:
        curr_gear=-1;
    % Caso a mudança esteja na posição pedida:
    case 'o'
        % Limpa o buffer de entrada:
        flushinput(TCP_OBJECT);
        % Limpa o buffer de saida:
        flushoutput(TCP_OBJECT);
        % Envia um comando get para a caixa
        fprintf(TCP_OBJECT,'gg');
        % Enquanto não tem nada para ler aguarda:
        while(get(TCP_OBJECT,'BytesAvailable')==0)
            pause(0.01)
        end
        % Assim que há algo para ler, vai-se buscar a linha:
        temp2=fgetl(TCP_OBJECT);
        % Verifica-se a terceira posição da mensagem:
        [read_string2]=sscanf(temp2,'%*c%*c %*c%*c %c');
        switch read_string2
            case 'c'
                % Diz que a caixa está a mudar:
                disp('Changing...')
                % Mudança de estado de erro:
                curr_gear=7;
            case 'a'
                % Le-se a ultima posição:
                [read_string3]=sscanf(temp2,'%*c%*c %*c%*c %*c %c');
                % Guarda-se a mudança actual:
                curr_gear=str2double(read_string3);
            otherwise
                % Mudança de estado de erro:
                curr_gear=-1;
        end
    % Caso não passe em caso nenhum:
    otherwise
        % Mudança de estado de erro:
        curr_gear=-1;
end






