Decode Status Register into Human-Readable Flags

Code

#include <stdio.h>
#include <stdint.h>
#define MASK            (uint8_t)1
#define CHECK_POWER_ON(X)   ((((uint8_t)X)>>0)&MASK)  
#define ERROR_STS(X)        ((((uint8_t)X)>>1)&MASK)
#define CHECK_TxREADY(X)    ((((uint8_t)X)>>2)&MASK)
#define CHECK_RxREADY(X)    ((((uint8_t)X)>>3)&MASK)
#define CHECK_OVRHEAT(X)    ((((uint8_t)X)>>4)&MASK)
#define CHECK_UNDERVOLT(X)  ((((uint8_t)X)>>5)&MASK)
#define CHECK_TIMEOUT(X)    ((((uint8_t)X)>>6)&MASK)
#define RESERVED(X)         ((((uint8_t)X)>>7)&MASK)

void decode_status(uint8_t status_reg) {
    // Your logic here
    if(CHECK_POWER_ON(status_reg))
    {
        printf("Power On\n");
    } 
     if(ERROR_STS(status_reg))
    {
        printf("Error\n");
    } 
     if(CHECK_TxREADY(status_reg))
    {
        printf("Tx Ready\n");
    } 
     if(CHECK_RxREADY(status_reg))
    {
        printf("Rx Ready\n");
    } 
     if(CHECK_OVRHEAT(status_reg))
    {
        printf("Overheat\n");
    } 
    if(CHECK_UNDERVOLT(status_reg))
    {
        printf("Undervoltage\n");
    }
    if(CHECK_TIMEOUT(status_reg))
    {
        printf("Timeout\n");
    }
    if(RESERVED(status_reg))
    {
        printf("Reserved");
    }
}

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