OpenLCP/protocol/esta/rdm/status.h

60 lines
2.2 KiB
C++

/*
status.h
Copyright (c) 2021 Kevin Matz (kevin.matz@gmail.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#pragma once
#include <cstdint>
#include <memory>
namespace RDM {
/**
* @brief \cite RDM 10.3.2 Status Messages
*
* The Status Type of STATUS_NONE shall be used when a controller wants to establish whether
* a device is present on the network without retrieving any Status Message data from the device.
*
* The Status Type STATUS_GET_LAST_MESSAGE shall be used by the Controller to request the
* retransmission of the last sent Status Message or Queued Message.
*/
struct Status
{
/// Each status message shall be a fixed length of 9 bytes.
union {
uint8_t bytes[9] = {0};
struct {
uint16_t subdevice_id; //!< 10.3.2.1 Sub-Device ID
uint8_t status_type; //!< 10.3.2.2 Status Type
uint16_t status_message_id; //!< 10.3.2.3 Status Message ID
int16_t data1; //!< 10.3.2.4 Data Value 1
int16_t data2; //!< 10.3.2.4 Data Value 2
} __attribute__ ((packed));
};
}; // struct Status
using StatusPtr = std::shared_ptr<Status>; //!< A memory managed Status pointer
} // namespace RDM