osdp

package module
v0.2.17 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2023 License: MIT Imports: 7 Imported by: 0

README

This library is in BETA, and it not actively being maintained

GO OSDP Library

OSDP Go is a go implementation of the Open Supervised Device Protocol. This library is a work in progress. This library expects the user to do more heavy lifting for the application, communication side. Examples will be provided to demonstrate how to use the library.

Documentation

Index

Constants

View Source
const (
	SCS_11 = 0x11
	SCS_12 = 0x12
	SCS_13 = 0x13
	SCS_14 = 0x14
	SCS_15 = 0x15
	SCS_16 = 0x16
	SCS_17 = 0x17
	SCS_18 = 0x18
)
View Source
const (
	ERR_BAD_CRC                   = 0x01
	ERR_BAD_LEN                   = 0x02
	ERR_BAD_CMD                   = 0x03
	ERR_BAD_SEQ                   = 0x04
	ERR_UNSUPPORTED_SEC           = 0x05
	ERR_UNMET_SECURITY_CONDITIONS = 0x06
	ERR_UNSUPPORTED_BIO_TYPE      = 0x07
	ERR_UNSUPPORTED_BIO_FORMAT    = 0x08
	ERR_UNKNOWN                   = 0x09
)
View Source
const (
	OSDPSOM byte = 0x53
)

Variables

View Source
var (
	PacketIncompleteError       = errors.New("OSDP Packet Incomplete")
	InvalidSOMError             = errors.New("OSDP Packet Invalid SOM")
	AddressOutOfRangeError      = errors.New("Peripheral Address Out of Range")
	ChecksumFailedError         = errors.New("Checksum Failed Error")
	OSDPReceiveTimeoutError     = errors.New("OSDPReceiveTimeout")
	SecureBlockDataLengthError  = errors.New("Secure Block Data Length too large")
	InvalidSequenceNumber       = errors.New("Invalid Sequence Number")
	IncorrectRandomNumberLength = errors.New("Invalid Random Number byte array length")
	InvalidSecureBlockType      = errors.New("Invalid Secure Block Type")
)

Functions

This section is empty.

Types

type OSDPCode

type OSDPCode byte
const (
	CMD_POLL     OSDPCode = 0x60
	CMD_ID       OSDPCode = 0x61
	CMD_CAP      OSDPCode = 0x62
	CMD_DIAG     OSDPCode = 0x63
	CMD_LSTAT    OSDPCode = 0x64
	CMD_ISTAT    OSDPCode = 0x65
	CMD_OSTAT    OSDPCode = 0x66
	CMD_RSTAT    OSDPCode = 0x67
	CMD_OUT      OSDPCode = 0x68
	CMD_LED      OSDPCode = 0x69
	CMD_BUZ      OSDPCode = 0x6A
	CMD_TEXT     OSDPCode = 0x6B
	CMD_COMSET   OSDPCode = 0x6E
	CMD_DATA     OSDPCode = 0x6F
	CMD_PROMPT   OSDPCode = 0x71
	CMD_BIOREAD  OSDPCode = 0x73
	CMD_BIOMATCH OSDPCode = 0x74
	CMD_KEYSET   OSDPCode = 0x75
	CMD_CHLNG    OSDPCode = 0x76
	CMD_SCRYPT   OSDPCode = 0x77
	CMD_ABORT    OSDPCode = 0x7A
	CMD_MAXREPLY OSDPCode = 0x7B
	CMD_MFG      OSDPCode = 0x80
)
const (
	REPLY_ACK       OSDPCode = 0x40
	REPLY_NAK       OSDPCode = 0x41
	REPLY_PDID      OSDPCode = 0x45
	REPLY_PDCAP     OSDPCode = 0x46
	REPLY_LSTATR    OSDPCode = 0x48
	REPLY_IASTR     OSDPCode = 0x49
	REPLY_OSTATR    OSDPCode = 0x4A
	REPLY_RSTATR    OSDPCode = 0x4B
	REPLY_RAW       OSDPCode = 0x50
	REPLY_FMT       OSDPCode = 0x51
	REPLY_KEYPAD    OSDPCode = 0x53
	REPLY_COM       OSDPCode = 0x54
	REPLY_BIOREADR  OSDPCode = 0x57
	REPLY_BIOMATCHR OSDPCode = 0x58
	REPLY_CCRYPT    OSDPCode = 0x76
	REPLY_RMAC_I    OSDPCode = 0x78
	REPLY_MFGREP    OSDPCode = 0x90
	REPLY_BUSY      OSDPCode = 0x79
	REPLY_XRD       OSDPCode = 0xB1
)
const (
	WIEGAND_FORMAT_CODE OSDPCode = 0x01
)

type OSDPMessage

type OSDPMessage struct {
	MessageCode       OSDPCode
	PeripheralAddress byte
	MessageData       []byte
	SequenceNumber    byte
	Secure            bool
	SecureBlockType   byte
	SecureBlockData   []byte
	Retries           uint32
	MAC               []byte
}

func NewOSDPMessage

func NewOSDPMessage(osdpCode OSDPCode, peripheralAddress byte, sequenceNumber byte, msgData []byte) (*OSDPMessage, error)

func NewSecureOSDPMessage

func NewSecureOSDPMessage(osdpCode OSDPCode, peripheralAddress byte, sequenceNumber byte, secureBlockType byte, secureBlockData []byte, msgData []byte) (*OSDPMessage, error)

func (*OSDPMessage) DecryptPayload

func (osdpMessage *OSDPMessage) DecryptPayload(key []byte, IVC []byte) error

func (*OSDPMessage) EncryptPayload

func (osdpMessage *OSDPMessage) EncryptPayload(key []byte, IVC []byte) error

func (*OSDPMessage) GenerateMAC

func (osdpMessage *OSDPMessage) GenerateMAC(IVC, SMAC1, SMAC2 []byte) ([]byte, error)

func (*OSDPMessage) PacketFromMessage

func (osdpMessage *OSDPMessage) PacketFromMessage() (*OSDPPacket, error)

type OSDPMessenger

type OSDPMessenger struct {
	// contains filtered or unexported fields
}

func NewOSDPMessenger

func NewOSDPMessenger(transceiver OSDPTransceiver, secure bool) *OSDPMessenger

func (*OSDPMessenger) ReceiveResponse

func (osdpMessenger *OSDPMessenger) ReceiveResponse(timeout time.Duration) (*OSDPMessage, error)

func (*OSDPMessenger) SendAndReceive

func (osdpMessenger *OSDPMessenger) SendAndReceive(osdpMessage *OSDPMessage, writeTimeout time.Duration, readTimeout time.Duration) (*OSDPMessage, error)

func (*OSDPMessenger) SendOSDPCommand

func (osdpMessenger *OSDPMessenger) SendOSDPCommand(osdpMessage *OSDPMessage, timeout time.Duration) error

type OSDPMessengerEvent

type OSDPMessengerEvent int
const (
	OSDPDisconnected   OSDPMessengerEvent = 0
	OSDPConnected      OSDPMessengerEvent = 1
	OSDPReceiveTimeout OSDPMessengerEvent = 2
	OSDPReceiveError   OSDPMessengerEvent = 3
	OSDPTransmitError  OSDPMessengerEvent = 4
)

TODO: propagate event with error codes

type OSDPPacket

type OSDPPacket struct {
	// contains filtered or unexported fields
}

func NewPacket

func NewPacket(msgCode OSDPCode, peripheralAddress byte, msgData []byte, sequenceNumber byte, integrityCheck bool) (*OSDPPacket, error)

func NewPacketFromBytes

func NewPacketFromBytes(payload []byte) (*OSDPPacket, error)

func NewSecurePacket

func NewSecurePacket(msgCode OSDPCode, peripheralAddress byte, msgData []byte, secureBlockType byte, secureBlockData []byte, sequenceNumber byte, integrityCheck bool) (*OSDPPacket, error)

func (*OSDPPacket) GetMessageCode

func (osdpPacket *OSDPPacket) GetMessageCode() byte

func (*OSDPPacket) GetMessageData

func (osdpPacket *OSDPPacket) GetMessageData() []byte

func (*OSDPPacket) GetPeripheralAddress

func (osdpPacket *OSDPPacket) GetPeripheralAddress() byte

func (*OSDPPacket) GetSecurityBlockData

func (osdpPacket *OSDPPacket) GetSecurityBlockData() []byte

func (*OSDPPacket) GetSecurityBlockType

func (osdpPacket *OSDPPacket) GetSecurityBlockType() byte

func (*OSDPPacket) GetSequenceNumber

func (osdpPacket *OSDPPacket) GetSequenceNumber() byte

func (*OSDPPacket) IsSecure

func (osdpPacket *OSDPPacket) IsSecure() bool

func (*OSDPPacket) ToBytes

func (osdpPacket *OSDPPacket) ToBytes() []byte

type OSDPTransceiver

type OSDPTransceiver interface {
	Transmit(payload []byte) error
	Receive() ([]byte, error) // Byte slice received must only have bytes received returned, no extra padding
	Reset() error             // Reset the transceiver in case of error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL