Skip to content

File syn_mavlink.h

File List > proto > syn_mavlink.h

Go to the documentation of this file

#ifndef SYN_MAVLINK_H
#define SYN_MAVLINK_H

#ifdef __cplusplus
extern "C" {
#endif

#include "syntropic/common/syn_defs.h"

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

#define SYN_MAVLINK_STX_V2 0xFD          
#define SYN_MAVLINK_MAX_PAYLOAD_LEN 255U 
#define SYN_MAVLINK_HEADER_LEN 10U       
typedef enum {
    SYN_MAVLINK_MSG_HEARTBEAT = 0U,
    SYN_MAVLINK_MSG_SYS_STATUS = 1U,
    SYN_MAVLINK_MSG_ATTITUDE = 30U,
    SYN_MAVLINK_MSG_GLOBAL_POSITION_INT = 33U,
    SYN_MAVLINK_MSG_VFR_HUD = 74U
} SYN_MAVLINK_MsgId;

typedef struct {
    uint8_t payload_len;                          
    uint8_t incompat_flags;                       
    uint8_t compat_flags;                         
    uint8_t seq;                                  
    uint8_t sys_id;                               
    uint8_t comp_id;                              
    uint32_t msg_id;                              
    uint8_t payload[SYN_MAVLINK_MAX_PAYLOAD_LEN]; 
} SYN_MAVLINK_Frame;

typedef struct {
    uint8_t state;                                
    uint8_t payload_len;                          
    uint8_t incompat_flags;                       
    uint8_t compat_flags;                         
    uint8_t seq;                                  
    uint8_t sys_id;                               
    uint8_t comp_id;                              
    uint32_t msg_id;                              
    uint8_t payload_idx;                          
    uint8_t payload[SYN_MAVLINK_MAX_PAYLOAD_LEN]; 
    uint16_t crc;                                 
    SYN_MAVLINK_Frame last_frame;                 
    uint32_t packets_received;                    
    uint32_t crc_errors;                          
} SYN_MAVLINK_Parser;

SYN_Status syn_mavlink_init(SYN_MAVLINK_Parser *parser);

SYN_Status syn_mavlink_parse_byte(SYN_MAVLINK_Parser *parser, uint8_t byte,
                                  SYN_MAVLINK_Frame *frame);

SYN_Status syn_mavlink_encode_msg(uint8_t sys_id, uint8_t comp_id, uint8_t seq, uint32_t msg_id,
                                  uint8_t crc_extra, const uint8_t *payload, uint8_t payload_len,
                                  uint8_t *buf_out, size_t *out_len);

uint16_t syn_mavlink_crc_accumulate(uint8_t byte, uint16_t crc);

#ifdef __cplusplus
}
#endif

#endif /* SYN_MAVLINK_H */