Decode Status Register into Human-Readable Flags

Code

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

#define SIZE 8

void decode_status(uint8_t status_reg) 
{
    const char* mapping[SIZE] = {
        "Power On",
        "Error",
        "Tx Ready",
        "Rx Ready",
        "Overheat",
        "Undervoltage",
        "Timeout",
        "Reserved"
    };
    for(uint8_t i = 0; i < 8; i++)
    {
        if(status_reg & (1<<i))
        printf("%s\n", mapping[i]);
    }
}

// void decode_status(uint8_t status_reg) 
// {
//     for(uint8_t i = 0; i < 8; i++)
//     {
//         if(status_reg & (1<<i))
//         {
//             switch(i){
//             case 0: 
//                 printf("Power On\n"); 
//                 break;
//             case 1: 
//                 printf("Error\n"); 
//                 break;
//             case 2: 
//                 printf("Tx Ready\n"); 
//                 break;
//             case 3: 
//                 printf("Rx Ready\n"); 
//                 break;
//             case 4: 
//                 printf("Overheat\n"); 
//                 break;
//             case 5: 
//                 printf("Undervoltage\n"); 
//                 break;
//             case 6: 
//                 printf("Timeout\n"); 
//                 break;
//             case 7: 
//                 printf("Reserved\n"); 
//                 break;
//             default: 
//                 printf("Nothing"); 
//                 break;
//             }
//         }
        
//     }
// }

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