Ran the comment and indent tools on the source code.

This commit is contained in:
skarg
2008-04-24 01:07:23 +00:00
parent 2ed87c2e0c
commit 3d3d7e420d
11 changed files with 345 additions and 350 deletions
+1 -1
View File
@@ -1 +1 @@
-Iinclude -Idemo/handler -Idemo/object -Iports/linux -castfcnptr -fullinitblock -weak +posixlib -Iinclude -Iports/linux -castfcnptr -fullinitblock -weak +posixlib
+2 -2
View File
@@ -211,8 +211,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);
+1 -1
View File
@@ -115,7 +115,7 @@ extern "C" {
BACNET_CHARACTER_STRING * dest, BACNET_CHARACTER_STRING * dest,
BACNET_CHARACTER_STRING * src); BACNET_CHARACTER_STRING * src);
bool characterstring_ansi_copy( bool characterstring_ansi_copy(
char * dest, char *dest,
size_t dest_max_len, size_t dest_max_len,
BACNET_CHARACTER_STRING * src); BACNET_CHARACTER_STRING * src);
/* returns true if the strings are the same length, encoding, value */ /* returns true if the strings are the same length, encoding, value */
+302 -301
View File
@@ -1,301 +1,302 @@
/************************************************************************** /**************************************************************************
* *
* Copyright (C) 2006 Steve Karg <skarg@users.sourceforge.net> * Copyright (C) 2006 Steve Karg <skarg@users.sourceforge.net>
* *
* Permission is hereby granted, free of charge, to any person obtaining * Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the * a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including * "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, * without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to * distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to * permit persons to whom the Software is furnished to do so, subject to
* the following conditions: * the following conditions:
* *
* The above copyright notice and this permission notice shall be included * The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software. * in all copies or substantial portions of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* *
*********************************************************************/ *********************************************************************/
/* Binary Value Objects - customize for your use */ /* Binary Value Objects - customize for your use */
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include "hardware.h" #include "hardware.h"
#include "bacdef.h" #include "bacdef.h"
#include "bacdcode.h" #include "bacdcode.h"
#include "bacenum.h" #include "bacenum.h"
#include "config.h" /* the custom stuff */ #include "config.h" /* the custom stuff */
#include "wp.h" #include "wp.h"
#include "bv.h" #include "bv.h"
#if (MAX_BINARY_VALUES > 10) #if (MAX_BINARY_VALUES > 10)
#error Modify the Binary_Value_Name to handle multiple digits #error Modify the Binary_Value_Name to handle multiple digits
#endif #endif
static BACNET_BINARY_PV Present_Value[MAX_BINARY_VALUES]; static BACNET_BINARY_PV Present_Value[MAX_BINARY_VALUES];
/* we simply have 0-n object instances. */ /* we simply have 0-n object instances. */
bool Binary_Value_Valid_Instance( bool Binary_Value_Valid_Instance(
uint32_t object_instance) uint32_t object_instance)
{ {
if (object_instance < MAX_BINARY_VALUES) if (object_instance < MAX_BINARY_VALUES)
return true; return true;
return false; return false;
} }
/* we simply have 0-n object instances. */ /* we simply have 0-n object instances. */
unsigned Binary_Value_Count( unsigned Binary_Value_Count(
void) void)
{ {
return MAX_BINARY_VALUES; return MAX_BINARY_VALUES;
} }
/* we simply have 0-n object instances. */ /* we simply have 0-n object instances. */
uint32_t Binary_Value_Index_To_Instance( uint32_t Binary_Value_Index_To_Instance(
unsigned index) unsigned index)
{ {
return index; return index;
} }
/* we simply have 0-n object instances. */ /* we simply have 0-n object instances. */
unsigned Binary_Value_Instance_To_Index( unsigned Binary_Value_Instance_To_Index(
uint32_t object_instance) uint32_t object_instance)
{ {
unsigned index = MAX_BINARY_VALUES; unsigned index = MAX_BINARY_VALUES;
if (object_instance < MAX_BINARY_VALUES) if (object_instance < MAX_BINARY_VALUES)
index = object_instance; index = object_instance;
return index; return index;
} }
static BACNET_BINARY_PV Binary_Value_Present_Value( static BACNET_BINARY_PV Binary_Value_Present_Value(
uint32_t object_instance) uint32_t object_instance)
{ {
BACNET_BINARY_PV value = BINARY_INACTIVE; BACNET_BINARY_PV value = BINARY_INACTIVE;
if (object_instance < MAX_BINARY_VALUES) { if (object_instance < MAX_BINARY_VALUES) {
value = Present_Value[object_instance]; value = Present_Value[object_instance];
} }
return value; return value;
} }
/* note: the object name must be unique within this device */ /* note: the object name must be unique within this device */
char *Binary_Value_Name( char *Binary_Value_Name(
uint32_t object_instance) uint32_t object_instance)
{ {
static char text_string[5] = "BV-0"; /* okay for single thread */ static char text_string[5] = "BV-0"; /* okay for single thread */
if (object_instance < MAX_BINARY_VALUES) { if (object_instance < MAX_BINARY_VALUES) {
text_string[3] = '0' + (uint8_t) object_instance; text_string[3] = '0' + (uint8_t) object_instance;
return text_string; return text_string;
} }
return NULL; return NULL;
} }
/* return apdu len, or -1 on error */ /* return apdu len, or -1 on error */
int Binary_Value_Encode_Property_APDU( int Binary_Value_Encode_Property_APDU(
uint8_t * apdu, uint8_t * apdu,
uint32_t object_instance, uint32_t object_instance,
BACNET_PROPERTY_ID property, BACNET_PROPERTY_ID property,
int32_t array_index, int32_t array_index,
BACNET_ERROR_CLASS * error_class, BACNET_ERROR_CLASS * error_class,
BACNET_ERROR_CODE * error_code) BACNET_ERROR_CODE * error_code)
{ {
int apdu_len = 0; /* return value */ int apdu_len = 0; /* return value */
BACNET_BIT_STRING bit_string; BACNET_BIT_STRING bit_string;
BACNET_CHARACTER_STRING char_string; BACNET_CHARACTER_STRING char_string;
BACNET_BINARY_PV present_value = BINARY_INACTIVE; BACNET_BINARY_PV present_value = BINARY_INACTIVE;
BACNET_POLARITY polarity = POLARITY_NORMAL; BACNET_POLARITY polarity = POLARITY_NORMAL;
switch (property) { switch (property) {
case PROP_OBJECT_IDENTIFIER: case PROP_OBJECT_IDENTIFIER:
apdu_len = apdu_len =
encode_application_object_id(&apdu[0], OBJECT_BINARY_VALUE, encode_application_object_id(&apdu[0], OBJECT_BINARY_VALUE,
object_instance); object_instance);
break; break;
/* note: Name and Description don't have to be the same. /* note: Name and Description don't have to be the same.
You could make Description writable and different */ You could make Description writable and different */
case PROP_OBJECT_NAME: case PROP_OBJECT_NAME:
characterstring_init_ansi(&char_string, characterstring_init_ansi(&char_string,
Binary_Value_Name(object_instance)); Binary_Value_Name(object_instance));
apdu_len = apdu_len =
encode_application_character_string(&apdu[0], &char_string); encode_application_character_string(&apdu[0], &char_string);
break; break;
case PROP_OBJECT_TYPE: case PROP_OBJECT_TYPE:
apdu_len = apdu_len =
encode_application_enumerated(&apdu[0], OBJECT_BINARY_VALUE); encode_application_enumerated(&apdu[0], OBJECT_BINARY_VALUE);
break; break;
case PROP_PRESENT_VALUE: case PROP_PRESENT_VALUE:
present_value = Binary_Value_Present_Value(object_instance); present_value = Binary_Value_Present_Value(object_instance);
apdu_len = encode_application_enumerated(&apdu[0], present_value); apdu_len = encode_application_enumerated(&apdu[0], present_value);
break; break;
case PROP_STATUS_FLAGS: case PROP_STATUS_FLAGS:
/* note: see the details in the standard on how to use these */ /* note: see the details in the standard on how to use these */
bitstring_init(&bit_string); bitstring_init(&bit_string);
bitstring_set_bit(&bit_string, STATUS_FLAG_IN_ALARM, false); bitstring_set_bit(&bit_string, STATUS_FLAG_IN_ALARM, false);
bitstring_set_bit(&bit_string, STATUS_FLAG_FAULT, false); bitstring_set_bit(&bit_string, STATUS_FLAG_FAULT, false);
bitstring_set_bit(&bit_string, STATUS_FLAG_OVERRIDDEN, false); bitstring_set_bit(&bit_string, STATUS_FLAG_OVERRIDDEN, false);
bitstring_set_bit(&bit_string, STATUS_FLAG_OUT_OF_SERVICE, false); bitstring_set_bit(&bit_string, STATUS_FLAG_OUT_OF_SERVICE, false);
apdu_len = encode_application_bitstring(&apdu[0], &bit_string); apdu_len = encode_application_bitstring(&apdu[0], &bit_string);
break; break;
case PROP_EVENT_STATE: case PROP_EVENT_STATE:
/* note: see the details in the standard on how to use this */ /* note: see the details in the standard on how to use this */
apdu_len = apdu_len =
encode_application_enumerated(&apdu[0], EVENT_STATE_NORMAL); encode_application_enumerated(&apdu[0], EVENT_STATE_NORMAL);
break; break;
case PROP_OUT_OF_SERVICE: case PROP_OUT_OF_SERVICE:
apdu_len = encode_application_boolean(&apdu[0], false); apdu_len = encode_application_boolean(&apdu[0], false);
break; break;
case PROP_POLARITY: case PROP_POLARITY:
/* FIXME: figure out the polarity */ /* FIXME: figure out the polarity */
apdu_len = encode_application_enumerated(&apdu[0], polarity); apdu_len = encode_application_enumerated(&apdu[0], polarity);
break; break;
default: default:
*error_class = ERROR_CLASS_PROPERTY; *error_class = ERROR_CLASS_PROPERTY;
*error_code = ERROR_CODE_UNKNOWN_PROPERTY; *error_code = ERROR_CODE_UNKNOWN_PROPERTY;
apdu_len = -1; apdu_len = -1;
break; break;
} }
return apdu_len; return apdu_len;
} }
/* returns true if successful */ /* returns true if successful */
bool Binary_Value_Write_Property( bool Binary_Value_Write_Property(
BACNET_WRITE_PROPERTY_DATA * wp_data, BACNET_WRITE_PROPERTY_DATA * wp_data,
BACNET_ERROR_CLASS * error_class, BACNET_ERROR_CLASS * error_class,
BACNET_ERROR_CODE * error_code) BACNET_ERROR_CODE * error_code)
{ {
bool status = false; /* return value */ bool status = false; /* return value */
unsigned int object_index = 0; unsigned int object_index = 0;
int len = 0; int len = 0;
BACNET_APPLICATION_DATA_VALUE value; BACNET_APPLICATION_DATA_VALUE value;
if (!Binary_Value_Valid_Instance(wp_data->object_instance)) { if (!Binary_Value_Valid_Instance(wp_data->object_instance)) {
*error_class = ERROR_CLASS_OBJECT; *error_class = ERROR_CLASS_OBJECT;
*error_code = ERROR_CODE_UNKNOWN_OBJECT; *error_code = ERROR_CODE_UNKNOWN_OBJECT;
return false; return false;
} }
/* decode the some of the request */ /* decode the some of the request */
len = len =
bacapp_decode_application_data(wp_data->application_data, bacapp_decode_application_data(wp_data->application_data,
wp_data->application_data_len, &value); wp_data->application_data_len, &value);
/* FIXME: len < application_data_len: more data? */ /* FIXME: len < application_data_len: more data? */
/* FIXME: len == 0: unable to decode? */ /* FIXME: len == 0: unable to decode? */
switch (wp_data->object_property) { switch (wp_data->object_property) {
case PROP_PRESENT_VALUE: case PROP_PRESENT_VALUE:
if (value.tag == BACNET_APPLICATION_TAG_ENUMERATED) { if (value.tag == BACNET_APPLICATION_TAG_ENUMERATED) {
if ((value.type.Enumerated == BINARY_ACTIVE) || if ((value.type.Enumerated == BINARY_ACTIVE) ||
(value.type.Enumerated == BINARY_INACTIVE)) { (value.type.Enumerated == BINARY_INACTIVE)) {
object_index = object_index =
Binary_Value_Instance_To_Index(wp_data-> Binary_Value_Instance_To_Index(wp_data->
object_instance); object_instance);
/* NOTE: this Binary value has no priority array */ /* NOTE: this Binary value has no priority array */
Present_Value[object_index] = (BACNET_BINARY_PV)value.type.Enumerated; Present_Value[object_index] =
/* Note: you could set the physical output here if we (BACNET_BINARY_PV) value.type.Enumerated;
are the highest priority. /* Note: you could set the physical output here if we
However, if Out of Service is TRUE, then don't set the are the highest priority.
physical output. */ However, if Out of Service is TRUE, then don't set the
if (Present_Value[0] == BINARY_ACTIVE) { physical output. */
LED_GREEN_ON(); if (Present_Value[0] == BINARY_ACTIVE) {
} else { LED_GREEN_ON();
LED_GREEN_OFF(); } else {
} LED_GREEN_OFF();
status = true; }
} else { status = true;
*error_class = ERROR_CLASS_PROPERTY; } else {
*error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; *error_class = ERROR_CLASS_PROPERTY;
} *error_code = ERROR_CODE_VALUE_OUT_OF_RANGE;
} else { }
*error_class = ERROR_CLASS_PROPERTY; } else {
*error_code = ERROR_CODE_INVALID_DATA_TYPE; *error_class = ERROR_CLASS_PROPERTY;
} *error_code = ERROR_CODE_INVALID_DATA_TYPE;
break; }
#if 0 break;
case PROP_OUT_OF_SERVICE: #if 0
if (value.tag == BACNET_APPLICATION_TAG_BOOLEAN) { case PROP_OUT_OF_SERVICE:
object_index = if (value.tag == BACNET_APPLICATION_TAG_BOOLEAN) {
Binary_Value_Instance_To_Index(wp_data->object_instance); object_index =
Binary_Value_Out_Of_Service[object_index] = value.type.Boolean; Binary_Value_Instance_To_Index(wp_data->object_instance);
status = true; Binary_Value_Out_Of_Service[object_index] = value.type.Boolean;
} else { status = true;
*error_class = ERROR_CLASS_PROPERTY; } else {
*error_code = ERROR_CODE_INVALID_DATA_TYPE; *error_class = ERROR_CLASS_PROPERTY;
} *error_code = ERROR_CODE_INVALID_DATA_TYPE;
break; }
#endif break;
default: #endif
*error_class = ERROR_CLASS_PROPERTY; default:
*error_code = ERROR_CODE_WRITE_ACCESS_DENIED; *error_class = ERROR_CLASS_PROPERTY;
break; *error_code = ERROR_CODE_WRITE_ACCESS_DENIED;
} break;
}
return status;
} return status;
}
#ifdef TEST
#include <assert.h> #ifdef TEST
#include <string.h> #include <assert.h>
#include "ctest.h" #include <string.h>
#include "ctest.h"
void testBinary_Value(
Test * pTest) void testBinary_Value(
{ Test * pTest)
uint8_t apdu[MAX_APDU] = { 0 }; {
int len = 0; uint8_t apdu[MAX_APDU] = { 0 };
uint32_t len_value = 0; int len = 0;
uint8_t tag_number = 0; uint32_t len_value = 0;
BACNET_OBJECT_TYPE decoded_type = OBJECT_BINARY_VALUE; uint8_t tag_number = 0;
uint32_t decoded_instance = 0; BACNET_OBJECT_TYPE decoded_type = OBJECT_BINARY_VALUE;
uint32_t instance = 123; uint32_t decoded_instance = 0;
BACNET_ERROR_CLASS error_class; uint32_t instance = 123;
BACNET_ERROR_CODE error_code; BACNET_ERROR_CLASS error_class;
BACNET_ERROR_CODE error_code;
len =
Binary_Value_Encode_Property_APDU(&apdu[0], instance, len =
PROP_OBJECT_IDENTIFIER, BACNET_ARRAY_ALL, &error_class, &error_code); Binary_Value_Encode_Property_APDU(&apdu[0], instance,
ct_test(pTest, len != 0); PROP_OBJECT_IDENTIFIER, BACNET_ARRAY_ALL, &error_class, &error_code);
len = decode_tag_number_and_value(&apdu[0], &tag_number, &len_value); ct_test(pTest, len != 0);
ct_test(pTest, tag_number == BACNET_APPLICATION_TAG_OBJECT_ID); len = decode_tag_number_and_value(&apdu[0], &tag_number, &len_value);
len = ct_test(pTest, tag_number == BACNET_APPLICATION_TAG_OBJECT_ID);
decode_object_id(&apdu[len], (int *) &decoded_type, &decoded_instance); len =
ct_test(pTest, decoded_type == OBJECT_BINARY_VALUE); decode_object_id(&apdu[len], (int *) &decoded_type, &decoded_instance);
ct_test(pTest, decoded_instance == instance); ct_test(pTest, decoded_type == OBJECT_BINARY_VALUE);
ct_test(pTest, decoded_instance == instance);
return;
} return;
}
#ifdef TEST_BINARY_VALUE
int main( #ifdef TEST_BINARY_VALUE
void) int main(
{ void)
Test *pTest; {
bool rc; Test *pTest;
bool rc;
pTest = ct_create("BACnet Binary_Value", NULL);
/* individual tests */ pTest = ct_create("BACnet Binary_Value", NULL);
rc = ct_addTestFunction(pTest, testBinary_Value); /* individual tests */
assert(rc); rc = ct_addTestFunction(pTest, testBinary_Value);
assert(rc);
ct_setStream(pTest, stdout);
ct_run(pTest); ct_setStream(pTest, stdout);
(void) ct_report(pTest); ct_run(pTest);
ct_destroy(pTest); (void) ct_report(pTest);
ct_destroy(pTest);
return 0;
} return 0;
#endif /* TEST_BINARY_VALUE */ }
#endif /* TEST */ #endif /* TEST_BINARY_VALUE */
#endif /* TEST */
+5 -5
View File
@@ -338,8 +338,7 @@ int Device_Encode_Property_APDU(
/* to return an error if the number of encoded objects exceeds */ /* to return an error if the number of encoded objects exceeds */
/* your maximum APDU size. */ /* your maximum APDU size. */
for (i = 1; i <= count; i++) { for (i = 1; i <= count; i++) {
len = len = encode_application_unsigned(&apdu[0], *(&_end + i));
encode_application_unsigned(&apdu[0], *(&_end+i));
apdu_len += len; apdu_len += len;
/* assume next one is the same size as this one */ /* assume next one is the same size as this one */
/* can we all fit into the APDU? */ /* can we all fit into the APDU? */
@@ -351,7 +350,9 @@ int Device_Encode_Property_APDU(
} }
} }
} else if (array_index <= count) { } else if (array_index <= count) {
apdu_len = encode_application_unsigned(&apdu[0], *(&_end+array_index)); apdu_len =
encode_application_unsigned(&apdu[0],
*(&_end + array_index));
} else { } else {
*error_class = ERROR_CLASS_PROPERTY; *error_class = ERROR_CLASS_PROPERTY;
*error_code = ERROR_CODE_INVALID_ARRAY_INDEX; *error_code = ERROR_CODE_INVALID_ARRAY_INDEX;
@@ -445,8 +446,7 @@ bool Device_Write_Property(
encoding = encoding =
characterstring_encoding(&value.type.Character_String); characterstring_encoding(&value.type.Character_String);
if (encoding == CHARACTER_ANSI_X34) { if (encoding == CHARACTER_ANSI_X34) {
if (characterstring_ansi_copy( if (characterstring_ansi_copy(&Object_Name[0],
&Object_Name[0],
sizeof(Object_Name), sizeof(Object_Name),
&value.type.Character_String)) { &value.type.Character_String)) {
status = true; status = true;
+2 -2
View File
@@ -218,9 +218,9 @@ typedef struct {
/* IAR intrinsic routines */ /* IAR intrinsic routines */
#if defined(__GNUC__) #if defined(__GNUC__)
/* FIXME: intrinsic routines: map to assembler for size/speed */ /* FIXME: intrinsic routines: map to assembler for size/speed */
#define __multiply_unsigned(x,y) ((x)*(y)) #define __multiply_unsigned(x,y) ((x)*(y))
/* FIXME: __root means to not optimize or strip */ /* FIXME: __root means to not optimize or strip */
#define __root #define __root
#endif #endif
#endif #endif
+10 -16
View File
@@ -143,31 +143,25 @@ static void input_switch_read(
extern uint8_t _end; extern uint8_t _end;
extern uint8_t __stack; extern uint8_t __stack;
#define STACK_CANARY (0xC5) #define STACK_CANARY (0xC5)
void StackPaint(void) __attribute__ ((naked)) __attribute__ ((section (".init1"))); void StackPaint(
void) __attribute__ ((naked)) __attribute__ ((section(".init1")));
void StackPaint(void) void StackPaint(
void)
{ {
#if 0 #if 0
uint8_t *p = &_end; uint8_t *p = &_end;
while(p <= &__stack) while (p <= &__stack) {
{
*p = STACK_CANARY; *p = STACK_CANARY;
p++; p++;
} }
#else #else
__asm volatile (" ldi r30,lo8(_end)\n" __asm volatile (
" ldi r31,hi8(_end)\n" " ldi r30,lo8(_end)\n" " ldi r31,hi8(_end)\n" " ldi r24,lo8(0xc5)\n" /* STACK_CANARY = 0xc5 */
" ldi r24,lo8(0xc5)\n" /* STACK_CANARY = 0xc5 */ " ldi r25,hi8(__stack)\n" " rjmp .cmp\n" ".loop:\n"
" ldi r25,hi8(__stack)\n" " st Z+,r24\n" ".cmp:\n" " cpi r30,lo8(__stack)\n"
" rjmp .cmp\n" " cpc r31,r25\n" " brlo .loop\n" " breq .loop"::);
".loop:\n"
" st Z+,r24\n"
".cmp:\n"
" cpi r30,lo8(__stack)\n"
" cpc r31,r25\n"
" brlo .loop\n"
" breq .loop"::);
#endif #endif
} }
#endif #endif
+1 -1
View File
@@ -95,7 +95,7 @@ static uint32_t getIpMaskForIpAddress(
DWORD dwBufLen = sizeof(AdapterInfo); DWORD dwBufLen = sizeof(AdapterInfo);
uint32_t ipMask = INADDR_BROADCAST; uint32_t ipMask = INADDR_BROADCAST;
bool found = false; bool found = false;
PIP_ADAPTER_INFO pAdapterInfo; PIP_ADAPTER_INFO pAdapterInfo;
/* GetAdapterInfo: /* GetAdapterInfo:
+2 -3
View File
@@ -247,14 +247,13 @@ bool characterstring_copy(
} }
bool characterstring_ansi_copy( bool characterstring_ansi_copy(
char * dest, char *dest,
size_t dest_max_len, size_t dest_max_len,
BACNET_CHARACTER_STRING * src) BACNET_CHARACTER_STRING * src)
{ {
size_t i; /* counter */ size_t i; /* counter */
if (dest && src && if (dest && src && (src->encoding == CHARACTER_ANSI_X34) &&
(src->encoding == CHARACTER_ANSI_X34) &&
(src->length < dest_max_len)) { (src->length < dest_max_len)) {
for (i = 0; i < src->length; i++) { for (i = 0; i < src->length; i++) {
dest[i] = src->value[i]; dest[i] = src->value[i];
+1 -1
View File
@@ -291,7 +291,7 @@ uint16_t bip_receive(
} }
} }
} else if (pdu[1] == BVLC_FORWARDED_NPDU) { } else if (pdu[1] == BVLC_FORWARDED_NPDU) {
(void) decode_unsigned32(&pdu[4], (uint32_t *)&sin.sin_addr.s_addr); (void) decode_unsigned32(&pdu[4], (uint32_t *) & sin.sin_addr.s_addr);
(void) decode_unsigned16(&pdu[8], &sin.sin_port); (void) decode_unsigned16(&pdu[8], &sin.sin_port);
if ((sin.sin_addr.s_addr == htonl(BIP_Address.s_addr)) && if ((sin.sin_addr.s_addr == htonl(BIP_Address.s_addr)) &&
(sin.sin_port == htons(BIP_Port))) { (sin.sin_port == htons(BIP_Port))) {
+18 -17
View File
@@ -180,7 +180,7 @@ int bvlc_encode_bvlc_result(
of the entire BVLL message, including the two octets of the of the entire BVLL message, including the two octets of the
length field itself, most significant octet first. */ length field itself, most significant octet first. */
encode_unsigned16(&pdu[2], 6); encode_unsigned16(&pdu[2], 6);
encode_unsigned16(&pdu[4], (uint16_t)result_code); encode_unsigned16(&pdu[4], (uint16_t) result_code);
} }
return 6; return 6;
@@ -191,7 +191,7 @@ int bvlc_encode_write_bdt_init(
unsigned entries) unsigned entries)
{ {
int len = 0; int len = 0;
uint16_t BVLC_length = 0; uint16_t BVLC_length = 0;
if (pdu) { if (pdu) {
pdu[0] = BVLL_TYPE_BACNET_IP; pdu[0] = BVLL_TYPE_BACNET_IP;
@@ -199,7 +199,7 @@ int bvlc_encode_write_bdt_init(
/* The 2-octet BVLC Length field is the length, in octets, /* The 2-octet BVLC Length field is the length, in octets,
of the entire BVLL message, including the two octets of the of the entire BVLL message, including the two octets of the
length field itself, most significant octet first. */ length field itself, most significant octet first. */
BVLC_length = 4 + (entries * 10); BVLC_length = 4 + (entries * 10);
encode_unsigned16(&pdu[2], BVLC_length); encode_unsigned16(&pdu[2], BVLC_length);
len = 4; len = 4;
} }
@@ -230,7 +230,7 @@ int bvlc_encode_read_bdt_ack_init(
unsigned entries) unsigned entries)
{ {
int len = 0; int len = 0;
uint16_t BVLC_length = 0; uint16_t BVLC_length = 0;
if (pdu) { if (pdu) {
pdu[0] = BVLL_TYPE_BACNET_IP; pdu[0] = BVLL_TYPE_BACNET_IP;
@@ -298,7 +298,7 @@ int bvlc_encode_forwarded_npdu(
/* The 2-octet BVLC Length field is the length, in octets, /* The 2-octet BVLC Length field is the length, in octets,
of the entire BVLL message, including the two octets of the of the entire BVLL message, including the two octets of the
length field itself, most significant octet first. */ length field itself, most significant octet first. */
encode_unsigned16(&pdu[2], (uint16_t)(4 + 6 + npdu_length)); encode_unsigned16(&pdu[2], (uint16_t) (4 + 6 + npdu_length));
len = 4; len = 4;
address.s_addr = ntohl(sin->sin_addr.s_addr); address.s_addr = ntohl(sin->sin_addr.s_addr);
port = ntohs(sin->sin_port); port = ntohs(sin->sin_port);
@@ -355,7 +355,7 @@ int bvlc_encode_read_fdt_ack_init(
unsigned entries) unsigned entries)
{ {
int len = 0; int len = 0;
uint16_t BVLC_length = 0; uint16_t BVLC_length = 0;
if (pdu) { if (pdu) {
pdu[0] = BVLL_TYPE_BACNET_IP; pdu[0] = BVLL_TYPE_BACNET_IP;
@@ -363,7 +363,7 @@ int bvlc_encode_read_fdt_ack_init(
/* The 2-octet BVLC Length field is the length, in octets, /* The 2-octet BVLC Length field is the length, in octets,
of the entire BVLL message, including the two octets of the of the entire BVLL message, including the two octets of the
length field itself, most significant octet first. */ length field itself, most significant octet first. */
BVLC_length = 4 + (entries * 10); BVLC_length = 4 + (entries * 10);
encode_unsigned16(&pdu[2], BVLC_length); encode_unsigned16(&pdu[2], BVLC_length);
len = 4; len = 4;
} }
@@ -400,7 +400,8 @@ int bvlc_encode_read_fdt_ack(
pdu_len += len; pdu_len += len;
encode_unsigned16(&pdu[pdu_len], FD_Table[i].time_to_live); encode_unsigned16(&pdu[pdu_len], FD_Table[i].time_to_live);
pdu_len += len; pdu_len += len;
encode_unsigned16(&pdu[pdu_len], (uint16_t)FD_Table[i].seconds_remaining); encode_unsigned16(&pdu[pdu_len],
(uint16_t) FD_Table[i].seconds_remaining);
pdu_len += len; pdu_len += len;
} }
} }
@@ -438,7 +439,7 @@ int bvlc_encode_distribute_broadcast_to_network(
{ {
int len = 0; /* return value */ int len = 0; /* return value */
unsigned i; /* for loop counter */ unsigned i; /* for loop counter */
uint16_t BVLC_length = 0; uint16_t BVLC_length = 0;
if (pdu) { if (pdu) {
pdu[0] = BVLL_TYPE_BACNET_IP; pdu[0] = BVLL_TYPE_BACNET_IP;
@@ -446,7 +447,7 @@ int bvlc_encode_distribute_broadcast_to_network(
/* The 2-octet BVLC Length field is the length, in octets, /* The 2-octet BVLC Length field is the length, in octets,
of the entire BVLL message, including the two octets of the of the entire BVLL message, including the two octets of the
length field itself, most significant octet first. */ length field itself, most significant octet first. */
BVLC_length = 4 + npdu_length; BVLC_length = 4 + npdu_length;
len = encode_unsigned16(&pdu[2], BVLC_length) + 2; len = encode_unsigned16(&pdu[2], BVLC_length) + 2;
for (i = 0; i < npdu_length; i++) { for (i = 0; i < npdu_length; i++) {
pdu[len] = npdu[i]; pdu[len] = npdu[i];
@@ -464,7 +465,7 @@ int bvlc_encode_original_unicast_npdu(
{ {
int len = 0; /* return value */ int len = 0; /* return value */
unsigned i = 0; /* loop counter */ unsigned i = 0; /* loop counter */
uint16_t BVLC_length = 0; uint16_t BVLC_length = 0;
if (pdu) { if (pdu) {
pdu[0] = BVLL_TYPE_BACNET_IP; pdu[0] = BVLL_TYPE_BACNET_IP;
@@ -472,7 +473,7 @@ int bvlc_encode_original_unicast_npdu(
/* The 2-octet BVLC Length field is the length, in octets, /* The 2-octet BVLC Length field is the length, in octets,
of the entire BVLL message, including the two octets of the of the entire BVLL message, including the two octets of the
length field itself, most significant octet first. */ length field itself, most significant octet first. */
BVLC_length = 4 + npdu_length; BVLC_length = 4 + npdu_length;
len = encode_unsigned16(&pdu[2], BVLC_length) + 2; len = encode_unsigned16(&pdu[2], BVLC_length) + 2;
for (i = 0; i < npdu_length; i++) { for (i = 0; i < npdu_length; i++) {
pdu[len] = npdu[i]; pdu[len] = npdu[i];
@@ -490,7 +491,7 @@ int bvlc_encode_original_broadcast_npdu(
{ {
int len = 0; /* return value */ int len = 0; /* return value */
unsigned i = 0; /* loop counter */ unsigned i = 0; /* loop counter */
uint16_t BVLC_length = 0; uint16_t BVLC_length = 0;
if (pdu) { if (pdu) {
pdu[0] = BVLL_TYPE_BACNET_IP; pdu[0] = BVLL_TYPE_BACNET_IP;
@@ -498,7 +499,7 @@ int bvlc_encode_original_broadcast_npdu(
/* The 2-octet BVLC Length field is the length, in octets, /* The 2-octet BVLC Length field is the length, in octets,
of the entire BVLL message, including the two octets of the of the entire BVLL message, including the two octets of the
length field itself, most significant octet first. */ length field itself, most significant octet first. */
BVLC_length = 4 + npdu_length; BVLC_length = 4 + npdu_length;
len = encode_unsigned16(&pdu[2], BVLC_length) + 2; len = encode_unsigned16(&pdu[2], BVLC_length) + 2;
for (i = 0; i < npdu_length; i++) { for (i = 0; i < npdu_length; i++) {
pdu[len] = npdu[i]; pdu[len] = npdu[i];
@@ -720,7 +721,7 @@ void bvlc_broadcast_forward_npdu(
uint8_t mtu[MAX_MPDU] = { 0 }; uint8_t mtu[MAX_MPDU] = { 0 };
uint16_t mtu_len = 0; uint16_t mtu_len = 0;
struct sockaddr_in bvlc_dest; struct sockaddr_in bvlc_dest;
uint16_t BVLC_length = 0; uint16_t BVLC_length = 0;
/* FIXME: unused parameter */ /* FIXME: unused parameter */
sin = sin; sin = sin;
@@ -729,7 +730,7 @@ void bvlc_broadcast_forward_npdu(
mtu[1] = BVLC_ORIGINAL_BROADCAST_NPDU; mtu[1] = BVLC_ORIGINAL_BROADCAST_NPDU;
bvlc_dest.sin_addr.s_addr = htonl(bip_get_broadcast_addr()); bvlc_dest.sin_addr.s_addr = htonl(bip_get_broadcast_addr());
bvlc_dest.sin_port = htons(bip_get_port()); bvlc_dest.sin_port = htons(bip_get_port());
BVLC_length = npdu_len + 4 /*inclusive */; BVLC_length = npdu_len + 4 /*inclusive */ ;
mtu_len = 2; mtu_len = 2;
mtu_len += encode_unsigned16(&mtu[mtu_len], BVLC_length); mtu_len += encode_unsigned16(&mtu[mtu_len], BVLC_length);
memcpy(&mtu[mtu_len], npdu, npdu_len); memcpy(&mtu[mtu_len], npdu, npdu_len);
@@ -1152,7 +1153,7 @@ int bvlc_send_pdu(
} }
bvlc_dest.sin_addr.s_addr = htonl(address.s_addr); bvlc_dest.sin_addr.s_addr = htonl(address.s_addr);
bvlc_dest.sin_port = htons(port); bvlc_dest.sin_port = htons(port);
BVLC_length = pdu_len + 4 /*inclusive */; BVLC_length = pdu_len + 4 /*inclusive */ ;
mtu_len = 2; mtu_len = 2;
mtu_len += encode_unsigned16(&mtu[mtu_len], BVLC_length); mtu_len += encode_unsigned16(&mtu[mtu_len], BVLC_length);
memcpy(&mtu[mtu_len], pdu, pdu_len); memcpy(&mtu[mtu_len], pdu, pdu_len);