Added Code::Blocks project for read property demo.

Added value decoding and display for read property demo.
Removed the I-Am at the beginning of read property demo.
This commit is contained in:
skarg
2006-02-09 17:29:47 +00:00
parent be12613766
commit f68780ea5e
3 changed files with 425 additions and 13 deletions
+45
View File
@@ -44,8 +44,16 @@
/* for debugging... */
static void PrintReadPropertyData(BACNET_READ_PROPERTY_DATA *data)
{
BACNET_APPLICATION_DATA_VALUE value; /* for decode value data */
int len = 0;
uint8_t *application_data;
int application_data_len;
bool first_value = true;
bool print_brace = false;
if (data)
{
#if 0
if (data->array_index == BACNET_ARRAY_ALL)
fprintf(stderr,"%s #%u %s\n",
bactext_object_type_name(data->object_type),
@@ -57,6 +65,41 @@ static void PrintReadPropertyData(BACNET_READ_PROPERTY_DATA *data)
data->object_instance,
bactext_property_name(data->object_property),
data->array_index);
#endif
application_data = data->application_data;
application_data_len = data->application_data_len;
/* value? need to loop until all of the len is gone... */
for (;;)
{
len = bacapp_decode_application_data(
application_data,
application_data_len,
&value);
if (first_value && (len < application_data_len))
{
first_value = false;
fprintf(stdout,"{");
print_brace = true;
}
bacapp_print_value(stdout,&value,data->object_property);
if (len)
{
if (len < application_data_len)
{
application_data += len;
application_data_len -= len;
/* there's more! */
fprintf(stdout,",");
}
else
break;
}
else
break;
}
if (print_brace)
fprintf(stdout,"}");
fprintf(stdout,"\r\n");
}
}
@@ -75,7 +118,9 @@ void handler_read_property_ack(
service_request,
service_len,
&data);
#if 0
fprintf(stderr,"Received Read-Property Ack!\n");
#endif
if (len > 0)
PrintReadPropertyData(&data);
}
+369
View File
@@ -0,0 +1,369 @@
<?xml version="1.0"?>
<!DOCTYPE CodeBlocks_project_file>
<CodeBlocks_project_file>
<FileVersion major="1" minor="1"/>
<Project>
<Option title="BACnet Read Property Demo"/>
<Option makefile="Makefile"/>
<Option makefile_is_custom="0"/>
<Option compiler="2"/>
<Build>
<Target title="default">
<Option output="C:\code\bacnet-stack\demo\readprop\bacrp.exe"/>
<Option working_dir="."/>
<Option object_output=".objs"/>
<Option deps_output=".deps"/>
<Option type="1"/>
<Option compiler="2"/>
<Option projectResourceIncludeDirsRelation="1"/>
<Compiler>
<Add option="-DBACDL_BIP=1;TSM_ENABLED=1"/>
<Add directory="..\handler"/>
<Add directory="..\object"/>
<Add directory="..\..\..\bacnet-stack"/>
<Add directory="..\..\ports\win32"/>
</Compiler>
<Linker>
<Add library="..\..\..\..\BCC55\Lib\import32.lib"/>
<Add library="..\..\..\..\BCC55\Lib\cw32mt.lib"/>
</Linker>
</Target>
</Build>
<Unit filename="..\..\abort.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\abort.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\address.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\address.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\apdu.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\apdu.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\arf.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\arf.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\awf.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\awf.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacapp.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacapp.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacdcode.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacdcode.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacdef.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacenum.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacerror.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacerror.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacstr.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bacstr.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bactext.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bactext.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bigend.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bigend.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bip.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\bip.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\config.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\datalink.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\datalink.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\client.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\h_iam.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\h_rp.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\h_rp_a.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\h_whois.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\handlers.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\noserv.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\s_rp.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\s_whois.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\txbuf.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\handler\txbuf.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\object\ai.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\object\ai.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\object\ao.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\object\ao.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\object\bacfile.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\object\bacfile.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\object\device.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\object\device.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="readprop.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\filename.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\filename.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\iam.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\iam.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\indtext.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\indtext.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\npdu.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\npdu.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\ports\win32\bip-init.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\reject.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\reject.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\rp.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\rp.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\tsm.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\tsm.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\whois.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\whois.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\wp.c">
<Option compilerVar="CC"/>
<Option target="default"/>
</Unit>
<Unit filename="..\..\wp.h">
<Option compilerVar=""/>
<Option compile="0"/>
<Option link="0"/>
<Option target="default"/>
</Unit>
</Project>
</CodeBlocks_project_file>
+11 -13
View File
@@ -71,10 +71,8 @@ static void MyErrorHandler(
/* FIXME: verify src and invoke id */
(void)src;
(void)invoke_id;
printf("\r\nBACnet Error!\r\n");
printf("Error Class: %s\r\n",
bactext_error_class_name(error_class));
printf("Error Code: %s\r\n",
printf("BACnet Error: %s: %s\r\n",
bactext_error_class_name(error_class),
bactext_error_code_name(error_code));
Error_Detected = true;
}
@@ -87,8 +85,7 @@ void MyAbortHandler(
/* FIXME: verify src and invoke id */
(void)src;
(void)invoke_id;
printf("\r\nBACnet Abort!\r\n");
printf("Abort Reason: %s\r\n",
printf("BACnet Abort: %s\r\n",
bactext_abort_reason_name(abort_reason));
Error_Detected = true;
}
@@ -101,15 +98,14 @@ void MyRejectHandler(
/* FIXME: verify src and invoke id */
(void)src;
(void)invoke_id;
printf("\r\nBACnet Reject!\r\n");
printf("Reject Reason: %s\r\n",
printf("BACnet Reject: %s\r\n",
bactext_reject_reason_name(reject_reason));
Error_Detected = true;
}
static void Init_Service_Handlers(void)
{
/* we need to handle who-is
/* we need to handle who-is
to support dynamic device binding to us */
apdu_set_unconfirmed_handler(
SERVICE_UNCONFIRMED_WHO_IS,
@@ -147,12 +143,12 @@ int main(int argc, char *argv[])
unsigned timeout = 100; // milliseconds
unsigned max_apdu = 0;
time_t elapsed_seconds = 0;
time_t last_seconds = 0;
time_t last_seconds = 0;
time_t current_seconds = 0;
time_t timeout_seconds = 0;
uint8_t invoke_id = 0;
bool found = false;
if (argc < 5)
{
printf("%s device-instance object-type object-instance property [index]\r\n",
@@ -190,7 +186,7 @@ int main(int argc, char *argv[])
Target_Object_Property,MAX_BACNET_PROPERTY_ID+1);
return 1;
}
/* setup my info */
Device_Set_Object_Instance_Number(BACNET_MAX_INSTANCE);
address_init();
@@ -204,6 +200,8 @@ int main(int argc, char *argv[])
last_seconds = time(NULL);
timeout_seconds = (Device_APDU_Timeout() / 1000) *
Device_Number_Of_APDU_Retries();
/* no need to spam the world */
I_Am_Request = false;
/* try to bind with the device */
Send_WhoIs(Target_Device_Object_Instance,Target_Device_Object_Instance);
/* loop forever */
@@ -246,7 +244,7 @@ int main(int argc, char *argv[])
&Target_Address);
if (found)
{
if (invoke_id == 0)
if (invoke_id == 0)
{
invoke_id = Send_Read_Property_Request(
Target_Device_Object_Instance,