diff --git a/libraries/GCS_MAVLink/GCS_FTP.cpp b/libraries/GCS_MAVLink/GCS_FTP.cpp index aa8929ad6e..89194f3966 100644 --- a/libraries/GCS_MAVLink/GCS_FTP.cpp +++ b/libraries/GCS_MAVLink/GCS_FTP.cpp @@ -19,6 +19,7 @@ #include "GCS.h" #include +#include extern const AP_HAL::HAL& hal; @@ -66,14 +67,14 @@ void GCS_MAVLINK::handle_file_transfer_protocol(const mavlink_message_t &msg) { struct pending_ftp request; request.chan = chan; - request.seq_number = *(uint16_t *)packet.payload; + request.seq_number = le16toh_ptr(packet.payload); request.session = packet.payload[2]; request.opcode = static_cast(packet.payload[3]); request.size = packet.payload[4]; request.req_opcode = static_cast(packet.payload[5]); request.burst_complete = packet.payload[6]; - request.offset = *(uint32_t *)(&packet.payload[8]); + request.offset = le32toh_ptr(&packet.payload[8]); request.sysid = msg.sysid; request.compid = msg.compid; memcpy(request.data, &packet.payload[12], sizeof(packet.payload) - 12); @@ -111,20 +112,20 @@ void GCS_MAVLINK::send_ftp_replies(void) struct pending_ftp reply; uint8_t payload[251] = {}; if (ftp.replies->peek(reply) && (reply.chan == chan)) { - ((uint16_t *)payload)[0] = reply.seq_number; - payload[2] = reply.session; - payload[3] = static_cast(reply.opcode); - payload[4] = reply.size; - payload[5] = static_cast(reply.req_opcode); - payload[6] = reply.burst_complete ? 1 : 0; - *(uint32_t *)(&payload[8]) = reply.offset; - memcpy(&payload[12], reply.data, sizeof(reply.data)); - mavlink_msg_file_transfer_protocol_send( - reply.chan, - 0, reply.sysid, reply.compid, - payload); - ftp.replies->pop(); - ftp.last_send_ms = AP_HAL::millis(); + put_le16_ptr(payload, reply.seq_number); + payload[2] = reply.session; + payload[3] = static_cast(reply.opcode); + payload[4] = reply.size; + payload[5] = static_cast(reply.req_opcode); + payload[6] = reply.burst_complete ? 1 : 0; + put_le32_ptr(&payload[8], reply.offset); + memcpy(&payload[12], reply.data, sizeof(reply.data)); + mavlink_msg_file_transfer_protocol_send( + reply.chan, + 0, reply.sysid, reply.compid, + payload); + ftp.replies->pop(); + ftp.last_send_ms = AP_HAL::millis(); } else { return; } @@ -283,7 +284,7 @@ void GCS_MAVLINK::ftp_worker(void) { reply.opcode = FTP_OP::Ack; reply.size = sizeof(uint32_t); - *((int32_t *)reply.data) = (int32_t)file_size; + put_le32_ptr(reply.data, (uint32_t)file_size); // provide compatibility with old protocol banner download if (strncmp((const char *)request.data, "@PARAM/param.pck", 16) == 0) { @@ -469,7 +470,7 @@ void GCS_MAVLINK::ftp_worker(void) { // reset our scratch area so we don't leak data, and can leverage trimming memset(reply.data, 0, sizeof(reply.data)); reply.size = sizeof(uint32_t); - ((uint32_t *)reply.data)[0] = checksum; + put_le32_ptr(reply.data, checksum); reply.opcode = FTP_OP::Ack; break; }