Skip to content

Commit

Permalink
Proteção de sistema operacional
Browse files Browse the repository at this point in the history
Windows e Linux
  • Loading branch information
LBBassani committed Oct 6, 2019
1 parent 6d038ed commit 0880887
Showing 1 changed file with 134 additions and 117 deletions.
251 changes: 134 additions & 117 deletions src/comunicacao.h
Original file line number Diff line number Diff line change
@@ -1,132 +1,149 @@
#ifndef COMUNICACAO_H
#define COMUNICACAO_H

/* Nome do m�dulo: Comunicacao
* Ano de cria��o: 2018/11
* Descri��o do m�dulo: Classe que encapsula comunica��o entre o sistema e os robo�s, criada para converter e enviar os dados para o xBEE.
* Vers�o: 1.1
* Pr�-requisitos: Porta v�lida em formato COM, ex "COM18"
* Membros: Ricardo Ramos, Lorena Bassani
*
*/

#define ARDUINO_WAIT_TIME 2000
#define MAX_DATA_LENGTH 255
#define RunningOnLinux

This comment has been minimized.

Copy link
@pietroluongo

pietroluongo Oct 6, 2019

Member

Esse #define RunningOnLinux seria melhor se usássemos os defines automáticos de plataforma, conforme esse post aqui no Stack Overflow: https://stackoverflow.com/questions/4605842/how-to-identify-platform-compiler-from-preprocessor-macros

(Só pra deixar linkado, isso aqui é relacionado diretamente ao #17)

This comment has been minimized.

Copy link
@LBBassani

LBBassani Oct 6, 2019

Author Member

Não porque os defines automáticos não possuem padrão e mudam de acordo com o compilador e não com os sistemas.
https://stackoverflow.com/questions/430424/are-there-any-macros-to-determine-if-my-code-is-being-compiled-to-windows

This comment has been minimized.

Copy link
@pietroluongo

pietroluongo Oct 6, 2019

Member

De acordo com o compilador, sim. Para linux, usamos o compilador do linux, então o macro de linux vai estar definido. Caso seja compilado para Windows, o macro do Windows vai estar definido. Portanto, acredito que deveríamos usar os macros padrão (linux e _WIN64), que já são definidos pelo próprio compilador. Caso contrário, teríamos que colocar esse define "customizado" nosso manualmente quando fôssemos compilar para Linux/Windows.

This comment has been minimized.

Copy link
@LBBassani

LBBassani Oct 6, 2019

Author Member

Eu acho o risco é muito alto e eu acredito na recomendação de não usar. Pro windows eu já vi pessoas discutindo se é _WINxx ou WINxx ou WINxx ou só WINxx e pra linux se é _linux, linux ou só linux e aparentemente não é seguro a gente ficar se apoiando em algo tão frágil.

#undef RunningOnWindows

#ifdef RunningOnWindows
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>

#include <iostream>
#include <sstream>
#include <iostream>
#include <sstream>


using namespace std;
using namespace std;

namespace vsssERUS{
/* Nome do m�dulo: Comunicacao
* Ano de cria��o: 2018/11
* Descri��o do m�dulo: Classe que encapsula comunica��o entre o sistema e os robo�s, criada para converter e enviar os dados para o xBEE.
* Vers�o: 1.1
* Pr�-requisitos: Porta v�lida em formato COM, ex "COM18"
* Membros: Ricardo Ramos, Lorena Bassani
*
*/
namespace vsssERUS{

class Comunicacao
{

/* Nome do m�dulo: SerialPort
* Ano de cria��o: 2016/05
* Descri��o do m�dulo: M�dulo que implementa comunica��o serial no Windows.
* fonte: https://gist.github.com/manashmndl/72e96ed2c051726ce1433ede9d6a0f4c
* Pr�-requisitos: Ambiente Windows e Porta v�lida em formato COM
*/
class SerialPort
{
private:
HANDLE handler;
bool connected;
COMSTAT status;
DWORD errors;
public:
SerialPort(char *portName);
~SerialPort();

int readSerialPort(char *buffer, unsigned int buf_size);
bool writeSerialPort(char *buffer, unsigned int buf_size);
bool isConnected();
};
SerialPort* com;
class Comunicacao {

#ifdef RunningOnWindows
/* Nome do módulo : SerialPort
* Ano de criação : 2016/05
* Descrição do módulo : Módulo que implementa comunicaçãoo serial no Windows.
* fonte: https://gist.github.com/manashmndl/72e96ed2c051726ce1433ede9d6a0f4c
* Pré-requisitos : Ambiente Windows (RunningOnWindows Defined)
*/
#include <windows.h>
class SerialPort
{
private:
HANDLE handler;
bool connected;
COMSTAT status;
DWORD errors;
public:
Comunicacao(string porta);

/* Destrutor de comunica��o
* Inten��o da fun��o: Finalizar a comunica��o de forma segura
* Pr�-requisitos: Nenhum
* Efeitos Colaterais: Fecha a porta serial e libera o espa�o utilizado por SerialPort e Comunica��o.
* Parametros: Nenhum
* Retorno: N�o possui retorno
*/
~Comunicacao(){
delete com;
}

/* sendCommand
* Inten��o da fun��o: Enviar os dados para o xBEE
* Pr�-requisitos: Id do rob� entre {1,2,3}, cmd v�lido e valor entre 0 a 255
* Efeitos colaterais: N�o possui efeitos colaterais
* Parametros: Id do rob� que receber� o comando, comando do rob� e valor que deve ser colocado nas rodas
* Retorno: N�o possui retorno
*/
void sendCommand(int robotId, char cmdId, int value);

/* conectado
* Inten��o da fun��o: Verificar se a porta est� conectada
* Pr�-requisitos: Possuir uma porta
* Efeitos colaterais: N�o possui efeitos colaterais
* Parametros: N�o possui parametro
* Retorno: Retorna true se estiver conectado e false caso contr�rio
*/
bool conectado();

/* stop
* Inten��o da fun��o: Atalho para enviar os dados de parada para o rob� alvo
* Pr�-requisitos: Id do rob� entre {1,2,3}
* Efeitos colaterais: N�o possui efeitos colaterais
* Parametros: Id do rob� que receber� o comando de parada
* Retorno: N�o possui retorno
*/
void stop(int robotId);

/* set_speed_right
* Inten��o da fun��o: Atalho para enviar os dados de movimenta��o da roda direita do rob� alvo
* Pr�-requisitos: Id do rob� entre {1,2,3}
* Efeitos colaterais: N�o possui efeitos colaterais
* Parametros: Id do rob� que receber� o comando de movimenta��o, velocidade de movimenta��o do rob�
* Retorno: N�o possui retorno
*/
void set_speed_right(int robotId, int speed);

/* set_pwm_right
* Inten��o da fun��o: Atalho para enviar os dados de movimenta��o pwm da roda direita do rob� alvo
* Pr�-requisitos: Id do rob� entre {1,2,3}
* Efeitos colaterais: N�o possui efeitos colaterais
* Parametros: Id do rob� que receber� o comando de movimenta��o, velocidade de movimenta��o do rob�
* Retorno: N�o possui retorno
*/
void set_pwm_right(int robotId, int speed);

/* set_speed_left
* Inten��o da fun��o: Atalho para enviar os dados de movimenta��o da roda esquerda do rob� alvo
* Pr�-requisitos: Id do rob� entre {1,2,3}
* Efeitos colaterais: N�o possui efeitos colaterais
* Parametros: Id do rob� que receber� o comando de movimenta��o, velocidade de movimenta��o do rob�
* Retorno: N�o possui retorno
*/
void set_speed_left(int robotId, int speed);

/* set_pwm_right
* Inten��o da fun��o: Atalho para enviar os dados de movimenta��o pwm da roda esquerda do rob� alvo
* Pr�-requisitos: Id do rob� entre {1,2,3}
* Efeitos colaterais: N�o possui efeitos colaterais
* Parametros: Id do rob� que receber� o comando de movimenta��o, velocidade de movimenta��o do rob�
* Retorno: N�o possui retorno
*/
void set_pwm_left(int robotId, int speed);
SerialPort(char *portName);
~SerialPort();

int readSerialPort(char *buffer, unsigned int buf_size);
bool writeSerialPort(char *buffer, unsigned int buf_size);
bool isConnected();
};
}
#endif
#endif // RunningOnWindows

#ifdef RunningOnLinux
// TODO : Implementar comuniação em Linux
#endif //RunningOnLinux

SerialPort* com;
public:
Comunicacao(string porta);

/* Nome da Função : ~Comunicacao (Destrutor de comunicação)
* Intenção da função : Finalizar a comunica��o de forma segura
* Pré-requisitos : Nenhum
* Efeitos Colaterais : Fecha a porta serial e libera o espaço utilizado por SerialPort e Comunica��o.
* Parametros : Nenhum
* Retorno : Nenhum
*/
~Comunicacao(){
delete com;
}

/* Nome da Função : sendCommand
* Intenção da função : Enviar os dados para o xBEE
* Pré-requisitos : Id de um robô em campo
* cmd válido
* valor entre 0 a 255
* Efeitos colaterais : Nenhum
* Parametros : int : Id do robô que receberá o comando
* char : comando do robô
* int : valor que deve ser colocado nas rodas
* Retorno : Nenhum
*/
void sendCommand(int robotId, char cmdId, int value);

/* Nome da Função : conectado
* Intenção da função : Verificar se a porta está conectada
* Pré-requisitos : Possuir uma porta
* Efeitos colaterais : Nenhum
* Parametros : Nenhum
* Retorno: bool : true se estiver conectado e false caso contrário
*/
bool conectado();

/* Nome da Função : stop
* Intenção da função : Atalho para enviar os dados de parada para o robô alvo
* Pré-requisitos : Id de um robô em campo
* Efeitos colaterais : Nenhum
* Parametros : int : Id do robô que receberá o comando de parada
* Retorno : Nenhum
*/
void stop(int robotId);

/* Nome da Função : set_speed_right
* Intenção da função : Atalho para enviar os dados de movimentação da roda direita do robô alvo
* Pré-requisitos : Id de um robô em campo
* Efeitos colaterais : Nenhum
* Parametros : int : Id do robô que receberá o comando
* int : velocidade de movimentação do robô
* Retorno: Nenhum
*/
void set_speed_right(int robotId, int speed);

/* Nome da Função : set_pwm_right
* Intenção da função : Atalho para enviar os dados de movimentação da roda direita do robô alvo
* Pré-requisitos : Id de um robô em campo
* Efeitos colaterais : Nenhum
* Parametros : int : Id do robô que receberá o comando
* int : sinal PWM de movimentação do robô
* Retorno: Nenhum
*/
void set_pwm_right(int robotId, int speed);

/* Nome da Função : set_speed_left
* Intenção da função : Atalho para enviar os dados de movimentação da roda esquerda do robô alvo
* Pré-requisitos : Id de um robô em campo
* Efeitos colaterais : Nenhum
* Parametros : int : Id do robô que receberá o comando
* int : velocidade de movimentação do robô
* Retorno: Nenhum
*/
void set_speed_left(int robotId, int speed);

/* Nome da Função : set_pwm_left
* Intenção da função : Atalho para enviar os dados de movimentação da roda esquerda do robô alvo
* Pré-requisitos : Id de um robô em campo
* Efeitos colaterais : Nenhum
* Parametros : int : Id do robô que receberá o comando
* int : sinal PWM de movimentação do robô
* Retorno: Nenhum
*/
void set_pwm_left(int robotId, int speed);

};
}
#endif // CAMPO_H

0 comments on commit 0880887

Please sign in to comment.