コード例 #1
0
ファイル: SIM900.c プロジェクト: tghaefli/stingray
void SendSim900(uint8_t* msg) {
	if (FRTOS1_xSemaphoreTake(DataSendMutex,SHELL_SEND_MUTEX_WAIT_MS) == pdTRUE) {
		UTIL1_strcpy(buf_send, BUFFER_SIZE, msg);
		flag_send = TRUE;
		FRTOS1_xSemaphoreGive(DataSendMutex);
	}
}
コード例 #2
0
ファイル: Ultrasonic.c プロジェクト: Naerrci/INTRO_FC-Gring
/* measure and return the microseconds */
uint16_t US_Measure_us(void) {
  int timeout;
  
  FRTOS1_xSemaphoreTake(mutexHandle, portMAX_DELAY);
  usDevice.signalState = US_SIGNAL_OK; /* default state */
  /* send 10us pulse on TRIG line. */
  TRIG_SetVal(usDevice.trigDevice);
  WAIT1_Waitus(10);
  usDevice.state = ECHO_TRIGGERED;
  TU_US_Enable(usDevice.echoDevice);
  TRIG_ClrVal(usDevice.trigDevice);
  timeout = 30; /* timout in ms */
  while(usDevice.state!=ECHO_FINISHED) {
    /* measure echo pulse */
    if (usDevice.state==ECHO_OVERFLOW) { /* measurement took too long? */
      usDevice.signalState =  US_SIGNAL_NO_ECHO;
      break; /* no echo, error case */
    }
    WAIT1_WaitOSms(1);
    timeout--;
    if (timeout==0) {
      usDevice.signalState = US_SIGNAL_TIMEOUT;
      break;
    }
  } /* while */
  if (usDevice.state==ECHO_FINISHED) {
    usDevice.lastValue_us = (usDevice.capture*1000UL)/(TU_US_CNT_INP_FREQ_U_0/1000);
    usDevice.signalState = US_SIGNAL_OK;
  } else {
    usDevice.lastValue_us = 0; /* error case */
  }
  usDevice.state = ECHO_IDLE;
  FRTOS1_xSemaphoreGive(mutexHandle);
  return usDevice.lastValue_us;
}
コード例 #3
0
ファイル: Ultrasonic.c プロジェクト: INFOTRONIK14/Project
/* measure and return the microseconds */
uint16_t US_Measure_us(void) {
  int timeout;
  
  FRTOS1_xSemaphoreTake(mutexHandle, portMAX_DELAY);
  /* send 10us pulse on TRIG line. */
  TRIG_SetVal(usDevice.trigDevice);
  WAIT1_Waitus(10);
  usDevice.state = ECHO_TRIGGERED;
  TRIG_ClrVal(usDevice.trigDevice);
  timeout = 30;
  while(usDevice.state!=ECHO_FINISHED && timeout>0) {
    /* measure echo pulse */
    if (usDevice.state==ECHO_OVERFLOW) { /* measurement took too long? */
      usDevice.state = ECHO_IDLE; /* go back to idle */
      break; /* no echo, error case */
    }
    WAIT1_WaitOSms(1);
    timeout--;
  } /* while */
  if (usDevice.state==ECHO_FINISHED) {
    usDevice.lastValue_us = (usDevice.capture*1000UL)/(TU_US_CNT_INP_FREQ_U_0/1000);
  } else {
    usDevice.lastValue_us = 0; /* error case */
  }
  usDevice.state = ECHO_IDLE;
  FRTOS1_xSemaphoreGive(mutexHandle);
  return usDevice.lastValue_us;
}
コード例 #4
0
ファイル: Sem.c プロジェクト: tbrey/INTRO_FS14_G8
static portTASK_FUNCTION(vSlaveTask, pvParameters) {
  xSemaphoreHandle sem;

  sem = (xSemaphoreHandle)pvParameters;
  for(;;) {
    if (sem != NULL) {
      if (FRTOS1_xSemaphoreTake(sem, portMAX_DELAY)==pdTRUE) {
        LED3_Neg();
      }
    }
  }
}
コード例 #5
0
ファイル: SIM900.c プロジェクト: tghaefli/stingray
bool ReadSim900(uint8_t* bfr) {
	bool res;
	if (FRTOS1_xSemaphoreTake(DataReceivedMutex,
			SHELL_RECEIVE_MUTEX_WAIT_MS) == pdTRUE) {
		res = flag_rcv;
		flag_rcv = FALSE;
		if (res) {
			UTIL1_strcpy(bfr, BUFFER_SIZE, buf_rcv);
		}
		FRTOS1_xSemaphoreGive(DataReceivedMutex);
	}
	return res;
}
コード例 #6
0
ファイル: Sem.c プロジェクト: cknuesel/INTRO_Maze_it
static portTASK_FUNCTION(vSlaveTask, pvParameters) {
  /*! \todo Implement functionality */
  xSemaphoreHandle sem;

  sem = (xSemaphoreHandle)pvParameters;
  for(;;) {
    if (sem != NULL) {
      if (FRTOS1_xSemaphoreTake(sem, portMAX_DELAY)==pdTRUE) {
        LED1_Neg();
      }
    }
  }
}
コード例 #7
0
ファイル: Reflectance.c プロジェクト: Naerrci/INTRO_FC-Gring
void REF_Init(void) {
#if REF_START_STOP_CALIB
  FRTOS1_vSemaphoreCreateBinary(REF_StartStopSem);
  if (REF_StartStopSem==NULL) { /* semaphore creation failed */
    for(;;){} /* error */
  }
  (void)FRTOS1_xSemaphoreTake(REF_StartStopSem, 0); /* empty token */
  FRTOS1_vQueueAddToRegistry(REF_StartStopSem, "RefStartStopSem");
#endif
  refState = REF_STATE_INIT;
  timerHandle = RefCnt_Init(NULL);
  /*! \todo You might need to adjust priority or other task settings */
  if (FRTOS1_xTaskCreate(ReflTask, "Refl", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL) != pdPASS) {
    for(;;){} /* error */
  }
}
コード例 #8
0
ファイル: Reflectance.c プロジェクト: gsgill112/mcuoneclipse
static void REF_MeasureRaw(SensorTimeType raw[NOF_SENSORS]) {
  uint8_t cnt; /* number of sensor */
  uint8_t i;
  TMOUT1_CounterHandle timeout;

  FRTOS1_xSemaphoreTake(mutexHandle, portMAX_DELAY);
  if (ledON) {
    LED_IR_On(); /* IR LED's on */
    WAIT1_Waitus(200);
  }
  for(i=0;i<NOF_SENSORS;i++) {
    SensorFctArray[i].SetOutput(); /* turn I/O line as output */
    SensorFctArray[i].SetVal(); /* put high */
    raw[i] = MAX_SENSOR_VALUE;
  }
  WAIT1_Waitus(20); /* give at least 10 us to charge the capacitor */
  timeout = TMOUT1_GetCounter(20/TMOUT1_TICK_PERIOD_MS); /* set up timeout counter */
  FRTOS1_vTaskSuspendAll();
  
  (void)TU1_ResetCounter(timerHandle); /* reset timer counter */
  for(i=0;i<NOF_SENSORS;i++) {
    SensorFctArray[i].SetInput(); /* turn I/O line as input */
  }
  do {
    cnt = 0;
    if (TMOUT1_CounterExpired(timeout)) {
      break; /* get out of wile loop */
    }
    for(i=0;i<NOF_SENSORS;i++) {
      if (raw[i]==MAX_SENSOR_VALUE) { /* not measured yet? */
        if (SensorFctArray[i].GetVal()==0) {
          raw[i] = TU1_GetCounterValue(timerHandle);
        }
      } else { /* have value */
        cnt++;
      }
    }
  } while(cnt!=NOF_SENSORS);
  TMOUT1_LeaveCounter(timeout);
  FRTOS1_xTaskResumeAll();
  if (ledON) {
    LED_IR_Off(); /* IR LED's off */
    WAIT1_Waitus(200);
  }
  FRTOS1_xSemaphoreGive(mutexHandle);
}
コード例 #9
0
ファイル: Reflectance.c プロジェクト: Naerrci/INTRO_FC-Gring
static void REF_StateMachine(void) {
  int i;

  switch (refState) {
    case REF_STATE_INIT:
    #if PL_CONFIG_EST
    {
      SensorCalibT *ptr;

      ptr = (SensorCalibT*)NVMC_GetReflectanceData();
      if (ptr!=NULL) { /* valid data */
        SensorCalibMinMax = *ptr;
        refState = REF_STATE_READY;
      } else {
        refState = REF_STATE_NOT_CALIBRATED;
      }
    }
    #else
      SHELL_SendString((unsigned char*)"INFO: No calibration data present.\r\n");
      refState = REF_STATE_NOT_CALIBRATED;
    #endif
      break;
      
    case REF_STATE_NOT_CALIBRATED:
      REF_MeasureRaw(SensorRaw);
      /*! \todo Add a new event to your event module...*/
#if REF_START_STOP_CALIB
      if (FRTOS1_xSemaphoreTake(REF_StartStopSem, 0)==pdTRUE) {
        refState = REF_STATE_START_CALIBRATION;
      }
#endif
      break;
    
    case REF_STATE_START_CALIBRATION:
      SHELL_SendString((unsigned char*)"start calibration...\r\n");
      for(i=0;i<REF_NOF_SENSORS;i++) {
        SensorCalibMinMax.minVal[i] = MAX_SENSOR_VALUE;
        SensorCalibMinMax.maxVal[i] = 0;
        SensorCalibrated[i] = 0;
      }
      refState = REF_STATE_CALIBRATING;
      break;
    
    case REF_STATE_CALIBRATING:
      REF_CalibrateMinMax(SensorCalibMinMax.minVal, SensorCalibMinMax.maxVal, SensorRaw);
#if PL_CONFIG_HAS_BUZZER
      startBuzzer(Middle,200);
#endif
#if REF_START_STOP_CALIB
      if (FRTOS1_xSemaphoreTake(REF_StartStopSem, 0)==pdTRUE) {
        refState = REF_STATE_STOP_CALIBRATION;
      }
#endif
      break;
    
    case REF_STATE_STOP_CALIBRATION:
      SHELL_SendString((unsigned char*)"...stopping calibration.\r\n");
#if PL_CONFIG_EST
      if (NVMC_SaveReflectanceData(&SensorCalibMinMax, sizeof(SensorCalibMinMax))!=ERR_OK) {
        SHELL_SendString((unsigned char*)"Flashing calibration data FAILED!\r\n");
      } else {
        SHELL_SendString((unsigned char*)"Stored calibration data.\r\n");
      }
#endif
      refState = REF_STATE_READY;
      break;
        
    case REF_STATE_READY:
      REF_Measure();
#if REF_START_STOP_CALIB
      if (FRTOS1_xSemaphoreTake(REF_StartStopSem, 0)==pdTRUE) {
        refState = REF_STATE_START_CALIBRATION;
      }
#endif
      break;
  } /* switch */
}
コード例 #10
0
bool SEM_takeRS_sem(void){
	return FRTOS1_xSemaphoreTake(MySem,portMAX_DELAY);
}
コード例 #11
0
ファイル: Reflectance.c プロジェクト: emmeneggerc/INTRO_EF
static void REF_StateMachine(void) {
  int i;

  switch (refState) {
    case REF_STATE_INIT:
#if NVM_ENABLED
    refState = REF_GetCalibData();
#else
    refState = REF_STATE_NOT_CALIBRATED;
    SHELL_SendString("INFO: Sensor not calibrated");
#endif
    break;

      
    case REF_STATE_NOT_CALIBRATED:
      REF_MeasureRaw(SensorRaw);
      /*! \todo Add a new event to your event module...*/
#if REF_START_STOP_CALIB
      if (FRTOS1_xSemaphoreTake(REF_StartStopSem, 0)==pdTRUE) {
        refState = REF_STATE_START_CALIBRATION;
      }
#endif
      break;
    
    case REF_STATE_START_CALIBRATION:
      SHELL_SendString((unsigned char*)"start calibration...\r\n");
      for(i=0;i<REF_NOF_SENSORS;i++) {
        SensorCalibMinMax.minVal[i] = MAX_SENSOR_VALUE;
        SensorCalibMinMax.maxVal[i] = 0;
        SensorCalibrated[i] = 0;
      }
      refState = REF_STATE_CALIBRATING;
      break;
    
    case REF_STATE_CALIBRATING:
      REF_CalibrateMinMax(SensorCalibMinMax.minVal, SensorCalibMinMax.maxVal, SensorRaw);
#if PL_CONFIG_HAS_BUZZER
     (void)BUZ_Beep(300, 20);
#endif
#if REF_START_STOP_CALIB
      if (FRTOS1_xSemaphoreTake(REF_StartStopSem, 0)==pdTRUE) {
        refState = REF_STATE_STOP_CALIBRATION;
      }
#endif
      break;
    
    case REF_STATE_STOP_CALIBRATION:
      SHELL_SendString((unsigned char*)"...stopping calibration.\r\n");
#if NVM_ENABLED
      SHELL_SendString((unsigned char*)"saving calib data...\r\n");
      REF_SaveCalibData();
#endif
      refState = REF_STATE_READY;
      break;
        
    case REF_STATE_READY:
      REF_Measure();
#if REF_START_STOP_CALIB
      if (FRTOS1_xSemaphoreTake(REF_StartStopSem, 0)==pdTRUE) {
        refState = REF_STATE_START_CALIBRATION;
      }
#endif
      break;
  } /* switch */
}