blob: 3d5273181d61152d7b93d5ca0b0b74792da3d258 [file] [log] [blame] [edit]
/*
* 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;
}