# Configuration file for canopen.cgi

# canopen.cgi is an application usually accessible by a web server like
# apache. Query string contains commands to canopend. canopend is an
# application, which runs in background. It is a CANopen device with
# master functionality and command interface (via socket). One typical
# command is read or write specific object(variable) in specific device.
# (Each CANopen device has own Object Dictionary, collection of all
# variables. Any variable on any CANopen device can be read or written,
# if we know its address (nodeID + index + subindex). CANopen SDO client
# (master device - canopend) sends Service Data Object (SDO) via CANopen
# network, and one of the SDO servers (slave devices) responses with
# requested information.)


# Name of the local domain socket, link to canopend. */
socketPath /tmp/CO_command_socket


# Whitelist and Blacklist of CANopen objects, which are allowed or not
# allowed to be accessed by canopen.cgi. Whitelist is generated from all
# lines, which begins with 'allow'. Blacklist is generated from all
# lines, which begins with 'deny'.
# Each Object from query string is first NOT allowed, to be accessed. If
# it matches ANY pattern from the whitelist, it is allowed. (Whitelist,
# which allows everything would then be just one line: 'allow *'.) On
# the end, object is verified with blacklist. If it matches any pattern
# from there, it won't be passed as command to canopend.
#
# Format of the parameter in Query string: wnniiiissll=xxxx
# Where w, nn, iiii, ss, ll, xxxx are fixed width fields with the following meaning:
#  w    - 'W'rite or 'R'ead.
#  nn   - node ID in hex format.
#  iiii - Object Dictionary index in hex format.
#  ss   - Object Dictionary subindex in hex format.
#  ll   - length of variable (1 to FFFFFFFF) in hex format. If reading, this value is ignored.
#  xxxx - Value to be written in hex and little endian format. If reading, this value is ignored.
#
# Parameter and pattern strings are not case sensitive.


# Communication segment - up to 0x1FFF
allow R??[01]*          # allow read all.


# Manufacturer segment - 0x2000 to 0x5FFF
allow R??[2-5]*         # allow read all.

# Example of write access to some objects
allow [RW]032110*       # allow r/w on NodeId 3, index 0x2110, any subindex.
deny  W0321100[2-4E]*   # deny write on NodeId 3, index 0x2110, subindex 0x02, 0x03, 0x04 and 0x0E.
allow [RW]0321200[!45]* # allow r/w on NodeId 3, index 0x2120, subindex 0x00-0x03 and 0x06-0x09.


# Device profile segment - above 0x6000
allow R??[6-9A_F]*      # allow read all
