Loading...
Searching...
No Matches
types.h
1/*
2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef _PICO_TYPES_H
8#define _PICO_TYPES_H
9
10#ifndef __ASSEMBLER__
11
12#include "pico/assert.h"
13
14#include <stdint.h>
15#include <stdbool.h>
16#include <stddef.h>
17
18typedef unsigned int uint;
19
20// PICO_CONFIG: PICO_OPAQUE_ABSOLUTE_TIME_T, Enable opaque type for absolute_time_t to help catch inadvertent confusing uint64_t delays with absolute times, default=0, advanced=true, group=pico_base
21#ifndef PICO_OPAQUE_ABSOLUTE_TIME_T
22#define PICO_OPAQUE_ABSOLUTE_TIME_T 0
23#endif
24
38#if PICO_OPAQUE_ABSOLUTE_TIME_T
39typedef struct {
40 uint64_t _private_us_since_boot;
42#else
43typedef uint64_t absolute_time_t;
44#endif
45
52static inline uint64_t to_us_since_boot(absolute_time_t t) {
53#if PICO_OPAQUE_ABSOLUTE_TIME_T
54 return t._private_us_since_boot;
55#else
56 return t;
57#endif
58}
59
67static inline void update_us_since_boot(absolute_time_t *t, uint64_t us_since_boot) {
68#if PICO_OPAQUE_ABSOLUTE_TIME_T
69 assert(us_since_boot <= INT64_MAX);
70 t->_private_us_since_boot = us_since_boot;
71#else
72 *t = us_since_boot;
73#endif
74}
75
82static inline absolute_time_t from_us_since_boot(uint64_t us_since_boot) {
84 update_us_since_boot(&t, us_since_boot);
85 return t;
86}
87
88#if !PICO_OPAQUE_ABSOLUTE_TIME_T
89#define ABSOLUTE_TIME_INITIALIZED_VAR(name, value) name = value
90#else
91#define ABSOLUTE_TIME_INITIALIZED_VAR(name, value) name = {value}
92#endif
93
94// PICO_CONFIG: PICO_INCLUDE_RTC_DATETIME, Whether to include the datetime_t type used with the RP2040 RTC hardware, default=1 on RP2040, group=util_datetime
95#ifndef PICO_INCLUDE_RTC_DATETIME
96#define PICO_INCLUDE_RTC_DATETIME PICO_RP2040
97#endif
98
99#if PICO_INCLUDE_RTC_DATETIME
107typedef struct {
108 int16_t year;
109 int8_t month;
110 int8_t day;
111 int8_t dotw;
112 int8_t hour;
113 int8_t min;
114 int8_t sec;
115} datetime_t;
116#endif
117
118#define bool_to_bit(x) ((uint)!!(x))
119
120#endif
121#endif
static uint64_t to_us_since_boot(absolute_time_t t)
convert an absolute_time_t into a number of microseconds since boot.
Definition types.h:52
static absolute_time_t from_us_since_boot(uint64_t us_since_boot)
convert a number of microseconds since boot to an absolute_time_t
Definition types.h:82
static void update_us_since_boot(absolute_time_t *t, uint64_t us_since_boot)
update an absolute_time_t value to represent a given number of microseconds since boot
Definition types.h:67
uint64_t absolute_time_t
An opaque 64 bit timestamp in microseconds.
Definition types.h:43