/* for the MS/TP state machine to use for putting received data */ uint16_t dlmstp_put_receive( uint8_t src, /* source MS/TP address */ uint8_t * pdu, /* PDU data */ uint16_t pdu_len) { /* amount of PDU data */ /* PDU is already in the Receive_Buffer */ dlmstp_fill_bacnet_address(&Receive_Buffer.address, src); Receive_Buffer.pdu_len = pdu_len; Receive_Buffer.ready = true; }
/* for the MS/TP state machine to use for putting received data */ uint16_t MSTP_Put_Receive( volatile struct mstp_port_struct_t *mstp_port) { uint16_t pdu_len = 0; if (!Receive_Packet.ready) { /* bounds check - maybe this should send an abort? */ pdu_len = mstp_port->DataLength; if (pdu_len > sizeof(Receive_Packet.pdu)) pdu_len = sizeof(Receive_Packet.pdu); memmove((void *) &Receive_Packet.pdu[0], (void *) &mstp_port->InputBuffer[0], pdu_len); dlmstp_fill_bacnet_address(&Receive_Packet.address, mstp_port->SourceAddress); Receive_Packet.pdu_len = mstp_port->DataLength; Receive_Packet.ready = true; pthread_cond_signal(&Receive_Packet_Flag); } return pdu_len; }