Define an enum for device status flags and implement two functions:
- `set_flag(status, flag)` โ sets a flag, returns new status
- `has_flag(status, flag)` โ returns 1 if flag is set, 0 otherwise
typedef enum {
FLAG_NONE = 0,
FLAG_READY = (1 << 0),
FLAG_BUSY = (1 << 1),
FLAG_ERROR = (1 << 2),
FLAG_OVERFLOW = (1 << 3),
} DeviceFlags;
Why it matters: Hardware registers are made of bit flags. You'll use this every single day writing embedded firmware.
typedef enum {
FLAG_NONE = 0,
FLAG_READY = (1 << 0),
FLAG_BUSY = (1 << 1),
FLAG_ERROR = (1 << 2),
FLAG_OVERFLOW = (1 << 3),
} DeviceFlags;
set_flag(0, FLAG_READY) == 1set_flag(FLAG_READY, FLAG_ERROR) == (FLAG_READY | FLAG_ERROR)has_flag(FLAG_READY | FLAG_ERROR, FLAG_ERROR) == 1has_flag(FLAG_READY, FLAG_BUSY) == 0