/********************************************************************* * @fn gapProfileStateCB * * @brief Notification from the profile of a state change. * * @param newState - new state * * @return none */ static void peripheralStateNotificationCB( gaprole_States_t newState ) { // if connected if ( newState == GAPROLE_CONNECTED ) { linkDBItem_t *pItem; HalLedSet ( HAL_LED_1, HAL_LED_MODE_OFF ); // Get connection handle GAPRole_GetParameter( GAPROLE_CONNHANDLE, &gapConnHandle ); // Get peer bd address if ( (pItem = linkDB_Find( gapConnHandle )) != NULL) { // If connected to device without bond do service discovery if ( !osal_memcmp( pItem->addr, timeAppBondedAddr, B_ADDR_LEN ) ) { timeAppDiscoveryCmpl = FALSE; } else { timeAppDiscoveryCmpl = TRUE; } // if this was last connection address don't do discovery if(osal_memcmp( pItem->addr, lastConnAddr, B_ADDR_LEN )) { timeAppDiscoveryCmpl = TRUE; connectedToLastAddress = true; } else { //save the last connected address osal_memcpy(lastConnAddr, pItem->addr, B_ADDR_LEN ); } // Initiate service discovery if necessary if ( timeAppDiscoveryCmpl == FALSE ) { // osal_start_timerEx( bloodPressureTaskId, BP_START_DISCOVERY_EVT, DEFAULT_DISCOVERY_DELAY ); } } } // if disconnected else if ( gapProfileState == GAPROLE_CONNECTED && newState != GAPROLE_CONNECTED ) { timeAppDisconnected(); //always stop intermediate timer osal_stop_timerEx( bloodPressureTaskId, BP_TIMER_CUFF_EVT ); // stop disconnect timer osal_stop_timerEx( bloodPressureTaskId, BP_DISCONNECT_PERIOD ); } // if started else if ( newState == GAPROLE_STARTED ) { // Initialize time clock display //timeAppClockInit(); } gapProfileState = newState; updateUI(); }
//static void peripheralStateNotificationCB( gaprole_States_t newState ) static void peripheralStateNotificationCB( gaprole_States_t* newState ) { // if connected if ( *newState == GAPROLE_CONNECTED ) { linkDBItem_t *pItem; // Get connection handle GAPRole_GetParameter( GAPROLE_CONNHANDLE, &gapConnHandle ); // Get peer bd address if ( (pItem = linkDB_Find( gapConnHandle )) != NULL) { // If connected to device without bond do service discovery if ( !osal_memcmp( pItem->addr, timeAppBondedAddr, B_ADDR_LEN ) ) { timeAppDiscoveryCmpl = FALSE; } else { timeAppDiscoveryCmpl = TRUE; } // if this was last connection address don't do discovery if(osal_memcmp( pItem->addr, lastConnAddr, B_ADDR_LEN )) { timeAppDiscoveryCmpl = TRUE; connectedToLastAddress = true; } else { //save the last connected address osal_memcpy(lastConnAddr, pItem->addr, B_ADDR_LEN ); } // Initiate service discovery if necessary if ( timeAppDiscoveryCmpl == FALSE ) { osal_start_timerEx( thermometerTaskId, TH_START_DISCOVERY_EVT, DEFAULT_DISCOVERY_DELAY ); } //on connection initiate disconnect timer in 20 seconds osal_start_timerEx( thermometerTaskId, TH_DISCONNECT_EVT, 20000 ); } } // if disconnected else if ( gapProfileState == GAPROLE_CONNECTED && *newState != GAPROLE_CONNECTED ) { timeAppDisconnected(); //always stop intermediate timer osal_stop_timerEx( thermometerTaskId, TH_PERIODIC_IMEAS_EVT ); } // if started else if ( *newState == GAPROLE_STARTED ) { // Initialize time clock timeAppClockInit(); } gapProfileState = *newState; updateUI(); }
/********************************************************************* * @fn timeAppGapStateCB * * @brief Notification from the profile of a state change. * * @param newState - new state * * @return none */ static void timeAppGapStateCB( gaprole_States_t newState ) { // if connected if ( newState == GAPROLE_CONNECTED ) { linkDBItem_t *pItem; // Get connection handle GAPRole_GetParameter( GAPROLE_CONNHANDLE, &timeAppConnHandle ); // Get peer bd address if ( (pItem = linkDB_Find( timeAppConnHandle )) != NULL) { // If connected to device without bond do service discovery if ( !osal_memcmp( pItem->addr, timeAppBondedAddr, B_ADDR_LEN ) ) { timeAppDiscoveryCmpl = FALSE; } // Initiate service discovery if necessary if ( timeAppDiscoveryCmpl == FALSE ) { osal_start_timerEx( timeAppTaskId, START_DISCOVERY_EVT, DEFAULT_DISCOVERY_DELAY ); } // Perform configuration of characteristics on connection setup else { timeAppConfigState = timeAppConfigNext( TIMEAPP_CONFIG_CONN_START ); } } LCD_WRITE_STRING( "Connected", HAL_LCD_LINE_1 ); LCD_WRITE_STRING( "", HAL_LCD_LINE_2 ); } // if disconnected else if ( timeAppGapState == GAPROLE_CONNECTED && newState != GAPROLE_CONNECTED ) { uint8 advState = TRUE; timeAppDisconnected(); if ( newState == GAPROLE_WAITING_AFTER_TIMEOUT ) { // link loss timeout-- use fast advertising GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, DEFAULT_FAST_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, DEFAULT_FAST_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_FAST_ADV_DURATION ); } else { // Else use slow advertising GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, DEFAULT_SLOW_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, DEFAULT_SLOW_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_SLOW_ADV_DURATION ); } // Enable advertising GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &advState ); LCD_WRITE_STRING( "Disconnected", HAL_LCD_LINE_1 ); LCD_WRITE_STRING( "", HAL_LCD_LINE_2 ); } // if advertising stopped else if ( timeAppGapState == GAPROLE_ADVERTISING && newState == GAPROLE_WAITING ) { // if advertising stopped by user if ( timeAppAdvCancelled ) { timeAppAdvCancelled = FALSE; } // if fast advertising switch to slow else if ( GAP_GetParamValue( TGAP_GEN_DISC_ADV_INT_MIN ) == DEFAULT_FAST_ADV_INTERVAL ) { uint8 advState = TRUE; GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, DEFAULT_SLOW_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, DEFAULT_SLOW_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_SLOW_ADV_DURATION ); GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &advState ); } } // if started else if ( newState == GAPROLE_STARTED ) { #ifndef CC2540_MINIDK uint8 bdAddr[B_ADDR_LEN]; GAPRole_GetParameter( GAPROLE_BD_ADDR, &bdAddr ); LCD_WRITE_STRING( "Time App", HAL_LCD_LINE_1 ); LCD_WRITE_STRING( bdAddr2Str( bdAddr ), HAL_LCD_LINE_2 ); #endif // Initialize time clock after writing first two lines of LCD timeAppClockInit(); } timeAppGapState = newState; }