#include <stdio.h>
#include <stdint.h>
typedef enum{
POWER_ON = 0,
ERROR,
TX_RDY,
RX_RDY,
OVERHEAT,
UNDERVLTGE,
TIMEOUT,
RESERVD
}status_flag_t;
typedef struct{
uint8_t mask;
const char *str;
}error_res_t;
const error_res_t maps[] = {
[POWER_ON] = {.mask = (1<<POWER_ON),.str = "Power On"},
[ERROR] = {.mask = (1<<ERROR),.str = "Error"},
[TX_RDY] = {.mask = (1<<TX_RDY),.str = "Tx Ready"},
[RX_RDY] = {.mask = (1<<RX_RDY),.str = "Rx Ready"},
[OVERHEAT] = {.mask = (1<<OVERHEAT),.str = "Overheat"},
[UNDERVLTGE] = {.mask = (1<<UNDERVLTGE),.str = "Undervoltage"},
[TIMEOUT] = {.mask = (1<<TIMEOUT),.str = "Timeout"},
[RESERVD] = {.mask = (1<<RESERVD),.str = "Reserved"}
};
void decode_status(uint8_t status_reg) {
// Your logic here
for(int i = 0;i<sizeof(maps)/sizeof(maps[0]);i++){
if(status_reg & maps[i].mask){
printf("%s\n",maps[i].str);
}
}
}
int main() {
uint8_t reg;
scanf("%hhu", ®);
decode_status(reg);
return 0;
}
Solving Approach
Input
13
Expected Output
Power On Tx Ready Rx Ready