----------------------------------------------------------------------------- Queue an item on the query queue that indicates a stage is complete -----------------------------------------------------------------------------
| 961 | // Queue an item on the query queue that indicates a stage is complete |
| 962 | //----------------------------------------------------------------------------- |
| 963 | void Driver::SendQueryStageComplete |
| 964 | ( |
| 965 | uint8 const _nodeId, |
| 966 | Node::QueryStage const _stage |
| 967 | ) |
| 968 | { |
| 969 | MsgQueueItem item; |
| 970 | item.m_command = MsgQueueCmd_QueryStageComplete; |
| 971 | item.m_nodeId = _nodeId; |
| 972 | item.m_queryStage = _stage; |
| 973 | item.m_retry = false; |
| 974 | |
| 975 | LockGuard LG(m_nodeMutex); |
| 976 | if( Node* node = GetNode( _nodeId ) ) |
| 977 | { |
| 978 | if( !node->IsListeningDevice() ) |
| 979 | { |
| 980 | if( WakeUp* wakeUp = static_cast<WakeUp*>( node->GetCommandClass( WakeUp::StaticGetCommandClassId() ) ) ) |
| 981 | { |
| 982 | if( !wakeUp->IsAwake() ) |
| 983 | { |
| 984 | // If the message is for a sleeping node, we queue it in the node itself. |
| 985 | Log::Write( LogLevel_Info, "" ); |
| 986 | Log::Write( LogLevel_Detail, node->GetNodeId(), "Queuing (%s) Query Stage Complete (%s)", c_sendQueueNames[MsgQueue_WakeUp], node->GetQueryStageName( _stage ).c_str() ); |
| 987 | wakeUp->QueueMsg( item ); |
| 988 | return; |
| 989 | } |
| 990 | } |
| 991 | } |
| 992 | |
| 993 | // Non-sleeping node |
| 994 | Log::Write( LogLevel_Detail, node->GetNodeId(), "Queuing (%s) Query Stage Complete (%s)", c_sendQueueNames[MsgQueue_Query], node->GetQueryStageName( _stage ).c_str() ); |
| 995 | m_sendMutex->Lock(); |
| 996 | m_msgQueue[MsgQueue_Query].push_back( item ); |
| 997 | m_queueEvent[MsgQueue_Query]->Set(); |
| 998 | m_sendMutex->Unlock(); |
| 999 | |
| 1000 | } |
| 1001 | } |
| 1002 | |
| 1003 | //----------------------------------------------------------------------------- |
| 1004 | // <Driver::RetryQueryStageComplete> |
no test coverage detected