Esse software é responsável por realizar os procedimentos de calibrações das prensas hidráulicas do LAPMA (Laboratório de Altas Pressões e Materiais Avançados) da UFGRS.

Ele vem sendo desenvolvido há alguns anos, tendo sido originalmente desenvolido por Alisson Claudino (2017-2018) e depois por Pedro Kopper (2019). O código sofreu diversas alterações radicais durante esse tempo, gerando um código um tanto confuso. Um código similar, mas escrito do zero, pode ser encontrado no repositório de (https://git.cta.if.ufrgs.br/SADAPMAP/processamento)[Processamento].

Atualmente, ele é utilizado com uma placa (http://cta.if.ufrgs.br/projects/sacada)[SACADA] para aquisição de dados. Porém, o software em si suporta virtualmente qualquer dispositivo implementado na pasta `interfaces`.

### Instalação

Para instalar o software, é necessário ter os pacotes `git` e `pipenv` instalados. A partir daí, você pode

clonar o repositório para uma pasta local
```bash
git clone https://git.cta.if.ufrgs.br/SADAPMAP/Interface.git
```

e instalar as dependências
```bash
cd Interface
pipenv install
```

para rodar, use
```bash
pipenv run python3 SADAMAP.py [configuração]
```

onde '[configuração]' é o nome do arquivo de configuração que você quer rodar (.yaml).

### Estrutura do projeto

`interfaces`: Guarda os arquivos que definem as interfaces de hardware que o programa pode usar. O programa determina qual interface carregar pelo arquivo de configuração .yaml.

`nanopb_pb2`: Biblioteca nanopb, utilizada por algumas interfaces mais avançadas que se baseiam em Protocol Buffers. Não são mais implementadas pelo SACADA nem pelo Arduino.

`Protocol`: git submodule que linka o repositório (https://git.cta.if.ufrgs.br/SADAPMAP/Protocol)[Protocol], que guardava a implementação de Protocol Buffers do SACADA.

`resources`: Recursos auxiliares ao desenvolvimento do programa. Imagens, textos, arquivos de configuração de UI etc

`threads`: Antigamente, guardava as threads do programa, porém hoje o programa é single-threaded. Atualmente guarda as classes utilizadas nos processamentos.

`ui`: Guarda o código relativo à interface de usuário. Alguns deles são gerados por computador e não devem ser editados.

`util`: Guarda funções/classes miscelâneas que são úteis mas não se encaixam em mais nenhuma categoria.

### Fluxo de desenvolvimento

#### Aquisição offline (sem hardware)

Essa é uma funcionalidade do software que permite que se use uma interface "falsa" para fins de desenvolvimento chamada mock. Ao utilizar essa interface, ela irá alimentar o sistema com dados falsos, mas utilizando o mesmo software que uma interface real, permitindo testar o sistema mesmo sem nenhum hardware acoplado.

#### Criação da interface gráfica

A interface gráfica é escrita em PyQt5 e, para gerar os arquivos de interface gráfica, utilizamos a ferramenta Qt Designer 4. Ela gera arquivos .ui, que são salvos na pasta `resources/UI` e devem ser compilados para Python utilizando o `pyuic5` (instalável via pip) utilizando o comando `pyuic5 resources/UI/[arquivo].ui -o ui/[arquivo].py` sempre que alterados.

### Suporte

O suporte desse software é realizado exclusivamente via issues nesse repositório, com o fim de criar uma documentação pública e que possa ser útil a todos.

### Licença

Este programa é um software livre; você pode redistribuí-lo e/ou
modificá-lo sob os termos da Licença Pública Geral GNU como publicada
pela Free Software Foundation; na versão 3 da Licença, ou
(a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que possa ser útil,
mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO
a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
Licença Pública Geral GNU para mais detalhes.
Uma cópia da licença (em inglês) está disponível no arquivo LICENSE.
Os conteúdos dos repositórios estão sob licenças livres e são responsabilidade dos próprios autores, não representando as opiniões e posicionamento da UFRGS ou do CTA.