| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- #include "user_rid.h"
- #include "dronecan.h"
- #include <dronecan.remoteid.Location.h>
- #include <dronecan.remoteid.ArmStatus.h>
- #include <dronecan.remoteid.BasicID.h>
- #include <uavcan.protocol.NodeStatus.h>
- #include <dronecan.remoteid.OperatorID.h>
- #include <dronecan.remoteid.SelfID.h>
- #include <dronecan.remoteid.System.h>
- #include "string.h"
- Connect_check remoteid_link;
- _armStatusID_msg StatusId;
- _location_msg locationId;
- _operatorId_msg operatorId;
- _basicId_msg basicId;
- _selfId_msg selfId;
- _sys_operator_msg systemId;
- void send_location_msg( void )
- {
- static uint8_t transfer_id = 0;
- struct dronecan_remoteid_Location msg;
- uint8_t buffer[DRONECAN_REMOTEID_LOCATION_MAX_SIZE] = {0};
- msg.id_or_mac.len = 20;
- memcpy(&msg.id_or_mac.data, &locationId.id_or_mac, msg.id_or_mac.len);
- msg.status = locationId.status;
- msg.direction = locationId.direction;
- msg.speed_horizontal = locationId.speed_horizontal;
- msg.speed_vertical = locationId.speed_vertical;
- msg.latitude = locationId.latitude;
- msg.longitude = locationId.longitude;
- msg.altitude_barometric = locationId.altitude_barometric;
- msg.altitude_geodetic = locationId.altitude_geodetic;
- msg.height_reference = locationId.height_reference;
- msg.height = locationId.height;
- msg.horizontal_accuracy = locationId.horizontal_accuracy;
- msg.vertical_accuracy = locationId.vertical_accuracy;
- msg.barometer_accuracy = locationId.barometer_accuracy;
- msg.speed_accuracy = locationId.speed_accuracy;
- msg.timestamp = locationId.timestamp;
- msg.timestamp_accuracy = locationId.timestamp_accuracy;
- uint32_t len = dronecan_remoteid_Location_encode(&msg, buffer);
- CanardTxTransfer tx_transfer = {
- .data_type_signature = DRONECAN_REMOTEID_LOCATION_SIGNATURE,
- .data_type_id = DRONECAN_REMOTEID_LOCATION_ID,
- .inout_transfer_id = &transfer_id,
- .priority = CANARD_TRANSFER_PRIORITY_MEDIUM,
- .transfer_type = CanardTransferTypeBroadcast,
- .payload = buffer,
- .payload_len = len,
- };
- dronecan_broadcast(&tx_transfer);
- }
- void send_basicID(void)
- {
- static uint8_t transfer_id = 0;
- struct dronecan_remoteid_BasicID msg;
- uint8_t buffer[DRONECAN_REMOTEID_BASICID_MAX_SIZE] = {0};
- msg.id_or_mac.len = 20;
- memcpy(&msg.id_or_mac.data, &basicId.id_or_mac, msg.id_or_mac.len);
- msg.id_type = basicId.id_type;
- msg.ua_type = basicId.ua_type;
- msg.uas_id.len = 20;
- memcpy(&msg.uas_id.data, &basicId.uas_id, msg.uas_id.len);
- uint32_t len = dronecan_remoteid_BasicID_encode(&msg, buffer);
- CanardTxTransfer tx_transfer = {
- .data_type_signature = DRONECAN_REMOTEID_BASICID_SIGNATURE,
- .data_type_id = DRONECAN_REMOTEID_BASICID_ID,
- .inout_transfer_id = &transfer_id,
- .priority = CANARD_TRANSFER_PRIORITY_MEDIUM,
- .transfer_type = CanardTransferTypeBroadcast,
- .payload = buffer,
- .payload_len = len,
- };
- dronecan_broadcast(&tx_transfer);
- }
- void send_operatorID(void)
- {
- static uint8_t transfer_id = 0;
- struct dronecan_remoteid_OperatorID msg;
- uint8_t buffer[DRONECAN_REMOTEID_OPERATORID_MAX_SIZE] = {0};
- msg.id_or_mac.len = 20;
- memcpy(&msg.id_or_mac.data, &operatorId.id_or_mac, msg.id_or_mac.len);
- msg.operator_id_type = operatorId.operator_id_type;
- msg.operator_id.len = 20;
- memcpy(&msg.operator_id.data, &operatorId.operator_id, msg.operator_id.len);
- uint32_t len = dronecan_remoteid_OperatorID_encode(&msg, buffer);
- CanardTxTransfer tx_transfer = {
- .data_type_signature = DRONECAN_REMOTEID_OPERATORID_SIGNATURE,
- .data_type_id = DRONECAN_REMOTEID_OPERATORID_ID,
- .inout_transfer_id = &transfer_id,
- .priority = CANARD_TRANSFER_PRIORITY_MEDIUM,
- .transfer_type = CanardTransferTypeBroadcast,
- .payload = buffer,
- .payload_len = len,
- };
- dronecan_broadcast(&tx_transfer);
- }
- void send_sysOperatorID(void)
- {
- static uint8_t transfer_id = 0;
- struct dronecan_remoteid_System msg;
- uint8_t buffer[DRONECAN_REMOTEID_SYSTEM_MAX_SIZE] = {0};
- msg.id_or_mac.len = 20;
- memcpy(&msg.id_or_mac.data, &systemId.id_or_mac, msg.id_or_mac.len);
- msg.operator_location_type = systemId.operator_location_type;
- msg.classification_type = systemId.classification_type;
- msg.operator_latitude = systemId.operator_latitude;
- msg.operator_longitude = systemId.operator_longitude;
- msg.area_count = systemId.area_count;
- msg.area_radius = systemId.area_radius;
- msg.area_ceiling = systemId.area_ceiling;
- msg.area_floor = systemId.area_floor;
- msg.category_eu = systemId.category_eu;
- msg.class_eu = systemId.class_eu;
- msg.operator_altitude_geo = systemId.operator_altitude_geo;
- msg.timestamp = systemId.timestamp;
- uint32_t len = dronecan_remoteid_System_encode(&msg, buffer);
- CanardTxTransfer tx_transfer = {
- .data_type_signature = DRONECAN_REMOTEID_SYSTEM_SIGNATURE,
- .data_type_id = DRONECAN_REMOTEID_SYSTEM_ID,
- .inout_transfer_id = &transfer_id,
- .priority = CANARD_TRANSFER_PRIORITY_MEDIUM,
- .transfer_type = CanardTransferTypeBroadcast,
- .payload = buffer,
- .payload_len = len,
- };
- dronecan_broadcast(&tx_transfer);
- }
- void send_selfID(void)
- {
- static uint8_t transfer_id = 0;
- struct dronecan_remoteid_SelfID msg;
- uint8_t buffer[DRONECAN_REMOTEID_SELFID_MAX_SIZE] = {0};
- msg.id_or_mac.len = 20;
- memcpy(&msg.id_or_mac.data, &selfId.id_or_mac, msg.id_or_mac.len);
- msg.description_type = selfId.description_type;
- msg.description.len = 23;
- memcpy(&msg.description.data, &selfId.description, msg.description.len);
- uint32_t len = dronecan_remoteid_SelfID_encode(&msg, buffer);
- CanardTxTransfer tx_transfer = {
- .data_type_signature = DRONECAN_REMOTEID_SELFID_SIGNATURE,
- .data_type_id = DRONECAN_REMOTEID_SELFID_ID,
- .inout_transfer_id = &transfer_id,
- .priority = CANARD_TRANSFER_PRIORITY_MEDIUM,
- .transfer_type = CanardTransferTypeBroadcast,
- .payload = buffer,
- .payload_len = len,
- };
- dronecan_broadcast(&tx_transfer);
- }
- int remoteid_OnRecieved(CanardInstance *canardIns,
- CanardRxTransfer *transfer)
- {
- int ret = 0;
- struct dronecan_remoteid_ArmStatus info;
- static int TimeDelay = 0;
- if (transfer->transfer_type == CanardTransferTypeBroadcast)
- {
- if( transfer->data_type_id == DRONECAN_REMOTEID_ARMSTATUS_ID)
- {
- if (!dronecan_remoteid_ArmStatus_decode(transfer, &info)) {
- StatusId.status = info.status;
- if( StatusId.status != 0 && HAL_GetTick() - TimeDelay > 2500)
- {
- memcpy(&StatusId.status, &info.status, sizeof(struct dronecan_remoteid_ArmStatus));
- }
- else
- {
- StatusId.status = 0;
- TimeDelay = HAL_GetTick();
- memset(&StatusId.len,0,51);
- }
- StatusId.len = 50;
- remoteid_link.connect_status = COMP_NORMAL;
- }
- }
- }
- return ret;
- }
- bool remoteid_shouldAcceptTransfer(const CanardInstance *ins,
- uint64_t *out_data_type_signature,
- uint16_t data_type_id,
- CanardTransferType transfer_type,
- uint8_t source_node_id) {
- bool ret = false;
-
- if (data_type_id == DRONECAN_REMOTEID_ARMSTATUS_ID &&
- transfer_type == CanardTransferTypeBroadcast) {
- *out_data_type_signature = DRONECAN_REMOTEID_ARMSTATUS_SIGNATURE;
- ret = true;
- }
- if (data_type_id == UAVCAN_PROTOCOL_NODESTATUS_ID &&
- transfer_type == CanardTransferTypeBroadcast) {
- *out_data_type_signature = UAVCAN_PROTOCOL_NODESTATUS_SIGNATURE;
- ret = true;
- }
- return ret;
- }
- void send_msg_to_remoteid(void)
- {
- static uint32_t SendTime_N2HZ = 0;
- static uint32_t SendTime_N3HZ = 0;
- static uint32_t SendTime_N4HZ = 0;
- static uint32_t SendTime_N5HZ = 0;
- static uint32_t SendTime_N6HZ = 0;
- if ( HAL_GetTick() - SendTime_N2HZ > 555 )
- {
- //send_node_status();
- send_location_msg();
-
- SendTime_N2HZ = HAL_GetTick();
- }
- if ( HAL_GetTick() - SendTime_N3HZ > 666 )
- {
- send_sysOperatorID();
- SendTime_N3HZ = HAL_GetTick();
- }
- if ( HAL_GetTick() - SendTime_N4HZ > 333 )
- {
- send_basicID();
- SendTime_N4HZ = HAL_GetTick();
- }
- if ( HAL_GetTick() - SendTime_N6HZ > 1777 )
- {
- send_operatorID();
- SendTime_N6HZ = HAL_GetTick();
- }
- if ( HAL_GetTick() - SendTime_N5HZ > 1888 )
- {
- send_selfID();
- SendTime_N5HZ = HAL_GetTick();
- }
-
- dronecan_tx_processing();
- }
|