diff --git a/bacnet-stack/arcnet.h b/bacnet-stack/arcnet.h new file mode 100644 index 00000000..0d2bf3f5 --- /dev/null +++ b/bacnet-stack/arcnet.h @@ -0,0 +1,72 @@ +/*####COPYRIGHTBEGIN#### + ------------------------------------------- + Copyright (C) 2005 Steve Karg + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to: + The Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA. + + As a special exception, if other files instantiate templates or + use macros or inline functions from this file, or you compile + this file and link it with other works to produce a work based + on this file, this file does not by itself cause the resulting + work to be covered by the GNU General Public License. However + the source code for this file must still be made available in + accordance with section (3) of the GNU General Public License. + + This exception does not invalidate any other reasons why a work + based on this file might be covered by the GNU General Public + License. + ------------------------------------------- +####COPYRIGHTEND####*/ +#ifndef ARCNET_H +#define ARCNET_H + +#include +#include "bacdef.h" + +// specific defines for ARCNET +#define MAX_HEADER (1+1+2+2+1+1+1+1) +#define MAX_MPDU (MAX_HEADER+MAX_PDU) + +bool arcnet_valid(void); +bool arcnet_cleanup(void); +bool arcnet_init(char *interface_name); + +/* function to send a packet out the 802.2 socket */ +/* returns 0 on success, non-zero on failure */ +int arcnet_send( + BACNET_ADDRESS *dest, // destination address + BACNET_ADDRESS *src, // source address + uint8_t *pdu, // any data to be sent - may be null + unsigned pdu_len); // number of bytes of data + +/* function to send a packet out the 802.2 socket */ +/* returns zero on success, non-zero on failure */ +int arcnet_send_pdu( + BACNET_ADDRESS *dest, // destination address + uint8_t *pdu, // any data to be sent - may be null + unsigned pdu_len); // number of bytes of data + +// receives an 802.2 framed packet +// returns the number of octets in the PDU, or zero on failure +uint16_t arcnet_receive( + BACNET_ADDRESS *src, // source address + uint8_t *pdu, // PDU data + uint16_t max_pdu); // amount of space available in the PDU + +void arcnet_get_my_address(BACNET_ADDRESS *my_address); + +#endif diff --git a/bacnet-stack/bacdef.h b/bacnet-stack/bacdef.h index be44a8d8..d09a7513 100644 --- a/bacnet-stack/bacdef.h +++ b/bacnet-stack/bacdef.h @@ -35,6 +35,7 @@ #define BACDEF_H #include +#include "config.h" // largest BACnet Instance Number // Also used as a device instance number wildcard address @@ -60,31 +61,7 @@ struct BACnet_Device_Address { }; typedef struct BACnet_Device_Address BACNET_ADDRESS; -// Max number of bytes in an APDU. -// Typical sizes are 50, 128, 206, 480, 1024, and 1476 octets -// This is used in constructing messages and to tell others our limits -// 50 is the minimum; adjust to your memory and physical layer constraints -// Lon=206, MS/TP=480, ARCNET=480, Ethernet=1476 -#define MAX_APDU 50 #define MAX_NPDU (1+1+2+1+MAX_MAC_LEN+2+1+MAX_MAC_LEN+1+1+2) #define MAX_PDU (MAX_APDU + MAX_NPDU) -// FIXME: maybe we can encapsulate the Physical layer details in the -// physical layer modules and not have to allocate the entire packet - -// packet includes physical layer octets such as destination, len, etc. -// this is highly dependent on the physical layer used -// ARCNET=1+1+2+2+1+1+1+1=10 -// MS/TP=2+1+1+1+2+1+2+1=11 -// Ethernet=6+6+2+1+1+1=17 -#ifdef BACNET_ARCNET - #define MAX_HEADER 10 -#endif -#ifdef BACNET_MSTP - #define MAX_HEADER 11 -#endif -#ifdef BACNET_ETHERNET - #define MAX_HEADER 17 -#endif -#define MAX_MPDU (MAX_HEADER+MAX_PDU) #endif diff --git a/bacnet-stack/config.h b/bacnet-stack/config.h new file mode 100644 index 00000000..8f159f07 --- /dev/null +++ b/bacnet-stack/config.h @@ -0,0 +1,11 @@ +#ifdef CONFIG_H +#define CONFIG_H + +// Max number of bytes in an APDU. +// Typical sizes are 50, 128, 206, 480, 1024, and 1476 octets +// This is used in constructing messages and to tell others our limits +// 50 is the minimum; adjust to your memory and physical layer constraints +// Lon=206, MS/TP=480, ARCNET=480, Ethernet=1476 +#define MAX_APDU 50 + +#endif diff --git a/bacnet-stack/ethernet.h b/bacnet-stack/ethernet.h index ec614314..59b8be31 100644 --- a/bacnet-stack/ethernet.h +++ b/bacnet-stack/ethernet.h @@ -37,6 +37,10 @@ #include #include "bacdef.h" +// specific defines for Ethernet +#define MAX_HEADER (6+6+2+1+1+1) +#define MAX_MPDU (MAX_HEADER+MAX_PDU) + bool ethernet_valid(void); bool ethernet_cleanup(void); bool ethernet_init(char *interface_name); diff --git a/bacnet-stack/mstp.h b/bacnet-stack/mstp.h index 0478e79c..038990b6 100644 --- a/bacnet-stack/mstp.h +++ b/bacnet-stack/mstp.h @@ -39,8 +39,14 @@ #include #include #include +#include "bacdef.h" + +// defines specific to MS/TP +#define MAX_HEADER (2+1+1+1+2+1+2+1) +#define MAX_MPDU (MAX_HEADER+MAX_PDU) // The number of elements in the array InputBuffer[]. +// Note: minimum APDU is 50 bytes, so buffer may vary #define INPUT_BUFFER_SIZE (501) // The value 255 is used to denote broadcast when used as a