![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Projet Drone de surveillance du labo TRSE (INGESUP)
Dependencies: mbed PID ADXL345 Camera_LS_Y201 ITG3200 RangeFinder mbos xbee_lib Motor Servo
Diff: Module_Communication/MAVlink/include/protocol.h
- Revision:
- 36:1bbd2fb7d2c8
- Parent:
- 35:95cb34636703
--- a/Module_Communication/MAVlink/include/protocol.h Wed Mar 19 09:27:19 2014 +0000 +++ b/Module_Communication/MAVlink/include/protocol.h Wed Mar 19 11:01:10 2014 +0000 @@ -6,6 +6,7 @@ #include "mavlink_types.h" +extern Serial pc; /** * @brief Initialize the communication stack @@ -64,6 +65,9 @@ static inline uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, uint16_t length) { // This code part is the same for all messages; + //for extra seed in mavlink 1.0 + static const uint8_t mavlink_message_crcs[256] = MAVLINK_MESSAGE_CRCS; + uint16_t checksum; msg->len = length; msg->sysid = system_id; @@ -72,7 +76,8 @@ msg->seq = mavlink_get_channel_status(MAVLINK_COMM_0)->current_tx_seq; mavlink_get_channel_status(MAVLINK_COMM_0)->current_tx_seq = mavlink_get_channel_status(MAVLINK_COMM_0)->current_tx_seq+1; checksum = crc_calculate((uint8_t*)((void*)msg), length + MAVLINK_CORE_HEADER_LEN); - crc_accumulate(50, &checksum); + //for extra seed in mavlink 1.0 + crc_accumulate(mavlink_message_crcs[msg->msgid], &checksum); msg->ck_a = (uint8_t)(checksum & 0xFF); ///< High byte msg->ck_b = (uint8_t)(checksum >> 8); ///< Low byte @@ -203,6 +208,9 @@ { static mavlink_message_t m_mavlink_message[MAVLINK_COMM_NUM_BUFFERS]; + // For crc calculation with extra seed in mavlink 1.0 + //static const uint8_t mavlink_message_crcs[256] = MAVLINK_MESSAGE_CRCS; + // Initializes only once, values keep unchanged after first initialization mavlink_parse_state_initialize(mavlink_get_channel_status(chan)); @@ -282,6 +290,10 @@ break; case MAVLINK_PARSE_STATE_GOT_PAYLOAD: + /* Add seed to checksum depending on message id */ + //mavlink_update_checksum(rxmsg, mavlink_message_crcs[rxmsg->msgid]); + //pc.printf("Calculated Checksum : a %d b %d\n", rxmsg->ck_a, rxmsg->ck_b); + /*if (c != rxmsg->ck_a) { // Check first checksum byte