# Logger Notes ## Format Types The format type specifies the amount of storage required for the entry and how the content should be interpreted. | Char | C Type | |------|--------| |a | int16_t[32]| |b | int8_t| |B | uint8_t| |h | int16_t| |H | uint16_t| |i | int32_t| |I | uint32_t| |f | float| |d | double| |n | char[4]| |N | char[16]| |Z | char[64]| |L | int32_t latitude/longitude (so -35.1332423 becomes -351332423)| |M | uint8_t flight mode| |q | int64_t| |Q | uint64_t| |g | float16_t| Legacy field types - do not use. These have been replaced by using the base C type and an appropriate multiplier column entry. | Char | CType+Mult | |------|--------------| | c | int16_t * 100| | C | uint16_t * 100| | e | int32_t * 100| | E | uint32_t * 100| ## Units All units here should be base units. This means battery capacity uses "amp \* second" not "milliAmp \* hours". Please keep the names consistent with Tools/autotest/param_metadata/param.py:33 | Char | Unit Abbrev. | Description | Notes | |-----|---|---|---| | '-' | "" | no units e.g. Pi or a string | | '?' | "UNKNOWN" | Units which haven't been worked out yet....| | 'A' | "A" | Ampere| | 'd' | "deg" | of the angular variety | -180 to 180| | 'b' | "B" | bytes| | 'B' | "B/s" | bytes per second | | 'k' | "deg/s" | degrees per second | Not an SI unit, but in some situations more user-friendly than radians per second| | 'D' | "deglatitude" | degrees of latitude| | 'e' | "deg/s/s" | degrees per second per second | Not an SI unit, but in some situations more user-friendly than radians per second^2| | 'E' | "rad/s" | radians per second| | 'G' | "Gauss" | Gauss | Not an SI unit, but 1 tesla = 10000 gauss so a simple replacement is not possible here| | 'h' | "degheading" | 0.? to 359.?| | 'i' | "A.s" | Ampere second| | 'J' | "W.s" | Joule (Watt second)| | 'l' | "l" | litres| | 'L' | "rad/s/s" | radians per second per second| | 'm' | "m" | metres| | 'n' | "m/s" | metres per second| | 'N' | "N" | Newton| | 'o' | "m/s/s" | metres per second per second| | 'O' | "degC" | degrees Celsius | Not an SI unit, but Kelvin is too cumbersome for most users| | '%' | "%" | percent| | 'S' | "satellites" | number of satellites| | 's' | "s" | seconds| | 'q' | "rpm" | revolutions per minute| Not an SI unit, but sometimes more intuitive than Hertz| | 'r' | "rad" | radians| | 't' | "N.m" | Newton meters | torque | | 'U' | "deglongitude" | degrees of longitude| | 'u' | "ppm" | pulses per minute| | 'v' | "V" | Volt| | 'P' | "Pa" | Pascal| | 'w' | "Ohm" | Ohm| | 'W' | "W" | watt | | 'X' | "W.h" | watt hour | | 'Y' | "us" | pulse width modulation in microseconds| | 'z' | "Hz" | Hertz| | '#' | "instance" | (e.g.)Sensor instance number| ## Multipliers This multiplier information applies to the raw value present in the log. Any adjustment implied by the format field (e.g. the "centi" in "centidegrees" is *IGNORED* for the purposes of scaling. Essentially "format" simply tells you the C-type, and format-type h (int16_t) is equivalent to format-type c (int16_t*100) tl;dr a GCS shouldn't/mustn't infer any scaling from the unit name | Char | Multiplier | Description | |------|------------|---| | '-' | 0 | no multiplier e.g. char[4] | | '?' | 1 | multipliers which haven't been worked out yet | | '2' | 1e2 || | '1' | 1e1 || | '0' | 1e0 | x1 | | 'A' | 1e-1 || | 'B' | 1e-2 || | 'C' | 1e-3 || | 'D' | 1e-4 || | 'E' | 1e-5 || | 'F' | 1e-6 || | 'G' | 1e-7 || | 'I' | 1e-9 || | '!' | 3.6 | (milliampere \* hour => ampere \* second) and (km/h => m/s)| | '/' | 3600 | (ampere \* hour => ampere \* second)|