Skip to content

Commit d2fdcd2

Browse files
authored
Merge pull request #8 from chipkin/textMessages
Text messages
2 parents b67e0f0 + 7bb4122 commit d2fdcd2

4 files changed

Lines changed: 48 additions & 2 deletions

File tree

BACnetClientExample/BACnetClientExample.cpp

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ uint8_t invokeId;
6161

6262
// Constants
6363
// =======================================
64-
const std::string APPLICATION_VERSION = "0.0.5"; // See CHANGELOG.md for a full list of changes.
64+
const std::string APPLICATION_VERSION = "0.0.6"; // See CHANGELOG.md for a full list of changes.
6565
const uint32_t MAX_XML_RENDER_BUFFER_LENGTH = 1024 * 20;
6666

6767
// Settings
@@ -112,6 +112,9 @@ void HookPropertyReal(const uint32_t originalInvokeId, const uint8_t service, co
112112
void HookPropertyTime(const uint32_t originalInvokeId, const uint8_t service, const uint16_t objectType, const uint32_t objectInstance, const uint32_t propertyIdentifier, const bool usePropertyArrayIndex, const uint32_t propertyArrayIndex, const uint8_t hour, const uint8_t minute, const uint8_t second, const uint8_t hundrethSecond, const uint8_t* connectionString, const uint8_t connectionStringLength, const uint8_t networkType, const uint16_t network, const uint8_t* sourceAddress, const uint8_t sourceAddressLength);
113113
void HookPropertyUInt(const uint32_t originalInvokeId, const uint8_t service, const uint16_t objectType, const uint32_t objectInstance, const uint32_t propertyIdentifier, const bool usePropertyArrayIndex, const uint32_t propertyArrayIndex, const uint32_t value, const uint8_t* connectionString, const uint8_t connectionStringLength, const uint8_t networkType, const uint16_t network, const uint8_t* sourceAddress, const uint8_t sourceAddressLength);
114114

115+
// Hooks for device management
116+
bool HookTextMessage(const uint32_t sourceDeviceIdentifier, const bool useMessageClass, const uint32_t messageClassUnsigned, const char* messageClassString, const uint32_t messageClassStringLength, const uint8_t messagePriority, const char* message, const uint32_t messageLength, const uint8_t* connectionString, const uint8_t connectionStringLength, const uint8_t networkType, const uint16_t sourceNetwork, const uint8_t* sourceAddress, const uint8_t sourceAddressLength, uint16_t* errorClass, uint16_t* errorCode);
117+
115118
// Helper functions
116119
bool DoUserInput();
117120
void WaitForResponse(unsigned int timeout=3);
@@ -123,6 +126,7 @@ void ExampleWhoIs();
123126
void ExampleReadProperty();
124127
void ExampleWriteProperty();
125128
void ExampleSubscribeCOV();
129+
void ExampleConfirmedTextMessage();
126130

127131
int main(int argc, char ** argv )
128132
{
@@ -198,6 +202,9 @@ int main(int argc, char ** argv )
198202
fpRegisterHookPropertyTime(HookPropertyTime);
199203
fpRegisterHookPropertyUInt(HookPropertyUInt);
200204

205+
// Hooks for device management
206+
fpRegisterHookTextMessage(HookTextMessage);
207+
201208
// 4. Setup the BACnet device
202209
// ---------------------------------------------------------------------------
203210
std::cout << "Setting up client device. device.instance=[" << SETTING_CLIENT_DEVICE_INSTANCE << "]" << std::endl;
@@ -284,6 +291,10 @@ bool DoUserInput()
284291
ExampleSubscribeCOV();
285292
break;
286293
}
294+
case 't': {
295+
ExampleConfirmedTextMessage();
296+
break;
297+
}
287298
default: {
288299
// Print the Help
289300
std::cout << std::endl << std::endl;
@@ -299,6 +310,7 @@ bool DoUserInput()
299310
std::cout << "- R - Send Read property messages" << std::endl;
300311
std::cout << "- U - Send Write property messages" << std::endl;
301312
std::cout << "- C - Send Subscribe COV Request" << std::endl;
313+
std::cout << "- T - Send Confirmed Text Message Request" << std::endl;
302314
std::cout << std::endl;
303315
break;
304316
}
@@ -436,6 +448,22 @@ void ExampleSubscribeCOV() {
436448
WaitForResponse();
437449
}
438450

451+
void ExampleConfirmedTextMessage() {
452+
// Text message settings
453+
bool useMessageClass = true; // Enable or disable message class property
454+
uint32_t messageClassUnsigned = 5;
455+
char messageClassString[] = "";
456+
uint8_t messagePriority = 0; // 0 = normal, 1 = urgent
457+
char message[] = "Hello from the C++ client example";
458+
459+
// Send confirmed text message request
460+
// C++ server example configured to handle and send response (+) with default settings
461+
std::cout << "Sending Confirmed Text Message";
462+
fpSendConfirmedTextMessage(&invokeId, SETTING_CLIENT_DEVICE_INSTANCE, useMessageClass, messageClassUnsigned, messageClassString, strlen(messageClassString), messagePriority, message, strlen(message), downstreamConnectionString, 6, 0, 0, NULL, 0);
463+
464+
WaitForResponse();
465+
}
466+
439467

440468
// ================================================================================================
441469
// Callbacks
@@ -896,3 +924,16 @@ void HookPropertyUInt(const uint32_t originalInvokeId, const uint8_t service, co
896924
HelperPrintCommonHookParameters(connectionString, connectionStringLength, networkType, network, sourceAddress, sourceAddressLength);
897925
std::cout << std::endl;
898926
}
927+
928+
bool HookTextMessage(const uint32_t sourceDeviceIdentifier, const bool useMessageClass, const uint32_t messageClassUnsigned, const char* messageClassString, const uint32_t messageClassStringLength, const uint8_t messagePriority, const char* message, const uint32_t messageLength, const uint8_t* connectionString, const uint8_t connectionStringLength, const uint8_t networkType, const uint16_t sourceNetwork, const uint8_t* sourceAddress, const uint8_t sourceAddressLength, uint16_t* errorClass, uint16_t* errorCode) {
929+
// Used to read text messages
930+
std::cout << "HookTextMessage. sourceDeviceIdentifier=[" << sourceDeviceIdentifier << "], useMessageClass=[" << useMessageClass << "], messageClassString=[" << messageClassString << "], messageClassStringLength=[" << messageClassStringLength << "], messagePriority=[" << messagePriority << "], message=[" << message << "], messageLength=[" << messageLength << "], ";
931+
std::cout << "networkType=[" << (int)networkType << "], ";
932+
std::cout << "connectionString=[" << (int)connectionString[0] << "." << (int)connectionString[1] << "." << (int)connectionString[2] << "." << (int)connectionString[3] << ":" << ((connectionString[4] * 256) + connectionString[5]) << "], ";
933+
934+
// Errors and return value unused for unconfirmed service requests
935+
*errorClass = 0;
936+
*errorCode = 0;
937+
return true;
938+
}
939+

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## Version 0.0.x
44

5+
### 0.0.6 (2021-Jul-15)
6+
7+
- Added confirmed text message request example service
8+
59
### 0.0.5 (2021-Jun-16)
610

711
- Added subscribe COV request example service

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Help:
2424
- R - Send Read property messages
2525
- U - Send Write property messages
2626
- C - Send Subscribe COV Request
27+
- T - Send Confirmed Text Message Request
2728
```
2829
Client expects a device with the following objects:
2930

submodules/cas-bacnet-stack

Submodule cas-bacnet-stack updated from 86ea2cb to 2f5373d

0 commit comments

Comments
 (0)