| /* | |
| * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230) | |
| * | |
| * SPDX-License-Identifier: BSD-2-Clause | |
| */ | |
| #pragma once | |
| typedef int millicelcius_t; | |
| typedef unsigned int millikelvin_t; | |
| typedef int celcius_t; | |
| typedef unsigned int kelvin_t; | |
| /* The canonical temperature unit is millikelvin */ | |
| typedef millikelvin_t temperature_t; | |
| /* Temperature Conversions */ | |
| #define MILLIKELVIN_OFFSET 273150 | |
| #define MILLIKELVIN_IN_KELVIN 1000 | |
| #define MILLICELCIUS_IN_CELCIUS 1000 | |
| /* Coverts from a millicelcius to millikelvin | |
| * Behaviour when given a value less than -237150 (absolute zero) | |
| * is undefined. | |
| */ | |
| static inline millikelvin_t millicelcius_to_millikelvin(millicelcius_t mc) { | |
| return mc + MILLIKELVIN_OFFSET; | |
| } | |
| /* Converts from millikelvin to millicelcius */ | |
| static inline millicelcius_t millikelvin_to_millicelcius(millikelvin_t mk) { | |
| return mk - MILLIKELVIN_OFFSET; | |
| } | |
| /* Converts from celcius to kelvin */ | |
| static inline kelvin_t celcius_to_kelvin(celcius_t c) { | |
| return millicelcius_to_millikelvin(c * MILLICELCIUS_IN_CELCIUS) / MILLIKELVIN_IN_KELVIN; | |
| } | |
| /* Converts from kelvin to celcius */ | |
| static inline celcius_t kelvin_to_celcius(kelvin_t k) { | |
| return millikelvin_to_millicelcius(k * MILLIKELVIN_IN_KELVIN) / MILLICELCIUS_IN_CELCIUS; | |
| } |