From f9d56ef4885d5486f575195627b5fa2c17e94c56 Mon Sep 17 00:00:00 2001 From: Alex Fontaine Date: Tue, 29 Oct 2024 16:16:46 -0700 Subject: [PATCH 1/4] Updated stack to 5.1.2 and cleaned up project --- .gitlab-ci.yml | 106 - .gitmodules | 3 - BACnetClientExample/BACnetClientExample.cpp | 39 +- .../BACnetClientExample.vcxproj | 80 +- .../BACnetClientExample.vcxproj.filters | 2767 ++++++++--------- README.md | 2 +- submodules/readme.md | 12 + 7 files changed, 1454 insertions(+), 1555 deletions(-) delete mode 100644 .gitlab-ci.yml delete mode 100644 .gitmodules create mode 100644 submodules/readme.md diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index e666296..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,106 +0,0 @@ -variables: - GIT_SUBMODULE_STRATEGY: recursive - -stages: - - download - - build - - ZipUp - -# -# Download CBACnet Stack libaries -# ----------------------------------------------------------------------------- -# How to download artifacts from jobs in Gitlab CI https://docs.gitlab.com/ee/api/jobs.html#download-the-artifacts-archive -# Note: the SETTING_PRIVATE_TOKEN parameter is a enviment variable, generated by Steven's user. -# -Download BACnet Stack Libaries: - stage: download - tags: - - docker - image: alpine:latest - variables: - GIT_SUBMODULE_STRATEGY: none - script: - # Install Zip and curl - - "apk --no-cache add unzip curl" - - 'curl --location --output CASBACnetStackLibs.zip --header "PRIVATE-TOKEN: $SETTING_PRIVATE_TOKEN" "https://gitlab.com/api/v4/projects/7281208/jobs/artifacts/master/download?job=Windows%20Release%20Win32%20CASBACnetStack%20LIB&job_token=$CI_JOB_TOKEN"' - - unzip CASBACnetStackLibs.zip && rm -f CASBACnetStackLibs.zip - - 'curl --location --output CASBACnetStackLibs.zip --header "PRIVATE-TOKEN: $SETTING_PRIVATE_TOKEN" "https://gitlab.com/api/v4/projects/7281208/jobs/artifacts/master/download?job=Linux-Ubuntu%20Release%20x64%20CASBACnetStack&job_token=$CI_JOB_TOKEN"' - - unzip CASBACnetStackLibs.zip && rm -f CASBACnetStackLibs.zip - - ls -ls bin/ - artifacts: - expire_in: 1 days - paths: - - bin/*.lib - - bin/*.a - -# Build the windows version -Windows Win32 Release: - stage: build - tags: - - windows - - msvs - before_script: - # Add MSBuild.exe to path - - set PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin - # Update the CIBuildVersion.cs - - "echo const int CI_PIPELINE_IID = %CI_PIPELINE_IID% >BACnetClientExample/CIBuildSettings.h" - - type BACnetClientExample\CIBuildVersion.h - script: - # Create the bin directory if it does not exist - - cd BACnetClientExample - # Build and package the project in an apk for android - - msbuild /p:Configuration=Release /p:Platform="x86" - - cd ..\bin - - dir - artifacts: - expire_in: 1 days - paths: - - bin/BACnetClientExample_Win32_Release.exe - dependencies: - - Download BACnet Stack Libaries - -# Build the linux 64bit version -Linux 64Bit Release: - stage: build - tags: - - docker - image: ssmethurst/ubuntudev-18_04:latest - before_script: - # Update the CIBuildVersion.cs - - echo -e "const int CI_PIPELINE_IID = $CI_PIPELINE_IID\n" >BACnetClientExample/CIBuildSettings.h - # debug info - - "gcc -v" - script: - - "make" - - "make install" - artifacts: - expire_in: 1 days - paths: - - bin/BACnetClientExampleCPP_linux_x64_Release - dependencies: - - Download BACnet Stack Libaries - - -# CreateZip -Create Zip: - stage: ZipUp - tags: - - docker - image: alpine:latest - variables: - GIT_SUBMODULE_STRATEGY: none - only: - - master - dependencies: - - Linux 64Bit Release - - Windows Win32 Release - script: - # Install Zip - - "apk --no-cache add zip" - # Remove the old zip if it exists for some reason - - "rm -f BACnetClientExampleCPP_build$CIPIPELINE_IID.zip" - # Add all the compiled libaries from other jobs. - - "zip BACnetClientExampleCPP_build$CI_PIPELINE_IID.zip -r9 bin/BACnetClientExampleCPP_linux_x64_Release bin/BACnetClientExample_Win32_Release.exe" - artifacts: - paths: - - BACnetClientExampleCPP_build$CI_PIPELINE_IID.zip diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 14d88e9..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "submodules/cas-bacnet-stack"] - path = submodules/cas-bacnet-stack - url = https://gitlab.com/chipkin/cas-bacnet-stack.git diff --git a/BACnetClientExample/BACnetClientExample.cpp b/BACnetClientExample/BACnetClientExample.cpp index bbee6f9..5fa2648 100644 --- a/BACnetClientExample/BACnetClientExample.cpp +++ b/BACnetClientExample/BACnetClientExample.cpp @@ -79,7 +79,7 @@ std::string downstream_Device_ip_address; // Callback Functions to Register to the DLL // Message Functions -uint16_t CallbackReceiveMessage(uint8_t* message, const uint16_t maxMessageLength, uint8_t* receivedConnectionString, const uint8_t maxConnectionStringLength, uint8_t* receivedConnectionStringLength, uint8_t* networkType); +uint16_t CallbackReceiveMessage(uint8_t* message, const uint16_t maxMessageLength, uint8_t* sourceConnectionString, uint8_t* sourceConnectionStringLength, uint8_t* destinationConnectionString, uint8_t* destinationConnectionStringLength, const uint8_t maxConnectionStringLength, uint8_t* networkType); uint16_t CallbackSendMessage(const uint8_t* message, const uint16_t messageLength, const uint8_t* connectionString, const uint8_t connectionStringLength, const uint8_t networkType, bool broadcast); // System Functions @@ -126,6 +126,7 @@ void ExampleWhoIs(); void ExampleReadProperty(); void ExampleWriteProperty(); void ExampleSubscribeCOV(); +void ExampleSubscribeCOVProperty(); void ExampleConfirmedTextMessage(); int main(int argc, char ** argv ) @@ -242,7 +243,7 @@ int main(int argc, char ** argv ) std::cout << "FYI: Entering main loop..." << std::endl; for (;;) { // Call the DLLs loop function which checks for messages and processes them. - fpLoop(); + fpTick(); // Handle any user input. if (!DoUserInput()) { @@ -291,6 +292,10 @@ bool DoUserInput() ExampleSubscribeCOV(); break; } + case 'p': { + ExampleSubscribeCOVProperty(); + break; + } case 't': { ExampleConfirmedTextMessage(); break; @@ -325,7 +330,7 @@ bool DoUserInput() void WaitForResponse(unsigned int timeout /*=3*/) { time_t expireTime = time(0) + timeout; while (time(0) < expireTime) { - fpLoop(); + fpTick(); } } @@ -437,7 +442,7 @@ void ExampleSubscribeCOV() { // Subscribe to the analog input and analog value objects in the server example - std::cout << "Sending Subscribe COV Request. Analog Input, INSTANCE=[0], timeToLive = " << timeToLive << ", processIdentifier = " << analogValueProcessIdentifier << std::endl; + std::cout << "Sending Subscribe COV Request. Analog Input, INSTANCE=[0], timeToLive = " << timeToLive << ", processIdentifier = " << analogInputProcessIdentifier << std::endl; fpSendSubscribeCOV(&invokeId, analogInputProcessIdentifier, CASBACnetStackExampleConstants::OBJECT_TYPE_ANALOG_INPUT, 0, false, timeToLive, downstreamConnectionString, 6, 0, 0, NULL, 0); WaitForResponse(); @@ -448,6 +453,18 @@ void ExampleSubscribeCOV() { WaitForResponse(); } +void ExampleSubscribeCOVProperty() { + const uint16_t timeToLive = 60 * 5; // 5 Min subscription time + + // Local process identifier, must be unique for each subscribe COV request + const uint16_t analogValueProcessIdentifier = 0; + + // Subscribe to the analog input and analog value objects in the server example + + std::cout << "Sending Subscribe COV Property Request. Analog Value, INSTANCE=[2], timeToLive = " << timeToLive << ", processIdentifier = " << analogValueProcessIdentifier << std::endl; + fpSendSubscribeCOVProperty(&invokeId, analogValueProcessIdentifier, CASBACnetStackExampleConstants::OBJECT_TYPE_ANALOG_VALUE, 2, CASBACnetStackExampleConstants::PROPERTY_IDENTIFIER_PRESENT_VALUE, false, 0, true, 5.0f, false, timeToLive, downstreamConnectionString, 6, 0, 0, NULL, 0); +} + void ExampleConfirmedTextMessage() { // Text message settings bool useMessageClass = true; // Enable or disable message class property @@ -471,14 +488,14 @@ void ExampleConfirmedTextMessage() { // Callback used by the BACnet Stack to check if there is a message to process -uint16_t CallbackReceiveMessage(uint8_t* message, const uint16_t maxMessageLength, uint8_t* receivedConnectionString, const uint8_t maxConnectionStringLength, uint8_t* receivedConnectionStringLength, uint8_t* networkType) +uint16_t CallbackReceiveMessage(uint8_t* message, const uint16_t maxMessageLength, uint8_t* sourceConnectionString, uint8_t* sourceConnectionStringLength, uint8_t* destinationConnectionString, uint8_t* destinationConnectionStringLength, const uint8_t maxConnectionStringLength, uint8_t* networkType) { // Check parameters if (message == NULL || maxMessageLength == 0) { std::cerr << "Invalid input buffer" << std::endl; return 0; } - if (receivedConnectionString == NULL || maxConnectionStringLength == 0) { + if (sourceConnectionString == NULL || maxConnectionStringLength == 0) { std::cerr << "Invalid connection string buffer" << std::endl; return 0; } @@ -497,14 +514,14 @@ uint16_t CallbackReceiveMessage(uint8_t* message, const uint16_t maxMessageLengt std::cout << "FYI: Received message from [" << ipAddress << ":" << port << "], length [" << bytesRead << "]" << std::endl; // Convert the IP Address to the connection string - if (!ChipkinCommon::ChipkinConvert::IPAddressToBytes(ipAddress, receivedConnectionString, maxConnectionStringLength)) { + if (!ChipkinCommon::ChipkinConvert::IPAddressToBytes(ipAddress, sourceConnectionString, maxConnectionStringLength)) { std::cerr << "Failed to convert the ip address into a connectionString" << std::endl; return 0; } - receivedConnectionString[4] = port / 256; - receivedConnectionString[5] = port % 256; + sourceConnectionString[4] = port / 256; + sourceConnectionString[5] = port % 256; - *receivedConnectionStringLength = 6; + *sourceConnectionStringLength = 6; *networkType = CASBACnetStackExampleConstants::NETWORK_TYPE_IP; // Process the message as XML @@ -568,7 +585,7 @@ uint16_t CallbackSendMessage(const uint8_t* message, const uint16_t messageLengt // Get the XML rendered version of the just sent message static char xmlRenderBuffer[MAX_XML_RENDER_BUFFER_LENGTH]; - if (fpDecodeAsXML((char*)message, messageLength, xmlRenderBuffer, MAX_XML_RENDER_BUFFER_LENGTH, networkType) > 0) { + if (fpDecodeAsXML((char*)message, messageLength, xmlRenderBuffer, MAX_XML_RENDER_BUFFER_LENGTH, CASBACnetStackExampleConstants::NETWORK_TYPE_IP) > 0) { std::cout << xmlRenderBuffer << std::endl << std::endl; memset(xmlRenderBuffer, 0, MAX_XML_RENDER_BUFFER_LENGTH); } diff --git a/BACnetClientExample/BACnetClientExample.vcxproj b/BACnetClientExample/BACnetClientExample.vcxproj index 534a00d..abd139e 100644 --- a/BACnetClientExample/BACnetClientExample.vcxproj +++ b/BACnetClientExample/BACnetClientExample.vcxproj @@ -73,22 +73,22 @@ true $(SolutionDir)..\bin\ - $(ProjectName)_$(Platform)_$(Configuration) + $(ProjectName)CPP_win_$(Platform)_$(Configuration) true $(SolutionDir)..\bin\ - $(ProjectName)_$(Platform)_$(Configuration) + $(ProjectName)CPP_win_$(Platform)_$(Configuration) false $(SolutionDir)..\bin\ - $(ProjectName)_$(Platform)_$(Configuration) + $(ProjectName)CPP_win_$(Platform)_$(Configuration) false $(SolutionDir)..\bin\ - $(ProjectName)_$(Platform)_$(Configuration) + $(ProjectName)CPP_win_$(Platform)_$(Configuration) @@ -96,21 +96,17 @@ Level3 true - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_DEBUG;ENABLE_DATA_LINK_LAYER_IPV4;ENABLE_STRING_LITERALS -;ENABLE_DECODE_AS_JSON -;ENABLE_DECODE_AS_XML -;ENABLE_BACNET_API_DEBUG_LOGGING -;ENABLE_ALL_OBJECT_TYPES -;ENABLE_ALL_BIBBS + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS true - $(SolutionDir)..\submodules\cas-bacnet-stack\submodules\cas-common\source;$(SolutionDir)..\submodules\cas-bacnet-stack\source;$(SolutionDir)..\submodules\cas-bacnet-stack\adapters\cpp;$(SolutionDir)..\bin\;;$(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include + $(SolutionDir)..\submodules\cas-bacnet-stack\source;$(SolutionDir)..\submodules\cas-bacnet-stack\adapters\cpp;$(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include;%(AdditionalIncludeDirectories) MultiThreadedDebug Console true - $(SolutionDir)..\bin\ - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies); + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -119,21 +115,17 @@ Level3 true - _DEBUG;_CONSOLE;%(PreprocessorDefinitions);_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_DEBUG;ENABLE_DATA_LINK_LAYER_IPV4;ENABLE_STRING_LITERALS -;ENABLE_DECODE_AS_JSON -;ENABLE_DECODE_AS_XML -;ENABLE_BACNET_API_DEBUG_LOGGING -;ENABLE_ALL_OBJECT_TYPES -;ENABLE_ALL_BIBBS + _DEBUG;_CONSOLE;%(PreprocessorDefinitions);_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS true - $(SolutionDir)..\submodules\cas-bacnet-stack\submodules\cas-common\source;$(SolutionDir)..\submodules\cas-bacnet-stack\source;$(SolutionDir)..\submodules\cas-bacnet-stack\adapters\cpp;$(SolutionDir)..\bin\;;$(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include + $(SolutionDir)..\submodules\cas-bacnet-stack\source;$(SolutionDir)..\submodules\cas-bacnet-stack\adapters\cpp;$(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include MultiThreadedDebug Console true - $(SolutionDir)..\bin\ - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies); + + + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -144,14 +136,9 @@ true true true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;CAS_BACNET_STACK_LIB_TYPE_LIB;ENABLE_DATA_LINK_LAYER_IPV4;ENABLE_STRING_LITERALS -;ENABLE_DECODE_AS_JSON -;ENABLE_DECODE_AS_XML -;ENABLE_BACNET_API_DEBUG_LOGGING -;ENABLE_ALL_OBJECT_TYPES -;ENABLE_ALL_BIBBS + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS true - $(SolutionDir)..\submodules\cas-bacnet-stack\submodules\cas-common\source;$(SolutionDir)..\submodules\cas-bacnet-stack\source;$(SolutionDir)..\submodules\cas-bacnet-stack\adapters\cpp;$(SolutionDir)..\bin\;;$(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include + $(SolutionDir)..\submodules\cas-bacnet-stack\source;$(SolutionDir)..\submodules\cas-bacnet-stack\adapters\cpp;$(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include MultiThreaded @@ -159,8 +146,9 @@ true true true - $(SolutionDir)..\bin\ - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);CASBACnetStack_$(Platform)_$(Configuration).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;%(AdditionalDependencies) @@ -171,14 +159,9 @@ true true true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;CAS_BACNET_STACK_LIB_TYPE_LIB;ENABLE_DATA_LINK_LAYER_IPV4;ENABLE_STRING_LITERALS -;ENABLE_DECODE_AS_JSON -;ENABLE_DECODE_AS_XML -;ENABLE_BACNET_API_DEBUG_LOGGING -;ENABLE_ALL_OBJECT_TYPES -;ENABLE_ALL_BIBBS + NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS true - $(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include;$(SolutionDir)..\submodules\cas-bacnet-stack\submodules\cas-common\source;$(SolutionDir)..\submodules\cas-bacnet-stack\source;$(SolutionDir)..\submodules\cas-bacnet-stack\adapters\cpp;$(SolutionDir)..\bin\;$(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include + $(SolutionDir)..\submodules\cas-bacnet-stack\submodules\xml2json\include;$(SolutionDir)..\submodules\cas-bacnet-stack\source;$(SolutionDir)..\submodules\cas-bacnet-stack\adapters\cpp MultiThreaded @@ -186,8 +169,9 @@ true true true - $(SolutionDir)..\bin\ - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);CASBACnetStack_$(Platform)_$(Configuration).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;%(AdditionalDependencies) @@ -571,12 +555,12 @@ + + + - - - @@ -793,6 +777,7 @@ + @@ -974,20 +959,18 @@ + + + - - - - - @@ -995,7 +978,6 @@ - diff --git a/BACnetClientExample/BACnetClientExample.vcxproj.filters b/BACnetClientExample/BACnetClientExample.vcxproj.filters index f6cf40e..ed07c95 100644 --- a/BACnetClientExample/BACnetClientExample.vcxproj.filters +++ b/BACnetClientExample/BACnetClientExample.vcxproj.filters @@ -1,4 +1,4 @@ - + @@ -14,88 +14,91 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - {714ef473-5f5e-4aae-9060-f436a13d41a8} + {1c924753-92fd-474b-89bf-c6a549a1aa65} - - {a6807b59-39ae-4790-a6d7-69460b80bf6f} - - - {9625a9d2-2198-435e-b9e0-79c5d38938d9} + + {893c1bb9-4953-4e2b-9082-5ce147cb4a28} - - {abc313ba-8bf7-4a55-a9d2-707c48a54340} + + {1b825e28-98eb-48dc-b1f9-dc8181447bee} - {932c987a-42bd-48d5-9964-0666d581bbbc} + {5efe85bd-1c16-4ad7-a7e1-d8164c3f482d} - {f922ae1a-ebe0-4603-aae5-fdf2878e42a1} + {7001ec39-cd56-4c1c-aec0-474272504cf4} - {ca281001-2f37-42c4-adb1-5e2dfdc855d8} + {5b3ac646-94c6-4104-b7b6-d04071518be1} - {f64188d0-8163-4301-9bb8-becaafc183a4} + {193763e8-5be7-4054-8ff8-301b0e0132e6} - {237d0de0-379d-4fbb-87bf-7303a59265bd} + {156584bf-8730-4a2a-bb39-f5aa06c7ddbd} - {13403760-d5d0-48f1-9032-9b6a4398bece} + {d61373ab-6b59-4c58-aaeb-b624ebe413a2} - {1c537008-17e7-4d71-a1b3-39da8b102b68} + {dbfb745a-c515-4ff3-a631-f37f284b44ab} - {d7fbf3ce-d34f-48a6-932f-7a7bf73acfdc} + {07a97ea3-07ad-4afa-bd65-b2fc0facf16f} - - {b7baca11-c154-4992-9e96-e758ee83cdfd} + + {7c2dd322-7c00-4639-900d-103347ffc69b} - - {5469939b-5c7a-4967-b1c2-c5827099dea2} + + {3a630d0b-50a1-4561-bc48-e65d19e703bf} - - {0c32997c-68e9-4574-bc06-98afabfb99f0} + + {ad95983b-a7ab-46d1-918e-a0476af2dad5} - {e3e4b153-9028-4467-86e9-645e44e15ea1} + {7a0ce0a6-86ff-42dc-a119-4ec7c238c4fd} + + + {1a4e817b-79ce-4f7a-a107-f79f32597887} + + + {6338a0ae-2749-4c77-b3fb-6aad2ff37c5e} - {98d0cd31-dba5-4ee6-9996-d5e42aa266a2} + {86b1939f-0edd-4a7f-b4da-cdd7a5a6c351} - - {6a6848d3-a0cf-4fd4-9153-3d78e9c24785} + + {5070aff8-136c-42ee-ad3b-7e8ebd6aef2c} - - {b30933f7-32c1-478d-be87-7bba7696b957} + + {03d1c286-8b6c-4765-a664-a930db7d975b} - {349fdfdb-2585-41de-ae28-5d7f88541c7f} + {73c54dfc-b7fa-4d09-a4da-933f88f4f94d} - - {7ff9d6ba-43d7-4ea3-90e4-284e4f6a237f} + + {f638bb29-1dc2-48f1-892d-dbdb24b3a288} - - {8d064da2-911a-458f-ae03-0fc27c286759} + + {df640366-f0e3-4139-9a2e-7a43a091b3e4} - - {92a720ce-b3f3-415e-aeaf-f3ee4af4fe7b} + + {6f25b809-59f9-4c29-9e1c-8a0831301c1e} - - {e0cce8e3-3c85-4a3c-9f1a-59a7fc5a1452} + + {bcc163ef-6fdf-487e-88e6-ea52961989e9} - - {47598618-9cb5-458e-9cc1-66e5d990cbe7} + + {a29a3a22-189b-4bf4-86d4-6ee92a2e3627} - - {196ca4e8-35b1-4b8e-b94e-a1b3cc654e83} + + {250603df-477e-49a8-b98a-d206ca4fb1c1} - - {6227ee3a-d602-4d45-b560-9871f0300b85} + + {730b838a-4eb9-4ac8-85af-8c40167e2034} - - {5d8fb162-5624-4c62-b502-1a91cd2f09ba} + + {1995b52a-54f8-454a-ae25-793adc21d068} @@ -105,173 +108,413 @@ Source Files - - Source Files + + CASBACnetStack - - Source Files + + CASBACnetStack - - Source Files + + CASBACnetStack - - Source Files + + CASBACnetStack - - Source Files + + CASBACnetStack - - CASBACnetStack\AlarmsAndEvents + + CASBACnetStack - - CASBACnetStack\AlarmsAndEvents\EventAlgorithms + + CASBACnetStack - - CASBACnetStack\AlarmsAndEvents\EventAlgorithms + + CASBACnetStack - - CASBACnetStack\AlarmsAndEvents\EventAlgorithms + + CASBACnetStack - - CASBACnetStack\AlarmsAndEvents\FaultAlgorithms + + CASBACnetStack - - CASBACnetStack\AlarmsAndEvents\FaultAlgorithms + + CASBACnetStack\Enumerated - - CASBACnetStack\AlarmsAndEvents\FaultAlgorithms + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Primitives + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\Enumerated + + + CASBACnetStack\APDU + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Primitives + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Error Productions + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types + + + CASBACnetStack\APDU\Base Types CASBACnetStack\APDU\Base Types @@ -339,6 +582,9 @@ CASBACnetStack\APDU\Base Types + + CASBACnetStack\APDU\Base Types + CASBACnetStack\APDU\Base Types @@ -582,59 +828,74 @@ CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\BACnetSC + + CASBACnetStack\PDU - - CASBACnetStack\BACnetSC + + CASBACnetStack\PDU - - CASBACnetStack\BACnetSC + + CASBACnetStack\PDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\PDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\PDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\PDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\PDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\PDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\Interfaces - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\NPDU + + + CASBACnetStack\NPDU + + + CASBACnetStack\NPDU + + + CASBACnetStack\NPDU + + + CASBACnetStack\NPDU + + + CASBACnetStack\NPDU CASBACnetStack\BVLL @@ -684,6 +945,21 @@ CASBACnetStack\BVLL + + CASBACnetStack\Packet + + + CASBACnetStack\Packet + + + CASBACnetStack\Packet + + + CASBACnetStack\Packet + + + CASBACnetStack\Renderer + CASBACnetStack\Database @@ -765,284 +1041,155 @@ CASBACnetStack\Database - - CASBACnetStack\DataLink - - - CASBACnetStack\DataLink + + CASBACnetStack\Processors - - CASBACnetStack\DataLink + + CASBACnetStack\Processors - - CASBACnetStack\DataLink + + CASBACnetStack\Processors - - CASBACnetStack\DataLink + + CASBACnetStack\Processors - - CASBACnetStack\DataLink + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\Processors - - CASBACnetStack\Enumerated + + CASBACnetStack\MessageGenerators - - CASBACnetStack\Enumerated + + CASBACnetStack\Helper - - CASBACnetStack\Enumerated + + CASBACnetStack\Helper - - CASBACnetStack\Enumerated + + CASBACnetStack\Helper - - CASBACnetStack\Enumerated + + CASBACnetStack\AlarmsAndEvents - - CASBACnetStack\Enumerated + + CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - CASBACnetStack\Enumerated + + CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - CASBACnetStack\Enumerated + + CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated - - - CASBACnetStack\Enumerated + + CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - CASBACnetStack\Enumerated + + CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - CASBACnetStack\Enumerated + + CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - CASBACnetStack\Enumerated + + CASBACnetStack\DataLink - - CASBACnetStack\Helper + + CASBACnetStack\DataLink - - CASBACnetStack\Helper + + CASBACnetStack\DataLink - - CASBACnetStack\Helper + + CASBACnetStack\DataLink - - CASBACnetStack\Interfaces + + CASBACnetStack\DataLink - - CASBACnetStack\MessageGenerators + + CASBACnetStack\DataLink CASBACnetStack\NetworkLayer @@ -1050,1282 +1197,1069 @@ CASBACnetStack\NetworkLayer - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\NPDU - - - CASBACnetStack\Packet - - - CASBACnetStack\Packet - - - CASBACnetStack\Packet - - - CASBACnetStack\Packet - - - CASBACnetStack\PDU - - - CASBACnetStack\PDU - - - CASBACnetStack\PDU - - - CASBACnetStack\PDU - - - CASBACnetStack\PDU - - - CASBACnetStack\PDU - - - CASBACnetStack\PDU - - - CASBACnetStack\PDU - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors - - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack\Processors + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack\Renderer + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack + + CASBACnetStack\BACnetSC\BACnetSCBVLL - - CASBACnetStack + + ChipkinCommon - - CASBACnetStack + + ChipkinCommon - - CASBACnetStack + + ChipkinCommon - - CASBACnetStack + + Source Files - - CASBACnetStack + + Source Files Header Files - - Header Files - - - Header Files - - - Header Files - Header Files - - Header Files - - - Header Files - Header Files - - CASBACnetStack\AlarmsAndEvents - - - CASBACnetStack\AlarmsAndEvents - - - CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - - CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - - CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - - CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - - CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - - CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - - CASBACnetStack\APDU - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives - - - CASBACnetStack\APDU\Primitives + + CASBACnetStack - - CASBACnetStack\APDU\Primitives + + CASBACnetStack - - CASBACnetStack\APDU\Primitives + + CASBACnetStack - - CASBACnetStack\APDU\Primitives + + CASBACnetStack - - CASBACnetStack\APDU\Primitives + + CASBACnetStack - - CASBACnetStack\APDU\Primitives + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Error Productions + + CASBACnetStack - - CASBACnetStack\APDU\Base Types + + CASBACnetStack - - CASBACnetStack\APDU\Base Types + + CASBACnetStack - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Base Types + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Unconfirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Enumerated - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Bitstrings - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Bitstrings - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Bitstrings - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Bitstrings - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Bitstrings - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Bitstrings - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Bitstrings - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\Bitstrings - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\APDU - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Confirmed Service Productions + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Custom Types + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Primitives - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Error Productions - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\APDU\Notification Parameters + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BACnetSC\BACnetSCBVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Bitstrings + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Bitstrings + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Bitstrings + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Bitstrings + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Bitstrings + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Bitstrings + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Bitstrings + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\BVLL + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Base Types - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Unconfirmed Service Productions - - CASBACnetStack\Database + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\DataLink + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\DataLink + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\DataLink + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\DataLink + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\DataLink + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\DataLink + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Confirmed Service Productions - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Custom Types - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\APDU\Notification Parameters - - CASBACnetStack\Enumerated + + CASBACnetStack\PDU - - CASBACnetStack\Enumerated + + CASBACnetStack\PDU - - CASBACnetStack\Enumerated + + CASBACnetStack\PDU - - CASBACnetStack\Enumerated + + CASBACnetStack\PDU - - CASBACnetStack\Enumerated + + CASBACnetStack\PDU - - CASBACnetStack\Enumerated + + CASBACnetStack\PDU - - CASBACnetStack\Enumerated + + CASBACnetStack\PDU - - CASBACnetStack\Enumerated + + CASBACnetStack\PDU - - CASBACnetStack\Enumerated + + CASBACnetStack\Interfaces - - CASBACnetStack\Enumerated + + CASBACnetStack\Interfaces - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\NPDU - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Enumerated + + CASBACnetStack\BVLL - - CASBACnetStack\Helper + + CASBACnetStack\BVLL - - CASBACnetStack\Helper + + CASBACnetStack\Packet - - CASBACnetStack\Helper + + CASBACnetStack\Packet - - CASBACnetStack\Interfaces + + CASBACnetStack\Packet - - CASBACnetStack\Interfaces + + CASBACnetStack\Packet - - CASBACnetStack\MessageGenerators + + CASBACnetStack\Renderer - - CASBACnetStack\NetworkLayer + + CASBACnetStack\Renderer - - CASBACnetStack\NetworkLayer + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\NPDU + + CASBACnetStack\Database - - CASBACnetStack\Packet + + CASBACnetStack\Database - - CASBACnetStack\Packet + + CASBACnetStack\Database - - CASBACnetStack\Packet + + CASBACnetStack\Database - - CASBACnetStack\Packet + + CASBACnetStack\Database - - CASBACnetStack\PDU + + CASBACnetStack\Database - - CASBACnetStack\PDU + + CASBACnetStack\Database - - CASBACnetStack\PDU + + CASBACnetStack\Database - - CASBACnetStack\PDU + + CASBACnetStack\Database - - CASBACnetStack\PDU + + CASBACnetStack\Database - - CASBACnetStack\PDU + + CASBACnetStack\Database - - CASBACnetStack\PDU + + CASBACnetStack\Database - - CASBACnetStack\PDU + + CASBACnetStack\Database CASBACnetStack\Processors @@ -2426,81 +2360,144 @@ CASBACnetStack\Processors - - CASBACnetStack\Renderer + + CASBACnetStack\MessageGenerators - - CASBACnetStack\Renderer + + CASBACnetStack\Helper - - CASBACnetStack + + CASBACnetStack\Helper - - CASBACnetStack + + CASBACnetStack\Helper - - CASBACnetStack + + CASBACnetStack\AlarmsAndEvents - - CASBACnetStack + + CASBACnetStack\AlarmsAndEvents - - CASBACnetStack + + CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - CASBACnetStack + + CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - CASBACnetStack + + CASBACnetStack\AlarmsAndEvents\EventAlgorithms - - CASBACnetStack + + CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - CASBACnetStack + + CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - CASBACnetStack + + CASBACnetStack\AlarmsAndEvents\FaultAlgorithms - - CASBACnetStack + + CASBACnetStack\DataLink - - CASBACnetStack + + CASBACnetStack\DataLink - - CASBACnetStack + + CASBACnetStack\DataLink - - CASBACnetStack + + CASBACnetStack\DataLink - - CASBACnetStack + + CASBACnetStack\DataLink - - CASBACnetStack + + CASBACnetStack\DataLink - - CASBACnetStack + + CASBACnetStack\NetworkLayer + + + CASBACnetStack\NetworkLayer + + + CASBACnetStack\BACnetSC + + + CASBACnetStack\BACnetSC + + + CASBACnetStack\BACnetSC + + + CASBACnetStack\BACnetSC + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL + + + CASBACnetStack\BACnetSC\BACnetSCBVLL CASBACnetStack - - CASBACnetStack + + ChipkinCommon - - CASBACnetStack + + ChipkinCommon - - CASBACnetStack + + ChipkinCommon + + + Header Files + + + Header Files - - CASBACnetStack - \ No newline at end of file diff --git a/README.md b/README.md index defe439..a519220 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A basic BACnet IP client example written in C++ using the [CAS BACnet Stack](htt ## Supported CAS BACnet Stack Version -This example project uses version 4.1.5 of the CAS BACnet Stack +This example project uses version 5.1.2 of the CAS BACnet Stack ## Releases diff --git a/submodules/readme.md b/submodules/readme.md new file mode 100644 index 0000000..f868ec7 --- /dev/null +++ b/submodules/readme.md @@ -0,0 +1,12 @@ +# CAS BACnet Stack + +Please contact Chipkin Automation Systems to purchase the CAS BACnet Stack + +More information about the CAS BACnet Stack can be found here: [CAS BACnet Stack](https://store.chipkin.com/services/stacks/bacnet-stack) + +# Pathing for the CAS BACnet Stack + +\submodules\cas-bacnet-stack + +## Path to adapters +\submodules\cas-bacnet-stack\adapters \ No newline at end of file From 452d358a5640b7bd69e2c0fda75cdb4e39622b83 Mon Sep 17 00:00:00 2001 From: Alex Fontaine Date: Tue, 29 Oct 2024 16:17:05 -0700 Subject: [PATCH 2/4] Version bump to 1.0.0 --- BACnetClientExample/BACnetClientExample.cpp | 2 +- CHANGELOG.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/BACnetClientExample/BACnetClientExample.cpp b/BACnetClientExample/BACnetClientExample.cpp index 5fa2648..2b69846 100644 --- a/BACnetClientExample/BACnetClientExample.cpp +++ b/BACnetClientExample/BACnetClientExample.cpp @@ -61,7 +61,7 @@ uint8_t invokeId; // Constants // ======================================= -const std::string APPLICATION_VERSION = "0.0.9"; // See CHANGELOG.md for a full list of changes. +const std::string APPLICATION_VERSION = "1.0.0"; // See CHANGELOG.md for a full list of changes. const uint32_t MAX_XML_RENDER_BUFFER_LENGTH = 1024 * 20; // Settings diff --git a/CHANGELOG.md b/CHANGELOG.md index 197bed1..ba643b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## Version 1.0.x + +### 1.0.0 (2024-Oct-29) + +- Updated example to use with BACnetStack version 5.1.2.0 + ## Version 0.0.x ### 0.0.9 (2023-Oct-12) From 9beb505ec27a47f8e415823d755e9d7fef4a3e00 Mon Sep 17 00:00:00 2001 From: Alex Fontaine Date: Thu, 31 Oct 2024 09:27:55 -0700 Subject: [PATCH 3/4] Added additional examples for TS, UTCTS, RD, and DCC --- BACnetClientExample/BACnetClientExample.cpp | 94 +++++++++++++++++-- .../CASBACnetStackExampleConstants.h | 10 ++ CHANGELOG.md | 3 + 3 files changed, 100 insertions(+), 7 deletions(-) diff --git a/BACnetClientExample/BACnetClientExample.cpp b/BACnetClientExample/BACnetClientExample.cpp index 2b69846..460aace 100644 --- a/BACnetClientExample/BACnetClientExample.cpp +++ b/BACnetClientExample/BACnetClientExample.cpp @@ -71,6 +71,7 @@ const uint32_t SETTING_CLIENT_DEVICE_INSTANCE = 389002; const uint16_t SETTING_DOWNSTREAM_DEVICE_PORT = SETTING_BACNET_IP_PORT; const uint32_t SETTING_DOWNSTREAM_DEVICE_INSTANCE = 389999; const std::string SETTING_DEFAULT_DOWNSTREAM_DEVICE_IP_ADDRESS = "192.168.2.217"; +const std::string SETTING_DEFAULT_DEVICE_PASSWORD = "12345"; // Downstream IP Initialization // ======================================= @@ -128,6 +129,9 @@ void ExampleWriteProperty(); void ExampleSubscribeCOV(); void ExampleSubscribeCOVProperty(); void ExampleConfirmedTextMessage(); +void ExampleTimeSynchronizationMessage(); +void ExampleReinitializeDevice(); +void ExampleDeviceCommunicationControl(bool enable); int main(int argc, char ** argv ) { @@ -288,7 +292,7 @@ bool DoUserInput() ExampleWriteProperty(); break; } - case 'c': { + case 's': { ExampleSubscribeCOV(); break; } @@ -296,10 +300,27 @@ bool DoUserInput() ExampleSubscribeCOVProperty(); break; } - case 't': { + case 'm': { ExampleConfirmedTextMessage(); break; } + case 't': { + ExampleTimeSynchronizationMessage(); + break; + } + case 'i': { + ExampleReinitializeDevice(); + break; + } + case 'd': { + ExampleDeviceCommunicationControl(false); + break; + } + case 'e': { + ExampleDeviceCommunicationControl(true); + break; + } + case 'h': default: { // Print the Help std::cout << std::endl << std::endl; @@ -310,12 +331,18 @@ bool DoUserInput() std::cout << "Example: BACnetClient 192.168.1.126" << std::endl << std::endl; std::cout << "Help: " << std::endl; - std::cout << "- Q - Quit" << std::endl; std::cout << "- W - Send WhoIs message" << std::endl; - std::cout << "- R - Send Read property messages" << std::endl; - std::cout << "- U - Send Write property messages" << std::endl; - std::cout << "- C - Send Subscribe COV Request" << std::endl; - std::cout << "- T - Send Confirmed Text Message Request" << std::endl; + std::cout << "- R - Send ReadProperty messages" << std::endl; + std::cout << "- U - Send WriteProperty messages" << std::endl; + std::cout << "- S - Send SubscribeCOV Request" << std::endl; + std::cout << "- P - Send SubscribeCOVProperty Request" << std::endl; + std::cout << "- M - Send ConfirmedTextMessage Request" << std::endl; + std::cout << "- T - Send TimeSynchronization Request" << std::endl; + std::cout << "- R - Send ReinitializedDevice Request" << std::endl; + std::cout << "- D - Send DeviceCommunicationControl Request to Disable" << std::endl; + std::cout << "- E - Send DeviceCommunicationControl Request to Enable" << std::endl; + std::cout << "- H - Display Help information" << std::endl; + std::cout << "- Q - Quit" << std::endl; std::cout << std::endl; break; } @@ -481,6 +508,59 @@ void ExampleConfirmedTextMessage() { WaitForResponse(); } +void ExampleTimeSynchronizationMessage() { + // Time Synchronization Settings + uint8_t year = 2024 - 1900; + uint8_t month = 8; + uint8_t day = 15; + uint8_t weekday = 3; + uint8_t hour = 8; + uint8_t minute = 8; + uint8_t seconds = 8; + uint8_t hundrethSeconds = 0; + + // Send TimeSynchronization request + // C++ server example configured to handle + std::cout << "Sending TimeSynchronization Message"; + fpSendTimeSynchronization(year, month, day, weekday, hour, minute, seconds, hundrethSeconds, downstreamConnectionString, 6, 0, false, 0, NULL, 0); + + WaitForResponse(); + // Note: TimeSynchronization is an unconfirmed request, which means the downstream device will not response. + // The WaitForResponse is called here just to wait for some cycles before continuing. + + // Send UtcTimeSynchronization request + // C++ server example configured to handle + std::cout << "Sending UTCTimeSynchronization Message"; + fpSendUTCTimeSynchronization(year, month, day, weekday, hour, minute, seconds, hundrethSeconds, downstreamConnectionString, 6, 0, false, 0, NULL, 0); + + WaitForResponse(); +} + +void ExampleReinitializeDevice() { + // ReinitializeDevice Settings + uint8_t reinitializedState = CASBACnetStackExampleConstants::REINITIALIZED_STATE_ACTIVATE_CHANGES; + + // Send ReinitializeDevice request + // C++ server example configured to handle + std::cout << "Sending ReinitializeDevice Message to activate changes"; + fpSendReinitializeDevice(&invokeId, reinitializedState, SETTING_DEFAULT_DEVICE_PASSWORD.c_str(), SETTING_DEFAULT_DEVICE_PASSWORD.length(), downstreamConnectionString, 6, 0, 0, NULL, 0); +} + +void ExampleDeviceCommunicationControl(bool enable) { + if (enable) { + // Send DeviceCommunicationControl request + // C++ server example configured to handle + std::cout << "Sending DeviceCommunicationControl Message to enable BACnet communication"; + fpSendDeviceCommunicationControl(&invokeId, CASBACnetStackExampleConstants::ENABLEDISABLE_ENABLE, false, 0, SETTING_DEFAULT_DEVICE_PASSWORD.c_str(), SETTING_DEFAULT_DEVICE_PASSWORD.length(), downstreamConnectionString, 6, 0, 0, NULL, 0); + } + else { + // Send DeviceCommunicationControl request + // C++ server example configured to handle + std::cout << "Sending DeviceCommunicationControl Message to disable BACnet communication"; + fpSendDeviceCommunicationControl(&invokeId, CASBACnetStackExampleConstants::ENABLEDISABLE_DISABLE, false, 0, SETTING_DEFAULT_DEVICE_PASSWORD.c_str(), SETTING_DEFAULT_DEVICE_PASSWORD.length(), downstreamConnectionString, 6, 0, 0, NULL, 0); + } +} + // ================================================================================================ // Callbacks diff --git a/BACnetClientExample/CASBACnetStackExampleConstants.h b/BACnetClientExample/CASBACnetStackExampleConstants.h index f71d342..070d177 100644 --- a/BACnetClientExample/CASBACnetStackExampleConstants.h +++ b/BACnetClientExample/CASBACnetStackExampleConstants.h @@ -166,6 +166,16 @@ class CASBACnetStackExampleConstants { static const uint32_t DATA_TYPE_DATE = 10; static const uint32_t DATA_TYPE_TIME = 11; static const uint32_t DATA_TYPE_BACNET_OBJECT_IDENTIFIER = 12; + + // Reinitialzed States (Used for ReinitializeDevice) + static const uint8_t REINITIALIZED_STATE_COLDSTART = 0; + static const uint8_t REINITIALIZED_STATE_WARMSTART = 1; + static const uint8_t REINITIALIZED_STATE_ACTIVATE_CHANGES = 7; + + // Enable/Disable Enumerations (Used for DeviceCommunicationControl) + static const uint8_t ENABLEDISABLE_ENABLE = 0; + static const uint8_t ENABLEDISABLE_DISABLE = 1; + static const uint8_t ENABLEDISABLE_DISABLE_INITIATION = 2; }; #endif // __CASBACnetStackExampleConstants_h__ diff --git a/CHANGELOG.md b/CHANGELOG.md index ba643b7..836df89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ ### 1.0.0 (2024-Oct-29) - Updated example to use with BACnetStack version 5.1.2.0 +- Added TimeSynchronization example +- Added ReinitializeDevice example +- Added DeviceCommunicationControl example ## Version 0.0.x From 9fa039d2ba334e74edd7575251b0a5169851dcb7 Mon Sep 17 00:00:00 2001 From: Alex Fontaine Date: Thu, 31 Oct 2024 10:14:15 -0700 Subject: [PATCH 4/4] Updated readme and fixed the linux makefile --- README.md | 33 ++++++++++++++++++++++----------- makefile | 15 +++++++-------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index a519220..efbe7db 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # BACnet Client Example C++ A basic BACnet IP client example written in C++ using the [CAS BACnet Stack](https://store.chipkin.com/services/stacks/bacnet-stack). This client example is meant to be used with the [BACnet IP server example](https://github.com/chipkin/BACnetServerExampleCPP). Supports WhoIs, Read property, and Write property services. +This example shows how to use some of the BACnet client functionality of the CAS BACnet Stack and can be used to test communications with the BACnetServerExampleCPP. ## Supported CAS BACnet Stack Version @@ -14,21 +15,29 @@ Build versions of this example can be downloaded from the releases page: ## Installation -Download the latest release zip file on the releases page. +Download the latest release executable on the releases page. ## Usage +The target device for testing with this Client example application is the [BACnetServerExampleCPP](https://github.com/chipkin/BACnetServerExampleCPP) + ```txt Usage: BACnetClient {IPAddress} Example: BACnetClient 192.168.1.126 Help: -- Q - Quit - W - Send WhoIs message -- R - Send Read property messages -- U - Send Write property messages -- C - Send Subscribe COV Request -- T - Send Confirmed Text Message Request +- R - Send ReadProperty messages +- U - Send WriteProperty messages +- S - Send SubscribeCOV Request +- P - Send SubscribeCOVProperty Request +- M - Send ConfirmedTextMessage Request +- T - Send TimeSynchronization Request +- R - Send ReinitializedDevice Request +- D - Send DeviceCommunicationControl Request to Disable +- E - Send DeviceCommunicationControl Request to Enable +- H - Display Help information +- Q - Quit ``` Client expects a device with the following objects: @@ -55,17 +64,19 @@ Client expects a device with the following objects: ## Build -A [Visual studio 2019](https://visualstudio.microsoft.com/downloads/) project is included with this project. This project also auto built using [Gitlab CI](https://docs.gitlab.com/ee/ci/) on every commit. +A [Visual studio 2022](https://visualstudio.microsoft.com/downloads/) project is included with this project. + +The CAS BACnet Stack submodule is required for compilation. Please contact Chipkin Automation Systems to purchase the CAS BACnet Stack. -The CAS BACnet Stack submodule is required for compilation. +More information about the CAS BACnet Stack can be found here: [CAS BACnet Stack](https://store.chipkin.com/services/stacks/bacnet-stack) ## Example Output ```txt -CAS BACnet Stack Server Example v0.0.2.0 -https://github.com/chipkin/BACnetServerExampleCPP +CAS BACnet Stack Client Example v1.0.0.0 +https://github.com/chipkin/BACnetClientExampleCPP FYI: Loading CAS BACnet Stack functions... OK -FYI: CAS BACnet Stack version: 3.16.0.0 +FYI: CAS BACnet Stack version: 5.1.2.0 FYI: Connecting UDP Resource to port=[47808]... OK, Connected to port FYI: Registering the callback Functions with the CAS BACnet Stack Setting up client device. device.instance=[389002] diff --git a/makefile b/makefile index 5972382..b947dc0 100644 --- a/makefile +++ b/makefile @@ -6,18 +6,17 @@ NAME := BACnetClientExampleCPP_linux_x64_Release # -m32 for 32bit, -m64 for 64bit # -Wall turns on most, but not all, compiler warnings # -CFLAGS := -m64 -Wall +CFLAGS := -m64 -Wall -std=c++11 -DEBUGFLAGS = -O0 -g3 -DCAS_BACNET_STACK_LIB_TYPE_LIB -RELEASEFLAGS = -O3 -DCAS_BACNET_STACK_LIB_TYPE_LIB +DEBUGFLAGS = -O0 -g3 +RELEASEFLAGS = -O3 OBJECTFLAGS = -c -fmessage-length=0 -fPIC -MMD -MP LDFLAGS = -static -SOURCES = $(wildcard BACnetClientExample/*.cpp) $(wildcard submodules/cas-bacnet-stack/adapters/cpp/*.cpp) $(wildcard submodules/cas-bacnet-stack/submodules/cas-common/source/*.cpp) +SOURCES = $(wildcard BACnetClientExample/*.cpp) $(wildcard submodules/cas-bacnet-stack/adapters/cpp/*.cpp) $(wildcard submodules/cas-bacnet-stack/source/*.cpp) OBJECTS = $(addprefix obj/,$(notdir $(SOURCES:.cpp=.o))) -INCLUDES = -IBACnetClientExample -Isubmodules/cas-bacnet-stack/adapters/cpp -Isubmodules/cas-bacnet-stack/source -Isubmodules/cas-bacnet-stack/submodules/cas-common/source -LIBPATH = -Lbin -LIB = -ldl -lCASBACnetStack_x64_Release +INCLUDES = -IBACnetClientExample -Isubmodules/cas-bacnet-stack/adapters/cpp -Isubmodules/cas-bacnet-stack/source -Isubmodules/cas-bacnet-stack/submodules/xml2json/include +LIB = -ldl # Build Target TARGET = $(NAME) @@ -46,7 +45,7 @@ obj/%.o: submodules/cas-bacnet-stack/adapters/cpp/%.cpp @echo 'Finished building: $<' @echo ' ' -obj/%.o: submodules/cas-bacnet-stack/submodules/cas-common/source/%.cpp +obj/%.o: submodules/cas-bacnet-stack/source/%.cpp @mkdir -p obj @echo 'Building file: $<' @echo 'Invoking: GCC C++ Compiler'