Beispiel #1
0
/*---------------------------------------------------------------------------*/
void
tr1001_init(void)
{
  PT_INIT(&rxhandler_pt);

  onoroff = OFF;

  UCTL0 = CHAR;                         /* 8-bit character */
  UTCTL0 = SSEL1;                       /* UCLK = SMCLK */

  tr1001_set_speed(TR1001_19200);

  ME1 |= UTXE0 + URXE0;                 /* Enable USART0 TXD/RXD */

  /* Turn on receive interrupt. */
  IE1 |= URXIE0;

  timer_set(&rxtimer, CLOCK_SECOND / 4);


  tr1001_on();
  tr1001_set_txpower(100);

  /* Reset reception state. */
  rxclear();

  process_start(&tr1001_process, NULL);
}
Beispiel #2
0
/*---------------------------------------------------------------------------*/
static int
tr1001_off(void)
{
  if(onoroff == OFF) {
    return 1;
  }
  onoroff = OFF;
  rxoff();
  rxclear();

  ENERGEST_OFF(ENERGEST_TYPE_LISTEN);
  return 1;
}
Beispiel #3
0
/*------------------------------------------------------------------------------*/
u8_t
tr1001_send_acked(void)
{
  unsigned short tmplen, count;
  struct tr1001_hdr *ackhdr = (struct tr1001_hdr *)rxbuf;
  ek_clock_t start;
  
  
  tr1001_send();

  start = ek_clock();
  count = 0;
  P2OUT &= 0xFB;
  /* Block while checking if a packet has arrived. */
  while((volatile u8_t)rxstate != RXSTATE_FULL &&
	(volatile u8_t)rxstate != RXSTATE_ERROR) {
    /* Wait no more than one second. */
    if((ek_clock_t)(ek_clock() - start) > (ek_clock_t)CLK_TCK) {
      break;
    }
  }
  P2OUT |= 0x04;
    
  
  if(rxstate == RXSTATE_FULL) {
    if(ackhdr->type == TR1001_TYPE_ACK &&
       ackhdr->id == packet_id) {
      beep();
      rxclear();
      return UIP_FW_OK;
    }
  }

  if(rxstate == RXSTATE_ERROR) {
    rxclear();
    blink();
  }
  return UIP_FW_DROPPED;
}
Beispiel #4
0
/*------------------------------------------------------------------------------*/
unsigned short
tr1001_poll(void)
{
  unsigned short tmplen;
  
  if(rxstate == RXSTATE_FULL) {
    if(rxlen > UIP_BUFSIZE - UIP_LLH_LEN) {
      rxlen = UIP_BUFSIZE - UIP_LLH_LEN;
    }
    memcpy(&uip_buf[UIP_LLH_LEN], rxbuf + TR1001_HDRLEN, rxlen);
    tmplen = rxlen;
    rxclear();
    return tmplen;
  }

  if(rxstate == RXSTATE_ERROR) {
    blink();
    rxclear();
  }
  
  return 0;
}
Beispiel #5
0
/*---------------------------------------------------------------------------*/
static int
tr1001_on(void)
{
  if(onoroff == ON) {
    return 1;
  }

  ENERGEST_ON(ENERGEST_TYPE_LISTEN);

  onoroff = ON;
  rxon();
  rxclear();
  return 1;
}
Beispiel #6
0
/*------------------------------------------------------------------------------*/
void
tr1001_init(void)
{
  /* Turn on reception. */
  rxon();

  /* Reset reception state. */
  rxclear();

    
  UCTL0 = CHAR;                         /* 8-bit character */
  UTCTL0 = SSEL1;                       /* UCLK = SMCLK */

#define TR1001_SPEED 19200
  
  if(TR1001_SPEED == 19200) {
    /* Set TR1001 to 19200 */
    UBR00 = 0x80;                         /* 2,457MHz/19200 = 128 -> 0x80 */
    UBR10 = 0x00;                         /* */
    UMCTL0 = 0x00;                        /* no modulation  */
  } else if(TR1001_SPEED == 38400) {
    /* Set TR1001 to 38400 */
    UBR00 = 0x40;                         /* 2,457MHz/38400 = 64 -> 0x40 */
    UBR10 = 0x00;                         /* */
    UMCTL0 = 0x00;                        /* no modulation  */
  } else if(TR1001_SPEED == 57600) {
    UBR00 = 0x2a;                         /* 2,457MHz/57600 = 42.7 -> 0x2A */
    UBR10 = 0x00;                         /* */
    UMCTL0 = 0x5b;                        /* */ 
  } else if(TR1001_SPEED == 115200) {
    UBR00 = 0x15;                         /* 2,457MHz/115200 = 21.4 -> 0x15 */
    UBR10 = 0x00;                         /* */
    UMCTL0 = 0x4a;                        /* */ 
  }

#if 0
  /* 19200 bps */
  UBR00 = 0x80;                         /* 2,457MHz/19200 = 128 -> 0x80 */
  UBR10 = 0x00;                         /* */
  UMCTL0 = 0x00;                        /* no modulation */
#endif /* 0 */
  
  ME1 |= UTXE0 + URXE0;                 /* Enable USART0 TXD/RXD */
  
  /* Turn on receive interrupt. */
  IE1 |= URXIE0;
}