static int rd_set_mode(int mode) { int result; /* Get current radio mode */ if((radio_state == RADIO_UNKNOWN) || (radio_state == RADIO_PWD)) { result = RADIO_MODE_OFF; } else { result = RADIO_MODE_ON; } switch(mode) { case RADIO_MODE_ON: DEBUG("Enabling rx mode\n"); cc110x_init_interrupts(); /* Enable interrupts */ cc110x_setup_rx_mode(); /* Set chip to desired mode */ break; case RADIO_MODE_OFF: cc110x_disable_interrupts(); /* Disable interrupts */ cc110x_switch_to_pwd(); /* Set chip to power down mode */ break; case RADIO_MODE_GET: /* do nothing, just return current mode */ default: /* do nothing */ break; } /* Return previous mode */ return result; }
int _cc110x_set_state(netdev_t *dev, netdev_state_t state) { if (dev != &cc110x_dev) { return -ENODEV; } switch (state) { case NETDEV_STATE_POWER_OFF: gpio_irq_disable(CC110X_GDO2); cc110x_switch_to_pwd(); break; case NETDEV_STATE_RX_MODE: gpio_irq_enable(CC110X_GDO2); cc110x_setup_rx_mode(); break; default: return -ENOTSUP; } return 0; }