Schedule encoding/decoding (#319)

* schedule: add decode_daily_schedule() and encode_daily_schedule()

* schedule: encode/decode implemented + add to bacapp

* add safe encode/decode functions for timevalue, schedule function renaming

* fix unit tests build failing

* add IDEA and test temporary files to .gitignore

* try to make "deprecated" work in MSVC

* add WeeklySchedule compare function

* add bacnet_weeklyschedule_context_decode()

* Add basic test for WeeklySchedule

* Fix WeeklySchedule parsing and snprintf, decoder verified with real hardware

* try to fix windows build

* improve boolean parsing in 'bacapp_parse_application_data'

* add parse function for weekly schedule

* allow types > 16 in bacwp, show the decoded value before sending

* add bacapp binaries to gitignore

* remove bacwp logging

* Add error checking to bacapp_parse_application_data

* try to fix windows build

* fix avr build

* Fix error handling in RP Ack

* add singleDay flag

* show day name in single day weeklyschedule snprintf

* show weeklyschedule inner tag in snprintf

* improve weeklyschedule parsing and printing, supports type names now

* add weekly schedule to bacapp_decode_data

* move bacnet/bacnet_plat_compat.h to bacnet/basic/sys/platform.h

* disable tag limit also in bacwpm

* add ifdef's around strtoX helper functions in bacapp

* move strtox to BACAPP_PRINT_ENABLED ifdef in bacapp

* fix stm32 makefiles

* fix at91sam7s build

* use BACNET_UNSIGNED_INTEGER in BACnet_Short_Application_Data_Value

* fix capitalization in BACnet_Daily_Schedule

* add name to BACNET_TIME_VALUE struct

* change bacwp bacwpm to use bacapp_known_property_tag()

* fix some macros in bacdcode missing parentheses

* Remove dummy fields from BACNET_SHORT_APPLICATION_DATA_VALUE, replace remaining uses of upcasting (adds extra overhead but is maybe safer), rename short DV to Primitive

* fix new ci warnings

* more fixes for ancient C

* fix tests no longer building

* primitive value renamed to shorter name
This commit is contained in:
Ondřej Hruška
2022-09-05 16:27:15 +02:00
committed by GitHub
parent bd40c51e19
commit 7cdab61d72
66 changed files with 1800 additions and 108 deletions
+33 -7
View File
@@ -337,20 +337,46 @@ int main(int argc, char *argv[])
value_string = argv[tag_value_arg];
tag_value_arg++;
args_remaining--;
/* printf("tag[%d]=%u value[%d]=%s\n",
i, property_tag, i, value_string); */
if (property_tag >= MAX_BACNET_APPLICATION_TAG) {
if (property_tag < 0) {
property_tag = bacapp_known_property_tag(Target_Object_Type, Target_Object_Property);
} else if (property_tag >= MAX_BACNET_APPLICATION_TAG) {
fprintf(stderr, "Error: tag=%u - it must be less than %u\n",
property_tag, MAX_BACNET_APPLICATION_TAG);
return 1;
}
status = bacapp_parse_application_data(
property_tag, value_string, &Target_Object_Property_Value[i]);
if (!status) {
if (property_tag >= 0) {
status = bacapp_parse_application_data(
property_tag, value_string, &Target_Object_Property_Value[i]);
if (!status) {
/* FIXME: show the expected entry format for the tag */
fprintf(stderr, "Error: unable to parse the tag value\n");
return 1;
}
} else {
/* FIXME: show the expected entry format for the tag */
fprintf(stderr, "Error: unable to parse the tag value\n");
fprintf(stderr, "Error: unable to parse the known property"
" \"%s\"\r\n", value_string);
return 1;
}
// Print the written value (for debug)
#if 0
fprintf(stderr, "Writing: ");
BACNET_OBJECT_PROPERTY_VALUE dummy_opv = {
.value = &Target_Object_Property_Value[i],
.array_index = Target_Object_Property_Index,
};
bacapp_print_value(stderr, &dummy_opv);
fprintf(stderr, "\n");
uint8_t apdu[1000];
int len = bacapp_encode_application_data(apdu, &Target_Object_Property_Value[i]);
for(int q=0;q<len;q++) {
printf("%02x ", apdu[q]);
}
printf("\n");
#endif
Target_Object_Property_Value[i].next = NULL;
if (i > 0) {
Target_Object_Property_Value[i - 1].next =
+14 -5
View File
@@ -427,16 +427,25 @@ int main(int argc, char *argv[])
if (Verbose) {
printf("tag=%u value=%s\n", property_tag, value_string);
}
if (property_tag >= MAX_BACNET_APPLICATION_TAG) {
if (property_tag < 0) {
property_tag = bacapp_known_property_tag(wpm_object->object_type, wpm_property->propertyIdentifier);
} else if (property_tag >= MAX_BACNET_APPLICATION_TAG) {
fprintf(stderr, "Error: tag=%u - it must be less than %u\n",
property_tag, MAX_BACNET_APPLICATION_TAG);
return 1;
}
status = bacapp_parse_application_data(
property_tag, value_string, &wpm_property->value);
if (!status) {
if (property_tag >= 0) {
status = bacapp_parse_application_data(
property_tag, value_string, &wpm_property->value);
if (!status) {
/* FIXME: show the expected entry format for the tag */
fprintf(stderr, "Error: unable to parse the tag value\n");
return 1;
}
} else {
/* FIXME: show the expected entry format for the tag */
fprintf(stderr, "Error: unable to parse the tag value\n");
fprintf(stderr, "Error: unable to parse the known property"
" \"%s\"\r\n", value_string);
return 1;
}
wpm_property->value.next = NULL;