From 68f7e4bc8a1f81dbbd62ad93ce6d60dd983cacac Mon Sep 17 00:00:00 2001 From: skarg Date: Tue, 31 May 2005 17:31:30 +0000 Subject: [PATCH] corrected BIP for the Win32 and RTOS32 builds. Compiled and tested under Borland C++ 5.02and Visual C++ 6 SP5. --- bacnet-stack/ports/rtos32/bip.c | 2 +- bacnet-stack/ports/win32/bacnet.ide | Bin 47642 -> 47658 bytes bacnet-stack/ports/win32/bacnet/bacnet.dsp | 316 +++++++++++++++++++++ bacnet-stack/ports/win32/bacnet/bacnet.dsw | 29 ++ bacnet-stack/ports/win32/bacnet/bacnet.ncb | Bin 0 -> 132096 bytes bacnet-stack/ports/win32/bacnet/bacnet.opt | Bin 0 -> 48640 bytes bacnet-stack/ports/win32/bacnet/bacnet.plg | 53 ++++ bacnet-stack/ports/win32/bip.c | 29 +- bacnet-stack/ports/win32/main.c | 34 ++- 9 files changed, 450 insertions(+), 13 deletions(-) create mode 100644 bacnet-stack/ports/win32/bacnet/bacnet.dsp create mode 100644 bacnet-stack/ports/win32/bacnet/bacnet.dsw create mode 100644 bacnet-stack/ports/win32/bacnet/bacnet.ncb create mode 100644 bacnet-stack/ports/win32/bacnet/bacnet.opt create mode 100644 bacnet-stack/ports/win32/bacnet/bacnet.plg diff --git a/bacnet-stack/ports/rtos32/bip.c b/bacnet-stack/ports/rtos32/bip.c index dd4650f5..66530947 100644 --- a/bacnet-stack/ports/rtos32/bip.c +++ b/bacnet-stack/ports/rtos32/bip.c @@ -159,7 +159,7 @@ static int bip_send( else mtu[1] = 0x0A; /* Original-Unicast-NPDU */ mtu_len = 2; - mtu_len += encode_unsigned16(&mtu[mtu_len], pdu_len); + mtu_len += encode_unsigned16(&mtu[mtu_len], pdu_len + 4 /*inclusive*/); memcpy(&mtu[mtu_len], pdu, pdu_len); mtu_len += pdu_len; diff --git a/bacnet-stack/ports/win32/bacnet.ide b/bacnet-stack/ports/win32/bacnet.ide index 14318abb838c9b8546c4c59df2726febe6e1f5a9..4a4840bb3291effd946756d63f8db9b44d646761 100644 GIT binary patch delta 8554 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 N3@aE8GK3cp{Xb}NehL5p delta 8471 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 O4AV_a&oD(O0R0z;TYT*R diff --git a/bacnet-stack/ports/win32/bacnet/bacnet.dsp b/bacnet-stack/ports/win32/bacnet/bacnet.dsp new file mode 100644 index 00000000..bd05c6be --- /dev/null +++ b/bacnet-stack/ports/win32/bacnet/bacnet.dsp @@ -0,0 +1,316 @@ +# Microsoft Developer Studio Project File - Name="bacnet" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=bacnet - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "bacnet.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "bacnet.mak" CFG="bacnet - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "bacnet - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "bacnet - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "bacnet - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "c:\code\bacnet-stack\\" /I "c:\code\bacnet-stack\ports\win32\\" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.dll /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "bacnet - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "c:\code\bacnet-stack\\" /I "c:\code\bacnet-stack\ports\win32\\" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "BACDL_BIP" /FD /GZ /c +# SUBTRACT CPP /YX +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "bacnet - Win32 Release" +# Name "bacnet - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\abort.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\address.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\ai.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\ao.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\apdu.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\bacdcode.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\bacerror.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\bigend.c +# End Source File +# Begin Source File + +SOURCE=..\bip.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\crc.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\datalink.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\device.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\handlers.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\iam.c +# End Source File +# Begin Source File + +SOURCE=..\main.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\npdu.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\reject.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\ringbuf.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\rp.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\tsm.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\whois.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\wp.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\..\abort.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\address.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\ai.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\ao.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\apdu.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\arcnet.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\bacdcode.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\bacdef.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\bacenum.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\bacerror.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\bigend.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\bip.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\bits.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\bytes.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\config.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\crc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\datalink.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\device.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\ethernet.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\handlers.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\iam.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\mstp.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\npdu.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\reject.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\ringbuf.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\rp.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\rs485.h +# End Source File +# Begin Source File + +SOURCE=..\stdbool.h +# End Source File +# Begin Source File + +SOURCE=..\stdint.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\tsm.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\whois.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\wp.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/bacnet-stack/ports/win32/bacnet/bacnet.dsw b/bacnet-stack/ports/win32/bacnet/bacnet.dsw new file mode 100644 index 00000000..71d4691d --- /dev/null +++ b/bacnet-stack/ports/win32/bacnet/bacnet.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bacnet"=".\bacnet.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/bacnet-stack/ports/win32/bacnet/bacnet.ncb b/bacnet-stack/ports/win32/bacnet/bacnet.ncb new file mode 100644 index 0000000000000000000000000000000000000000..02fd9db559159a399d963921ca61bf769f67a1e3 GIT binary patch literal 132096 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 literal 0 HcmV?d00001 diff --git a/bacnet-stack/ports/win32/bacnet/bacnet.plg b/bacnet-stack/ports/win32/bacnet/bacnet.plg new file mode 100644 index 00000000..7574dc05 --- /dev/null +++ b/bacnet-stack/ports/win32/bacnet/bacnet.plg @@ -0,0 +1,53 @@ + + +
+

Build Log

+

+--------------------Configuration: bacnet - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\stk01\LOCALS~1\Temp\RSPE11.tmp" with contents +[ +/nologo /MLd /W3 /Gm /GX /ZI /Od /I "c:\code\bacnet-stack\\" /I "c:\code\bacnet-stack\ports\win32\\" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "BACDL_BIP" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"C:\code\bacnet-stack\ports\win32\main.c" +] +Creating command line "cl.exe @C:\DOCUME~1\stk01\LOCALS~1\Temp\RSPE11.tmp" +Creating temporary file "C:\DOCUME~1\stk01\LOCALS~1\Temp\RSPE12.tmp" with contents +[ +kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/bacnet.pdb" /debug /machine:I386 /out:"Debug/bacnet.exe" /pdbtype:sept +".\Debug\bip.obj" +".\Debug\main.obj" +".\Debug\abort.obj" +".\Debug\address.obj" +".\Debug\ai.obj" +".\Debug\ao.obj" +".\Debug\apdu.obj" +".\Debug\bacdcode.obj" +".\Debug\bacerror.obj" +".\Debug\bigend.obj" +".\Debug\crc.obj" +".\Debug\datalink.obj" +".\Debug\device.obj" +".\Debug\handlers.obj" +".\Debug\iam.obj" +".\Debug\npdu.obj" +".\Debug\reject.obj" +".\Debug\ringbuf.obj" +".\Debug\rp.obj" +".\Debug\tsm.obj" +".\Debug\whois.obj" +".\Debug\wp.obj" +] +Creating command line "link.exe @C:\DOCUME~1\stk01\LOCALS~1\Temp\RSPE12.tmp" +

Output Window

+Compiling... +main.c +Linking... + + + +

Results

+bacnet.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/bacnet-stack/ports/win32/bip.c b/bacnet-stack/ports/win32/bip.c index 0d0065c1..b111cad0 100644 --- a/bacnet-stack/ports/win32/bip.c +++ b/bacnet-stack/ports/win32/bip.c @@ -91,6 +91,11 @@ void bip_set_address(uint8_t octet1, uint8_t octet2, set_network_address(&BIP_Address, octet1, octet2, octet3, octet4); } +void bip_set_addr(struct in_addr *net_address) +{ + BIP_Address.s_addr = htonl(net_address->s_addr); +} + void bip_set_broadcast_address(uint8_t octet1, uint8_t octet2, uint8_t octet3, uint8_t octet4) { @@ -117,8 +122,6 @@ bool bip_init(void) 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); @@ -128,6 +131,26 @@ bool bip_init(void) if (BIP_Socket < 0) return false; + // Allow us to use the same socket for sending and receiving + // This makes sure that the src port is correct when sending + rv = setsockopt(BIP_Socket, SOL_SOCKET, SO_REUSEADDR, + (char *)&value, sizeof(value)); + if (rv < 0) + { + close(BIP_Socket); + BIP_Socket = -1; + return false; + } + // allow us to send a broadcast + rv = setsockopt(BIP_Socket, SOL_SOCKET, SO_BROADCAST, + (char *)&value, sizeof(value)); + if (rv < 0) + { + close(BIP_Socket); + BIP_Socket = -1; + 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); @@ -167,7 +190,7 @@ static int bip_send( else mtu[1] = 0x0A; /* Original-Unicast-NPDU */ mtu_len = 2; - mtu_len += encode_unsigned16(&mtu[mtu_len], pdu_len); + mtu_len += encode_unsigned16(&mtu[mtu_len], pdu_len + 4 /*inclusive*/); memcpy(&mtu[mtu_len], pdu, pdu_len); mtu_len += pdu_len; diff --git a/bacnet-stack/ports/win32/main.c b/bacnet-stack/ports/win32/main.c index e7ec2b09..502dcd7d 100644 --- a/bacnet-stack/ports/win32/main.c +++ b/bacnet-stack/ports/win32/main.c @@ -40,19 +40,16 @@ // 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_Object_Instance_Number(124); Device_Set_Vendor_Name("Lithonia Lighting"); Device_Set_Vendor_Identifier(42); - Device_Set_Model_Name("Simple BACnet Server"); + Device_Set_Model_Name("Simple BACnet Client"); Device_Set_Firmware_Revision("1.00"); - Device_Set_Application_Software_Version("none"); - Device_Set_Description("Example of a simple BACnet server"); + Device_Set_Application_Software_Version("win32"); + Device_Set_Description("Example of a simple BACnet client/server"); return; } @@ -76,12 +73,31 @@ static void Init_Service_Handlers(void) WritePropertyHandler); } +/* To fill a need, we invent the gethostaddr() function. */ +long gethostaddr(void) +{ + struct hostent *host_ent; + char host_name[255]; + + if (gethostname(host_name, sizeof(host_name)) == 0) + return -1; + + if ((host_ent = gethostbyname(host_name)) == NULL) + return -1; + + return *(long *)host_ent->h_addr; +} + +extern void bip_set_addr(struct in_addr *net_address); + static void NetInitialize(void) // initialize the TCP/IP stack { int Result; int Code; WSADATA wd; + struct in_addr address; + Result = WSAStartup(MAKEWORD(2,2), &wd); @@ -92,6 +108,8 @@ static void NetInitialize(void) Code); exit(1); } + address.s_addr = gethostaddr(); + bip_set_addr(&address); } int main(int argc, char *argv[]) @@ -106,8 +124,6 @@ int main(int argc, char *argv[]) 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;