Grupo de Desenvolvimento C++ com KiCAD

De Garoa Hacker Clube
Ir para: navegação, pesquisa
Modificando código do KiCAD no Emacs

O e-hal (I Encontro Brasileiro de Hardware Aberto e Livre), que acontecerá em outubro de 2016, terá uma hackatona do KiCAD.

O KiCAD é uma suite de software livre para design de circuitos elétricos e placas de circuito impresso.

O objetivo da hackatona no e-hal será implementar a importação automática de projetos e bibliotecas do Eagle. Mesmo sendo um software proprietário, o Eagle é o software EDA de-facto na comunidade de hardware aberto e livre. O KiCAD tem ganhado terreno, mas tal recurso aceleraria a sua adoção, já que grandes fornecedores como Sparkfun, Arduino e Adafruit usam Eagle e distribuem extensas bibliotecas de componentes.

Para aumentar o rendimento da hackatona, que terá participação de membros do time do KiCAD vindos da gringa só para isso, o garoa organizou este grupo preparatório para quem quiser (ou não) participar em outubro.

A proposta deste grupo é resolver bugs simples ("starter patches") do KiCAD com o objetivo de nos familiarizarmos com o código e, de quebra, praticar um pouco e ganhar experiência em desenvolvimento C++ através de uma ferramenta que pode ser utilizada em projetos de hardware feitos no Garoa.

Não é preciso ter experiência com C++, porém alguma familiaridade com outra linguagem é desejável. De todo modo, o foco da atividade será programar e aprender programando!

Exemplo de projeto feito no KiCAD

Horário

Encontros presenciais às quartas-feiras** de setembro, na Biblioteca do Garoa, a partir das 18h00, mas também pode participar remoto via IRC no canal #garoa em irc.freenode.net

Investimento

0

Informações úteis

  • Segundo relato do Juca o KiCAD passou a usar git em todos os seus repositórios, então as informações acima podem estar desatualizadas. Existe um source mirror no github, mas recomendamos que todos façam checkout a partir do launchpad, como nas instruções do Guia de desenvolvedores
  • Recomendamos que cada um traga seu notebook, de preferência com uma distribuição GNU/Linux instalada. No entanto, vale lembrar que o KiCAD é multiplataforma, mas os processos de build para Windows e MacOS são mais complexos.
  • Para compilar com símbolos de debug: mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. && make

Instalar build system e dependências

Detalhes do processo de building para diversas plataformas podem ser consultados no site oficial do KiCad. Afim de simplificar para alguns usuários, seguem instruções para Ubuntu 16.04, que podem ser facilmente adaptadas para outras plataformas. Esta configuração habilita o desenvolvimento com Python e documentação:

- Instale os programas básicos de desenvolvimento - git, GCC, CMAKE

- Faça download do repositório do KiCad - isto pode demorar um pouco:

git clone https://git.launchpad.net/kicad

- Instale a biblioteca BOOST:

# apt-get install libboost-dev libboost-context-dev  libboost-system-dev libboost-thread-dev


- Adicione o repositório do wxWidgets, atualize o aptitude e instale as bibliotecas relacionadas:


# apt-add-repository 'deb http://repos.codelite.org/wx3.0.2/ubuntu/ trusty universe'
# apt-get update
# apt-get install libwxbase3.0-0-unofficial \
                libwxbase3.0-dev \
                libwxgtk3.0-0-unofficial \
                libwxgtk3.0-dev \
                wx3.0-headers \
                wx-common \
                libwxbase3.0-dbg \
                libwxgtk3.0-dbg \
                wx3.0-i18n \
                wx3.0-examples \
                wx3.0-doc

- Instale as bibliotecas GLEW, GLM, GLUT e Cairo2,

# apt-get install libglew-dev libglm-dev freeglut3-dev libcairo2-dev 

- Instale o Doxygem para documentação:

 # apt-get install doxygen

- Instale as PythonLibs, o wxPython e o SWIG para o suporte a scripts Python:

# apt-get install python-dev python-wxgtk3.0-dev swig

- Instale a LibSSL (não está documentado, mas o CMAKE exige):

# apt-get install libssl-dev

(Ou, você pode seguir a orientação desta outra página do Kicad e instalar tudo de uma vez. Não conferi se ficou faltando algo porém, provavelmente vai restar as instalações do Python)

# sudo apt-get install libwxbase3.0-dev libwxgtk3.0-dev libgl1-mesa-dev \
libglew-dev libglm-dev libcurl4-openssl-dev libboost-dev libboost-thread-dev \
libcairo2-dev libboost-system-dev libboost-context-dev libssl-dev wx-common

Baixar source

git clone https://git.launchpad.net/kicad

Compilar

Para uma primeira compilação, sem debug, siga as instruções abaixo:

cd <your kicad source mirror>
mkdir -p build/release
mkdir build/debug               # Optional for debug build.
cd build/release
cmake -DCMAKE_BUILD_TYPE=Release \
     -DKICAD_SCRIPTING=ON \
     -DKICAD_SCRIPTING_MODULES=ON \
     -DKICAD_SCRIPTING_WXPYTHON=ON \
     ../../
make

Criar e submeter patches

TODO

Starter patches

Os desenvolvedores do KiCAD disponibilizaram uma lista de bugs para iniciantes no projeto.

Caso tenha interesse em trabalhar em algum deles, coloque o seu nome na frente. A lista abaixo não é exaustiva. Você também pode trabalhar em qualquer outro bug que ache interessante.

  • Bug #1423515 pcbnew option to export text as editable text when writing DXF/SVG Pitanga
  • Bug #1428125 Don't freeze GUI when showing hotkey list.
  • Bug #1395442 Hotkeys Editor should have a reset button
  • Bug #1412628 pos file ref cut off
  • Bug #1448460 Canceling a started track in GAL. Juca
  • Bug #1424003 OpenGL & Cairo Canvas "End Track". Já estava corrigido: https://code.launchpad.net/~rohbotics/kicad/bug_1424003/+merge/285826
  • Bug #1492734 Likely DRAWSEGMENT::computeArcBBox() (pcbnew/class_drawsegment.cpp) is the culprit. The issue should solved in DRAWSEGMENT::ViewBBox(), so perhaps both could be merged.
  • Bug #793420 Perhaps it is missing a few OnModify() calls. Wayne proposes a simple solution which may serve as an example.
  • Bug #1005383 Minor UI issue.
  • Bug #1482866 One needs to get the currently highlighted net number, and preselect it in the zone creation dialog (pcbnew/dialogs/dialog_copper_zones.cpp) through a ZONE_SETTINGS object.
  • Bug #1485941 Class CONTEXT_TRACK_WIDTH_MENU (pcbnew/router/router_tool.cpp) lacks an update handler that would update the units whenever the menu is shown. Have a look at CONTEXT_MENU::SetMenuHandler(). It might be also a good introduction to implement #1519973.
  • Bug #1503921 It might be just one 'if' statement missing, though I am not sure.
  • ...

Referências

  • [1] palestra do Wayne Stambaugh (líder do projeto) falando dos "velhos tempos" do KiCAD.
  • [2] informações essenciais para novos desenvolvedores
  • [3] thread na lista de e-mails sobre o desenvolvimento de suporte a arquivos do Eagle, que será tema da hackatona
  • [4] [5] [6] [7] [8] [9] links para o trabalho do Chris Gammel, citado aos 32:20 da palestra do Wayne
  • Arquivo:Kicad dev intro.pdf, documento com uma explicação geral sobre a organizaçãod o código

Resumo dos encontros

07/09/16

  • Presentes: Afonso, Marcelo Campos, Alexandre, Aylons (remoto), orsonmmz (desenvolvedor do KiCAD, remoto), Pitanga
  • Falado: objetivos gerais do grupo, organização da documentação (esta página), conversa com os desenvolvedores do KiCAD
  • Feito: baixar e compilar o código fonte

14/09/16

  • Presentes:
  • Falado:
  • Feito:

21/09/16

  • Presentes:
  • Falado:
  • Feito:

28/09/16

  • Presentes:
  • Falado:
  • Feito:

Anotações e ideias

  • Marcelo: coisas que não estão no tutorial - dependência GLM e biblioteca x tem que ser instalada em x_64
  • Salvar o ultimo Output Directory-
  • Pq os arquivos plotados saem com um nome tipo -Bxxxx, começando com dash? Talvez seja pq o projeto não está salvo e o nome do projeto, que viria antes do dash é a string nula. Nesse caso, deveria ter um nome melhor pois nome de arquivo começando com dash é estranho e escapar o dash na linha de comando não é trivial