APM:Libraries
Classes | Macros | Enumerations | Functions | Variables
sumd.cpp File Reference
#include <stdio.h>
#include <stdint.h>
#include "sumd.h"
Include dependency graph for sumd.cpp:

Go to the source code of this file.

Classes

struct  ReceiverFcPacketHoTT
 

Macros

#define SUMD_MAX_CHANNELS   32
 
#define SUMD_HEADER_LENGTH   3
 
#define SUMD_HEADER_ID   0xA8
 
#define SUMD_ID_SUMH   0x00
 
#define SUMD_ID_SUMD   0x01
 
#define SUMD_ID_FAILSAFE   0x81
 
#define SUMD_RANGE_MIN   0.0f
 
#define SUMD_RANGE_MAX   4096.0f
 
#define SUMD_TARGET_MIN   1000.0f
 
#define SUMD_TARGET_MAX   2000.0f
 
#define SUMD_SCALE_FACTOR   ((SUMD_TARGET_MAX - SUMD_TARGET_MIN) / (SUMD_RANGE_MAX - SUMD_RANGE_MIN))
 
#define SUMD_SCALE_OFFSET   (int)(SUMD_TARGET_MIN - (SUMD_SCALE_FACTOR * SUMD_RANGE_MIN + 0.5f))
 

Enumerations

enum  SUMD_DECODE_STATE {
  SUMD_DECODE_STATE_UNSYNCED = 0, SUMD_DECODE_STATE_GOT_HEADER, SUMD_DECODE_STATE_GOT_STATE, SUMD_DECODE_STATE_GOT_LEN,
  SUMD_DECODE_STATE_GOT_DATA, SUMD_DECODE_STATE_GOT_CRC, SUMD_DECODE_STATE_GOT_CRC16_BYTE_1, SUMD_DECODE_STATE_GOT_CRC16_BYTE_2
}
 

Functions

static uint16_t sumd_crc16 (uint16_t crc, uint8_t value)
 
static uint8_t sumd_crc8 (uint8_t crc, uint8_t value)
 
int sumd_decode (uint8_t byte, uint8_t *rssi, uint8_t *rx_count, uint16_t *channel_count, uint16_t *channels, uint16_t max_chan_count)
 

Variables

static uint8_t _crc8 = 0x00
 
static uint16_t _crc16 = 0x0000
 
static bool _sumd = true
 
static bool _crcOK = false
 
static bool _debug = false
 
static enum SUMD_DECODE_STATE _decode_state = SUMD_DECODE_STATE_UNSYNCED
 
static uint8_t _rxlen
 
static ReceiverFcPacketHoTT _rxpacket
 

Macro Definition Documentation

◆ SUMD_HEADER_ID

#define SUMD_HEADER_ID   0xA8

Definition at line 52 of file sumd.cpp.

Referenced by sumd_decode().

◆ SUMD_HEADER_LENGTH

#define SUMD_HEADER_LENGTH   3

Definition at line 51 of file sumd.cpp.

◆ SUMD_ID_FAILSAFE

#define SUMD_ID_FAILSAFE   0x81

Definition at line 55 of file sumd.cpp.

◆ SUMD_ID_SUMD

#define SUMD_ID_SUMD   0x01

Definition at line 54 of file sumd.cpp.

Referenced by sumd_decode().

◆ SUMD_ID_SUMH

#define SUMD_ID_SUMH   0x00

Definition at line 53 of file sumd.cpp.

Referenced by sumd_decode().

◆ SUMD_MAX_CHANNELS

#define SUMD_MAX_CHANNELS   32

Definition at line 50 of file sumd.cpp.

Referenced by sumd_decode().

◆ SUMD_RANGE_MAX

#define SUMD_RANGE_MAX   4096.0f

Definition at line 104 of file sumd.cpp.

◆ SUMD_RANGE_MIN

#define SUMD_RANGE_MIN   0.0f

Definition at line 103 of file sumd.cpp.

◆ SUMD_SCALE_FACTOR

#define SUMD_SCALE_FACTOR   ((SUMD_TARGET_MAX - SUMD_TARGET_MIN) / (SUMD_RANGE_MAX - SUMD_RANGE_MIN))

Definition at line 110 of file sumd.cpp.

◆ SUMD_SCALE_OFFSET

#define SUMD_SCALE_OFFSET   (int)(SUMD_TARGET_MIN - (SUMD_SCALE_FACTOR * SUMD_RANGE_MIN + 0.5f))

Definition at line 111 of file sumd.cpp.

◆ SUMD_TARGET_MAX

#define SUMD_TARGET_MAX   2000.0f

Definition at line 107 of file sumd.cpp.

◆ SUMD_TARGET_MIN

#define SUMD_TARGET_MIN   1000.0f

Definition at line 106 of file sumd.cpp.

Enumeration Type Documentation

◆ SUMD_DECODE_STATE

Enumerator
SUMD_DECODE_STATE_UNSYNCED 
SUMD_DECODE_STATE_GOT_HEADER 
SUMD_DECODE_STATE_GOT_STATE 
SUMD_DECODE_STATE_GOT_LEN 
SUMD_DECODE_STATE_GOT_DATA 
SUMD_DECODE_STATE_GOT_CRC 
SUMD_DECODE_STATE_GOT_CRC16_BYTE_1 
SUMD_DECODE_STATE_GOT_CRC16_BYTE_2 

Definition at line 72 of file sumd.cpp.

Function Documentation

◆ sumd_crc16()

static uint16_t sumd_crc16 ( uint16_t  crc,
uint8_t  value 
)
static

Definition at line 119 of file sumd.cpp.

Referenced by sumd_decode().

Here is the caller graph for this function:

◆ sumd_crc8()

static uint8_t sumd_crc8 ( uint8_t  crc,
uint8_t  value 
)
static

Definition at line 131 of file sumd.cpp.

Referenced by sumd_decode().

Here is the caller graph for this function:

◆ sumd_decode()

int sumd_decode ( uint8_t  byte,
uint8_t *  rssi,
uint8_t *  rx_count,
uint16_t *  channel_count,
uint16_t *  channels,
uint16_t  max_chan_count 
)

Decoder for SUMD/SUMH protocol

Parameters
bytecurrent char to read
rssipointer to a byte where the RSSI value is written back to
rx_countpointer to a byte where the receive count of packets signce last wireless frame is written back to
channelspointer to a datastructure of size max_chan_count where channel values (12 bit) are written back to
max_chan_countmaximum channels to decode - if more channels are decoded, the last n are skipped and success (0) is returned
Returns
0 for success (a decoded packet), 1 for no packet yet (accumulating), 2 for unknown packet, 3 for out of sync, 4 for checksum error

Definition at line 137 of file sumd.cpp.

Referenced by F4Light::PPM_parser::_process_dsm_pulse(), Linux::RCInput::add_sumd_input(), and F4Light::DSM_parser::init().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ _crc16

uint16_t _crc16 = 0x0000
static

Definition at line 96 of file sumd.cpp.

Referenced by sumd_decode().

◆ _crc8

uint8_t _crc8 = 0x00
static

Definition at line 95 of file sumd.cpp.

Referenced by sumd_decode().

◆ _crcOK

bool _crcOK = false
static

Definition at line 98 of file sumd.cpp.

Referenced by sumd_decode().

◆ _debug

bool _debug = false
static

Definition at line 99 of file sumd.cpp.

Referenced by sumd_decode().

◆ _decode_state

enum SUMD_DECODE_STATE _decode_state = SUMD_DECODE_STATE_UNSYNCED
static

Definition at line 113 of file sumd.cpp.

Referenced by sumd_decode().

◆ _rxlen

uint8_t _rxlen
static

Definition at line 114 of file sumd.cpp.

Referenced by sumd_decode().

◆ _rxpacket

ReceiverFcPacketHoTT _rxpacket
static

Definition at line 116 of file sumd.cpp.

◆ _sumd

bool _sumd = true
static

Definition at line 97 of file sumd.cpp.

Referenced by sumd_decode().