Skip to content

Commit e3fde13

Browse files
Update CASBACnetStack to v4.1.5 (#28)
* Updated CASBACnetStack to v4.1.5 * Updated solution files * Updated CASBACnetStack to v4.1.5 this time
1 parent ae1d5b5 commit e3fde13

File tree

7 files changed

+1638
-1367
lines changed

7 files changed

+1638
-1367
lines changed

BACnetServerExample/BACnetServerExample.cpp

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@
5757
// =======================================
5858
CSimpleUDP g_udp; // UDP resource
5959
ExampleDatabase g_database; // The example database that stores current values.
60+
bool g_bbmdEnabled; // Flag for whether bbmd was enabled or not. Users can enable bbmd by pressing 'b' after the application has started
6061

6162
// Constants
6263
// =======================================
63-
const std::string APPLICATION_VERSION = "0.0.17"; // See CHANGELOG.md for a full list of changes.
64+
const std::string APPLICATION_VERSION = "0.0.18"; // See CHANGELOG.md for a full list of changes.
6465
const uint32_t MAX_RENDER_BUFFER_LENGTH = 1024 * 20;
6566

6667

@@ -128,6 +129,8 @@ int main(int argc, char** argv)
128129
std::cout << "FYI: Default to use device instance= " << g_database.device.instance << std::endl;
129130
}
130131

132+
// Initialize global flags
133+
g_bbmdEnabled = false;
131134

132135
// 1. Load the CAS BACnet stack functions
133136
// ---------------------------------------------------------------------------
@@ -576,9 +579,6 @@ int main(int argc, char** argv)
576579
std::cerr << "Failed to add NetworkPort" << std::endl;
577580
return -1;
578581
}
579-
fpSetPropertyEnabled(g_database.device.instance, CASBACnetStackExampleConstants::OBJECT_TYPE_NETWORK_PORT, g_database.networkPort.instance, CASBACnetStackExampleConstants::PROPERTY_IDENTIFIER_BBMD_ACCEPT_FD_REGISTRATIONS, true);
580-
fpSetPropertyEnabled(g_database.device.instance, CASBACnetStackExampleConstants::OBJECT_TYPE_NETWORK_PORT, g_database.networkPort.instance, CASBACnetStackExampleConstants::PROPERTY_IDENTIFIER_BBMD_BROADCAST_DISTRIBUTION_TABLE, true);
581-
fpSetPropertyEnabled(g_database.device.instance, CASBACnetStackExampleConstants::OBJECT_TYPE_NETWORK_PORT, g_database.networkPort.instance, CASBACnetStackExampleConstants::PROPERTY_IDENTIFIER_BBMD_FOREIGN_DEVICE_TABLE, true);
582582

583583
uint8_t ipPortConcat[6];
584584
memcpy(ipPortConcat, g_database.networkPort.IPAddress, 4);
@@ -709,7 +709,17 @@ bool DoUserInput()
709709
}
710710

711711
fpAddBDTEntry(bbmdIpAddress, 6, bbmdIpMask, 4);
712-
fpSetBBMD(g_database.device.instance, g_database.networkPort.instance);
712+
713+
if (!g_bbmdEnabled) {
714+
// BBMD Properties of the Network Port Object, only enable if another BBMD is added to the BDT table
715+
fpSetPropertyEnabled(g_database.device.instance, CASBACnetStackExampleConstants::OBJECT_TYPE_NETWORK_PORT, g_database.networkPort.instance, CASBACnetStackExampleConstants::PROPERTY_IDENTIFIER_BBMD_ACCEPT_FD_REGISTRATIONS, true);
716+
fpSetPropertyEnabled(g_database.device.instance, CASBACnetStackExampleConstants::OBJECT_TYPE_NETWORK_PORT, g_database.networkPort.instance, CASBACnetStackExampleConstants::PROPERTY_IDENTIFIER_BBMD_BROADCAST_DISTRIBUTION_TABLE, true);
717+
fpSetPropertyEnabled(g_database.device.instance, CASBACnetStackExampleConstants::OBJECT_TYPE_NETWORK_PORT, g_database.networkPort.instance, CASBACnetStackExampleConstants::PROPERTY_IDENTIFIER_BBMD_FOREIGN_DEVICE_TABLE, true);
718+
fpSetBBMD(g_database.device.instance, g_database.networkPort.instance);
719+
720+
g_bbmdEnabled = true;
721+
}
722+
713723
break;
714724
}
715725
case 'i': {
@@ -851,7 +861,7 @@ uint16_t CallbackReceiveMessage(uint8_t* message, const uint16_t maxMessageLengt
851861

852862
// Process the message as JSON
853863
static char jsonRenderBuffer[MAX_RENDER_BUFFER_LENGTH];
854-
if (fpDecodeAsJSON((char*)message, bytesRead, jsonRenderBuffer, MAX_RENDER_BUFFER_LENGTH) > 0) {
864+
if (fpDecodeAsJSON((char*)message, bytesRead, jsonRenderBuffer, MAX_RENDER_BUFFER_LENGTH, CASBACnetStackExampleConstants::NETWORK_TYPE_IP) > 0) {
855865
std::cout << "---------------------" << std::endl;
856866
std::cout << jsonRenderBuffer << std::endl;
857867
std::cout << "---------------------" << std::endl;
@@ -919,7 +929,7 @@ uint16_t CallbackSendMessage(const uint8_t* message, const uint16_t messageLengt
919929

920930
// Get the JSON rendered version of the just sent message
921931
static char jsonRenderBuffer[MAX_RENDER_BUFFER_LENGTH];
922-
if (fpDecodeAsJSON((char*)message, messageLength, jsonRenderBuffer, MAX_RENDER_BUFFER_LENGTH) > 0) {
932+
if (fpDecodeAsJSON((char*)message, messageLength, jsonRenderBuffer, MAX_RENDER_BUFFER_LENGTH, networkType) > 0) {
923933
std::cout << "---------------------" << std::endl;
924934
std::cout << jsonRenderBuffer << std::endl;
925935
std::cout << "---------------------" << std::endl;
@@ -1879,6 +1889,16 @@ bool GetObjectName(const uint32_t deviceInstance, const uint16_t objectType, con
18791889
*valueElementCount = (uint32_t) stringSize;
18801890
return true;
18811891
}
1892+
else if (objectType == CASBACnetStackExampleConstants::OBJECT_TYPE_ANALOG_OUTPUT && objectInstance == g_database.analogOutput.instance) {
1893+
stringSize = g_database.analogOutput.objectName.size();
1894+
if (stringSize > maxElementCount) {
1895+
std::cerr << "Error - not enough space to store full name of objectType=[" << objectType << "], objectInstance=[" << objectInstance << " ]" << std::endl;
1896+
return false;
1897+
}
1898+
memcpy(value, g_database.analogOutput.objectName.c_str(), stringSize);
1899+
*valueElementCount = (uint32_t)stringSize;
1900+
return true;
1901+
}
18821902
else if (objectType == 389 ) {
18831903
std::string name = "This is an example of the name";
18841904
stringSize = name.size();

BACnetServerExample/BACnetServerExample.sln

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.29209.62
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.1.32319.34
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BACnetServerExample", "BACnetServerExample.vcxproj", "{C832AEA4-7A71-4748-912C-673EC9E2BA6F}"
77
EndProject

0 commit comments

Comments
 (0)