/**************************************************************************** * * NAME: vInitSensors * * DESCRIPTION: * Initialise the temperature/humidity sensor and set the ADC to measure the * supply voltage. * ****************************************************************************/ PRIVATE void vInitSensors(void) { /* Initialise temp/humidity sensor interface */ vHTSreset(); sTempHumiditySensor.eState = E_STATE_READ_TEMP_HUMID_IDLE; /* Initialise ADC for internal battery voltage measurement */ vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE, E_AHI_AP_INT_DISABLE, E_AHI_AP_SAMPLE_2, E_AHI_AP_CLOCKDIV_2MHZ, E_AHI_AP_INTREF); /* Wait until the analogue peripheral regulator has come up before setting the ADC. */ while(!bAHI_APRegulatorEnabled()); vAHI_AdcEnable(E_AHI_ADC_CONVERT_DISABLE, E_AHI_AP_INPUT_RANGE_2, E_AHI_ADC_SRC_VOLT); }
/*---------------------------------------------------------------------------*/ static int configure(int type, int value) { if(type == SENSORS_HW_INIT) { PRINTF("SENSORS_HW_INIT\n"); ht_sensor_status = HT_SENSOR_STATUS_INIT; process_start(&HTSensorSampling, NULL); return 1; } else if(type == SENSORS_ACTIVE) { if(ht_sensor_status != HT_SENSOR_STATUS_NOT_INIT) { if(value) { /* ACTIVATE SENSOR */ vHTSreset(); prev_temp_event_val = 0; prev_hum_event_val = 0; /* Activate ht sensor. Start sampling */ PRINTF("HT SENSOR ACTIVATED\n"); ht_sensor_status = HT_SENSOR_STATUS_ACTIVE; process_post(&HTSensorSampling, PROCESS_EVENT_MSG, (void *)&ht_sensor_status); } else { /* DE-ACTIVATE SENSOR */ PRINTF("HT SENSOR DE-ACTIVATED\n"); ht_sensor_status = HT_SENSOR_STATUS_NOT_ACTIVE; process_post(&HTSensorSampling, PROCESS_EVENT_MSG, (void *)&ht_sensor_status); } return 1; } else { /* HT sensor must be intialised before being (de)-activated */ PRINTF("ERROR: NO HW_INIT HT SENSOR\n"); return 0; } } else { /* Non valid type */ return 0; } }
PUBLIC void vJenie_CbInit(bool_t bWarmStart) { vUtils_Init(); if(bWarmStart==FALSE) { (void)u32AHI_Init(); sHomeData.bStackReady=FALSE; /* Initialise buttons, LEDs and program variables */ vInitEndpoint(); /* Set DIO for buttons and LEDs */ vLedControl(LED1, FALSE); vLedControl(LED2, FALSE); vLedInitRfd(); vButtonInitRfd(); #ifdef NO_SLEEP vAHI_WakeTimerEnable(E_AHI_WAKE_TIMER_1, TRUE); #endif /* Set SW1(dio9) to input */ vAHI_DioSetDirection(E_AHI_DIO9_INT, 0); /* set interrupt for DIO9 to occur on button release - rising edge */ vAHI_DioInterruptEdge(E_AHI_DIO9_INT, 0); /* enable interrupt for DIO9 */ vAHI_DioInterruptEnable(E_AHI_DIO9_INT, 0); /* Set SW2(dio10) to input */ vAHI_DioSetDirection(E_AHI_DIO10_INT, 0); /* set interrupt for DIO9 to occur on button release - rising edge */ vAHI_DioInterruptEdge(E_AHI_DIO10_INT, 0); /* enable interrupt for DIO9 */ vAHI_DioInterruptEnable(E_AHI_DIO10_INT, 0); /* Set up peripheral hardware */ vALSreset(); vHTSreset(); /* Start ALS now: it automatically keeps re-sampling after this */ vALSstartReadChannel(0); sHomeData.eAppState = E_STATE_REGISTER; switch(eJenie_Start(E_JENIE_END_DEVICE)) /* Start network as end device */ { case E_JENIE_SUCCESS: #ifdef DEBUG vUtils_Debug("Jenie Started"); #endif #ifdef HIGH_POWER /* Set high power mode */ eJenie_RadioPower(18, TRUE); #endif break; case E_JENIE_ERR_UNKNOWN: case E_JENIE_ERR_INVLD_PARAM: case E_JENIE_ERR_STACK_RSRC: case E_JENIE_ERR_STACK_BUSY: default: /* Do something on failure?? */ break; } }else{ /* Set up peripheral hardware */ vALSreset(); vHTSreset(); /* Start ALS now: it automatically keeps re-sampling after this */ vALSstartReadChannel(0); switch(eJenie_Start(E_JENIE_END_DEVICE)) /* Start network as end device */ { case E_JENIE_SUCCESS: #ifdef HIGH_POWER /* Set high power mode */ eJenie_RadioPower(18, TRUE); #endif break; case E_JENIE_ERR_UNKNOWN: case E_JENIE_ERR_INVLD_PARAM: case E_JENIE_ERR_STACK_RSRC: case E_JENIE_ERR_STACK_BUSY: default: /* Do something on failure?? */ break; } } /* set watchdog to long timeout - override setting in JenNet startup */ #ifdef WATCHDOG_ENABLED vAHI_WatchdogStart(254); #endif }