All submissions

Decode Status Register into Human-Readable Flags

Code

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


typedef struct
{
    uint8_t power_on : 1;
    uint8_t error    : 1;
    uint8_t tx_ready : 1;
    uint8_t rx_ready : 1;
    uint8_t overheat : 1;
    uint8_t undervoltage : 1;
    uint8_t timeout : 1;
    uint8_t researved: 1;
}status_reg_t;


typedef union
{
    uint8_t reg;
    status_reg_t sr;
}status_reg_u;

void decode_status(uint8_t status_reg) 
{
 status_reg_u u;
 u.reg = status_reg;

 if(u.sr.power_on)
 {
    printf("Power On\n");
 }
 if(u.sr.error)
 {
    printf("Error\n");
 }
  if(u.sr.tx_ready)
 {
    printf("Tx Ready\n");
 }

  if(u.sr.rx_ready)
 {
    printf("Rx Ready\n");
 }

  if(u.sr.overheat)
 {
    printf("Overheat\n");
 }

  if(u.sr.undervoltage)
 {
    printf("Undervoltage\n");
 }

  if(u.sr.timeout)
 {
    printf("Timeout\n");
 }

  if(u.sr.researved)
 {
    printf("Reserved\n");
 }

}

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

Solving Approach

 

 

 

Loading...

Input

13

Expected Output

Power On Tx Ready Rx Ready