Example #1
0
void radioStress2_thread(void* arg) {
  message_t* m = (message_t*)arg;
  for(;;) {
    if(TOS_NODE_ID == 0) {
      amRadioReceive(m, 2000, 22);
      led2Toggle();
    }
    else {
      if(amRadioSend(!TOS_NODE_ID, m, 0, 22) == SUCCESS)
        led2Toggle();
    }
  }
}
Example #2
0
void blink2_thread(void* arg) {
  if(blink2_count++ == 170)
    led2Toggle();
  tosthread_create(&thread_handler, blink0_thread, NULL, 100);
  tosthread_create(&thread_handler, blink1_thread, NULL, 100);
  tosthread_create(&thread_handler, blink2_thread, NULL, 100);
}
Example #3
0
void blinkLEDs(void)
{
   if (blink_mode == 0)
   {
      led1Toggle();
      led2Toggle();
      led3Toggle();
   }
   else if (blink_mode == 1)
   {
      switch(blink_state)
      {
         case 0:
            blink_state = 1;
            led1On(); led2Off(); led3On();
            break;
         case 1:
            blink_state = 0;
            led1Off(); led2On(); led3Off();
            break;
      }
   }
   else if (blink_mode == 2)
   {
      switch(blink_state)
      {
         case 0:
            blink_state = 1;
            led1Off(); led2Off(); led3Off();
            break;
         case 1:
            blink_state = 2;
            led1On(); led2Off(); led3Off();
            break;
         case 2:
            blink_state = 3;
            led1On(); led2On(); led3Off();
            break;
         case 3:
            blink_state = 0;
            led1On(); led2On(); led3On();
            break;
      }
   }
   
   IFS0bits.T1IF = 0;
}
Example #4
0
// --------------------------------------------
// --------------------------------------------
void onRadioRecv(void)
{
    static bool flRxProcessing=false;
    if(flRxProcessing){
#ifdef PRINT_PACKETS
        PRINTF("RX Locked\n");
#endif
        return;
    }
    flRxProcessing=true;    // There is a chance for a small race condition

#ifdef PRINT_PACKETS
    uint32_t rxTime = getTimeMs();
#endif
    int16_t rxLen;
    rssi_t rssi;
    lqi_t lqi;

    rxIdx++;
    if( rxIdx < 0 ) rxIdx=0;


    led1Toggle();

    // rxLen = radioRecv( &(DB_REC(db)), DB_REC_SIZE(db));
    // DB_REC(db).recLen = rxLen;
    rxLen = radioRecv(&radioBuffer, sizeof(radioBuffer));
    rssi = radioGetLastRSSI();
    lqi = radioGetLastLQI();

#ifdef PRINT_PACKETS
    PRINTF("%d\t%d\t%d\t%d\t%ld\t", (int)rxIdx, (int)rxLen, (int)rssi, (int)lqi, (long)rxTime);
#endif
#ifdef PRINT_PACKETS
    if (rxLen < 0) {
        PRINTF("RX failed\n");
    }
    else if (rxLen > 0 ) {
        debugHexdump((uint8_t *) &radioBuffer, rxLen);
        // debugHexdump((uint8_t *) &(DB_REC(db)), rxLen);
    }
#endif
    if (rxLen < 0) {
        led2Toggle();
        flRxProcessing=false;
        return;
    }

    if( ! MSG_SIGNATURE_OK(radioBuffer) ) { flRxProcessing = false; return; }

    // Anticipated payload types.
    MSG_NEW_PAYLOAD_PTR(radioBuffer, phaser_ping_t, test_data_p);
    MSG_NEW_PAYLOAD_PTR(radioBuffer, phaser_control_t, ctrl_data_p);
    MSG_NEW_PAYLOAD_PTR(radioBuffer, msg_text_data_t, msg_text_p);
    MSG_NEW_PAYLOAD_PTR(radioBuffer, test_config_t, test_config_p);

    int act = MSG_ACT_CLEAR;
    bool flOK=true;

    switch( radioBuffer.id ){
    case PH_MSG_Test:
        MSG_CHECK_FOR_PAYLOAD(radioBuffer, phaser_ping_t, flOK=false );
        if( !flOK ){
            PRINTF("BadChk\n");
            break;
        }
        // Check if new experiment iteration started.
        if(lastExpIdx != test_data_p->expIdx && curExp){
            sendTestResults();
        }
        processTestMsg(test_data_p, rssi, lqi);
        break;
    
    case PH_MSG_Angle:
        if(curExp) sendTestResults();
        if( flRestart ){        // Best time to resend the restart message after the angle change
            send_ctrl_msg(MSG_ACT_RESTART);
            flRestart = false;
        }
        break;

    case PH_MSG_Control:
        MSG_CHECK_FOR_PAYLOAD(radioBuffer, phaser_control_t, break);
        if(curExp) sendTestResults();

        act = ctrl_data_p->action;
        if(act == MSG_ACT_START ){
            flRestart = false;  // Clear restart command attempt
        }
        printAction(act);
        break;

    case PH_MSG_Text:
        MSG_CHECK_FOR_PAYLOAD(radioBuffer, msg_text_data_t, break );
        PRINTF(msg_text_p->text);
        PRINTF("\n");
        break;

    case PH_MSG_Config:
        MSG_CHECK_FOR_PAYLOAD(radioBuffer, test_config_t, break );
        PRINTF("Config received:\n");
        // TODO: parse the config and print
        print_test_config(test_config_p);
    }


    flRxProcessing=false;
}