Indented.

This commit is contained in:
skarg
2008-11-24 12:48:09 +00:00
parent fdfd6a9f9f
commit d1a1c1c8a6
71 changed files with 6873 additions and 6754 deletions
+2 -2
View File
@@ -426,8 +426,8 @@ static bool cov_subscribe(
switch (cov_data->monitoredObjectIdentifier.type) { switch (cov_data->monitoredObjectIdentifier.type) {
case OBJECT_BINARY_INPUT: case OBJECT_BINARY_INPUT:
if (Binary_Input_Valid_Instance( if (Binary_Input_Valid_Instance(cov_data->
cov_data->monitoredObjectIdentifier.instance)) { monitoredObjectIdentifier.instance)) {
status = status =
cov_list_subscribe(src, cov_data, error_class, error_code); cov_list_subscribe(src, cov_data, error_class, error_code);
} else { } else {
+3 -4
View File
@@ -244,8 +244,7 @@ int RPM_Encode_Property(
rpm_ack_encode_apdu_object_property_error(&Temp_Buf[0], rpm_ack_encode_apdu_object_property_error(&Temp_Buf[0],
error_class, error_code); error_class, error_code);
len = len =
memcopy(&apdu[0], &Temp_Buf[0], offset + apdu_len, len, memcopy(&apdu[0], &Temp_Buf[0], offset + apdu_len, len, max_apdu);
max_apdu);
if (!len) { if (!len) {
return 0; return 0;
} }
@@ -344,8 +343,8 @@ void handler_read_property_multiple(
rpm_ack_encode_apdu_object_begin(&Temp_Buf[0], object_type, rpm_ack_encode_apdu_object_begin(&Temp_Buf[0], object_type,
object_instance); object_instance);
copy_len = copy_len =
memcopy(&Handler_Transmit_Buffer[npdu_len], &Temp_Buf[0], memcopy(&Handler_Transmit_Buffer[npdu_len], &Temp_Buf[0], apdu_len,
apdu_len, len, sizeof(Handler_Transmit_Buffer)); len, sizeof(Handler_Transmit_Buffer));
if (!copy_len) { if (!copy_len) {
apdu_len = apdu_len =
abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len], abort_encode_apdu(&Handler_Transmit_Buffer[npdu_len],
+13 -16
View File
@@ -60,9 +60,8 @@ static int rpm_ack_decode_service_request(
rpm_object = read_access_data; rpm_object = read_access_data;
old_rpm_object = rpm_object; old_rpm_object = rpm_object;
while (rpm_object && apdu_len) { while (rpm_object && apdu_len) {
len = rpm_ack_decode_object_id( len =
apdu, apdu_len, rpm_ack_decode_object_id(apdu, apdu_len, &rpm_object->object_type,
&rpm_object->object_type,
&rpm_object->object_instance); &rpm_object->object_instance);
if (len <= 0) { if (len <= 0) {
old_rpm_object->next = NULL; old_rpm_object->next = NULL;
@@ -76,9 +75,8 @@ static int rpm_ack_decode_service_request(
rpm_object->listOfProperties = rpm_property; rpm_object->listOfProperties = rpm_property;
old_rpm_property = rpm_property; old_rpm_property = rpm_property;
while (rpm_property && apdu_len) { while (rpm_property && apdu_len) {
len = rpm_ack_decode_object_property( len =
apdu, rpm_ack_decode_object_property(apdu, apdu_len,
apdu_len,
&rpm_property->propertyIdentifier, &rpm_property->propertyIdentifier,
&rpm_property->propertyArrayIndex); &rpm_property->propertyArrayIndex);
if (len <= 0) { if (len <= 0) {
@@ -99,10 +97,8 @@ static int rpm_ack_decode_service_request(
rpm_property->value = value; rpm_property->value = value;
old_value = value; old_value = value;
while (value && (apdu_len > 0)) { while (value && (apdu_len > 0)) {
len = bacapp_decode_application_data( len =
apdu, bacapp_decode_application_data(apdu, apdu_len, value);
apdu_len,
value);
decoded_len += len; decoded_len += len;
apdu_len -= len; apdu_len -= len;
apdu += len; apdu += len;
@@ -113,7 +109,8 @@ static int rpm_ack_decode_service_request(
break; break;
} else { } else {
old_value = value; old_value = value;
value = calloc(1, sizeof(BACNET_APPLICATION_DATA_VALUE)); value =
calloc(1, sizeof(BACNET_APPLICATION_DATA_VALUE));
old_value->next = value; old_value->next = value;
} }
} }
@@ -174,8 +171,7 @@ static void PrintReadPropertyMultipleData(
} }
#endif #endif
while (value) { while (value) {
bacapp_print_value(stdout, bacapp_print_value(stdout, value,
value,
listOfProperties->propertyIdentifier); listOfProperties->propertyIdentifier);
#if PRINT_ENABLED #if PRINT_ENABLED
if (value->next) { if (value->next) {
@@ -205,8 +201,8 @@ void handler_read_property_multiple_ack(
BACNET_CONFIRMED_SERVICE_ACK_DATA * service_data) BACNET_CONFIRMED_SERVICE_ACK_DATA * service_data)
{ {
int len = 0; int len = 0;
BACNET_READ_ACCESS_DATA * rpm_data; BACNET_READ_ACCESS_DATA *rpm_data;
BACNET_READ_ACCESS_DATA * old_rpm_data; BACNET_READ_ACCESS_DATA *old_rpm_data;
BACNET_PROPERTY_REFERENCE *rpm_property; BACNET_PROPERTY_REFERENCE *rpm_property;
BACNET_PROPERTY_REFERENCE *old_rpm_property; BACNET_PROPERTY_REFERENCE *old_rpm_property;
BACNET_APPLICATION_DATA_VALUE *value; BACNET_APPLICATION_DATA_VALUE *value;
@@ -217,7 +213,8 @@ void handler_read_property_multiple_ack(
rpm_data = calloc(1, sizeof(BACNET_READ_ACCESS_DATA)); rpm_data = calloc(1, sizeof(BACNET_READ_ACCESS_DATA));
if (rpm_data) { if (rpm_data) {
len = rpm_ack_decode_service_request(service_request, service_len, len =
rpm_ack_decode_service_request(service_request, service_len,
rpm_data); rpm_data);
} }
#if 1 #if 1
+8 -12
View File
@@ -57,25 +57,21 @@ void handler_ucov_notification(
fprintf(stderr, "UCOV: Received Notification!\n"); fprintf(stderr, "UCOV: Received Notification!\n");
#endif #endif
/* decode the service request only */ /* decode the service request only */
len = cov_notify_decode_service_request( len =
service_request, service_len, &cov_data); cov_notify_decode_service_request(service_request, service_len,
&cov_data);
#if PRINT_ENABLED #if PRINT_ENABLED
if (len > 0) { if (len > 0) {
fprintf(stderr, "UCOV: PID=%u ", fprintf(stderr, "UCOV: PID=%u ", cov_data.subscriberProcessIdentifier);
cov_data.subscriberProcessIdentifier); fprintf(stderr, "instance=%u ", cov_data.initiatingDeviceIdentifier);
fprintf(stderr, "instance=%u ",
cov_data.initiatingDeviceIdentifier);
fprintf(stderr, "%s %u ", fprintf(stderr, "%s %u ",
bactext_object_type_name( bactext_object_type_name(cov_data.monitoredObjectIdentifier.type),
cov_data.monitoredObjectIdentifier.type),
cov_data.monitoredObjectIdentifier.instance); cov_data.monitoredObjectIdentifier.instance);
fprintf(stderr, "time remaining=%u seconds ", fprintf(stderr, "time remaining=%u seconds ", cov_data.timeRemaining);
cov_data.timeRemaining);
fprintf(stderr, "%s ", fprintf(stderr, "%s ",
bactext_property_name(property_value.propertyIdentifier)); bactext_property_name(property_value.propertyIdentifier));
if (property_value.propertyArrayIndex != BACNET_ARRAY_ALL) { if (property_value.propertyArrayIndex != BACNET_ARRAY_ALL) {
fprintf(stderr, "%u ", fprintf(stderr, "%u ", property_value.propertyArrayIndex);
property_value.propertyArrayIndex);
} }
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} else { } else {
+1 -2
View File
@@ -88,7 +88,6 @@ void Send_I_Am(
#if PRINT_ENABLED #if PRINT_ENABLED
if (bytes_sent <= 0) if (bytes_sent <= 0)
fprintf(stderr, "Failed to Send I-Am Reply (%s)!\n", fprintf(stderr, "Failed to Send I-Am Reply (%s)!\n", strerror(errno));
strerror(errno));
#endif #endif
} }
+5 -11
View File
@@ -69,8 +69,7 @@ void Send_Who_Is_Router_To_Network(
BACNET_NPDU_DATA npdu_data; BACNET_NPDU_DATA npdu_data;
npdu_encode_npdu_network(&npdu_data, npdu_encode_npdu_network(&npdu_data,
NETWORK_MESSAGE_WHO_IS_ROUTER_TO_NETWORK, NETWORK_MESSAGE_WHO_IS_ROUTER_TO_NETWORK, false,
false,
MESSAGE_PRIORITY_NORMAL); MESSAGE_PRIORITY_NORMAL);
/* fixme: should dnet/dlen/dadr be set in NPDU? */ /* fixme: should dnet/dlen/dadr be set in NPDU? */
pdu_len = pdu_len =
@@ -112,8 +111,7 @@ void Send_I_Am_Router_To_Network(
unsigned index = 0; unsigned index = 0;
npdu_encode_npdu_network(&npdu_data, npdu_encode_npdu_network(&npdu_data,
NETWORK_MESSAGE_I_AM_ROUTER_TO_NETWORK, NETWORK_MESSAGE_I_AM_ROUTER_TO_NETWORK, false,
false,
MESSAGE_PRIORITY_NORMAL); MESSAGE_PRIORITY_NORMAL);
pdu_len = pdu_len =
npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data); npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data);
@@ -157,9 +155,7 @@ void Send_Initialize_Routing_Table(
BACNET_ROUTER_PORT *router_port; BACNET_ROUTER_PORT *router_port;
unsigned i = 0; /* counter */ unsigned i = 0; /* counter */
npdu_encode_npdu_network(&npdu_data, npdu_encode_npdu_network(&npdu_data, NETWORK_MESSAGE_INIT_RT_TABLE, true,
NETWORK_MESSAGE_INIT_RT_TABLE,
true,
MESSAGE_PRIORITY_NORMAL); MESSAGE_PRIORITY_NORMAL);
pdu_len = pdu_len =
npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data); npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data);
@@ -208,10 +204,8 @@ void Send_Initialize_Routing_Table_Ack(
int bytes_sent = 0; int bytes_sent = 0;
BACNET_NPDU_DATA npdu_data; BACNET_NPDU_DATA npdu_data;
npdu_encode_npdu_network(&npdu_data, npdu_encode_npdu_network(&npdu_data, NETWORK_MESSAGE_INIT_RT_TABLE_ACK,
NETWORK_MESSAGE_INIT_RT_TABLE_ACK, false, MESSAGE_PRIORITY_NORMAL);
false,
MESSAGE_PRIORITY_NORMAL);
pdu_len = pdu_len =
npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data); npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data);
/* encode the optional DNET list portion of the packet */ /* encode the optional DNET list portion of the packet */
+5 -10
View File
@@ -48,7 +48,7 @@ uint8_t Send_Read_Property_Multiple_Request(
uint8_t * pdu, uint8_t * pdu,
size_t max_pdu, size_t max_pdu,
uint32_t device_id, /* destination device */ uint32_t device_id, /* destination device */
BACNET_READ_ACCESS_DATA *read_access_data) BACNET_READ_ACCESS_DATA * read_access_data)
{ {
BACNET_ADDRESS dest; BACNET_ADDRESS dest;
BACNET_ADDRESS my_address; BACNET_ADDRESS my_address;
@@ -72,14 +72,10 @@ uint8_t Send_Read_Property_Multiple_Request(
/* encode the NPDU portion of the packet */ /* encode the NPDU portion of the packet */
datalink_get_my_address(&my_address); datalink_get_my_address(&my_address);
npdu_encode_npdu_data(&npdu_data, true, MESSAGE_PRIORITY_NORMAL); npdu_encode_npdu_data(&npdu_data, true, MESSAGE_PRIORITY_NORMAL);
pdu_len = pdu_len = npdu_encode_pdu(&pdu[0], &dest, &my_address, &npdu_data);
npdu_encode_pdu(&pdu[0], &dest, &my_address,
&npdu_data);
/* encode the APDU portion of the packet */ /* encode the APDU portion of the packet */
len = rpm_encode_apdu( len =
&pdu[pdu_len], rpm_encode_apdu(&pdu[pdu_len], max_pdu - pdu_len, invoke_id,
max_pdu - pdu_len,
invoke_id,
read_access_data); read_access_data);
if (len <= 0) { if (len <= 0) {
return 0; return 0;
@@ -94,8 +90,7 @@ uint8_t Send_Read_Property_Multiple_Request(
tsm_set_confirmed_unsegmented_transaction(invoke_id, &dest, tsm_set_confirmed_unsegmented_transaction(invoke_id, &dest,
&npdu_data, &pdu[0], (uint16_t) pdu_len); &npdu_data, &pdu[0], (uint16_t) pdu_len);
bytes_sent = bytes_sent =
datalink_send_pdu(&dest, &npdu_data, datalink_send_pdu(&dest, &npdu_data, &pdu[0], pdu_len);
&pdu[0], pdu_len);
#if PRINT_ENABLED #if PRINT_ENABLED
if (bytes_sent <= 0) if (bytes_sent <= 0)
fprintf(stderr, fprintf(stderr,
+15 -22
View File
@@ -86,8 +86,8 @@ static void MyRejectHandler(
} }
static void My_Router_Handler( static void My_Router_Handler(
BACNET_ADDRESS *src, BACNET_ADDRESS * src,
BACNET_NPDU_DATA *npdu_data, BACNET_NPDU_DATA * npdu_data,
uint8_t * npdu, /* PDU data */ uint8_t * npdu, /* PDU data */
uint16_t npdu_len) uint16_t npdu_len)
{ {
@@ -122,26 +122,26 @@ static void My_Router_Handler(
} }
} }
port_mappings = npdu[0]; port_mappings = npdu[0];
printf("\nPort Mappings: %u\n",port_mappings); printf("\nPort Mappings: %u\n", port_mappings);
npdu_offset = 1; npdu_offset = 1;
npdu_len--; npdu_len--;
while (npdu_len) { while (npdu_len) {
len = decode_unsigned16(&npdu[npdu_offset], &dnet); len = decode_unsigned16(&npdu[npdu_offset], &dnet);
printf("DNET=%hu, ",dnet); printf("DNET=%hu, ", dnet);
npdu_offset += len; npdu_offset += len;
npdu_len -= len; npdu_len -= len;
if (!npdu_len) { if (!npdu_len) {
break; break;
} }
port_id = npdu[npdu_offset]; port_id = npdu[npdu_offset];
printf("Port ID=%u, ",port_id); printf("Port ID=%u, ", port_id);
npdu_offset++; npdu_offset++;
npdu_len--; npdu_len--;
if (!npdu_len) { if (!npdu_len) {
break; break;
} }
port_info_len = npdu[npdu_offset]; port_info_len = npdu[npdu_offset];
printf("Port Info Length=%u, ",port_info_len); printf("Port Info Length=%u, ", port_info_len);
npdu_offset++; npdu_offset++;
npdu_len--; npdu_len--;
printf("Port Info=\""); printf("Port Info=\"");
@@ -150,7 +150,7 @@ static void My_Router_Handler(
break; break;
} }
if (j < port_info_len) { if (j < port_info_len) {
printf("%02X",npdu[npdu_offset]); printf("%02X", npdu[npdu_offset]);
npdu_offset++; npdu_offset++;
npdu_len--; npdu_len--;
} }
@@ -182,7 +182,7 @@ static void My_NPDU_Handler(
apdu_offset = npdu_decode(&pdu[0], &dest, src, &npdu_data); apdu_offset = npdu_decode(&pdu[0], &dest, src, &npdu_data);
if (npdu_data.network_layer_message) { if (npdu_data.network_layer_message) {
My_Router_Handler(src,&npdu_data,&pdu[apdu_offset], My_Router_Handler(src, &npdu_data, &pdu[apdu_offset],
(uint16_t) (pdu_len - apdu_offset)); (uint16_t) (pdu_len - apdu_offset));
} else if ((apdu_offset > 0) && (apdu_offset <= pdu_len)) { } else if ((apdu_offset > 0) && (apdu_offset <= pdu_len)) {
if ((npdu_data.protocol_version == BACNET_PROTOCOL_VERSION) && if ((npdu_data.protocol_version == BACNET_PROTOCOL_VERSION) &&
@@ -325,7 +325,8 @@ static void address_parse(BACNET_ADDRESS * dst,
dst->mac_len = 6; dst->mac_len = 6;
for (index = 0; index < 4; index++) { for (index = 0; index < 4; index++) {
dst->mac[index] = mac[index]; dst->mac[index] = mac[index];
} encode_unsigned16(&dst->mac[4], }
encode_unsigned16(&dst->mac[4],
port); port);
} else { } else {
count = count =
@@ -364,22 +365,14 @@ int main(int argc, char *argv[]) {
filename_remove_path(argv[0])); filename_remove_path(argv[0]));
return 0; return 0;
} }
if (( if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) {
argc > 1) && (
strcmp(argv[1],
"--help") == 0)) {
printf("Send BACnet Initialize-Routing-Table message to a network\r\n" printf("Send BACnet Initialize-Routing-Table message to a network\r\n"
"and wait for responses. Displays their network information.\r\n" "and wait for responses. Displays their network information.\r\n"
"\r\n" "\r\n" "address:\r\n"
"address:\r\n"
"MAC address in xx:xx:xx:xx:xx:xx format or IP x.x.x.x:port\r\n" "MAC address in xx:xx:xx:xx:xx:xx format or IP x.x.x.x:port\r\n"
"DNET ID Len Info:\r\n" "DNET ID Len Info:\r\n" "Port-info data:\r\n" " DNET:\r\n"
"Port-info data:\r\n" " Destination network number 0-65534\r\n" " ID:\r\n"
" DNET:\r\n" " Port Identifier number 0-255\r\n" " Info:\r\n"
" Destination network number 0-65534\r\n"
" ID:\r\n"
" Port Identifier number 0-255\r\n"
" Info:\r\n"
" Octet string of data, up to 255 octets\r\n" " Octet string of data, up to 255 octets\r\n"
"To query the complete routing table, do not include any port-info.\r\n" "To query the complete routing table, do not include any port-info.\r\n"
"To query using Initialize-Routing-Table message to 192.168.0.18:\r\n" "To query using Initialize-Routing-Table message to 192.168.0.18:\r\n"
+2 -2
View File
@@ -139,7 +139,7 @@ static void milliseconds_task_win32(
/* functions used by the MS/TP state machine to put or get data */ /* functions used by the MS/TP state machine to put or get data */
uint16_t MSTP_Put_Receive( uint16_t MSTP_Put_Receive(
volatile struct mstp_port_struct_t * mstp_port) volatile struct mstp_port_struct_t *mstp_port)
{ {
(void) mstp_port; (void) mstp_port;
@@ -217,7 +217,7 @@ static void write_received_packet(
fwrite(&ts_sec, sizeof(ts_sec), 1, pFile); fwrite(&ts_sec, sizeof(ts_sec), 1, pFile);
fwrite(&ts_usec, sizeof(ts_usec), 1, pFile); fwrite(&ts_usec, sizeof(ts_usec), 1, pFile);
if (mstp_port->DataLength) { if (mstp_port->DataLength) {
max_data = min(mstp_port->InputBufferSize,mstp_port->DataLength); max_data = min(mstp_port->InputBufferSize, mstp_port->DataLength);
incl_len = orig_len = 8 + max_data + 2; incl_len = orig_len = 8 + max_data + 2;
} else { } else {
incl_len = orig_len = 8; incl_len = orig_len = 8;
+2 -2
View File
@@ -308,12 +308,12 @@ int Binary_Output_Encode_Property_APDU(
apdu_len = encode_application_enumerated(&apdu[0], present_value); apdu_len = encode_application_enumerated(&apdu[0], present_value);
break; break;
case PROP_ACTIVE_TEXT: case PROP_ACTIVE_TEXT:
characterstring_init_ansi(&char_string,"on" ); characterstring_init_ansi(&char_string, "on");
apdu_len = apdu_len =
encode_application_character_string(&apdu[0], &char_string); encode_application_character_string(&apdu[0], &char_string);
break; break;
case PROP_INACTIVE_TEXT: case PROP_INACTIVE_TEXT:
characterstring_init_ansi(&char_string,"off" ); characterstring_init_ansi(&char_string, "off");
apdu_len = apdu_len =
encode_application_character_string(&apdu[0], &char_string); encode_application_character_string(&apdu[0], &char_string);
break; break;
+18 -22
View File
@@ -216,8 +216,7 @@ static void Init_DataLink(
#endif #endif
} }
void cleanup(void) void cleanup(void) {
{
BACNET_READ_ACCESS_DATA *rpm_object; BACNET_READ_ACCESS_DATA *rpm_object;
BACNET_READ_ACCESS_DATA *old_rpm_object; BACNET_READ_ACCESS_DATA *old_rpm_object;
BACNET_PROPERTY_REFERENCE *rpm_property; BACNET_PROPERTY_REFERENCE *rpm_property;
@@ -231,8 +230,7 @@ void cleanup(void)
old_rpm_property = rpm_property; old_rpm_property = rpm_property;
rpm_property = rpm_property->next; rpm_property = rpm_property->next;
free(old_rpm_property); free(old_rpm_property);
} } old_rpm_object = rpm_object;
old_rpm_object = rpm_object;
rpm_object = rpm_object->next; rpm_object = rpm_object->next;
free(old_rpm_object); free(old_rpm_object);
} }
@@ -251,14 +249,16 @@ int main(int argc, char *argv[]) {
time_t timeout_seconds = 0; time_t timeout_seconds = 0;
uint8_t invoke_id = 0; uint8_t invoke_id = 0;
bool found = false; bool found = false;
uint8_t buffer[MAX_PDU] = {0}; uint8_t buffer[MAX_PDU] = {
0};
BACNET_READ_ACCESS_DATA *rpm_object; BACNET_READ_ACCESS_DATA *rpm_object;
BACNET_PROPERTY_REFERENCE *rpm_property; BACNET_PROPERTY_REFERENCE *rpm_property;
if (argc < 5) { if (argc < 5) {
printf("Usage: %s device-instance object-type object-instance " printf("Usage: %s device-instance object-type object-instance "
"property index [object-type ...]\r\n", filename_remove_path(argv[0])); "property index [object-type ...]\r\n",
filename_remove_path(argv[0]));
if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) { if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) {
printf("device-instance:\r\n" printf("device-instance:\r\n"
"BACnet Device Object Instance number that you are\r\n" "BACnet Device Object Instance number that you are\r\n"
@@ -285,8 +285,7 @@ int main(int argc, char *argv[]) {
"If the property is an array, individual elements can\r\n" "If the property is an array, individual elements can\r\n"
"be read. If this parameter is missing and the property\r\n" "be read. If this parameter is missing and the property\r\n"
"is an array, the entire array will be read.\r\n" "is an array, the entire array will be read.\r\n"
"\r\nExample:\r\n" "\r\nExample:\r\n" "If you want read the ALL property in\r\n"
"If you want read the ALL property in\r\n"
"Device object 123, you would use the following command:\r\n" "Device object 123, you would use the following command:\r\n"
"%s 123 8 123 8 -1\r\n" "%s 123 8 123 8 -1\r\n"
"If you want read the OPTIONAL property in\r\n" "If you want read the OPTIONAL property in\r\n"
@@ -294,10 +293,8 @@ int main(int argc, char *argv[]) {
"%s 123 8 123 80 -1\r\n" "%s 123 8 123 80 -1\r\n"
"If you want read the REQUIRED property in\r\n" "If you want read the REQUIRED property in\r\n"
"Device object 123, you would use the following command:\r\n" "Device object 123, you would use the following command:\r\n"
"%s 123 8 123 105 -1\r\n", "%s 123 8 123 105 -1\r\n", filename_remove_path(argv[0]),
filename_remove_path(argv[0]), filename_remove_path(argv[0]), filename_remove_path(argv[0]));
filename_remove_path(argv[0]),
filename_remove_path(argv[0]));
} }
return 0; return 0;
} }
@@ -315,8 +312,7 @@ int main(int argc, char *argv[]) {
arg_sets = 0; arg_sets = 0;
while (rpm_object) { while (rpm_object) {
tag_value_arg = 2 + (arg_sets * 4); tag_value_arg = 2 + (arg_sets * 4);
rpm_object->object_type = rpm_object->object_type = strtol(argv[tag_value_arg], NULL, 0);
strtol(argv[tag_value_arg], NULL, 0);
tag_value_arg++; tag_value_arg++;
args_remaining--; args_remaining--;
if (args_remaining <= 0) { if (args_remaining <= 0) {
@@ -328,8 +324,7 @@ int main(int argc, char *argv[]) {
rpm_object->object_type, MAX_BACNET_OBJECT_TYPE + 1); rpm_object->object_type, MAX_BACNET_OBJECT_TYPE + 1);
return 1; return 1;
} }
rpm_object->object_instance = rpm_object->object_instance = strtol(argv[tag_value_arg], NULL, 0);
strtol(argv[tag_value_arg], NULL, 0);
tag_value_arg++; tag_value_arg++;
args_remaining--; args_remaining--;
if (args_remaining <= 0) { if (args_remaining <= 0) {
@@ -350,12 +345,14 @@ int main(int argc, char *argv[]) {
tag_value_arg++; tag_value_arg++;
args_remaining--; args_remaining--;
if (args_remaining <= 0) { if (args_remaining <= 0) {
fprintf(stderr, "Error: not enough object property quads.\r\n"); fprintf(stderr,
"Error: not enough object property quads.\r\n");
return 1; return 1;
} }
if (rpm_property->propertyIdentifier > MAX_BACNET_PROPERTY_ID) { if (rpm_property->propertyIdentifier > MAX_BACNET_PROPERTY_ID) {
fprintf(stderr, "property=%u - it must be less than %u\r\n", fprintf(stderr, "property=%u - it must be less than %u\r\n",
rpm_property->propertyIdentifier, MAX_BACNET_PROPERTY_ID + 1); rpm_property->propertyIdentifier,
MAX_BACNET_PROPERTY_ID + 1);
return 1; return 1;
} }
rpm_property->propertyArrayIndex = rpm_property->propertyArrayIndex =
@@ -413,10 +410,9 @@ int main(int argc, char *argv[]) {
&Target_Address); &Target_Address);
if (found) { if (found) {
if (invoke_id == 0) { if (invoke_id == 0) {
invoke_id = Send_Read_Property_Multiple_Request( invoke_id =
&buffer[0], Send_Read_Property_Multiple_Request(&buffer[0],
sizeof(buffer), sizeof(buffer), Target_Device_Object_Instance,
Target_Device_Object_Instance,
Read_Access_Data); Read_Access_Data);
} else if (tsm_invoke_id_free(invoke_id)) } else if (tsm_invoke_id_free(invoke_id))
break; break;
+2 -2
View File
@@ -212,8 +212,8 @@ int main(int argc, char *argv[]) {
filename_remove_path(argv[0]), filename_remove_path(argv[0])); filename_remove_path(argv[0]), filename_remove_path(argv[0]));
return 0; return 0;
} }
/* decode the command line parameters */ /* decode the command line parameters */ cov_data.
cov_data.subscriberProcessIdentifier = strtol(argv[1], NULL, 0); subscriberProcessIdentifier = strtol(argv[1], NULL, 0);
cov_data.initiatingDeviceIdentifier = strtol(argv[2], NULL, 0); cov_data.initiatingDeviceIdentifier = strtol(argv[2], NULL, 0);
cov_data.monitoredObjectIdentifier.type = strtol(argv[3], NULL, 0); cov_data.monitoredObjectIdentifier.type = strtol(argv[3], NULL, 0);
cov_data.monitoredObjectIdentifier.instance = strtol(argv[4], NULL, 0); cov_data.monitoredObjectIdentifier.instance = strtol(argv[4], NULL, 0);
+4 -4
View File
@@ -86,8 +86,8 @@ static void MyRejectHandler(
} }
static void My_Router_Handler( static void My_Router_Handler(
BACNET_ADDRESS *src, BACNET_ADDRESS * src,
BACNET_NPDU_DATA *npdu_data, BACNET_NPDU_DATA * npdu_data,
uint8_t * npdu, /* PDU data */ uint8_t * npdu, /* PDU data */
uint16_t npdu_len) uint16_t npdu_len)
{ {
@@ -109,7 +109,7 @@ static void My_Router_Handler(
printf("\nNetworks: "); printf("\nNetworks: ");
while (npdu_len) { while (npdu_len) {
len = decode_unsigned16(&npdu[npdu_offset], &dnet); len = decode_unsigned16(&npdu[npdu_offset], &dnet);
printf("%hu",dnet); printf("%hu", dnet);
npdu_len -= len; npdu_len -= len;
if (npdu_len) { if (npdu_len) {
printf(", "); printf(", ");
@@ -141,7 +141,7 @@ void My_NPDU_Handler(
apdu_offset = npdu_decode(&pdu[0], &dest, src, &npdu_data); apdu_offset = npdu_decode(&pdu[0], &dest, src, &npdu_data);
if (npdu_data.network_layer_message) { if (npdu_data.network_layer_message) {
My_Router_Handler(src,&npdu_data,&pdu[apdu_offset], My_Router_Handler(src, &npdu_data, &pdu[apdu_offset],
(uint16_t) (pdu_len - apdu_offset)); (uint16_t) (pdu_len - apdu_offset));
} else if ((apdu_offset > 0) && (apdu_offset <= pdu_len)) { } else if ((apdu_offset > 0) && (apdu_offset <= pdu_len)) {
if ((npdu_data.protocol_version == BACNET_PROTOCOL_VERSION) && if ((npdu_data.protocol_version == BACNET_PROTOCOL_VERSION) &&
+4 -4
View File
@@ -115,7 +115,7 @@ extern "C" {
int decode_context_boolean2( int decode_context_boolean2(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
bool *boolean_value); bool * boolean_value);
/* from clause 20.2.10 Encoding of a Bit String Value */ /* from clause 20.2.10 Encoding of a Bit String Value */
/* returns the number of apdu bytes consumed */ /* returns the number of apdu bytes consumed */
@@ -154,11 +154,11 @@ extern "C" {
/* from clause 20.2.7 Encoding of a Double Precision Real Number Value */ /* from clause 20.2.7 Encoding of a Double Precision Real Number Value */
/* and 20.2.1 General Rules for Encoding BACnet Tags */ /* and 20.2.1 General Rules for Encoding BACnet Tags */
/* returns the number of apdu bytes consumed */ /* returns the number of apdu bytes consumed */
int encode_application_double( int encode_application_double(
uint8_t * apdu, uint8_t * apdu,
double value); double value);
int encode_context_double( int encode_context_double(
uint8_t * apdu, uint8_t * apdu,
int tag_number, int tag_number,
double value); double value);
@@ -174,7 +174,7 @@ int encode_context_double(
int decode_context_object_id( int decode_context_object_id(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
uint16_t *object_type, uint16_t * object_type,
uint32_t * instance); uint32_t * instance);
int encode_bacnet_object_id( int encode_bacnet_object_id(
+4 -7
View File
@@ -48,20 +48,20 @@ typedef struct {
extern "C" { extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
int bacapp_encode_device_obj_property_ref( int bacapp_encode_device_obj_property_ref(
uint8_t * apdu, uint8_t * apdu,
BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE * value); BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE * value);
int bacapp_encode_context_device_obj_property_ref( int bacapp_encode_context_device_obj_property_ref(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE * value); BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE * value);
int bacapp_decode_device_obj_property_ref( int bacapp_decode_device_obj_property_ref(
uint8_t * apdu, uint8_t * apdu,
BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE * value); BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE * value);
int bacapp_decode_context_device_obj_property_ref( int bacapp_decode_context_device_obj_property_ref(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE * value); BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE * value);
@@ -69,7 +69,4 @@ int bacapp_decode_context_device_obj_property_ref(
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif //_BAC_DEV_PROP_REF_H_ #endif //_BAC_DEV_PROP_REF_H_
+3 -5
View File
@@ -83,22 +83,20 @@ typedef struct {
extern "C" { extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
int bacapp_decode_property_state( int bacapp_decode_property_state(
uint8_t * apdu, uint8_t * apdu,
BACNET_PROPERTY_STATE * value); BACNET_PROPERTY_STATE * value);
int bacapp_decode_context_property_state( int bacapp_decode_context_property_state(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
BACNET_PROPERTY_STATE * value); BACNET_PROPERTY_STATE * value);
int bacapp_encode_property_state( int bacapp_encode_property_state(
uint8_t * apdu, uint8_t * apdu,
BACNET_PROPERTY_STATE * value); BACNET_PROPERTY_STATE * value);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif // _BAC_PROP_STATES_H_ #endif // _BAC_PROP_STATES_H_
+1 -1
View File
@@ -79,7 +79,7 @@ extern "C" {
uint8_t * pdu, uint8_t * pdu,
size_t max_pdu, size_t max_pdu,
uint32_t device_id, /* destination device */ uint32_t device_id, /* destination device */
BACNET_READ_ACCESS_DATA *read_access_data); BACNET_READ_ACCESS_DATA * read_access_data);
/* returns the invoke ID for confirmed request, or 0 if failed */ /* returns the invoke ID for confirmed request, or 0 if failed */
uint8_t Send_Write_Property_Request( uint8_t Send_Write_Property_Request(
+4 -7
View File
@@ -44,20 +44,17 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#if DEBUG_ENABLED #if DEBUG_ENABLED
void debug_printf( void debug_printf(
const char *format, const char *format,
...); ...);
#else #else
static void debug_printf( static void debug_printf(
const char *format, const char *format,
...) ...) {
{
format = format; format = format;
} }
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif #endif
+7 -7
View File
@@ -60,7 +60,7 @@ typedef struct BACnet_Event_Notification_Data {
uint32_t notificationClass; uint32_t notificationClass;
uint8_t priority; uint8_t priority;
BACNET_EVENT_TYPE eventType; BACNET_EVENT_TYPE eventType;
BACNET_CHARACTER_STRING* messageText; /* OPTIONAL - Set to NULL if not being used */ BACNET_CHARACTER_STRING *messageText; /* OPTIONAL - Set to NULL if not being used */
BACNET_NOTIFY_TYPE notifyType; BACNET_NOTIFY_TYPE notifyType;
bool ackRequired; bool ackRequired;
BACNET_EVENT_STATE fromState; BACNET_EVENT_STATE fromState;
@@ -162,7 +162,7 @@ extern "C" {
** Creates a Confirmed Event Notification APDU ** Creates a Confirmed Event Notification APDU
** **
****************************************************/ ****************************************************/
int cevent_notify_encode_apdu( int cevent_notify_encode_apdu(
uint8_t * apdu, uint8_t * apdu,
uint8_t invoke_id, uint8_t invoke_id,
BACNET_EVENT_NOTIFICATION_DATA * data); BACNET_EVENT_NOTIFICATION_DATA * data);
@@ -172,7 +172,7 @@ int cevent_notify_encode_apdu(
** Creates an Unconfirmed Event Notification APDU ** Creates an Unconfirmed Event Notification APDU
** **
****************************************************/ ****************************************************/
int uevent_notify_encode_apdu( int uevent_notify_encode_apdu(
uint8_t * apdu, uint8_t * apdu,
BACNET_EVENT_NOTIFICATION_DATA * data); BACNET_EVENT_NOTIFICATION_DATA * data);
@@ -181,7 +181,7 @@ int uevent_notify_encode_apdu(
** Encodes the service data part of Event Notification ** Encodes the service data part of Event Notification
** **
****************************************************/ ****************************************************/
int event_notify_encode_service_request( int event_notify_encode_service_request(
uint8_t * apdu, uint8_t * apdu,
BACNET_EVENT_NOTIFICATION_DATA * data); BACNET_EVENT_NOTIFICATION_DATA * data);
@@ -190,7 +190,7 @@ int event_notify_encode_service_request(
** Decodes the service data part of Event Notification ** Decodes the service data part of Event Notification
** **
****************************************************/ ****************************************************/
int event_notify_decode_service_request( int event_notify_decode_service_request(
uint8_t * apdu, uint8_t * apdu,
unsigned apdu_len, unsigned apdu_len,
BACNET_EVENT_NOTIFICATION_DATA * data); BACNET_EVENT_NOTIFICATION_DATA * data);
@@ -200,10 +200,10 @@ int event_notify_decode_service_request(
** Sends an Unconfirmed Event Notifcation to a dest ** Sends an Unconfirmed Event Notifcation to a dest
** **
****************************************************/ ****************************************************/
int uevent_notify_send( int uevent_notify_send(
uint8_t * buffer, uint8_t * buffer,
BACNET_EVENT_NOTIFICATION_DATA * data, BACNET_EVENT_NOTIFICATION_DATA * data,
BACNET_ADDRESS *dest); BACNET_ADDRESS * dest);
#ifdef __cplusplus #ifdef __cplusplus
+3 -3
View File
@@ -47,9 +47,9 @@ extern "C" {
/* copy len bytes from src to offset of dest if there is enough space. */ /* copy len bytes from src to offset of dest if there is enough space. */
/* returns 0 if there is not enough space, or the number of bytes copied. */ /* returns 0 if there is not enough space, or the number of bytes copied. */
size_t memcopy( size_t memcopy(
void * dest, void *dest,
void * src, void *src,
size_t offset, /* where in dest to put the data */ size_t offset, /* where in dest to put the data */
size_t len, /* amount of data to copy */ size_t len, /* amount of data to copy */
size_t max); /* total size of destination */ size_t max); /* total size of destination */
+1 -1
View File
@@ -82,7 +82,7 @@ extern "C" {
uint8_t * apdu, uint8_t * apdu,
size_t max_apdu, size_t max_apdu,
uint8_t invoke_id, uint8_t invoke_id,
BACNET_READ_ACCESS_DATA *read_access_data); BACNET_READ_ACCESS_DATA * read_access_data);
/* decode the object portion of the service request only */ /* decode the object portion of the service request only */
int rpm_decode_object_id( int rpm_decode_object_id(
+2 -4
View File
@@ -60,12 +60,12 @@ extern "C" {
int bacapp_encode_context_timestamp( int bacapp_encode_context_timestamp(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
BACNET_TIMESTAMP * value); BACNET_TIMESTAMP * value);
int bacapp_decode_context_timestamp( int bacapp_decode_context_timestamp(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
BACNET_TIMESTAMP * value); BACNET_TIMESTAMP * value);
@@ -73,6 +73,4 @@ int bacapp_decode_context_timestamp(
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif #endif
+4 -3
View File
@@ -8,11 +8,12 @@
*/ */
#ifdef BUILD_DLL #ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport) #define DLL_EXPORT __declspec(dllexport)
#else #else
#define DLL_EXPORT __declspec(dllimport) #define DLL_EXPORT __declspec(dllimport)
#endif #endif
void DLL_EXPORT SomeFunction(const LPCSTR sometext); void DLL_EXPORT SomeFunction(
const LPCSTR sometext);
#endif // __MAIN_H__ #endif // __MAIN_H__
-1
View File
@@ -328,4 +328,3 @@ int Device_Encode_Property_APDU(
return apdu_len; return apdu_len;
} }
+19 -14
View File
@@ -105,8 +105,7 @@ static struct mstp_flag_t {
} MSTP_Flag; } MSTP_Flag;
/* data passed to receive handler */ /* data passed to receive handler */
struct mstp_packet_info_t struct mstp_packet_info_t {
{
/* A Boolean flag set to TRUE by the Receive State Machine */ /* A Boolean flag set to TRUE by the Receive State Machine */
/* if a valid frame is received. */ /* if a valid frame is received. */
unsigned valid_frame:1; unsigned valid_frame:1;
@@ -286,7 +285,9 @@ static void MSTP_Send_Frame(
#if 0 #if 0
/* return true if the packet is good. */ /* return true if the packet is good. */
/* note: buffer should include the CRC as the last byte */ /* note: buffer should include the CRC as the last byte */
static bool crc_header_good(uint8_t *buffer, uint8_t len) static bool crc_header_good(
uint8_t * buffer,
uint8_t len)
{ {
uint8_t i; /* loop counter */ uint8_t i; /* loop counter */
uint8_t crc8 = 0xFF; /* loop counter */ uint8_t crc8 = 0xFF; /* loop counter */
@@ -299,7 +300,8 @@ static bool crc_header_good(uint8_t *buffer, uint8_t len)
} }
static void mstp_receive_handler(void) static void mstp_receive_handler(
void)
{ {
uint8_t data_register = 0; /* data from UART */ uint8_t data_register = 0; /* data from UART */
@@ -327,13 +329,15 @@ static void mstp_receive_handler(void)
return; return;
} }
if (DataLength == 0) { if (DataLength == 0) {
MSTP_Receive_Packet.header[MSTP_Receive_Packet.index] = data_register; MSTP_Receive_Packet.header[MSTP_Receive_Packet.index] =
data_register;
if (MSTP_Receive_Packet.index == 5) { if (MSTP_Receive_Packet.index == 5) {
if (crc_header_good(MSTP_Receive_Packet.header, 6)) { if (crc_header_good(MSTP_Receive_Packet.header, 6)) {
FrameType = MSTP_Receive_Packet.header[0]; FrameType = MSTP_Receive_Packet.header[0];
DestinationAddress = MSTP_Receive_Packet.header[1]; DestinationAddress = MSTP_Receive_Packet.header[1];
SourceAddress = MSTP_Receive_Packet.header[2]; SourceAddress = MSTP_Receive_Packet.header[2];
DataLength = (MSTP_Receive_Packet.header[3] * 256) + DataLength =
(MSTP_Receive_Packet.header[3] * 256) +
MSTP_Receive_Packet.header[4]; MSTP_Receive_Packet.header[4];
if (DataLength == 0) { if (DataLength == 0) {
MSTP_Receive_Packet.valid_frame = true; MSTP_Receive_Packet.valid_frame = true;
@@ -347,11 +351,12 @@ static void mstp_receive_handler(void)
} }
} }
} else { } else {
MSTP_Receive_Packet.buffer[MSTP_Receive_Packet.index] = data_register; MSTP_Receive_Packet.buffer[MSTP_Receive_Packet.index] =
data_register;
if (packet_info->index == packet_info->len) { if (packet_info->index == packet_info->len) {
/* PDU length ended */ /* PDU length ended */
packet_info->ready = true; packet_info->ready = true;
} else if (packet_info->index >= sizeof(packet_info->buffer)){ } else if (packet_info->index >= sizeof(packet_info->buffer)) {
/* exceeded the size of the storage */ /* exceeded the size of the storage */
packet_info->len = packet_info->index; packet_info->len = packet_info->index;
packet_info->ready = true; packet_info->ready = true;
@@ -361,7 +366,8 @@ static void mstp_receive_handler(void)
MSTP_Receive_Packet.index++; MSTP_Receive_Packet.index++;
if (packet_info->ready) { if (packet_info->ready) {
/* validate the CRC */ /* validate the CRC */
if (!lrc_packet_good(packet_info->buffer,packet_info->len+1)) { if (!lrc_packet_good(packet_info->buffer,
packet_info->len + 1)) {
packet_info->ready = false; packet_info->ready = false;
} }
/* pull off the CRC */ /* pull off the CRC */
@@ -616,9 +622,8 @@ static void MSTP_Slave_Node_FSM(
MSTP_Flag.ReceivePacketPending = true; MSTP_Flag.ReceivePacketPending = true;
break; break;
case FRAME_TYPE_TEST_REQUEST: case FRAME_TYPE_TEST_REQUEST:
MSTP_Send_Frame(FRAME_TYPE_TEST_RESPONSE, MSTP_Send_Frame(FRAME_TYPE_TEST_RESPONSE, SourceAddress,
SourceAddress, This_Station, &InputBuffer[0], This_Station, &InputBuffer[0], DataLength);
DataLength);
break; break;
case FRAME_TYPE_TEST_RESPONSE: case FRAME_TYPE_TEST_RESPONSE:
default: default:
@@ -634,8 +639,8 @@ static void MSTP_Slave_Node_FSM(
/* and enter the IDLE state to wait for the next frame. */ /* and enter the IDLE state to wait for the next frame. */
/* Note: optimized such that we are never a client */ /* Note: optimized such that we are never a client */
MSTP_Send_Frame(FRAME_TYPE_BACNET_DATA_NOT_EXPECTING_REPLY, MSTP_Send_Frame(FRAME_TYPE_BACNET_DATA_NOT_EXPECTING_REPLY,
TransmitPacketDest, This_Station, TransmitPacketDest, This_Station, (uint8_t *) & TransmitPacket[0],
(uint8_t *) & TransmitPacket[0], TransmitPacketLen); TransmitPacketLen);
MSTP_Flag.TransmitPacketPending = false; MSTP_Flag.TransmitPacketPending = false;
MSTP_Flag.ReceivePacketPending = false; MSTP_Flag.ReceivePacketPending = false;
} }
+18 -18
View File
@@ -36,24 +36,24 @@
/* This file has been customized for use with ATMEGA168 */ /* This file has been customized for use with ATMEGA168 */
#if defined(__AVR_ATmega168__) #if defined(__AVR_ATmega168__)
/* USART defines for RS-485 port */ /* USART defines for RS-485 port */
#define UCSRB UCSR0B #define UCSRB UCSR0B
#define TXEN TXEN0 #define TXEN TXEN0
#define RXEN RXEN0 #define RXEN RXEN0
#define UCSRC UCSR0C #define UCSRC UCSR0C
#define UCSZ1 UCSZ01 #define UCSZ1 UCSZ01
#define UCSZ0 UCSZ00 #define UCSZ0 UCSZ00
#define UCSRA UCSR0A #define UCSRA UCSR0A
#define U2X U2X0 #define U2X U2X0
#define UBRRL UBRR0 #define UBRRL UBRR0
#define UCSRA UCSR0A #define UCSRA UCSR0A
#define UDRE UDRE0 #define UDRE UDRE0
#define UDR UDR0 #define UDR UDR0
#define TXC TXC0 #define TXC TXC0
#define FE FE0 #define FE FE0
#define DOR DOR0 #define DOR DOR0
#define UPE UPE0 #define UPE UPE0
#define DOR DOR0 #define DOR DOR0
#define RXC RXC0 #define RXC RXC0
#endif #endif
#include "hardware.h" #include "hardware.h"
+2 -1
View File
@@ -98,7 +98,8 @@ bool timer_silence_elapsed(
return status; return status;
} }
void timer_silence_reset(void) void timer_silence_reset(
void)
{ {
uint8_t sreg; uint8_t sreg;
+1 -1
View File
@@ -205,7 +205,7 @@ static void snap_received_packet(
mtu[30] = mstp_port->HeaderCRCActual; mtu[30] = mstp_port->HeaderCRCActual;
mtu_len = 31; mtu_len = 31;
if (mstp_port->DataLength) { if (mstp_port->DataLength) {
max_data = min(mstp_port->InputBufferSize,mstp_port->DataLength); max_data = min(mstp_port->InputBufferSize, mstp_port->DataLength);
for (i = 0; i < max_data; i++) { for (i = 0; i < max_data; i++) {
mtu[31 + i] = mstp_port->InputBuffer[i]; mtu[31 + i] = mstp_port->InputBuffer[i];
} }
+2 -2
View File
@@ -217,8 +217,8 @@ static void write_received_packet(
fwrite(header, sizeof(header), 1, pFile); fwrite(header, sizeof(header), 1, pFile);
if (mstp_port->DataLength) { if (mstp_port->DataLength) {
fwrite(mstp_port->InputBuffer, max_data, 1, pFile); fwrite(mstp_port->InputBuffer, max_data, 1, pFile);
fwrite((char *)&(mstp_port->DataCRCActualMSB), 1, 1, pFile); fwrite((char *) &(mstp_port->DataCRCActualMSB), 1, 1, pFile);
fwrite((char *)&(mstp_port->DataCRCActualLSB), 1, 1, pFile); fwrite((char *) &(mstp_port->DataCRCActualLSB), 1, 1, pFile);
} }
} else { } else {
fprintf(stderr, "rx_fsm: failed to open %s: %s\n", Capture_Filename, fprintf(stderr, "rx_fsm: failed to open %s: %s\n", Capture_Filename,
+1 -1
View File
@@ -381,7 +381,7 @@ bool bip_init(
bip_set_socket(-1); bip_set_socket(-1);
return false; return false;
} }
/* Enables transmission and receipt of broadcast messages on the socket.*/ /* Enables transmission and receipt of broadcast messages on the socket. */
rv = setsockopt(sock_fd, SOL_SOCKET, SO_BROADCAST, (char *) &value, rv = setsockopt(sock_fd, SOL_SOCKET, SO_BROADCAST, (char *) &value,
sizeof(value)); sizeof(value));
if (rv < 0) { if (rv < 0) {
+5 -6
View File
@@ -294,14 +294,13 @@ static void Init_DataLink(
#endif #endif
} }
int main( int main(int argc, char *argv[]) {
int argc, BACNET_ADDRESS src = {
char *argv[]) 0}; /* address where message came from */
{
BACNET_ADDRESS src = { 0 }; /* address where message came from */
uint16_t pdu_len = 0; uint16_t pdu_len = 0;
unsigned timeout = 100; /* milliseconds */ unsigned timeout = 100; /* milliseconds */
BACNET_ADDRESS my_address, broadcast_address; BACNET_ADDRESS my_address,
broadcast_address;
(void) argc; (void) argc;
(void) argv; (void) argv;
+1 -1
View File
@@ -245,7 +245,7 @@ static void write_received_packet(
fwrite(&ts_sec, sizeof(ts_sec), 1, pFile); fwrite(&ts_sec, sizeof(ts_sec), 1, pFile);
fwrite(&ts_usec, sizeof(ts_usec), 1, pFile); fwrite(&ts_usec, sizeof(ts_usec), 1, pFile);
if (mstp_port->DataLength) { if (mstp_port->DataLength) {
max_data = min(mstp_port->InputBufferSize,mstp_port->DataLength); max_data = min(mstp_port->InputBufferSize, mstp_port->DataLength);
incl_len = orig_len = 8 + max_data + 2; incl_len = orig_len = 8 + max_data + 2;
} else { } else {
incl_len = orig_len = 8; incl_len = orig_len = 8;
+91 -113
View File
@@ -303,7 +303,7 @@ int encode_closing_tag(
static bool decode_is_extended_tag_number( static bool decode_is_extended_tag_number(
uint8_t * apdu) uint8_t * apdu)
{ {
return (bool)((apdu[0] & 0xF0) == 0xF0); return (bool) ((apdu[0] & 0xF0) == 0xF0);
} }
/* from clause 20.2.1.3.2 Constructed Data */ /* from clause 20.2.1.3.2 Constructed Data */
@@ -311,7 +311,7 @@ static bool decode_is_extended_tag_number(
static bool decode_is_extended_value( static bool decode_is_extended_value(
uint8_t * apdu) uint8_t * apdu)
{ {
return (bool)((apdu[0] & 0x07) == 5); return (bool) ((apdu[0] & 0x07) == 5);
} }
/* from clause 20.2.1.3.2 Constructed Data */ /* from clause 20.2.1.3.2 Constructed Data */
@@ -319,7 +319,7 @@ static bool decode_is_extended_value(
bool decode_is_context_specific( bool decode_is_context_specific(
uint8_t * apdu) uint8_t * apdu)
{ {
return (bool)((apdu[0] & BIT3) == BIT3); return (bool) ((apdu[0] & BIT3) == BIT3);
} }
int decode_tag_number( int decode_tag_number(
@@ -337,7 +337,7 @@ int decode_tag_number(
len++; len++;
} else { } else {
if (tag_number) { if (tag_number) {
*tag_number = (uint8_t)(apdu[0] >> 4); *tag_number = (uint8_t) (apdu[0] >> 4);
} }
} }
@@ -347,7 +347,7 @@ int decode_tag_number(
bool decode_is_opening_tag( bool decode_is_opening_tag(
uint8_t * apdu) uint8_t * apdu)
{ {
return (bool)((apdu[0] & 0x07) == 6); return (bool) ((apdu[0] & 0x07) == 6);
} }
/* from clause 20.2.1.3.2 Constructed Data */ /* from clause 20.2.1.3.2 Constructed Data */
@@ -355,7 +355,7 @@ bool decode_is_opening_tag(
bool decode_is_closing_tag( bool decode_is_closing_tag(
uint8_t * apdu) uint8_t * apdu)
{ {
return (bool)((apdu[0] & 0x07) == 7); return (bool) ((apdu[0] & 0x07) == 7);
} }
/* from clause 20.2.1.3.2 Constructed Data */ /* from clause 20.2.1.3.2 Constructed Data */
@@ -420,13 +420,13 @@ bool decode_is_context_tag(
context_specific = decode_is_context_specific(apdu); context_specific = decode_is_context_specific(apdu);
decode_tag_number(apdu, &my_tag_number); decode_tag_number(apdu, &my_tag_number);
return (bool)(context_specific && (my_tag_number == tag_number)); return (bool) (context_specific && (my_tag_number == tag_number));
} }
bool decode_is_context_tag_with_length( bool decode_is_context_tag_with_length(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
int * tag_length) int *tag_length)
{ {
uint8_t my_tag_number = 0; uint8_t my_tag_number = 0;
bool context_specific = false; bool context_specific = false;
@@ -435,7 +435,7 @@ bool decode_is_context_tag_with_length(
context_specific = decode_is_context_specific(apdu); context_specific = decode_is_context_specific(apdu);
*tag_length = decode_tag_number(apdu, &my_tag_number); *tag_length = decode_tag_number(apdu, &my_tag_number);
return (bool)(context_specific && (my_tag_number == tag_number)); return (bool) (context_specific && (my_tag_number == tag_number));
} }
/* from clause 20.2.1.3.2 Constructed Data */ /* from clause 20.2.1.3.2 Constructed Data */
@@ -447,10 +447,10 @@ bool decode_is_opening_tag_number(
uint8_t my_tag_number = 0; uint8_t my_tag_number = 0;
bool opening_tag = false; bool opening_tag = false;
opening_tag = (bool)((apdu[0] & 0x07) == 6); opening_tag = (bool) ((apdu[0] & 0x07) == 6);
decode_tag_number(apdu, &my_tag_number); decode_tag_number(apdu, &my_tag_number);
return (bool)(opening_tag && (my_tag_number == tag_number)); return (bool) (opening_tag && (my_tag_number == tag_number));
} }
/* from clause 20.2.1.3.2 Constructed Data */ /* from clause 20.2.1.3.2 Constructed Data */
@@ -462,10 +462,10 @@ bool decode_is_closing_tag_number(
uint8_t my_tag_number = 0; uint8_t my_tag_number = 0;
bool closing_tag = false; bool closing_tag = false;
closing_tag = (bool)((apdu[0] & 0x07) == 7); closing_tag = (bool) ((apdu[0] & 0x07) == 7);
decode_tag_number(apdu, &my_tag_number); decode_tag_number(apdu, &my_tag_number);
return (bool)(closing_tag && (my_tag_number == tag_number)); return (bool) (closing_tag && (my_tag_number == tag_number));
} }
/* from clause 20.2.3 Encoding of a Boolean Value */ /* from clause 20.2.3 Encoding of a Boolean Value */
@@ -496,7 +496,7 @@ int encode_context_boolean(
int len = 0; /* return value */ int len = 0; /* return value */
len = encode_tag(&apdu[0], (uint8_t) tag_number, true, 1); len = encode_tag(&apdu[0], (uint8_t) tag_number, true, 1);
apdu[len] = (bool)(boolean_value ? 1 : 0); apdu[len] = (bool) (boolean_value ? 1 : 0);
len++; len++;
return len; return len;
@@ -517,21 +517,17 @@ bool decode_context_boolean(
int decode_context_boolean2( int decode_context_boolean2(
uint8_t * apdu, uint8_t * apdu,
uint8_t tag_number, uint8_t tag_number,
bool *boolean_value) bool * boolean_value)
{ {
int len = 0; int len = 0;
if (decode_is_context_tag_with_length(&apdu[len], tag_number, &len)) { if (decode_is_context_tag_with_length(&apdu[len], tag_number, &len)) {
if (apdu[len]) { if (apdu[len]) {
*boolean_value = true; *boolean_value = true;
} } else {
else
{
*boolean_value = false; *boolean_value = false;
} }
len++; len++;
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -624,7 +620,7 @@ int decode_bitstring(
bitstring_set_octet(bit_string, (uint8_t) i, bitstring_set_octet(bit_string, (uint8_t) i,
byte_reverse_bits(apdu[len++])); byte_reverse_bits(apdu[len++]));
} }
unused_bits = (uint8_t)(apdu[0] & 0x07); unused_bits = (uint8_t) (apdu[0] & 0x07);
bitstring_set_bits_used(bit_string, (uint8_t) bytes_used, bitstring_set_bits_used(bit_string, (uint8_t) bytes_used,
unused_bits); unused_bits);
} }
@@ -642,12 +638,10 @@ int decode_context_bitstring(
int len = 0; int len = 0;
if (decode_is_context_tag(&apdu[len], tag_number)) { if (decode_is_context_tag(&apdu[len], tag_number)) {
len += decode_tag_number_and_value(&apdu[len], &tag_number, len +=
&len_value); decode_tag_number_and_value(&apdu[len], &tag_number, &len_value);
len += decode_bitstring(&apdu[len], len_value, bit_string); len += decode_bitstring(&apdu[len], len_value, bit_string);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -671,9 +665,10 @@ int encode_bitstring(
} else { } else {
used_bytes = bitstring_bytes_used(bit_string); used_bytes = bitstring_bytes_used(bit_string);
remaining_used_bits = remaining_used_bits =
(uint8_t)(bitstring_bits_used(bit_string) - ((used_bytes - 1) * 8)); (uint8_t) (bitstring_bits_used(bit_string) - ((used_bytes -
1) * 8));
/* number of unused bits in the subsequent final octet */ /* number of unused bits in the subsequent final octet */
apdu[len++] = (uint8_t)(8 - remaining_used_bits); apdu[len++] = (uint8_t) (8 - remaining_used_bits);
for (i = 0; i < used_bytes; i++) { for (i = 0; i < used_bytes; i++) {
apdu[len++] = byte_reverse_bits(bitstring_octet(bit_string, i)); apdu[len++] = byte_reverse_bits(bitstring_octet(bit_string, i));
} }
@@ -721,14 +716,15 @@ int encode_context_bitstring(
/* returns the number of apdu bytes consumed */ /* returns the number of apdu bytes consumed */
int decode_object_id( int decode_object_id(
uint8_t * apdu, uint8_t * apdu,
uint16_t *object_type, uint16_t * object_type,
uint32_t * instance) uint32_t * instance)
{ {
uint32_t value = 0; uint32_t value = 0;
int len = 0; int len = 0;
len = decode_unsigned32(apdu, &value); len = decode_unsigned32(apdu, &value);
*object_type = (uint16_t)(((value >> BACNET_INSTANCE_BITS) & BACNET_MAX_OBJECT)); *object_type =
(uint16_t) (((value >> BACNET_INSTANCE_BITS) & BACNET_MAX_OBJECT));
*instance = (value & BACNET_MAX_INSTANCE); *instance = (value & BACNET_MAX_INSTANCE);
return len; return len;
@@ -744,9 +740,7 @@ int decode_context_object_id(
if (decode_is_context_tag_with_length(&apdu[len], tag_number, &len)) { if (decode_is_context_tag_with_length(&apdu[len], tag_number, &len)) {
len += decode_object_id(&apdu[len], object_type, instance); len += decode_object_id(&apdu[len], object_type, instance);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -912,19 +906,16 @@ int decode_context_octet_string(
bool status = false; bool status = false;
uint32_t len_value = 0; uint32_t len_value = 0;
if (decode_is_context_tag(&apdu[len], tag_number)) if (decode_is_context_tag(&apdu[len], tag_number)) {
{ len +=
len += decode_tag_number_and_value(&apdu[len], &tag_number, decode_tag_number_and_value(&apdu[len], &tag_number, &len_value);
&len_value);
status = octetstring_init(octet_string, &apdu[len], len_value); status = octetstring_init(octet_string, &apdu[len], len_value);
if (status) { if (status) {
len += len_value; len += len_value;
} }
} } else {
else
{
len = -1; len = -1;
} }
@@ -1022,20 +1013,17 @@ int decode_context_character_string(
bool status = false; bool status = false;
uint32_t len_value = 0; uint32_t len_value = 0;
if (decode_is_context_tag(&apdu[len], tag_number)) if (decode_is_context_tag(&apdu[len], tag_number)) {
{ len +=
len += decode_tag_number_and_value(&apdu[len], &tag_number, decode_tag_number_and_value(&apdu[len], &tag_number, &len_value);
&len_value);
status = status =
characterstring_init(char_string, apdu[len], (char *) &apdu[len+1], characterstring_init(char_string, apdu[len],
len_value - 1); (char *) &apdu[len + 1], len_value - 1);
if (status) { if (status) {
len += len_value; len += len_value;
} }
} } else {
else
{
len = -1; len = -1;
} }
@@ -1085,12 +1073,10 @@ int decode_context_unsigned(
int len = 0; int len = 0;
if (decode_is_context_tag(&apdu[len], tag_number)) { if (decode_is_context_tag(&apdu[len], tag_number)) {
len += decode_tag_number_and_value(&apdu[len], &tag_number, len +=
&len_value); decode_tag_number_and_value(&apdu[len], &tag_number, &len_value);
len += decode_unsigned(&apdu[len], len_value, value); len += decode_unsigned(&apdu[len], len_value, value);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -1186,12 +1172,10 @@ int decode_context_enumerated(
uint32_t len_value; uint32_t len_value;
if (decode_is_context_tag(&apdu[len], tag_value)) { if (decode_is_context_tag(&apdu[len], tag_value)) {
len += decode_tag_number_and_value(&apdu[len], &tag_number, len +=
&len_value); decode_tag_number_and_value(&apdu[len], &tag_number, &len_value);
len += decode_enumerated(&apdu[len], len_value, value); len += decode_enumerated(&apdu[len], len_value, value);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -1285,12 +1269,10 @@ int decode_context_signed(
int len = 0; int len = 0;
if (decode_is_context_tag(&apdu[len], tag_number)) { if (decode_is_context_tag(&apdu[len], tag_number)) {
len += decode_tag_number_and_value(&apdu[len], &tag_number, len +=
&len_value); decode_tag_number_and_value(&apdu[len], &tag_number, &len_value);
len += decode_signed(&apdu[len], len_value, value); len += decode_signed(&apdu[len], len_value, value);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -1504,13 +1486,10 @@ int decode_application_time(
uint8_t tag_number; uint8_t tag_number;
decode_tag_number(&apdu[len], &tag_number); decode_tag_number(&apdu[len], &tag_number);
if ( tag_number == BACNET_APPLICATION_TAG_TIME ) if (tag_number == BACNET_APPLICATION_TAG_TIME) {
{
len++; len++;
len += decode_bacnet_time(&apdu[len], btime); len += decode_bacnet_time(&apdu[len], btime);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -1526,9 +1505,7 @@ int decode_context_bacnet_time(
if (decode_is_context_tag_with_length(&apdu[len], tag_number, &len)) { if (decode_is_context_tag_with_length(&apdu[len], tag_number, &len)) {
len += decode_bacnet_time(&apdu[len], btime); len += decode_bacnet_time(&apdu[len], btime);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -1550,15 +1527,11 @@ int encode_bacnet_date(
{ {
/* allow 2 digit years */ /* allow 2 digit years */
if (bdate->year >= 1900) { if (bdate->year >= 1900) {
apdu[0] = (uint8_t)(bdate->year - 1900); apdu[0] = (uint8_t) (bdate->year - 1900);
} } else if (bdate->year < 0x100) {
else if ( bdate->year < 0x100 ) apdu[0] = (uint8_t) bdate->year;
{
apdu[0] = (uint8_t)bdate->year;
} } else {
else
{
/* /*
** Don't try and guess what the user meant here. Just fail ** Don't try and guess what the user meant here. Just fail
*/ */
@@ -1617,7 +1590,7 @@ int decode_date(
uint8_t * apdu, uint8_t * apdu,
BACNET_DATE * bdate) BACNET_DATE * bdate)
{ {
bdate->year = (uint16_t)(apdu[0] + 1900); bdate->year = (uint16_t) (apdu[0] + 1900);
bdate->month = apdu[1]; bdate->month = apdu[1];
bdate->day = apdu[2]; bdate->day = apdu[2];
bdate->wday = apdu[3]; bdate->wday = apdu[3];
@@ -1633,13 +1606,10 @@ int decode_application_date(
uint8_t tag_number; uint8_t tag_number;
decode_tag_number(&apdu[len], &tag_number); decode_tag_number(&apdu[len], &tag_number);
if ( tag_number == BACNET_APPLICATION_TAG_DATE ) if (tag_number == BACNET_APPLICATION_TAG_DATE) {
{
len++; len++;
len += decode_date(&apdu[len], bdate); len += decode_date(&apdu[len], bdate);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -1654,9 +1624,7 @@ int decode_context_date(
if (decode_is_context_tag_with_length(&apdu[len], tag_number, &len)) { if (decode_is_context_tag_with_length(&apdu[len], tag_number, &len)) {
len += decode_date(&apdu[len], bdate); len += decode_date(&apdu[len], bdate);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -2203,7 +2171,7 @@ void testBACDCodeObject(
uint32_t decoded_instance = 0; uint32_t decoded_instance = 0;
encode_bacnet_object_id(&encoded_array[0], type, instance); encode_bacnet_object_id(&encoded_array[0], type, instance);
decode_object_id(&encoded_array[0], (uint16_t *) &decoded_type, decode_object_id(&encoded_array[0], (uint16_t *) & decoded_type,
&decoded_instance); &decoded_instance);
ct_test(pTest, decoded_type == type); ct_test(pTest, decoded_type == type);
ct_test(pTest, decoded_instance == instance); ct_test(pTest, decoded_instance == instance);
@@ -2213,7 +2181,7 @@ void testBACDCodeObject(
for (type = 0; type < 1024; type++) { for (type = 0; type < 1024; type++) {
for (instance = 0; instance <= BACNET_MAX_INSTANCE; instance += 1024) { for (instance = 0; instance <= BACNET_MAX_INSTANCE; instance += 1024) {
encode_bacnet_object_id(&encoded_array[0], type, instance); encode_bacnet_object_id(&encoded_array[0], type, instance);
decode_object_id(&encoded_array[0], (uint16_t *) &decoded_type, decode_object_id(&encoded_array[0], (uint16_t *) & decoded_type,
&decoded_instance); &decoded_instance);
ct_test(pTest, decoded_type == type); ct_test(pTest, decoded_type == type);
ct_test(pTest, decoded_instance == instance); ct_test(pTest, decoded_instance == instance);
@@ -2293,7 +2261,8 @@ void testBACDCodeBitString(
} }
} }
void testUnsignedContextDecodes(Test * pTest) void testUnsignedContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2347,7 +2316,8 @@ void testUnsignedContextDecodes(Test * pTest)
ct_test(pTest, in == out); ct_test(pTest, in == out);
} }
void testSignedContextDecodes(Test * pTest) void testSignedContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2401,7 +2371,8 @@ void testSignedContextDecodes(Test * pTest)
ct_test(pTest, in == out); ct_test(pTest, in == out);
} }
void testEnumeratedContextDecodes(Test * pTest) void testEnumeratedContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2455,7 +2426,8 @@ void testEnumeratedContextDecodes(Test * pTest)
ct_test(pTest, in == out); ct_test(pTest, in == out);
} }
void testFloatContextDecodes(Test * pTest) void testFloatContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2485,7 +2457,8 @@ void testFloatContextDecodes(Test * pTest)
ct_test(pTest, in == out); ct_test(pTest, in == out);
} }
void testObjectIDContextDecodes(Test * pTest) void testObjectIDContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2513,7 +2486,8 @@ void testObjectIDContextDecodes(Test * pTest)
} }
void testCharacterStringContextDecodes(Test * pTest) void testCharacterStringContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2526,8 +2500,8 @@ void testCharacterStringContextDecodes(Test * pTest)
characterstring_init_ansi(&in, "This is a test"); characterstring_init_ansi(&in, "This is a test");
inLen = encode_context_character_string(apdu, 10, &in); inLen = encode_context_character_string(apdu, 10, &in);
outLen= decode_context_character_string(apdu, 10, &out); outLen = decode_context_character_string(apdu, 10, &out);
outLen2= decode_context_character_string(apdu, 9, &out); outLen2 = decode_context_character_string(apdu, 9, &out);
ct_test(pTest, outLen2 == -1); ct_test(pTest, outLen2 == -1);
ct_test(pTest, inLen == outLen); ct_test(pTest, inLen == outLen);
@@ -2536,7 +2510,8 @@ void testCharacterStringContextDecodes(Test * pTest)
ct_test(pTest, strcmp(in.value, out.value) == 0); ct_test(pTest, strcmp(in.value, out.value) == 0);
} }
void testBitStringContextDecodes(Test * pTest) void testBitStringContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2555,8 +2530,8 @@ void testBitStringContextDecodes(Test * pTest)
bitstring_set_bit(&in, 12, false); bitstring_set_bit(&in, 12, false);
inLen = encode_context_bitstring(apdu, 10, &in); inLen = encode_context_bitstring(apdu, 10, &in);
outLen= decode_context_bitstring(apdu, 10, &out); outLen = decode_context_bitstring(apdu, 10, &out);
outLen2= decode_context_bitstring(apdu, 9, &out); outLen2 = decode_context_bitstring(apdu, 9, &out);
ct_test(pTest, outLen2 == -1); ct_test(pTest, outLen2 == -1);
ct_test(pTest, inLen == outLen); ct_test(pTest, inLen == outLen);
@@ -2565,7 +2540,8 @@ void testBitStringContextDecodes(Test * pTest)
} }
void testOctetStringContextDecodes(Test * pTest) void testOctetStringContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2575,13 +2551,13 @@ void testOctetStringContextDecodes(Test * pTest)
BACNET_OCTET_STRING in; BACNET_OCTET_STRING in;
BACNET_OCTET_STRING out; BACNET_OCTET_STRING out;
uint8_t initData[] = {0xde,0xad,0xbe,0xef}; uint8_t initData[] = { 0xde, 0xad, 0xbe, 0xef };
octetstring_init(&in, initData, sizeof(initData)); octetstring_init(&in, initData, sizeof(initData));
inLen = encode_context_octet_string(apdu, 10, &in); inLen = encode_context_octet_string(apdu, 10, &in);
outLen= decode_context_octet_string(apdu, 10, &out); outLen = decode_context_octet_string(apdu, 10, &out);
outLen2= decode_context_octet_string(apdu, 9, &out); outLen2 = decode_context_octet_string(apdu, 9, &out);
ct_test(pTest, outLen2 == -1); ct_test(pTest, outLen2 == -1);
ct_test(pTest, inLen == outLen); ct_test(pTest, inLen == outLen);
@@ -2589,7 +2565,8 @@ void testOctetStringContextDecodes(Test * pTest)
ct_test(pTest, octetstring_value_same(&in, &out)); ct_test(pTest, octetstring_value_same(&in, &out));
} }
void testTimeContextDecodes(Test * pTest) void testTimeContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2605,8 +2582,8 @@ void testTimeContextDecodes(Test * pTest)
in.sec = 40; in.sec = 40;
inLen = encode_context_time(apdu, 10, &in); inLen = encode_context_time(apdu, 10, &in);
outLen= decode_context_bacnet_time(apdu, 10, &out); outLen = decode_context_bacnet_time(apdu, 10, &out);
outLen2= decode_context_bacnet_time(apdu, 9, &out); outLen2 = decode_context_bacnet_time(apdu, 9, &out);
ct_test(pTest, outLen2 == -1); ct_test(pTest, outLen2 == -1);
ct_test(pTest, inLen == outLen); ct_test(pTest, inLen == outLen);
@@ -2616,7 +2593,8 @@ void testTimeContextDecodes(Test * pTest)
ct_test(pTest, in.sec == out.sec); ct_test(pTest, in.sec == out.sec);
} }
void testDateContextDecodes(Test * pTest) void testDateContextDecodes(
Test * pTest)
{ {
uint8_t apdu[MAX_APDU]; uint8_t apdu[MAX_APDU];
int inLen; int inLen;
@@ -2632,8 +2610,8 @@ void testDateContextDecodes(Test * pTest)
in.year = 1945; in.year = 1945;
inLen = encode_context_date(apdu, 10, &in); inLen = encode_context_date(apdu, 10, &in);
outLen= decode_context_date(apdu, 10, &out); outLen = decode_context_date(apdu, 10, &out);
outLen2= decode_context_date(apdu, 9, &out); outLen2 = decode_context_date(apdu, 9, &out);
ct_test(pTest, outLen2 == -1); ct_test(pTest, outLen2 == -1);
ct_test(pTest, inLen == outLen); ct_test(pTest, inLen == outLen);
+42 -50
View File
@@ -67,24 +67,23 @@ int bacapp_encode_device_obj_property_ref(
int len; int len;
int apdu_len = 0; int apdu_len = 0;
len = encode_context_object_id(&apdu[apdu_len], 0, len =
value->objectIdentifier.type, encode_context_object_id(&apdu[apdu_len], 0,
value->objectIdentifier.instance); value->objectIdentifier.type, value->objectIdentifier.instance);
apdu_len += len; apdu_len += len;
len = encode_context_enumerated(&apdu[apdu_len], 1, len =
encode_context_enumerated(&apdu[apdu_len], 1,
value->propertyIdentifier); value->propertyIdentifier);
apdu_len += len; apdu_len += len;
if ( value->arrayIndex > 0 ) if (value->arrayIndex > 0) {
{ len = encode_context_unsigned(&apdu[apdu_len], 2, value->arrayIndex);
len = encode_context_unsigned(&apdu[apdu_len], 2,
value->arrayIndex);
apdu_len += len; apdu_len += len;
} }
len = encode_context_object_id(&apdu[apdu_len], 3, len =
value->deviceIndentifier.type, encode_context_object_id(&apdu[apdu_len], 3,
value->deviceIndentifier.instance); value->deviceIndentifier.type, value->deviceIndentifier.instance);
apdu_len += len; apdu_len += len;
return apdu_len; return apdu_len;
@@ -97,47 +96,41 @@ int bacapp_decode_device_obj_property_ref(
int len; int len;
int apdu_len = 0; int apdu_len = 0;
if ( -1 == ( len = decode_context_object_id(&apdu[apdu_len], 0, if (-1 == (len =
decode_context_object_id(&apdu[apdu_len], 0,
&value->objectIdentifier.type, &value->objectIdentifier.type,
&value->objectIdentifier.instance)) ) &value->objectIdentifier.instance))) {
{
return -1; return -1;
} }
apdu_len += len; apdu_len += len;
if ( -1 == ( len = decode_context_enumerated(&apdu[apdu_len], 1, if (-1 == (len =
&value->propertyIdentifier))) decode_context_enumerated(&apdu[apdu_len], 1,
{ &value->propertyIdentifier))) {
return -1; return -1;
} }
apdu_len += len; apdu_len += len;
if ( decode_is_context_tag(&apdu[apdu_len], 2 )) if (decode_is_context_tag(&apdu[apdu_len], 2)) {
{ if (-1 == (len =
if ( -1 == ( len = decode_context_unsigned(&apdu[apdu_len], 2, decode_context_unsigned(&apdu[apdu_len], 2,
&value->arrayIndex))) &value->arrayIndex))) {
{
return -1; return -1;
} }
apdu_len += len; apdu_len += len;
} } else {
else
{
value->arrayIndex = 0; value->arrayIndex = 0;
} }
if ( decode_is_context_tag(&apdu[apdu_len], 3 )) if (decode_is_context_tag(&apdu[apdu_len], 3)) {
{ if (-1 == (len =
if ( -1 == ( len = decode_context_object_id(&apdu[apdu_len], 3, decode_context_object_id(&apdu[apdu_len], 3,
&value->deviceIndentifier.type, &value->deviceIndentifier.type,
&value->deviceIndentifier.instance)) ) &value->deviceIndentifier.instance))) {
{
return -1; return -1;
} }
apdu_len += len; apdu_len += len;
} } else {
else
{
value->deviceIndentifier.instance = 0; value->deviceIndentifier.instance = 0;
value->deviceIndentifier.type = 0; value->deviceIndentifier.type = 0;
} }
@@ -155,27 +148,20 @@ int bacapp_decode_context_device_obj_property_ref(
if (decode_is_opening_tag_number(&apdu[len], tag_number)) { if (decode_is_opening_tag_number(&apdu[len], tag_number)) {
len++; len++;
section_length = bacapp_decode_device_obj_property_ref( section_length =
&apdu[len], value); bacapp_decode_device_obj_property_ref(&apdu[len], value);
if ( section_length == -1 ) if (section_length == -1) {
{
len = -1; len = -1;
} } else {
else
{
len += section_length; len += section_length;
if (decode_is_closing_tag_number(&apdu[len], tag_number)) { if (decode_is_closing_tag_number(&apdu[len], tag_number)) {
len++; len++;
} } else {
else
{
len = -1; len = -1;
} }
} }
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -208,16 +194,22 @@ void testDevIdPropRef(
ct_test(pTest, outLen == inLen); ct_test(pTest, outLen == inLen);
ct_test(pTest, inData.objectIdentifier.instance == outData.objectIdentifier.instance); ct_test(pTest,
ct_test(pTest, inData.objectIdentifier.type == outData.objectIdentifier.type); inData.objectIdentifier.instance == outData.objectIdentifier.instance);
ct_test(pTest,
inData.objectIdentifier.type == outData.objectIdentifier.type);
ct_test(pTest, inData.propertyIdentifier == outData.propertyIdentifier); ct_test(pTest, inData.propertyIdentifier == outData.propertyIdentifier);
ct_test(pTest, inData.arrayIndex == outData.arrayIndex); ct_test(pTest, inData.arrayIndex == outData.arrayIndex);
ct_test(pTest, inData.deviceIndentifier.instance == outData.deviceIndentifier.instance); ct_test(pTest,
ct_test(pTest, inData.deviceIndentifier.type == outData.deviceIndentifier.type); inData.deviceIndentifier.instance ==
outData.deviceIndentifier.instance);
ct_test(pTest,
inData.deviceIndentifier.type == outData.deviceIndentifier.type);
} }
#ifdef TEST_DEV_ID_PROP_REF #ifdef TEST_DEV_ID_PROP_REF
int main( int main(
+101 -72
View File
@@ -50,108 +50,119 @@ int bacapp_decode_property_state(
section_length = section_length =
decode_tag_number_and_value(&apdu[len], (uint8_t*)&value->tag, decode_tag_number_and_value(&apdu[len], (uint8_t *) & value->tag,
&len_value_type); &len_value_type);
if ( -1 == section_length ) if (-1 == section_length) {
{
return -1; return -1;
} }
len += section_length; len += section_length;
switch(value->tag) switch (value->tag) {
{
case BOOLEAN_VALUE: case BOOLEAN_VALUE:
value->state.booleanValue = decode_boolean(len_value_type); value->state.booleanValue = decode_boolean(len_value_type);
break; break;
case BINARY_VALUE: case BINARY_VALUE:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.binaryValue))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.binaryValue))) {
return -1; return -1;
} }
break; break;
case EVENT_TYPE: case EVENT_TYPE:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.eventType))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.eventType))) {
return -1; return -1;
} }
break; break;
case POLARITY: case POLARITY:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.polarity))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.polarity))) {
return -1; return -1;
} }
break; break;
case PROGRAM_CHANGE: case PROGRAM_CHANGE:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.programChange))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.programChange))) {
return -1; return -1;
} }
break; break;
case PROGRAM_STATE: case PROGRAM_STATE:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.programState))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.programState))) {
return -1; return -1;
} }
break; break;
case REASON_FOR_HALT: case REASON_FOR_HALT:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.programError))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.programError))) {
return -1; return -1;
} }
break; break;
case RELIABILITY: case RELIABILITY:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.reliability))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.reliability))) {
return -1; return -1;
} }
break; break;
case STATE: case STATE:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.state))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.state))) {
return -1; return -1;
} }
break; break;
case SYSTEM_STATUS: case SYSTEM_STATUS:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.systemStatus))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.systemStatus))) {
return -1; return -1;
} }
break; break;
case UNITS: case UNITS:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.units))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.units))) {
return -1; return -1;
} }
break; break;
case UNSIGNED_VALUE: case UNSIGNED_VALUE:
if ( -1 == ( section_length = decode_unsigned(&apdu[len], len_value_type, &value->state.unsignedValue))) if (-1 == (section_length =
{ decode_unsigned(&apdu[len], len_value_type,
&value->state.unsignedValue))) {
return -1; return -1;
} }
break; break;
case LIFE_SAFETY_MODE: case LIFE_SAFETY_MODE:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.lifeSafetyMode))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.lifeSafetyMode))) {
return -1; return -1;
} }
break; break;
case LIFE_SAFETY_STATE: case LIFE_SAFETY_STATE:
if ( -1 == ( section_length = decode_enumerated(&apdu[len], len_value_type, &value->state.lifeSafetyState))) if (-1 == (section_length =
{ decode_enumerated(&apdu[len], len_value_type,
&value->state.lifeSafetyState))) {
return -1; return -1;
} }
break; break;
@@ -174,27 +185,19 @@ int bacapp_decode_context_property_state(
if (decode_is_opening_tag_number(&apdu[len], tag_number)) { if (decode_is_opening_tag_number(&apdu[len], tag_number)) {
len++; len++;
section_length = bacapp_decode_property_state( section_length = bacapp_decode_property_state(&apdu[len], value);
&apdu[len], value);
if ( section_length == -1 ) if (section_length == -1) {
{
len = -1; len = -1;
} } else {
else
{
len += section_length; len += section_length;
if (decode_is_closing_tag_number(&apdu[len], tag_number)) { if (decode_is_closing_tag_number(&apdu[len], tag_number)) {
len++; len++;
} } else {
else
{
len = -1; len = -1;
} }
} }
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
@@ -206,62 +209,88 @@ int bacapp_encode_property_state(
{ {
int len = 0; /* length of each encoding */ int len = 0; /* length of each encoding */
if (value && apdu) { if (value && apdu) {
switch(value->tag) switch (value->tag) {
{
case BOOLEAN_VALUE: case BOOLEAN_VALUE:
len = encode_context_boolean(&apdu[0], 0, value->state.booleanValue); len =
encode_context_boolean(&apdu[0], 0,
value->state.booleanValue);
break; break;
case BINARY_VALUE: case BINARY_VALUE:
len = encode_context_enumerated(&apdu[0], 1, value->state.binaryValue); len =
encode_context_enumerated(&apdu[0], 1,
value->state.binaryValue);
break; break;
case EVENT_TYPE: case EVENT_TYPE:
len = encode_context_enumerated(&apdu[0], 2, value->state.eventType); len =
encode_context_enumerated(&apdu[0], 2,
value->state.eventType);
break; break;
case POLARITY: case POLARITY:
len = encode_context_enumerated(&apdu[0], 3, value->state.polarity); len =
encode_context_enumerated(&apdu[0], 3,
value->state.polarity);
break; break;
case PROGRAM_CHANGE: case PROGRAM_CHANGE:
len = encode_context_enumerated(&apdu[0], 4, value->state.programChange); len =
encode_context_enumerated(&apdu[0], 4,
value->state.programChange);
break; break;
case PROGRAM_STATE: case PROGRAM_STATE:
len = encode_context_enumerated(&apdu[0], 5, value->state.programState); len =
encode_context_enumerated(&apdu[0], 5,
value->state.programState);
break; break;
case REASON_FOR_HALT: case REASON_FOR_HALT:
len = encode_context_enumerated(&apdu[0], 6, value->state.programError); len =
encode_context_enumerated(&apdu[0], 6,
value->state.programError);
break; break;
case RELIABILITY: case RELIABILITY:
len = encode_context_enumerated(&apdu[0], 7, value->state.reliability); len =
encode_context_enumerated(&apdu[0], 7,
value->state.reliability);
break; break;
case STATE: case STATE:
len = encode_context_enumerated(&apdu[0], 8, value->state.state); len =
encode_context_enumerated(&apdu[0], 8, value->state.state);
break; break;
case SYSTEM_STATUS: case SYSTEM_STATUS:
len = encode_context_enumerated(&apdu[0], 9, value->state.systemStatus); len =
encode_context_enumerated(&apdu[0], 9,
value->state.systemStatus);
break; break;
case UNITS: case UNITS:
len = encode_context_enumerated(&apdu[0], 10, value->state.units); len =
encode_context_enumerated(&apdu[0], 10,
value->state.units);
break; break;
case UNSIGNED_VALUE: case UNSIGNED_VALUE:
len = encode_context_unsigned(&apdu[0], 11, value->state.unsignedValue); len =
encode_context_unsigned(&apdu[0], 11,
value->state.unsignedValue);
break; break;
case LIFE_SAFETY_MODE: case LIFE_SAFETY_MODE:
len = encode_context_enumerated(&apdu[0], 12, value->state.lifeSafetyMode); len =
encode_context_enumerated(&apdu[0], 12,
value->state.lifeSafetyMode);
break; break;
case LIFE_SAFETY_STATE: case LIFE_SAFETY_STATE:
len = encode_context_enumerated(&apdu[0], 13, value->state.lifeSafetyState); len =
encode_context_enumerated(&apdu[0], 13,
value->state.lifeSafetyState);
break; break;
default: default:
@@ -293,8 +322,8 @@ void testPropStates(
outLen = bacapp_decode_property_state(appMsg, &outData); outLen = bacapp_decode_property_state(appMsg, &outData);
ct_test(pTest, outLen == inLen); ct_test(pTest, outLen == inLen);
ct_test(pTest, inData.tag == outData.tag ); ct_test(pTest, inData.tag == outData.tag);
ct_test(pTest, inData.state.booleanValue == outData.state.booleanValue ); ct_test(pTest, inData.state.booleanValue == outData.state.booleanValue);
/**************** /****************
***************** *****************
@@ -309,8 +338,8 @@ void testPropStates(
outLen = bacapp_decode_property_state(appMsg, &outData); outLen = bacapp_decode_property_state(appMsg, &outData);
ct_test(pTest, outLen == inLen); ct_test(pTest, outLen == inLen);
ct_test(pTest, inData.tag == outData.tag ); ct_test(pTest, inData.tag == outData.tag);
ct_test(pTest, inData.state.binaryValue == outData.state.binaryValue ); ct_test(pTest, inData.state.binaryValue == outData.state.binaryValue);
/**************** /****************
***************** *****************
@@ -325,8 +354,8 @@ void testPropStates(
outLen = bacapp_decode_property_state(appMsg, &outData); outLen = bacapp_decode_property_state(appMsg, &outData);
ct_test(pTest, outLen == inLen); ct_test(pTest, outLen == inLen);
ct_test(pTest, inData.tag == outData.tag ); ct_test(pTest, inData.tag == outData.tag);
ct_test(pTest, inData.state.eventType == outData.state.eventType ); ct_test(pTest, inData.state.eventType == outData.state.eventType);
/**************** /****************
***************** *****************
@@ -341,8 +370,8 @@ void testPropStates(
outLen = bacapp_decode_property_state(appMsg, &outData); outLen = bacapp_decode_property_state(appMsg, &outData);
ct_test(pTest, outLen == inLen); ct_test(pTest, outLen == inLen);
ct_test(pTest, inData.tag == outData.tag ); ct_test(pTest, inData.tag == outData.tag);
ct_test(pTest, inData.state.polarity == outData.state.polarity ); ct_test(pTest, inData.state.polarity == outData.state.polarity);
/**************** /****************
***************** *****************
@@ -357,8 +386,8 @@ void testPropStates(
outLen = bacapp_decode_property_state(appMsg, &outData); outLen = bacapp_decode_property_state(appMsg, &outData);
ct_test(pTest, outLen == inLen); ct_test(pTest, outLen == inLen);
ct_test(pTest, inData.tag == outData.tag ); ct_test(pTest, inData.tag == outData.tag);
ct_test(pTest, inData.state.programChange == outData.state.programChange ); ct_test(pTest, inData.state.programChange == outData.state.programChange);
/**************** /****************
***************** *****************
@@ -373,8 +402,8 @@ void testPropStates(
outLen = bacapp_decode_property_state(appMsg, &outData); outLen = bacapp_decode_property_state(appMsg, &outData);
ct_test(pTest, outLen == inLen); ct_test(pTest, outLen == inLen);
ct_test(pTest, inData.tag == outData.tag ); ct_test(pTest, inData.tag == outData.tag);
ct_test(pTest, inData.state.unsignedValue == outData.state.unsignedValue ); ct_test(pTest, inData.state.unsignedValue == outData.state.unsignedValue);
} }
+4 -5
View File
@@ -85,16 +85,15 @@ int decode_context_real(
int len = 0; int len = 0;
if (decode_is_context_tag(&apdu[len], tag_number)) { if (decode_is_context_tag(&apdu[len], tag_number)) {
len += decode_tag_number_and_value(&apdu[len], &tag_number, len +=
&len_value); decode_tag_number_and_value(&apdu[len], &tag_number, &len_value);
len += decode_real(&apdu[len], real_value); len += decode_real(&apdu[len], real_value);
} } else {
else
{
len = -1; len = -1;
} }
return len; return len;
} }
/* from clause 20.2.6 Encoding of a Real Number Value */ /* from clause 20.2.6 Encoding of a Real Number Value */
/* returns the number of apdu bytes consumed */ /* returns the number of apdu bytes consumed */
int encode_bacnet_real( int encode_bacnet_real(
+12 -22
View File
@@ -75,7 +75,7 @@ static uint8_t month_days(
if ((month == 2) && is_leap_year(year)) if ((month == 2) && is_leap_year(year))
return 29; return 29;
else if (month >= 1 && month <= 12) else if (month >= 1 && month <= 12)
return (uint8_t)month_days[month]; return (uint8_t) month_days[month];
else else
return 0; return 0;
} }
@@ -439,8 +439,7 @@ int bacapp_encode_context_datetime(
int apdu_len = 0; int apdu_len = 0;
if ( apdu && value ) if (apdu && value) {
{
len = encode_opening_tag(&apdu[apdu_len], tag_number); len = encode_opening_tag(&apdu[apdu_len], tag_number);
apdu_len += len; apdu_len += len;
@@ -463,14 +462,14 @@ int bacapp_decode_datetime(
int len = 0; int len = 0;
int section_len; int section_len;
if ( -1 == ( section_len = decode_application_date(&apdu[len], &value->date) ) ) if (-1 == (section_len =
{ decode_application_date(&apdu[len], &value->date))) {
return -1; return -1;
} }
len += section_len; len += section_len;
if ( -1 == ( section_len = decode_application_time(&apdu[len], &value->time) ) ) if (-1 == (section_len =
{ decode_application_time(&apdu[len], &value->time))) {
return -1; return -1;
} }
@@ -489,27 +488,19 @@ int bacapp_decode_context_datetime(
if (decode_is_opening_tag_number(&apdu[apdu_len], tag_number)) { if (decode_is_opening_tag_number(&apdu[apdu_len], tag_number)) {
apdu_len++; apdu_len++;
} } else {
else
{
return -1; return -1;
} }
if ( -1 == (len = bacapp_decode_datetime(&apdu[apdu_len], value))) if (-1 == (len = bacapp_decode_datetime(&apdu[apdu_len], value))) {
{
return -1; return -1;
} } else {
else
{
apdu_len += len; apdu_len += len;
} }
if (decode_is_closing_tag_number(&apdu[apdu_len], tag_number)) if (decode_is_closing_tag_number(&apdu[apdu_len], tag_number)) {
{
apdu_len++; apdu_len++;
} } else {
else
{
return -1; return -1;
} }
return apdu_len; return apdu_len;
@@ -855,7 +846,7 @@ void testDatetimeCodec(
inLen = bacapp_encode_context_datetime(apdu, 10, &datetimeIn); inLen = bacapp_encode_context_datetime(apdu, 10, &datetimeIn);
outLen = bacapp_decode_context_datetime(apdu, 10, &datetimeOut); outLen = bacapp_decode_context_datetime(apdu, 10, &datetimeOut);
ct_test(pTest, inLen == outLen ); ct_test(pTest, inLen == outLen);
ct_test(pTest, datetimeIn.date.day == datetimeOut.date.day); ct_test(pTest, datetimeIn.date.day == datetimeOut.date.day);
ct_test(pTest, datetimeIn.date.month == datetimeOut.date.month); ct_test(pTest, datetimeIn.date.month == datetimeOut.date.month);
@@ -909,4 +900,3 @@ int main(
#endif /* TEST_DATE_TIME */ #endif /* TEST_DATE_TIME */
#endif /* TEST */ #endif /* TEST */
+520 -373
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -37,7 +37,7 @@
char *filename_remove_path( char *filename_remove_path(
const char *filename_in) const char *filename_in)
{ {
char *filename_out = (char *)filename_in; char *filename_out = (char *) filename_in;
/* allow the device ID to be set */ /* allow the device ID to be set */
if (filename_in) { if (filename_in) {
+9 -10
View File
@@ -36,12 +36,12 @@
/* copy len bytes from src to offset of dest if there is enough space. */ /* copy len bytes from src to offset of dest if there is enough space. */
/* returns 0 if there is not enough space, or the number of bytes copied. */ /* returns 0 if there is not enough space, or the number of bytes copied. */
size_t memcopy( size_t memcopy(
void * dest, void *dest,
void * src, void *src,
size_t offset, /* where in dest to put the data */ size_t offset, /* where in dest to put the data */
size_t len, /* amount of data to copy */ size_t len, /* amount of data to copy */
size_t max) /* total size of destination */ size_t max)
{ { /* total size of destination */
size_t i; size_t i;
size_t copy_len = 0; size_t copy_len = 0;
char *s1, *s2; char *s1, *s2;
@@ -73,15 +73,14 @@ void test_memcopy(
char big_buffer[480] = ""; char big_buffer[480] = "";
size_t len = 0; size_t len = 0;
len = memcopy(&buffer[0], &data1[0], 0, len = memcopy(&buffer[0], &data1[0], 0, sizeof(data1), sizeof(buffer));
sizeof(data1), sizeof(buffer));
ct_test(pTest, len == sizeof(data1)); ct_test(pTest, len == sizeof(data1));
ct_test(pTest, memcmp(&buffer[0], &data1[0], len) == 0); ct_test(pTest, memcmp(&buffer[0], &data1[0], len) == 0);
len = memcopy(&buffer[0], &data2[0], len, len = memcopy(&buffer[0], &data2[0], len, sizeof(data2), sizeof(buffer));
sizeof(data2), sizeof(buffer));
ct_test(pTest, len == sizeof(data2)); ct_test(pTest, len == sizeof(data2));
len = memcopy(&buffer[0], &big_buffer[0], 1, len =
sizeof(big_buffer), sizeof(buffer)); memcopy(&buffer[0], &big_buffer[0], 1, sizeof(big_buffer),
sizeof(buffer));
ct_test(pTest, len == 0); ct_test(pTest, len == 0);
} }
+9 -6
View File
@@ -110,7 +110,7 @@ int rpm_encode_apdu(
uint8_t * apdu, uint8_t * apdu,
size_t max_apdu, size_t max_apdu,
uint8_t invoke_id, uint8_t invoke_id,
BACNET_READ_ACCESS_DATA *read_access_data) BACNET_READ_ACCESS_DATA * read_access_data)
{ {
int apdu_len = 0; /* total length of the apdu, return value */ int apdu_len = 0; /* total length of the apdu, return value */
int len = 0; /* length of the data */ int len = 0; /* length of the data */
@@ -126,8 +126,8 @@ int rpm_encode_apdu(
apdu_len += len; apdu_len += len;
rpm_object = read_access_data; rpm_object = read_access_data;
while (rpm_object) { while (rpm_object) {
len = encode_context_object_id(&apdu_temp[0], 0, len =
rpm_object->object_type, encode_context_object_id(&apdu_temp[0], 0, rpm_object->object_type,
rpm_object->object_instance); rpm_object->object_instance);
len = memcopy(&apdu[0], &apdu_temp[0], apdu_len, len, max_apdu); len = memcopy(&apdu[0], &apdu_temp[0], apdu_len, len, max_apdu);
if (len == 0) { if (len == 0) {
@@ -144,7 +144,8 @@ int rpm_encode_apdu(
rpm_property = rpm_object->listOfProperties; rpm_property = rpm_object->listOfProperties;
while (rpm_property) { while (rpm_property) {
/* stuff as many properties into it as APDU length will allow */ /* stuff as many properties into it as APDU length will allow */
len = encode_context_enumerated(&apdu_temp[0], 0, len =
encode_context_enumerated(&apdu_temp[0], 0,
rpm_property->propertyIdentifier); rpm_property->propertyIdentifier);
len = memcopy(&apdu[0], &apdu_temp[0], apdu_len, len, max_apdu); len = memcopy(&apdu[0], &apdu_temp[0], apdu_len, len, max_apdu);
if (len == 0) { if (len == 0) {
@@ -153,9 +154,11 @@ int rpm_encode_apdu(
apdu_len += len; apdu_len += len;
/* optional array index */ /* optional array index */
if (rpm_property->propertyArrayIndex != BACNET_ARRAY_ALL) { if (rpm_property->propertyArrayIndex != BACNET_ARRAY_ALL) {
len = encode_context_unsigned(&apdu_temp[0], 1, len =
encode_context_unsigned(&apdu_temp[0], 1,
rpm_property->propertyArrayIndex); rpm_property->propertyArrayIndex);
len = memcopy(&apdu[0], &apdu_temp[0], apdu_len, len, max_apdu); len =
memcopy(&apdu[0], &apdu_temp[0], apdu_len, len, max_apdu);
if (len == 0) { if (len == 0) {
return 0; return 0;
} }
+2 -2
View File
@@ -43,8 +43,8 @@
void sbuf_init( void sbuf_init(
STATIC_BUFFER * b, /* static buffer structure */ STATIC_BUFFER * b, /* static buffer structure */
char *data, /* data block */ char *data, /* data block */
unsigned size) /* actual size, in bytes, of the data block or array of data */ unsigned size)
{ { /* actual size, in bytes, of the data block or array of data */
if (b) { if (b) {
b->data = data; b->data = data;
b->size = size; b->size = size;
+65 -47
View File
@@ -47,18 +47,23 @@ int bacapp_encode_context_timestamp(
len = encode_opening_tag(&apdu[apdu_len], tag_number); len = encode_opening_tag(&apdu[apdu_len], tag_number);
apdu_len += len; apdu_len += len;
switch(value->tag) switch (value->tag) {
{
case TIME_STAMP_TIME: case TIME_STAMP_TIME:
len = encode_context_time(&apdu[apdu_len], 0, &value->value.time); len =
encode_context_time(&apdu[apdu_len], 0,
&value->value.time);
break; break;
case TIME_STAMP_SEQUENCE: case TIME_STAMP_SEQUENCE:
len = encode_context_unsigned(&apdu[apdu_len], 1, value->value.sequenceNum); len =
encode_context_unsigned(&apdu[apdu_len], 1,
value->value.sequenceNum);
break; break;
case TIME_STAMP_DATETIME: case TIME_STAMP_DATETIME:
len = bacapp_encode_context_datetime(&apdu[apdu_len], 2, &value->value.dateTime); len =
bacapp_encode_context_datetime(&apdu[apdu_len], 2,
&value->value.dateTime);
break; break;
default: default:
@@ -92,49 +97,42 @@ int bacapp_decode_context_timestamp(
decode_tag_number_and_value(&apdu[len], &value->tag, decode_tag_number_and_value(&apdu[len], &value->tag,
&len_value_type); &len_value_type);
if ( -1 == section_len ) if (-1 == section_len) {
{
return -1; return -1;
} }
switch( value->tag ) switch (value->tag) {
{
case TIME_STAMP_TIME: case TIME_STAMP_TIME:
if ( (section_len = decode_context_bacnet_time(&apdu[len], TIME_STAMP_TIME, &value->value.time)) == -1 ) if ((section_len =
{ decode_context_bacnet_time(&apdu[len], TIME_STAMP_TIME,
&value->value.time)) == -1) {
return -1; return -1;
} } else {
else
{
len += section_len; len += section_len;
} }
break; break;
case TIME_STAMP_SEQUENCE: case TIME_STAMP_SEQUENCE:
if ( (section_len = decode_context_unsigned(&apdu[len], TIME_STAMP_SEQUENCE, &sequenceNum)) == -1 ) if ((section_len =
{ decode_context_unsigned(&apdu[len],
TIME_STAMP_SEQUENCE, &sequenceNum)) == -1) {
return -1; return -1;
} } else {
else if (sequenceNum <= 0xffff) {
{
if ( sequenceNum <= 0xffff )
{
len += section_len; len += section_len;
value->value.sequenceNum = (uint16_t)sequenceNum; value->value.sequenceNum = (uint16_t) sequenceNum;
} } else {
else
{
return -1; return -1;
} }
} }
break; break;
case TIME_STAMP_DATETIME: case TIME_STAMP_DATETIME:
if ( (section_len = bacapp_decode_context_datetime(&apdu[len], TIME_STAMP_DATETIME, &value->value.dateTime)) == -1 ) if ((section_len =
{ bacapp_decode_context_datetime(&apdu[len],
TIME_STAMP_DATETIME,
&value->value.dateTime)) == -1) {
return -1; return -1;
} } else {
else
{
len += section_len; len += section_len;
} }
break; break;
@@ -144,9 +142,7 @@ int bacapp_decode_context_timestamp(
} }
if (decode_is_closing_tag_number(&apdu[len], tag_number)) { if (decode_is_closing_tag_number(&apdu[len], tag_number)) {
len++; len++;
} } else {
else
{
return -1; return -1;
} }
} }
@@ -180,7 +176,9 @@ void testTimestampSequence(
ct_test(pTest, inLen == outLen); ct_test(pTest, inLen == outLen);
ct_test(pTest, testTimestampIn.tag == testTimestampOut.tag); ct_test(pTest, testTimestampIn.tag == testTimestampOut.tag);
ct_test(pTest, testTimestampIn.value.sequenceNum == testTimestampOut.value.sequenceNum); ct_test(pTest,
testTimestampIn.value.sequenceNum ==
testTimestampOut.value.sequenceNum);
} }
void testTimestampTime( void testTimestampTime(
@@ -206,10 +204,15 @@ void testTimestampTime(
ct_test(pTest, inLen == outLen); ct_test(pTest, inLen == outLen);
ct_test(pTest, testTimestampIn.tag == testTimestampOut.tag); ct_test(pTest, testTimestampIn.tag == testTimestampOut.tag);
ct_test(pTest, testTimestampIn.value.time.hour == testTimestampOut.value.time.hour); ct_test(pTest,
ct_test(pTest, testTimestampIn.value.time.min == testTimestampOut.value.time.min); testTimestampIn.value.time.hour == testTimestampOut.value.time.hour);
ct_test(pTest, testTimestampIn.value.time.sec == testTimestampOut.value.time.sec); ct_test(pTest,
ct_test(pTest, testTimestampIn.value.time.hundredths == testTimestampOut.value.time.hundredths); testTimestampIn.value.time.min == testTimestampOut.value.time.min);
ct_test(pTest,
testTimestampIn.value.time.sec == testTimestampOut.value.time.sec);
ct_test(pTest,
testTimestampIn.value.time.hundredths ==
testTimestampOut.value.time.hundredths);
} }
void testTimestampTimeDate( void testTimestampTimeDate(
@@ -239,15 +242,31 @@ void testTimestampTimeDate(
ct_test(pTest, inLen == outLen); ct_test(pTest, inLen == outLen);
ct_test(pTest, testTimestampIn.tag == testTimestampOut.tag); ct_test(pTest, testTimestampIn.tag == testTimestampOut.tag);
ct_test(pTest, testTimestampIn.value.dateTime.time.hour == testTimestampOut.value.dateTime.time.hour); ct_test(pTest,
ct_test(pTest, testTimestampIn.value.dateTime.time.min == testTimestampOut.value.dateTime.time.min); testTimestampIn.value.dateTime.time.hour ==
ct_test(pTest, testTimestampIn.value.dateTime.time.sec == testTimestampOut.value.dateTime.time.sec); testTimestampOut.value.dateTime.time.hour);
ct_test(pTest, testTimestampIn.value.dateTime.time.hundredths == testTimestampOut.value.dateTime.time.hundredths); ct_test(pTest,
testTimestampIn.value.dateTime.time.min ==
testTimestampOut.value.dateTime.time.min);
ct_test(pTest,
testTimestampIn.value.dateTime.time.sec ==
testTimestampOut.value.dateTime.time.sec);
ct_test(pTest,
testTimestampIn.value.dateTime.time.hundredths ==
testTimestampOut.value.dateTime.time.hundredths);
ct_test(pTest, testTimestampIn.value.dateTime.date.year == testTimestampOut.value.dateTime.date.year); ct_test(pTest,
ct_test(pTest, testTimestampIn.value.dateTime.date.month == testTimestampOut.value.dateTime.date.month); testTimestampIn.value.dateTime.date.year ==
ct_test(pTest, testTimestampIn.value.dateTime.date.wday == testTimestampOut.value.dateTime.date.wday); testTimestampOut.value.dateTime.date.year);
ct_test(pTest, testTimestampIn.value.dateTime.date.day == testTimestampOut.value.dateTime.date.day); ct_test(pTest,
testTimestampIn.value.dateTime.date.month ==
testTimestampOut.value.dateTime.date.month);
ct_test(pTest,
testTimestampIn.value.dateTime.date.wday ==
testTimestampOut.value.dateTime.date.wday);
ct_test(pTest,
testTimestampIn.value.dateTime.date.day ==
testTimestampOut.value.dateTime.date.day);
} }
@@ -280,4 +299,3 @@ int main(
#endif // TEST_TIME_STAMP #endif // TEST_TIME_STAMP
#endif // TEST #endif // TEST