From 8d646f323f08edda07bfa7dbf6677abf20c04c08 Mon Sep 17 00:00:00 2001 From: skarg Date: Fri, 27 May 2005 18:44:42 +0000 Subject: [PATCH] created --- bacnet-stack/ports/win32/bacnet.ide | Bin 0 -> 47642 bytes bacnet-stack/ports/win32/bip.c | 345 ++++++++++++++++++++++++++++ bacnet-stack/ports/win32/main.c | 145 ++++++++++++ bacnet-stack/ports/win32/stdbool.h | 28 +++ bacnet-stack/ports/win32/stdint.h | 19 ++ 5 files changed, 537 insertions(+) create mode 100644 bacnet-stack/ports/win32/bacnet.ide create mode 100644 bacnet-stack/ports/win32/bip.c create mode 100644 bacnet-stack/ports/win32/main.c create mode 100644 bacnet-stack/ports/win32/stdbool.h create mode 100644 bacnet-stack/ports/win32/stdint.h diff --git a/bacnet-stack/ports/win32/bacnet.ide b/bacnet-stack/ports/win32/bacnet.ide new file mode 100644 index 0000000000000000000000000000000000000000..14318abb838c9b8546c4c59df2726febe6e1f5a9 GIT binary patch literal 47642 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 XUX9Ob9QBk+pQ-UCjUU%oh=BOt;&8o? literal 0 HcmV?d00001 diff --git a/bacnet-stack/ports/win32/bip.c b/bacnet-stack/ports/win32/bip.c new file mode 100644 index 00000000..0d0065c1 --- /dev/null +++ b/bacnet-stack/ports/win32/bip.c @@ -0,0 +1,345 @@ +/*####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####*/ + +#define WIN32_LEAN_AND_MEAN +#define STRICT + +#include +#include +#include +#include // for standard integer types uint8_t etc. +#include // for the standard bool type. +#include "bacdcode.h" +#include "bip.h" + +#define close closesocket + +static int BIP_Socket = -1; +/* port to use - stored in network byte order */ +static uint16_t BIP_Port = 0; +/* IP Address - stored in network byte order */ +static struct in_addr BIP_Address; +/* Broadcast Address */ +static struct in_addr BIP_Broadcast_Address; +/* Subnet Mask */ +static struct in_addr BIP_Subnet_Mask; + +bool bip_valid(void) +{ + return (BIP_Socket != -1); +} + +void bip_cleanup(void) +{ + if (bip_valid()) + close(BIP_Socket); + BIP_Socket = -1; + + return; +} + +static void set_network_address(struct in_addr *net_address, + uint8_t octet1, uint8_t octet2, uint8_t octet3, uint8_t octet4) +{ + union { + uint8_t byte[4]; + uint32_t value; + } long_data = {{0}}; + + long_data.byte[0] = octet1; + long_data.byte[1] = octet2; + long_data.byte[2] = octet3; + long_data.byte[3] = octet4; + + net_address->s_addr = htonl(long_data.value); +} + +void bip_set_address(uint8_t octet1, uint8_t octet2, + uint8_t octet3, uint8_t octet4) +{ + set_network_address(&BIP_Address, octet1, octet2, octet3, octet4); +} + +void bip_set_broadcast_address(uint8_t octet1, uint8_t octet2, + uint8_t octet3, uint8_t octet4) +{ + set_network_address(&BIP_Broadcast_Address, + octet1, octet2, octet3, octet4); +} + +void bip_set_subnet_mask(uint8_t octet1, uint8_t octet2, + uint8_t octet3, uint8_t octet4) +{ + set_network_address(&BIP_Subnet_Mask, + octet1, octet2, octet3, octet4); +} + +void bip_set_port(uint16_t port) +{ + BIP_Port = htons(port); +} + +bool bip_init(void) +{ + int rv = 0; // return from socket lib calls + struct sockaddr_in sin = {-1}; + int value = 1; + + /* local broadcast address */ + //BIP_Broadcast_Address.s_addr = BIP_Address.s_addr; + //BIP_Broadcast_Address.s_addr |= ~(BIP_Subnet_Mask.s_addr); + BIP_Broadcast_Address.s_addr = INADDR_BROADCAST; + /* configure standard BACnet/IP port */ + bip_set_port(0xBAC0); + + // assumes that the driver has already been initialized + BIP_Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (BIP_Socket < 0) + return false; + + // bind the socket to the local port number and IP address + sin.sin_family = AF_INET; + sin.sin_addr.s_addr = htonl(INADDR_ANY); + sin.sin_port = BIP_Port; + memset(&(sin.sin_zero), '\0', 8); + rv = bind(BIP_Socket, + (const struct sockaddr*)&sin, sizeof(struct sockaddr)); + if (rv < 0) + { + close(BIP_Socket); + BIP_Socket = -1; + return false; + } + + return true; +} + +/* function to send a packet out the BACnet/IP socket (Annex J) */ +/* returns number of bytes sent on success, negative number on failure */ +static int bip_send( + struct sockaddr_in *bip_dest, + uint8_t *pdu, // any data to be sent - may be null + unsigned pdu_len) // number of bytes of data +{ + int bytes = 0; + uint8_t mtu[MAX_MPDU] = { 0 }; + int mtu_len = 0; + int i = 0; + + // assumes that the driver has already been initialized + if (BIP_Socket < 0) + return BIP_Socket; + + mtu[0] = 0x81; /* BVLL for BACnet/IP */ + if (bip_dest->sin_addr.s_addr == BIP_Broadcast_Address.s_addr) + mtu[1] = 0x0B; /* Original-Broadcast-NPDU */ + else + mtu[1] = 0x0A; /* Original-Unicast-NPDU */ + mtu_len = 2; + mtu_len += encode_unsigned16(&mtu[mtu_len], pdu_len); + memcpy(&mtu[mtu_len], pdu, pdu_len); + mtu_len += pdu_len; + + /* Send the packet */ + bytes = sendto(BIP_Socket, (char *)mtu, mtu_len, 0, + (struct sockaddr *)bip_dest, + sizeof(struct sockaddr)); + + return bytes; +} + +/* function to send a packet out the BACnet/IP socket (Annex J) */ +/* returns number of bytes sent on success, negative number on failure */ +int bip_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 +{ + int i = 0; // counter + struct sockaddr_in bip_dest; + uint32_t network_address = 0; + uint16_t network_port = 0; + + /* load destination IP address */ + bip_dest.sin_family = AF_INET; + if (dest->mac_len == 6) + { + (void)decode_unsigned32(&dest->mac[0], &(bip_dest.sin_addr.s_addr)); + (void)decode_unsigned16(&dest->mac[4], &(bip_dest.sin_port)); + memset(&(bip_dest.sin_zero), '\0', 8); + } + /* broadcast */ + else if (dest->mac_len == 0) + { + bip_dest.sin_addr.s_addr = BIP_Broadcast_Address.s_addr; + bip_dest.sin_port = BIP_Port; + memset(&(bip_dest.sin_zero), '\0', 8); + } + else + return -1; + + /* function to send a packet out the BACnet/IP socket */ + /* returns 1 on success, 0 on failure */ + return bip_send(&bip_dest, // destination address + pdu, // any data to be sent - may be null + pdu_len); // number of bytes of data +} + +// receives a BACnet/IP packet +// returns the number of octets in the PDU, or zero on failure +uint16_t bip_receive( + BACNET_ADDRESS *src, // source address + uint8_t *pdu, // PDU data + uint16_t max_pdu, // amount of space available in the PDU + unsigned timeout) // number of milliseconds to wait for a packet +{ + int received_bytes; + uint8_t buf[MAX_MPDU] = {0}; // data + uint16_t pdu_len = 0; // return value + fd_set read_fds; + int max; + struct timeval select_timeout; + struct sockaddr_in sin = {-1}; + int sin_len = sizeof(sin); + + /* Make sure the socket is open */ + if (BIP_Socket < 0) + return 0; + + /* we could just use a non-blocking socket, but that consumes all + the CPU time. We can use a timeout; it is only supported as + a select. */ + if (timeout >= 1000) + { + select_timeout.tv_sec = timeout / 1000; + select_timeout.tv_usec = + 1000 * (timeout - select_timeout.tv_sec * 1000); + } + else + { + select_timeout.tv_sec = 0; + select_timeout.tv_usec = 1000 * timeout; + } + FD_ZERO(&read_fds); + FD_SET(BIP_Socket, &read_fds); + max = BIP_Socket; + /* see if there is a packet for us */ + if (select(max + 1, &read_fds, NULL, NULL, &select_timeout) > 0) + received_bytes = recvfrom(BIP_Socket, + (char *)&buf[0], MAX_MPDU, 0, + (struct sockaddr *)&sin, &sin_len); + else + return 0; + + /* See if there is a problem */ + if (received_bytes < 0) { + return 0; + } + + /* no problem, just no bytes */ + if (received_bytes == 0) + return 0; + + /* the signature of a BACnet/IP packet */ + if (buf[0] != 0x81) + return 0; + /* Original-Broadcast-NPDU or Original-Unicast-NPDU */ + if ((buf[1] == 0x0B) || (buf[1] == 0x0A)) + { + // copy the source address + src->mac_len = 6; + (void)encode_unsigned32(&src->mac[0], + sin.sin_addr.s_addr); + (void)encode_unsigned16(&src->mac[4], + sin.sin_port); + // FIXME: check destination address + // see if it is broadcast or for us + /* decode the length of the PDU - length is inclusive of BVLC */ + (void)decode_unsigned16(&buf[2],&pdu_len); + /* copy the buffer into the PDU */ + pdu_len -= 4; /* BVLC header */ + if (pdu_len < max_pdu) + memmove(&pdu[0],&buf[4],pdu_len); + // ignore packets that are too large + // clients should check my max-apdu first + else + pdu_len = 0; + } + + return pdu_len; +} + +void bip_get_my_address(BACNET_ADDRESS *my_address) +{ + int i = 0; + + my_address->mac_len = 6; + (void)encode_unsigned32(&my_address->mac[0], + BIP_Address.s_addr); + (void)encode_unsigned16(&my_address->mac[4], + BIP_Port); + my_address->net = 0; /* local only, no routing */ + my_address->len = 0; /* no SLEN */ + for (i = 0; i < MAX_MAC_LEN; i++) + { + /* no SADR */ + my_address->adr[i] = 0; + } + + return; +} + +void bip_get_broadcast_address( + BACNET_ADDRESS *dest) // destination address +{ + int i = 0; // counter + + if (dest) + { + dest->mac_len = 6; + (void)encode_unsigned32(&dest->mac[0], + BIP_Broadcast_Address.s_addr); + (void)encode_unsigned16(&dest->mac[4], + BIP_Port); + dest->net = BACNET_BROADCAST_NETWORK; + dest->len = 0; /* no SLEN */ + for (i = 0; i < MAX_MAC_LEN; i++) + { + /* no SADR */ + dest->adr[i] = 0; + } + } + + return; +} diff --git a/bacnet-stack/ports/win32/main.c b/bacnet-stack/ports/win32/main.c new file mode 100644 index 00000000..e7ec2b09 --- /dev/null +++ b/bacnet-stack/ports/win32/main.c @@ -0,0 +1,145 @@ +/************************************************************************** +* +* Copyright (C) 2005 Steve Karg +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +*********************************************************************/ + +// This is one way to use the embedded BACnet stack under Win32 +// compiled with Borland C++ 5.02 +#include +#include +#include +#include +#include "config.h" +#include "bacdef.h" +#include "npdu.h" +#include "apdu.h" +#include "device.h" +#include "handlers.h" +#include "bip.h" + +// buffer used for receive +static uint8_t Rx_Buf[MAX_MPDU] = {0}; + +static BYTE TargetIP[] = {192, 168, 0, 191}; +static BYTE NetMask[] = {255, 255, 255, 0}; + +static void Init_Device_Parameters(void) +{ + // configure my initial values + Device_Set_Object_Instance_Number(126); + Device_Set_Vendor_Name("Lithonia Lighting"); + Device_Set_Vendor_Identifier(42); + Device_Set_Model_Name("Simple BACnet Server"); + Device_Set_Firmware_Revision("1.00"); + Device_Set_Application_Software_Version("none"); + Device_Set_Description("Example of a simple BACnet server"); + + return; +} + +static void Init_Service_Handlers(void) +{ + // we need to handle who-is to support dynamic device binding + apdu_set_unconfirmed_handler( + SERVICE_UNCONFIRMED_WHO_IS, + WhoIsHandler); + // set the handler for all the services we don't implement + // It is required to send the proper reject message... + apdu_set_unrecognized_service_handler_handler( + UnrecognizedServiceHandler); + // we must implement read property - it's required! + apdu_set_confirmed_handler( + SERVICE_CONFIRMED_READ_PROPERTY, + ReadPropertyHandler); + apdu_set_confirmed_handler( + SERVICE_CONFIRMED_WRITE_PROPERTY, + WritePropertyHandler); +} + +static void NetInitialize(void) +// initialize the TCP/IP stack +{ + int Result; + int Code; + WSADATA wd; + + Result = WSAStartup(MAKEWORD(2,2), &wd); + + if (Result != 0) + { + Code = WSAGetLastError(); + printf("TCP/IP stack initialization failed, error code: %i\n", + Code); + exit(1); + } +} + +int main(int argc, char *argv[]) +{ + BACNET_ADDRESS src = {0}; // address where message came from + uint16_t pdu_len = 0; + unsigned timeout = 100; // milliseconds + + (void)argc; + (void)argv; + Init_Device_Parameters(); + Init_Service_Handlers(); + // init the data link layer + NetInitialize(); + bip_set_address(TargetIP[0], TargetIP[1], TargetIP[2], TargetIP[3]); + bip_set_address(NetMask[0], NetMask[1], NetMask[2], NetMask[3]); + if (!bip_init()) + return 1; + + printf("BACnet stack running...\n"); + // loop forever + for (;;) + { + // input + + // returns 0 bytes on timeout + pdu_len = bip_receive( + &src, + &Rx_Buf[0], + MAX_MPDU, + timeout); + + // process + + if (pdu_len) + { + npdu_handler( + &src, + &Rx_Buf[0], + pdu_len); + } + if (I_Am_Request) + { + I_Am_Request = false; + Send_IAm(); + } + // output + + // blink LEDs, Turn on or off outputs, etc + } +} diff --git a/bacnet-stack/ports/win32/stdbool.h b/bacnet-stack/ports/win32/stdbool.h new file mode 100644 index 00000000..29b9a5e4 --- /dev/null +++ b/bacnet-stack/ports/win32/stdbool.h @@ -0,0 +1,28 @@ +#ifndef STDBOOL_H +#define STDBOOL_H + +// C99 Boolean types for compilers without C99 support + +#ifndef __cplusplus + typedef int _Bool; + #ifndef bool + #define bool _Bool + #endif + #ifndef true + #define true 1 + #endif + #ifndef false + #define false 0 + #endif + #define __bool_true_false_are_defined 1 +#endif + +#ifndef FALSE + #define FALSE 0 +#endif + +#ifndef TRUE + #define TRUE 1 +#endif + +#endif diff --git a/bacnet-stack/ports/win32/stdint.h b/bacnet-stack/ports/win32/stdint.h new file mode 100644 index 00000000..3615d7ea --- /dev/null +++ b/bacnet-stack/ports/win32/stdint.h @@ -0,0 +1,19 @@ +// Defines the standard integer types that are used in code +// for the x86 processor and Borland Compiler + +#ifndef STDINT_H +#define STDINT_H + +#include + +typedef unsigned char uint8_t; // 1 byte 0 to 255 +typedef signed char int8_t; // 1 byte -127 to 127 +typedef unsigned short uint16_t; // 2 bytes 0 to 65535 +typedef signed short int16_t; // 2 bytes -32767 to 32767 +//typedef unsigned short long uint24_t; // 3 bytes 0 to 16777215 +typedef unsigned long uint32_t; // 4 bytes 0 to 4294967295 +typedef signed long int32_t; // 4 bytes -2147483647 to 2147483647 +// typedef signed long long int64_t; +// typedef unsigned long long uint64_t; + +#endif // STDINT_H