/************************************************************************************************** * @fn macRxOff * * @brief Turn off the receiver if it's not already off. * * @param none * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macRxOff(void) { halIntState_t s; DBG_PRINT1(DBGSYS, "macRxOff(): macRxOnFlag = 0x%X", macRxOnFlag); HAL_ENTER_CRITICAL_SECTION(s); if (macRxOnFlag) { macRxOnFlag = 0; DBG_PRINT0(DBGSYS, "MAC_RADIO_RXTX_OFF()"); MAC_RADIO_RXTX_OFF(); /* Wait till RX is completely off before issuing another RX related * command which may fail if issued beforehand. */ macCheckCommnadDone(&macRxEdScan.rxCmd.rfOpCmd); /* Wait till all FG commands are done */ macCheckCommnadDone(&macCsmaCaCmd.rfOpCmd); macCheckCommnadDone(&macTxCmd.rfOpCmd); macCheckCommnadDone(&macRxAckCmd.rfOpCmd); MAC_DEBUG_TURN_OFF_RX_LED(); /* just in case a receive was about to start, flush the receive FIFO */ MAC_RADIO_FLUSH_RX_FIFO(); /* clear any receive interrupt that happened to squeak through */ MAC_RADIO_CLEAR_RX_THRESHOLD_INTERRUPT_FLAG(); } HAL_EXIT_CRITICAL_SECTION(s); }
/************************************************************************************************** * @fn macBackoffTimerCompareIsr * * @brief Interrupt service routine that fires when the backoff count is equal * to the trigger count. * * @param none * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macBackoffTimerCompareIsr(void) { halIntState_t s; DBG_PRINT1(DBGSYS, "macRatChanB Compare ISR, Backoff RAT count = %u", MAC_RADIO_BACKOFF_COUNT()); macBackoffTimerTriggerCallback(); HAL_ENTER_CRITICAL_SECTION(s); MAC_BACKOFF_TIMER_UPDATE_WAKEUP(); HAL_EXIT_CRITICAL_SECTION(s); }
/************************************************************************************************** * @fn macBackoffTimerSetTrigger * * @brief Sets the trigger count for the backoff counter. A callback is exectuted when * the backoff count reaches the trigger * * @param triggerBackoff - backoff count for new trigger * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macBackoffTimerSetTrigger(uint32 triggerBackoff) { halIntState_t s; MAC_ASSERT(triggerBackoff < macBackoffTimerRollover); /* trigger backoff must be less than rollover backoff */ DBG_PRINT1(DBGSYS, "MAC_RADIO_BACKOFF_SET_COMPARE(%u)", triggerBackoff); HAL_ENTER_CRITICAL_SECTION(s); backoffTimerTrigger = triggerBackoff; MAC_RADIO_BACKOFF_SET_COMPARE(triggerBackoff); MAC_BACKOFF_TIMER_UPDATE_WAKEUP(); HAL_EXIT_CRITICAL_SECTION(s); }
/************************************************************************************************** * @fn macRxSoftEnable * * @brief Set enable flags but don't turn on the receiver. Useful to leave the receiver * on after a transmit, but without turning it on immediately. * * @param flags - byte containing rx enable flags to set * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macRxSoftEnable(uint8 flags) { halIntState_t s; MAC_ASSERT(flags != 0); /* rx flags not affected */ DBG_PRINT1(DBGSYS, "macRxSoftEnable(0x%X)", flags); /* set the enable flags but do not turn on the receiver */ HAL_ENTER_CRITICAL_SECTION(s); macRxEnableFlags |= flags; HAL_EXIT_CRITICAL_SECTION(s); /* Power management state may change. Hence, vote. */ macPwrVote(); }
/************************************************************************************************** * @fn macRxDisable * * @brief Clear indicated rx enable flags. If all flags are clear, turn off receiver * unless there is an active receive or transmit. * * @param flags - byte containg rx enable flags to clear * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macRxDisable(uint8 flags) { halIntState_t s; MAC_ASSERT(flags != 0); /* rx flags not affected */ DBG_PRINT1(DBGSYS, "macRxDisable(0x%X)", flags); /* clear the indicated flags */ HAL_ENTER_CRITICAL_SECTION(s); macRxEnableFlags &= (flags ^ 0xFF); HAL_EXIT_CRITICAL_SECTION(s); /* turn off the radio if it is allowed */ macRxOffRequest(); /* Power management state may change. Hence, vote. */ macPwrVote(); }
/* * ldapu_find * Description: * Caller should free res if it is not NULL. * Arguments: * ld Pointer to LDAP (assumes connection has been * established and the client has called the * appropriate bind routine) * base basedn (where to start the search) * scope scope for the search. One of * LDAP_SCOPE_SUBTREE, LDAP_SCOPE_ONELEVEL, and * LDAP_SCOPE_BASE * filter LDAP filter * attrs A NULL-terminated array of strings indicating which * attributes to return for each matching entry. Passing * NULL for this parameter causes all available * attributes to be retrieved. * attrsonly A boolean value that should be zero if both attribute * types and values are to be returned, non-zero if only * types are wanted. * res A result parameter which will contain the results of * the search upon completion of the call. * Return Values: * LDAPU_SUCCESS if entry is found * LDAPU_FAILED if entry is not found * <rv> if error, where <rv> can be passed to * ldap_err2string to get an error string. */ int ldapu_find (LDAP *ld, const char *base, int scope, const char *filter, const char **attrs, int attrsonly, LDAPMessage **res) { int retval; #ifdef USE_THIS_CODE /* ASYNCHRONOUS */ int msgid; #endif int numEntries; *res = 0; /* If base is NULL set it to null string */ if (!base) { DBG_PRINT1("ldapu_find: basedn is missing -- assuming null string\n"); base = ""; } if (!filter || !*filter) { DBG_PRINT1("ldapu_find: filter is missing -- assuming objectclass=*\n"); filter = ldapu_strings[LDAPU_STR_FILTER_DEFAULT]; } DBG_PRINT2("\tbase:\t\"%s\"\n", base); DBG_PRINT2("\tfilter:\t\"%s\"\n", filter ? filter : "<NULL>"); DBG_PRINT2("\tscope:\t\"%s\"\n", (scope == LDAP_SCOPE_SUBTREE ? "LDAP_SCOPE_SUBTREE" : (scope == LDAP_SCOPE_ONELEVEL ? "LDAP_SCOPE_ONELEVEL" : "LDAP_SCOPE_BASE"))); retval = ldapu_search_s(ld, base, scope, filter, (char **)attrs, attrsonly, res); if (retval != LDAP_SUCCESS) { /* retval = ldap_result2error(ld, *res, 0); */ DBG_PRINT2("ldapu_search_s: %s\n", ldapu_err2string(retval)); return(retval); } numEntries = ldapu_count_entries(ld, *res); if (numEntries == 1) { /* success */ return LDAPU_SUCCESS; } else if (numEntries == 0) { /* not found -- but not an error */ DBG_PRINT1("ldapu_search_s: Entry not found\n"); return LDAPU_FAILED; } else if (numEntries > 0) { /* Found more than one entry! */ DBG_PRINT1("ldapu_search_s: Found more than one entry\n"); return LDAPU_ERR_MULTIPLE_MATCHES; } else { /* should never get here */ DBG_PRINT1("ldapu_search_s: should never reach here\n"); ldapu_msgfree(ld, *res); return LDAP_OPERATIONS_ERROR; } }