Decode Status Register into Human-Readable Flags

Code

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

void decode(uint16_t stat)
{
    switch(stat)
    {
        case 0x01: printf("Power On\n");
        break;
        case 0x02: printf("Error\n");
        break;
        case 0x04: printf("Tx Ready\n");
        break;
        case 0x08: printf("Rx Ready\n");
        break;
        case 0x10: printf("Overheat\n");
        break;
        case 0x20: printf("Undervoltage\n");
        break;
        case 0x40: printf("Timeout\n");
        break;
        case 0x80: printf("Reserved\n");
        break;
    }
}

void decode_status(uint8_t status_reg) {
    uint16_t mask = 0x01;
    while(mask != 0x100)
    {
        if((mask & status_reg) == mask)
        {
            decode(mask);   
        }
        mask = mask << 1;
    }    
}

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