Changed Object Table from a global to a local variable and added a Device function to initialize it.

This commit is contained in:
skarg
2010-12-13 03:41:55 +00:00
parent 20ca252a8d
commit 8f1e8d82cd
19 changed files with 151 additions and 121 deletions
+4 -3
View File
@@ -52,9 +52,9 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
/* buffer used for receive */ /* buffer used for receive */
@@ -122,6 +122,7 @@ void MyDeviceCommunicationControlSimpleAckHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -63,7 +63,7 @@
* @{ */ * @{ */
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -270,6 +270,7 @@ void MyReadPropertyMultipleAckHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
#if BAC_ROUTING #if BAC_ROUTING
+2 -1
View File
@@ -82,7 +82,7 @@
/*@{*/ /*@{*/
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{ANALOG_INPUT_OBJ_FUNCTIONS}, {ANALOG_INPUT_OBJ_FUNCTIONS},
{ANALOG_OUTPUT_OBJ_FUNCTIONS}, {ANALOG_OUTPUT_OBJ_FUNCTIONS},
@@ -155,6 +155,7 @@ void Devices_Init(
static void Init_Service_Handlers( static void Init_Service_Handlers(
uint32_t first_object_instance ) uint32_t first_object_instance )
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Routing_Device_Init( first_object_instance ); Routing_Device_Init( first_object_instance );
/* we need to handle who-is to support dynamic device binding /* we need to handle who-is to support dynamic device binding
+2 -1
View File
@@ -47,7 +47,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -90,6 +90,7 @@ void MyRejectHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -49,7 +49,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -220,6 +220,7 @@ static void My_NPDU_Handler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+12 -1
View File
@@ -64,7 +64,7 @@ extern bool Routed_Device_Write_Property_Local(
/* Defined in user application; /* Defined in user application;
object functions for all included BACnet objects */ object functions for all included BACnet objects */
extern object_functions_t Object_Table[]; static object_functions_t *Object_Table;
/** Glue function to let the Device object, when called by a handler, /** Glue function to let the Device object, when called by a handler,
* lookup which Object type needs to be invoked. * lookup which Object type needs to be invoked.
@@ -1321,6 +1321,17 @@ bool Device_Write_Property(
return (status); return (status);
} }
/** Initialize the group of object helper functions for any supported Object.
* @ingroup ObjIntf
* @param object_table [in,out] array of structure with object functions.
* Each Child Object must provide some implementation of each of these
* functions in order to properly support the default handlers.
*/
void Device_Initialize_Object_Functions(
object_functions_t *object_table)
{
Object_Table = object_table;
}
/** Initialize the Device Object and each of its child Object instances. /** Initialize the Device Object and each of its child Object instances.
* @ingroup ObjIntf * @ingroup ObjIntf
+2 -1
View File
@@ -51,7 +51,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -185,6 +185,7 @@ static void LocalIAmHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -54,7 +54,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -149,6 +149,7 @@ void My_Read_Property_Ack_Handler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -55,7 +55,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -194,6 +194,7 @@ void My_Read_Property_Multiple_Ack_Handler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -52,7 +52,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -120,6 +120,7 @@ void MyReinitializeDeviceSimpleAckHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -66,7 +66,7 @@
#endif #endif
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{ANALOG_INPUT_OBJ_FUNCTIONS}, {ANALOG_INPUT_OBJ_FUNCTIONS},
{ANALOG_OUTPUT_OBJ_FUNCTIONS}, {ANALOG_OUTPUT_OBJ_FUNCTIONS},
@@ -101,6 +101,7 @@ static uint8_t Rx_Buf[MAX_MPDU] = { 0 };
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is to support dynamic device binding */ /* we need to handle who-is to support dynamic device binding */
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS, handler_who_is); apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS, handler_who_is);
+2 -1
View File
@@ -47,7 +47,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -92,6 +92,7 @@ void MyRejectHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -51,7 +51,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -59,6 +59,7 @@ object_functions_t Object_Table[] = {
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -51,7 +51,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -95,6 +95,7 @@ void MyRejectHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -50,7 +50,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -95,6 +95,7 @@ void MyRejectHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* Note: this applications doesn't need to handle who-is /* Note: this applications doesn't need to handle who-is
it is confusing for the user! */ it is confusing for the user! */
+2 -1
View File
@@ -52,7 +52,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -175,6 +175,7 @@ void My_NPDU_Handler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -51,7 +51,7 @@
#include "dlenv.h" #include "dlenv.h"
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -139,6 +139,7 @@ static void LocalIAmHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+2 -1
View File
@@ -57,7 +57,7 @@
#endif #endif
/* All included BACnet objects */ /* All included BACnet objects */
object_functions_t Object_Table[] = { static object_functions_t Object_Table[] = {
{DEVICE_OBJ_FUNCTIONS}, {DEVICE_OBJ_FUNCTIONS},
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, {MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
}; };
@@ -140,6 +140,7 @@ void MyWritePropertySimpleAckHandler(
static void Init_Service_Handlers( static void Init_Service_Handlers(
void) void)
{ {
Device_Initialize_Object_Functions(&Object_Table[0]);
Device_Init(); Device_Init();
/* we need to handle who-is /* we need to handle who-is
to support dynamic device binding to us */ to support dynamic device binding to us */
+36 -34
View File
@@ -134,20 +134,20 @@ typedef struct object_functions {
typedef struct commonBacObj_s typedef struct commonBacObj_s
{ {
/** The BACnet type of this object (ie, what class is this object from?). /** The BACnet type of this object (ie, what class is this object from?).
* This property, of type BACnetObjectType, indicates membership in a * This property, of type BACnetObjectType, indicates membership in a
* particular object type class. Each inherited class will be of one type. * particular object type class. Each inherited class will be of one type.
*/ */
BACNET_OBJECT_TYPE mObject_Type; BACNET_OBJECT_TYPE mObject_Type;
/** The instance number for this class instance. */ /** The instance number for this class instance. */
uint32_t Object_Instance_Number; uint32_t Object_Instance_Number;
/** Object Name; must be unique. /** Object Name; must be unique.
* This property, of type CharacterString, shall represent a name for * This property, of type CharacterString, shall represent a name for
* the object that is unique within the BACnet Device that maintains it. * the object that is unique within the BACnet Device that maintains it.
*/ */
char Object_Name[MAX_DEV_NAME_LEN]; char Object_Name[MAX_DEV_NAME_LEN];
} COMMON_BAC_OBJECT; } COMMON_BAC_OBJECT;
@@ -162,17 +162,17 @@ typedef struct commonBacObj_s
*/ */
typedef struct devObj_s typedef struct devObj_s
{ {
/** The BACnet Device Address for this device; ->len depends on DLL type. */ /** The BACnet Device Address for this device; ->len depends on DLL type. */
BACNET_ADDRESS bacDevAddr; BACNET_ADDRESS bacDevAddr;
/** Structure for the Object Properties common to all Objects. */ /** Structure for the Object Properties common to all Objects. */
COMMON_BAC_OBJECT bacObj; COMMON_BAC_OBJECT bacObj;
/** Device Description. */ /** Device Description. */
char Description[MAX_DEV_DESC_LEN]; char Description[MAX_DEV_DESC_LEN];
/** The upcounter that shows if the Device ID or object structure has changed. */ /** The upcounter that shows if the Device ID or object structure has changed. */
uint32_t Database_Revision; uint32_t Database_Revision;
} DEVICE_OBJECT_DATA; } DEVICE_OBJECT_DATA;
@@ -182,6 +182,8 @@ extern "C" {
void Device_Init( void Device_Init(
void); void);
void Device_Initialize_Object_Functions(
object_functions_t *object_table);
bool Device_Reinitialize( bool Device_Reinitialize(
BACNET_REINITIALIZE_DEVICE_DATA * rd_data); BACNET_REINITIALIZE_DEVICE_DATA * rd_data);
@@ -309,31 +311,31 @@ extern "C" {
* in the build (lib/Makefile). * in the build (lib/Makefile).
*/ */
void Routing_Device_Init( void Routing_Device_Init(
uint32_t first_object_instance ); uint32_t first_object_instance );
uint16_t Add_Routed_Device( uint16_t Add_Routed_Device(
uint32_t Object_Instance, uint32_t Object_Instance,
const char * Object_Name, const char * Object_Name,
const char * Description ); const char * Description );
DEVICE_OBJECT_DATA * Get_Routed_Device_Object( DEVICE_OBJECT_DATA * Get_Routed_Device_Object(
int idx ); int idx );
BACNET_ADDRESS * Get_Routed_Device_Address( BACNET_ADDRESS * Get_Routed_Device_Address(
int idx ); int idx );
void routed_get_my_address( void routed_get_my_address(
BACNET_ADDRESS * my_address); BACNET_ADDRESS * my_address);
bool Routed_Device_Address_Lookup( bool Routed_Device_Address_Lookup(
int idx, int idx,
uint8_t address_len, uint8_t address_len,
uint8_t * mac_adress ); uint8_t * mac_adress );
bool Routed_Device_GetNext( bool Routed_Device_GetNext(
BACNET_ADDRESS * dest, BACNET_ADDRESS * dest,
int * DNET_list, int * DNET_list,
int * cursor ); int * cursor );
bool Routed_Device_Is_Valid_Network( bool Routed_Device_Is_Valid_Network(
uint16_t dest_net, uint16_t dest_net,
int * DNET_list ); int * DNET_list );
uint32_t Routed_Device_Index_To_Instance( uint32_t Routed_Device_Index_To_Instance(
unsigned index); unsigned index);