1
0
mirror of https://github.com/stargieg/bacnet-stack synced 2025-10-26 23:35:52 +08:00

fix ipaddr store to mac

This commit is contained in:
Patrick Grimm 2013-04-29 01:47:30 +02:00
parent 0a64e5f2b1
commit a5476234c5

View File

@ -164,14 +164,15 @@ void Notification_Class_Init(
}
/* set the basic parameters */
NC_Descr[i].Ack_Required = 0;
NC_Descr[i].Ack_Required = 7; //TODO uci
NC_Descr[i].Priority[TRANSITION_TO_OFFNORMAL] = 255; /* The lowest priority for Normal message. */
NC_Descr[i].Priority[TRANSITION_TO_FAULT] = 255; /* The lowest priority for Normal message. */
NC_Descr[i].Priority[TRANSITION_TO_NORMAL] = 255; /* The lowest priority for Normal message. */
ucirecp_n = ucix_get_list(ucirecp, ctx, "bacnet_nc", idx_c,
"recipient");
for (ucirecp_i = 0; ucirecp_i < ucirecp_n; ucirecp_i++) {
recplist[ucirecp_i].ValidDays = 127; //bit string 1,1,1,1,1,1,1 Mo,Di,Mi,Do,Fr,Sa,So
//BACNET_ADDRESS * src = { 0 };
recplist[ucirecp_i].ValidDays = 127; //TODO uci bit string 1,1,1,1,1,1,1 Mo,Di,Mi,Do,Fr,Sa,So
recplist[ucirecp_i].FromTime.hour = 0;
recplist[ucirecp_i].FromTime.min = 0;
recplist[ucirecp_i].FromTime.sec = 0;
@ -180,6 +181,7 @@ void Notification_Class_Init(
recplist[ucirecp_i].ToTime.min = 59;
recplist[ucirecp_i].ToTime.sec = 59;
recplist[ucirecp_i].ToTime.hundredths = 99;
recplist[ucirecp_i].ConfirmedNotify = false;
recplist[ucirecp_i].Recipient.RecipientType =
RECIPIENT_TYPE_ADDRESS;
recplist[ucirecp_i].Recipient._.Address.len = 0;
@ -189,28 +191,37 @@ void Notification_Class_Init(
src_net = "65535";
}
recplist[ucirecp_i].Recipient._.Address.net = atoi(src_net);
fprintf(stderr,"net: %i\n", recplist[ucirecp_i].Recipient._.Address.net);
if (atoi(src_net) != 65535) {
uci_ptr = strtok(NULL, ":");
src_ip = uci_ptr;
uci_ptr = strtok(NULL, "\0");
src_port = atoi(uci_ptr);
//src[4] = src_port;
src_port1 = ( src_port / 256 );
//src[5] = src_port - ( src_port1 * 256 );
src_port2 = src_port - ( src_port1 * 256 );
uci_ptr_a = strtok(src_ip, ".");
recplist[ucirecp_i].Recipient._.Address.adr[0] = atoi(uci_ptr_a);
//src.mac[0] = = atoi(uci_ptr_a);
recplist[ucirecp_i].Recipient._.Address.mac[0] = atoi(uci_ptr_a);
uci_ptr_a = strtok(NULL, ".");
recplist[ucirecp_i].Recipient._.Address.adr[1] = atoi(uci_ptr_a);
//src.mac[1] = = atoi(uci_ptr_a);
recplist[ucirecp_i].Recipient._.Address.mac[1] = atoi(uci_ptr_a);
uci_ptr_a = strtok(NULL, ".");
recplist[ucirecp_i].Recipient._.Address.adr[2] = atoi(uci_ptr_a);
//src.mac[2] = = atoi(uci_ptr_a);
recplist[ucirecp_i].Recipient._.Address.mac[2] = atoi(uci_ptr_a);
uci_ptr_a = strtok(NULL, ".");
recplist[ucirecp_i].Recipient._.Address.adr[3] = atoi(uci_ptr_a);
recplist[ucirecp_i].Recipient._.Address.adr[4] = src_port1;
recplist[ucirecp_i].Recipient._.Address.adr[5] = src_port2;
recplist[ucirecp_i].Recipient._.Address.len = 6;
//src.mac[3] = = atoi(uci_ptr_a);
recplist[ucirecp_i].Recipient._.Address.mac[3] = atoi(uci_ptr_a);
recplist[ucirecp_i].Recipient._.Address.mac[4] = src_port1;
recplist[ucirecp_i].Recipient._.Address.mac[5] = src_port2;
//recplist[ucirecp_i].Recipient._.Address.mac = src;
recplist[ucirecp_i].Recipient._.Address.mac_len = 6;
recplist[ucirecp_i].Recipient._.Address.len = 0;
recplist[ucirecp_i].ConfirmedNotify = false;
}
recplist[ucirecp_i].ProcessIdentifier = ucirecp_i;
recplist[ucirecp_i].Transitions = 7; //bit string 1,1,1 To Alarm,To Fault,To Normal
recplist[ucirecp_i].ConfirmedNotify = true;
}
for (ucirecp_i = 0; ucirecp_i < ucirecp_n; ucirecp_i++) {
BACNET_ADDRESS src = { 0 };
@ -231,8 +242,8 @@ void Notification_Class_Init(
} else if (NC_Descr[i].Recipient_List[ucirecp_i].Recipient.
RecipientType == RECIPIENT_TYPE_ADDRESS) {
/* copy Address */
/* src = CurrentNC->Recipient_List[idx].Recipient._.Address; */
/* address_bind_request(BACNET_MAX_INSTANCE, &max_apdu, &src); */
src = NC_Descr[i].Recipient_List[ucirecp_i].Recipient._.Address;
address_bind_request(BACNET_MAX_INSTANCE, &max_apdu, &src);
}
}
}
@ -987,6 +998,7 @@ bool Notification_Class_Write_Property(
return false;
}
/* store value */
unsigned src_port,src_port1,src_port2;
if (TmpNotify.Recipient_List[idx].Recipient._.Address.
net == 0) {
memcpy(TmpNotify.Recipient_List[idx].Recipient._.
@ -994,6 +1006,26 @@ bool Notification_Class_Write_Property(
value.type.Octet_String.length);
TmpNotify.Recipient_List[idx].Recipient._.Address.
mac_len = value.type.Octet_String.length;
src_port1 = TmpNotify.Recipient_List[idx].Recipient._.
Address.mac[4];
src_port2 = TmpNotify.Recipient_List[idx].Recipient._.
Address.mac[5];
src_port = ( src_port1 * 256 ) + src_port2;
sprintf(uci_str, "%i,%i.%i.%i.%i:%i\n", TmpNotify.
Recipient_List[idx].Recipient._.Address.net,
TmpNotify.Recipient_List[idx].Recipient._.
Address.mac[0],
TmpNotify.Recipient_List[idx].Recipient._.
Address.mac[1],
TmpNotify.Recipient_List[idx].Recipient._.
Address.mac[2],
TmpNotify.Recipient_List[idx].Recipient._.
Address.mac[3],
src_port);
if(ctx) {
sprintf(ucirecp[ucirecp_n], "%s", uci_str);
ucirecp_n++;
}
} else if (TmpNotify.Recipient_List[idx].Recipient._.Address.
net != 65535) {
memcpy(TmpNotify.Recipient_List[idx].Recipient._.
@ -1001,7 +1033,6 @@ bool Notification_Class_Write_Property(
value.type.Octet_String.length);
TmpNotify.Recipient_List[idx].Recipient._.Address.len =
value.type.Octet_String.length;
unsigned src_port,src_port1,src_port2;
src_port1 = TmpNotify.Recipient_List[idx].Recipient._.
Address.adr[4];
src_port2 = TmpNotify.Recipient_List[idx].Recipient._.
@ -1246,7 +1277,6 @@ void Notification_Class_common_reporting_function(
uint32_t object_index;
uint8_t index;
object_index =
Notification_Class_Instance_To_Index(event_data->notificationClass);
@ -1255,7 +1285,6 @@ void Notification_Class_common_reporting_function(
else
return;
/* Initiating Device Identifier */
event_data->initiatingObjectIdentifier.type = OBJECT_DEVICE;
event_data->initiatingObjectIdentifier.instance =
@ -1304,7 +1333,10 @@ void Notification_Class_common_reporting_function(
if (IsRecipientActive(pBacDest, event_data->toState) == true) {
BACNET_ADDRESS dest;
uint32_t device_id;
//BACNET_ADDRESS dest_adr;
unsigned max_apdu;
//uint8_t i = 0;
//uint8_t adr_len = 0;
/* Process Identifier */
event_data->processIdentifier = pBacDest->ProcessIdentifier;
@ -1325,6 +1357,18 @@ void Notification_Class_common_reporting_function(
if (pBacDest->ConfirmedNotify == true) {
if (address_get_device_id(&dest, &device_id))
Send_CEvent_Notify(device_id, event_data);
// dest_adr = pBacDest->Recipient._.Address;
// if (address_get_device_id(&dest_adr, &device_id)) {
// fprintf(stderr,"device id: %i len: %i net: %i\n",
// device_id, dest_adr.len, dest_adr.net);
// fprintf(stderr,"reporting dev id ConfirmedNotify\n");
// Send_CEvent_Notify(device_id, event_data);
// dest = pBacDest->Recipient._.Address;
// Send_UEvent_Notify(Handler_Transmit_Buffer, event_data,
// &dest);
// } else {
// fprintf(stderr,"reporting dev id ConfirmedNotify false\n");
// }
} else {
dest = pBacDest->Recipient._.Address;
Send_UEvent_Notify(Handler_Transmit_Buffer, event_data,