Giter Site home page Giter Site logo

hmartinez82 / indi Goto Github PK

View Code? Open in Web Editor NEW

This project forked from indilib/indi

0.0 0.0 0.0 407.43 MB

INDI Core Library Repository

Home Page: https://www.indilib.org

License: GNU Lesser General Public License v2.1

Shell 0.13% C++ 82.00% C 16.14% CMake 1.67% Dockerfile 0.07%

indi's Introduction

INDI Core Library

Linux Debian Packages MacOS Visual Studio MinGW PyIndi

INDI is a standard for astronomical instrumentation control. INDI Library is an Open Source POSIX implementation of the Instrument-Neutral-Device-Interface protocol.

INDI core library is composed of the following components:

  1. INDI Server.
  2. INDI Core Drivers: Hardware drivers that communicate with the equipment. Many devices are supported including:
  • Mounts
  • CCDs, CMOS, Webcams, DSLRs (Canon, Nikon, Sony, Pentax..etc).
  • Focusers.
  • Filter Wheels.
  • Adaptive Optics.
  • Domes.
  • GPS.
  • Weather Stations.
  • Controllers.
  • Auxiliary Devices (switches, watchdog, relays, light sources, measurement devices..etc).
  1. Client Library: Cross-platform POSIX and Qt5-based client libraries. The client libraries can be embedded in 3rd party applications to communicate with INDI server and devices.

INDI core device drivers are shipped with INDI library by default.

INDI 3rd party drivers are available in a dedicated 3rdparty repository and maintained by their respective owners.

Learn more about INDI:

Building

Install Pre-requisites

On Debian/Ubuntu:

sudo apt-get install -y \
  git \
  cdbs \
  dkms \
  cmake \
  fxload \
  libev-dev \
  libgps-dev \
  libgsl-dev \
  libraw-dev \
  libusb-dev \
  zlib1g-dev \
  libftdi-dev \
  libgsl0-dev \
  libjpeg-dev \
  libkrb5-dev \
  libnova-dev \
  libtiff-dev \
  libfftw3-dev \
  librtlsdr-dev \
  libcfitsio-dev \
  libgphoto2-dev \
  build-essential \
  libusb-1.0-0-dev \
  libdc1394-dev \
  libboost-regex-dev \
  libcurl4-gnutls-dev \
  libtheora-dev

XISF Support

To enable XISF format support in INDI, you need to build or install libxisf package.

sudo apt-add-repository ppa:mutlaqja/ppa
sudo apt-get -y install libxisf-dev

Create Project Directory

mkdir -p ~/Projects
cd ~/Projects

Get the code

To build INDI in order to run drivers, then it is recommended to perform a quick shallow clone that will save lots of bandwidth and space:

git clone --depth 1 https://github.com/indilib/indi.git

On the other hand, if you plan to submit a PR or engage in INDI driver development, then getting a full clone is recommended:

git clone https://github.com/indilib/indi.git

It is worth making your own fork of indi in your own personal repository and cloning from that rather than cloning directly from the root indi.

Build indi-core (cmake)

mkdir -p ~/Projects/build/indi-core
cd ~/Projects/build/indi-core
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug ~/Projects/indi
make -j4
sudo make install

Build indi-core (script)

Alternatively, you can use the developer-build.bash script for faster build and less stress on your SSD or HDD.

cd ~/Projects/indi
./developer-build.bash

By default, this script builds the indi-core inside machine's RAM, i.e. /dev/shm. However, you can change the target build directory using the -o option, for instance:

./developer-build.bash -o /path/to/new/build/dir

Also, this script checks if the target build directory has at least 512MB of memory available and aborts if this is not the case. You can force skip this test with the -f option:

./developer-build.bash -f

Furthermore, this script executes make in parallel by default. If you are having problems or need to use fewer CPU cores, please adjust using the -j option. For example, to disable parallel execution:

./developer-build.bash -j1

This script creates a soft symbolic link file named build to the target build directory. This helps easier access by simply following the symbolic link:

cd ~/Projects/indi/build

Lastly, you could give all the options and arguments at once. For instance, if you want to build in ~/indi-build directory, skip the memory check, and run make using 8 cores, call the script with the following options:

cd ~/Projects/indi
./developer-build.bash -o ~/indi-build -f -j8

Build indi-core (Qt Creator)

If your are planning to develop using Qt Creator then still follow this process and do a manual build first. Then in QT Creator:

  • Open the project using File - Open File or Project.
  • Navigate to Projects/indi and selec the CMakeLists.txt file.
  • Qt Creator will open your project but will probably configure it incorrectly, select the Projects tab and change to the Projects/build/indi-core directory that you used to do the initial build. The project display may be blank but click on the build button (the geological hammer) anyway. The project should build.

It is very easy to get this process wrong and all sorts of subtle things can happen, such as everything appearing to build but your new functionality not being present.

Architecture

Typical INDI Client / Server / Driver / Device connectivity:

INDI Client 1 ----|                  |---- INDI Driver A  ---- Dev X
                  |                  |
INDI Client 2 ----|                  |---- INDI Driver B  ---- Dev Y
                  |                  |                     |
 ...              |--- indiserver ---|                     |-- Dev Z
                  |                  |
                  |                  |
INDI Client n ----|                  |---- INDI Driver C  ---- Dev T


 Client       INET       Server       UNIX     Driver          Hardware
 processes    sockets    process      pipes    processes       devices

INDI server is the public network access point where one or more INDI Clients may contact one or more INDI Drivers. indiserver launches each driver process and arranges for it to receive the INDI protocol from clients on its stdin and expects to find commands destined for clients on the driver's stdout. Anything arriving from a driver process' stderr is copied to indiserver's stderr. INDI server only provides convenient port, fork and data steering services. If desired, a client may run and connect to INDI Drivers directly.

Support

Development

Code Style

INDI uses Artistic Style to format all the C++ source files. Please make sure to apply the following astyle rules to any code that is submitted to INDI. On Linux, you can create ~/.astylerc file containing the following rules:

--style=allman
--align-reference=name
--indent-switches
--indent-modifiers
--indent-classes
--pad-oper
--indent-col1-comments
--lineend=linux
--max-code-length=124

Some IDEs (e.g. QtCreator) support automatic formatting for the code everytime you save the file to disk.

How to create Github pull request (PR)

How to contribute to INDI full guide

Here is the short version on how to submit a PR:

  1. Login with a Github account and fork the official INDI repository.
  2. Clone the official INDI repository and add the forked INDI repository as a remote (git remote add ...).
  3. Create a local Git branch (git checkout -b my_branch).
  4. Work on the patch and commit the changes.
  5. If it is ready push this branch to your fork repo (git push -f my_fork my_branch:my_branch).
  6. Go to the official repo's github website in a browser, it will popup a message to create a PR. Create it.
  7. Pushing updates to the PR: just update your branch (git push -f my_fork my_branch:my_branch)..

If you would like to make cleaner PR (recommended!) please read this tutorial and follow it. The best way is to keep one logical change per commit and not pollute the history by multiple small fixes to the PR.

Driver Documentation

When submitting a new driver, the driver user documentation is required as part of the submission process.

  • Installation: Driver name, executable name, version, required INDI version.
  • Features: What features does it support exactly?
  • Operation: How to operate the driver? Each sub section should come with a screen shot of the various tabs..etc. Preferably annotated to make it easier for new users to follow.
    • Connecting: How to establish connection? How to set port if any?
    • Main Control: Primary control tab and its functions.
    • Options: Explanation for the various options available.
    • Etc: Any other tabs created by the driver.
  • Issues: Any problems or issues or warnings the users should be aware about when using this driver.

Sample Drivers

You can base a new driver from an existing driver. Look in either the examples or drivers/skeleton directories on how to get started.

Unit tests

In order to run the unit test suite you must first install the Google Test Framework. You will need to build and install this from source code as Google does not recommend package managers for distributing distros.(This is because each build system is often unique and a one size fits all aproach does not work well).

Once you have the Google Test Framework installed follow this alternative build sequence:-

mkdir -p build/indi
cd build/indi
cmake -DINDI_BUILD_UNITTESTS=ON -DCMAKE_BUILD_TYPE=Debug ../../
make
make test

For more details refer to the scripts in the .circleci directory.

indi's People

Contributors

amendolajamie avatar azwing avatar chkettu avatar chris-rowland avatar d33psky avatar dirkenstein avatar ericvic avatar fcasarramona avatar fenriques avatar geehalel avatar grozzie2 avatar gulinux avatar james-lan avatar jochym avatar jpaana avatar juanmb avatar kecsap avatar ken-self avatar knro avatar mikefulb avatar nachoplus avatar nadvornik avatar not7cd avatar pawel-soja avatar polakovic avatar rlancaste avatar sterne-jaeger avatar tallfurryman avatar xsnrg avatar yangzwoptical avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.