Decode Status Register into Human-Readable Flags

Code

#include <stdio.h>
#include <stdint.h>

#define IS_BIT_SET(REG, POS)    ((REG) & (1 << POS))
#define FLAG0 "Power On"
#define FLAG1 "Error"
#define FLAG2 "Tx Ready"
#define FLAG3 "Rx Ready"
#define FLAG4 "Overheat"
#define FLAG5 "Undervoltage"
#define FLAG6 "Timeout"
#define FLAG7 "Reserved"

void decode_status(uint8_t status_reg) {
    for(uint8_t i = 0; i < 8; i++){
        if(IS_BIT_SET(status_reg, i)){
            if(i == 0) printf("%s\n", FLAG0);
            else if(i == 1) printf("%s\n", FLAG1);
            else if(i == 2) printf("%s\n", FLAG2);
            else if(i == 3) printf("%s\n", FLAG3);
            else if(i == 4) printf("%s\n", FLAG4);
            else if(i == 5) printf("%s\n", FLAG5);
            else if(i == 6) printf("%s\n", FLAG6);
            else if(i == 7) printf("%s\n", FLAG7);
        } 
    }
}

int main() {
    uint8_t reg;
    scanf("%hhu", &reg);
    decode_status(reg);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

13

Expected Output

Power On Tx Ready Rx Ready