Giter Site home page Giter Site logo

hadzim / libosdp Goto Github PK

View Code? Open in Web Editor NEW

This project forked from gotomain/libosdp

0.0 0.0 0.0 1.95 MB

Implementation of OSDP (Open Supervised Device Protocol, IEC 60839-11-5); provides a C/C++ library with Python3 bindings to control/manage OSDP enabled security devices. Mailing list: <[email protected]>

Home Page: https://libosdp.gotomain.io/

License: Apache License 2.0

CMake 5.28% C 82.88% C++ 0.68% Shell 2.52% Makefile 0.42% Python 8.23%

libosdp's Introduction

LibOSDP - Open Supervised Device Protocol Library

Version Build CI

This is an open source implementation of IEC 60839-11-5 Open Supervised Device Protocol (OSDP). The protocol is intended to improve interoperability among access control and security products. It supports Secure Channel (SC) for encrypted and authenticated communication between configured devices.

OSDP describes the communication protocol for interfacing one or more Peripheral Devices (PD) to a Control Panel (CP) over a two-wire RS-485 multi-drop serial communication channel. Nevertheless, this protocol can be used to transfer secure data over any stream based physical channel. Read more about OSDP here.

This protocol is developed and maintained by Security Industry Association (SIA).

Salient Features of LibOSDP

  • Supports secure channel communication (AES-128).
  • Can be used to setup a PD or CP mode of operation.
  • Exposes a well defined contract though a single header file.
  • No run-time memory allocation. All memory is allocated at init-time.
  • No external dependencies (for ease of cross compilation).
  • Fully non-blocking, asynchronous design.
  • Provides Python3 bindings for the C library for faster testing/integration.

C API

LibOSDP exposes a minimal set of API to setup and manage the lifecycle of OSDP devices. See include/osdp.h for more details.

Python API

To setup a device as a Control Panel in Python, you'd do something like this:

import osdp

## Setup OSDP device in Control Panel mode
cp = osdp.ControlPanel(pd_info, master_key=key)

## send a output command to PD-1
cp.send_command(1, output_cmd)

Similarly, for Peripheral Device,

import osdp

## Setup OSDP device in Peripheral Device mode
pd = osdp.PeripheralDevice(pd_info, capabilities=pd_cap)

## Set a handler for incoming commands from CP
pd.set_command_callback(command_handler_fn)

For more details, look at cp_app.py and pd_app.py.

Supported Commands and Replies

OSDP has certain command and reply IDs pre-registered. This implementation of the protocol support only the most common among them. You can see a list of commands and replies and their support status in LibOSDP here.

Dependencies

  • cmake3 (host)
  • python3 (host, optional)
  • python3-pip (host, optional)
  • doxygen (host, optional)
  • OpenSSL (host and target, optional - recommended)
  • MbedTLS (host and target)
  • goToMain/C-Utils (host, submodule)

For ubuntu

sudo apt install cmake python3 python3-pip python3-dev libssl-dev doxygen

Compile LibOSDP

LibOSDP provides a lean-build that only builds the core library and nothing else. This is useful if you are cross compiling as it doesn't have any other dependencies but a C compiler. Here is an example of how you can cross compile LibOSDP to arm-none-eabi-gcc.

export CROS_COMPILE=arm-none-eabi-
export CCFLAGS=--specs=nosys.specs
./configure.sh
make

To build libosdp and all its components you must have cmake-3.0 (or above) and a C compiler installed. This repository produces a libosdp.so and libosdpstatic.a; so depending on on your needs you can link these with -losdp or -losdpstatic, respectively.

Have a look at `sample/* for a quick lookup on how to consume this library and structure your application.

You can also read the API documentation for a comprehensive list of APIs that are exposed by libosdp.

git clone https://github.com/goToMain/libosdp --recurse-submodules
# git submodule update --init (if you missed doing --recurse-submodules earlier)
cd libosdp
mkdir build && cd build
cmake ..
make

# optionally
make check
make DESTDIR=/your/install/path install

Refer to this document for more information on build and cross compilation.

Build HTML docs

pip3 install -r doc/requirements.txt
mkdir build && cd build
cmake ..
make html_docs # output in ./docs/sphinx/

Contributions, Issues and Bugs

The Github issue tracker doubles up as TODO list for this project. Have a look at the open items, PRs in those directions are welcome.

If you have a idea, find bugs, or other issues, please open a new issue in the github page of this project https://github.com/goTomain/libosdp.

You can read more on this here.

License

This software is distributed under the terms of Apache-2.0 license. If you don't know what that means/implies, you can consider it is as "free as in beer".

OSDP protocol is also open for consumption into any product. There is no need to,

  • obtain permission from SIA
  • pay royalty to SIA
  • become SIA member

The OSDP specification can be obtained from SIA for a cost. Read more at our FAQ page.

libosdp's People

Contributors

sidcha avatar dvucich avatar patrick-compass avatar bojankoce avatar schmida2 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.