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:
+33
-7
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user