Пример #1
0
/**
 * \brief      Radio RF233 process, infinitely awaits a poll, then checks radio
 *             state and handles received data.
 */
PROCESS_THREAD(rf233_radio_process, ev, data)
{
  int len;
  PROCESS_BEGIN();
  PRINTF("RF233: started.\r\n");

  while(1) {
    PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL);
    PRINTF("RF233: polled.\r\n");

    if(interrupt_callback_wants_poll) {
      rf233_interrupt_poll();
    }

    packetbuf_clear();
    // packetbuf_set_attr(PACKETBUF_ATTR_TIMESTAMP, last_packet_timestamp);
    len = rf233_read(packetbuf_dataptr(), PACKETBUF_SIZE);
    if(len > 0) {
      packetbuf_set_datalen(len);
      NETSTACK_RDC.input();
    } else {
      PRINTF("RF233: error while reading: %d\r\n", len);
    }
  }
  PROCESS_END();
}
Пример #2
0
Файл: rf233.c Проект: Idolf/tock
void interrupt_callback() {
  volatile uint8_t irq_source;
  PRINTF("RF233: interrupt handler.\n");
  /* handle IRQ source (for what IRQs are enabled, see rf233-config.h) */
  irq_source = trx_reg_read(RF233_REG_IRQ_STATUS);
  PRINTF("  interrupt sources: 0x%x\n", (int)irq_source);
  if (irq_source & IRQ_PLL_LOCK) {
    PRINTF("RF233: PLL locked.\n");
    radio_pll = true;
    return;
  } else if (irq_source == IRQ_RX_START) {
    PRINTF("RF233: Interrupt receive start.\n");
  } else if (irq_source == IRQ_TRX_DONE) {
    PRINTF("RF233: TRX_DONE handler.\n");
    // Completed a transmission
    if (flag_transmit != 0) {
      PRINTF("RF233: Interrupt transmit.\n");
      flag_transmit = 0;
      if (!(trx_reg_read(RF233_REG_TRX_STATE) & TRX_STATE_TRAC_STATUS)) {
        flag_transmit = ack_status = 1;
      }
      RF233_COMMAND(TRXCMD_RX_ON);
      PRINTF("RF233: TX complete, go back to RX with acks on.\n");
      radio_tx = true;
      return;
    } else {
      //PRINTF("RF233: Interrupt receive.\n");
      packetbuf_clear();
      pending_frame = 1;
      int len = rf233_read(packetbuf_dataptr(), MAX_PACKET_LEN);
      if (len > 0) {
        PRINTF("RF233: Received packet and read from device.\n\n");
      } else {
        PRINTF("RF233: Read failed.\n\n");
      }
      radio_rx = true;
      return;
    }
  }
}