Example #1
0
 void wait(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   unique_lock_adapter u_lock(lock);
   while (!signalled_)
     cond_.wait(u_lock.unique_lock_);
 }
Example #2
0
 bool wait_for_usec(Lock& lock, long usec)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   unique_lock_adapter u_lock(lock);
   if (!signalled_)
     cond_.wait_for(u_lock.unique_lock_, std::chrono::microseconds(usec));
   return signalled_;
 }
Example #3
0
 void wait(Lock& lock)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   unique_lock_adapter u_lock(lock);
   while ((state_ & 1) == 0)
   {
     waiter w(state_);
     cond_.wait(u_lock.unique_lock_);
   }
 }
Example #4
0
void espeak_callback(const std_msgs::String::ConstPtr& line) {
	// lock mutex before calling espeak functions
	boost::mutex::scoped_lock u_lock(mtx);
    /* Speak the string */
	ROS_INFO("%s", line->data.c_str());
    espeak_Synth(line->data.c_str(), line->data.length()+1, 0, POS_CHARACTER, 0, 
        espeakCHARS_AUTO | espeakPHONEMES | espeakENDPAUSE, NULL, NULL);
    espeak_Synchronize();
    //ROS_INFO("Speaking: \"%s\"", line->data.c_str());
}
Example #5
0
 bool wait_for_usec(Lock& lock, long usec)
 {
   BOOST_ASIO_ASSERT(lock.locked());
   unique_lock_adapter u_lock(lock);
   if ((state_ & 1) == 0)
   {
     waiter w(state_);
     cond_.wait_for(u_lock.unique_lock_, std::chrono::microseconds(usec));
   }
   return (state_ & 1) != 0;
 }
Example #6
0
void dyn_cfg_callback(espeak_ros::EspeakConfig &cfg, uint32_t level) {
	// lock mutex before calling espeak functions
	boost::mutex::scoped_lock u_lock(mtx);

	std::string voice, dialect;
	voice = getVoiceName(cfg.voice);
	dialect = getDialectName(cfg.dialect);

	espeak_VOICE voice_select;
    std::memset(&voice_select,0,sizeof(voice_select));
    voice_select.name = voice.c_str();
	voice_select.languages = dialect.c_str();
	voice_select.age = cfg.age; // 0=not specified, or age in years
	voice_select.gender = cfg.gender; // 0=none, 1=male, 2=female

    if (espeak_SetVoiceByProperties(&voice_select) != EE_OK) {
    	ROS_ERROR("Could not set espeak voice properties. Aborting.");
    	return;
    }
    ROS_INFO("Using voice %s", voice.c_str());
    ROS_INFO("Using dialect %s", dialect.c_str());

	if (espeak_SetParameter(espeakRATE, cfg.rate, 0) != EE_OK) {
    	ROS_ERROR("Could not set espeak rate. Aborting.");
    	return;
	}
	if (espeak_SetParameter(espeakVOLUME, cfg.volume, 0) != EE_OK) {
		ROS_ERROR("Could not set espeak volume. Aborting.");
		return;
	}
	if (espeak_SetParameter(espeakPITCH, cfg.pitch, 0) != EE_OK) {
		ROS_ERROR("Could not set espeak pitch. Aborting.");
		return;
	}
	if (espeak_SetParameter(espeakRANGE, cfg.range, 0) != EE_OK) {
		ROS_ERROR("Could not set espeak range. Aborting.");
		return;
	}
	if (espeak_SetParameter(espeakPUNCTUATION,
			espeak_PUNCT_TYPE(cfg.punctuation), 0) != EE_OK) {
		ROS_ERROR("Could not set espeak punctuation. Aborting.");
		return;
	}
	if (espeak_SetParameter(espeakCAPITALS, cfg.capitals, 0) != EE_OK) {
		ROS_ERROR("Could not set espeak capitals. Aborting.");
		return;
	}
	int wordgap = cfg.wordgap % 10;
	if (espeak_SetParameter(espeakWORDGAP, wordgap, 0) != EE_OK) {
		ROS_ERROR("Could not set espeak wordgap. Aborting.");
		return;
	}
}
threadpool::TaskType threadpool::getTask()
{
    { /// Wait For WakeUp
        std::unique_lock<std::mutex> u_lock( m_mutex_wait );
        m_cond.wait(u_lock , [&]()->bool { return !(m_running && m_task.empty()) ; });
    }
    
    std::lock_guard<std::mutex> lock( m_mutex );
    
    TaskType task;
    if ( !m_task.empty() )
    {
        task = m_task.front();
        m_task.pop();
    }
    return task;
}
Example #8
0
/**
 * Check for duplicate Message ID
 * @param op operation
 * @return status
 */
static int wsman_is_duplicate_message_id(op_t * op)
{
	WsXmlNodeH header = wsman_get_soap_header_element(op->in_doc, NULL, NULL);
	int retVal = 0;
	SoapH soap;
	WsXmlNodeH msgIdNode;
	soap = op->dispatch->soap;

	msgIdNode = ws_xml_get_child(header, 0, XML_NS_ADDRESSING, WSA_MESSAGE_ID);
	if (msgIdNode != NULL) {
		lnode_t *node;
		char *msgId;
		msgId = ws_xml_get_node_text(msgIdNode);
		if (msgId[0] == 0 ) {
			generate_op_fault(op, WSA_INVALID_MESSAGE_INFORMATION_HEADER, 0 );
			debug("MessageId missing");
			return 1;
		}
		debug("Checking Message ID: %s", msgId);
		u_lock(soap);

		if (soap->processedMsgIdList == NULL) {
			soap->processedMsgIdList = list_create(LISTCOUNT_T_MAX);
		}
#ifndef IGNORE_DUPLICATE_ID
		node = list_first(soap->processedMsgIdList);
		while (node != NULL) {
			if (!strcmp(msgId, (char *) node->list_data)) {
				debug("Duplicate Message ID: %s", msgId);
				retVal = 1;
				generate_op_fault(op, WSA_INVALID_MESSAGE_INFORMATION_HEADER,
							WSA_DETAIL_DUPLICATE_MESSAGE_ID);
				break;
			}
			node = list_next(soap->processedMsgIdList, node);
		}
#endif


		if (!retVal) {
			while (list_count(soap->processedMsgIdList) >= PROCESSED_MSG_ID_MAX_SIZE) {
				node = list_del_first(soap->processedMsgIdList);
				u_free(node->list_data);
				u_free(node);
			}

			node = lnode_create(NULL);
			if (node) {
				node->list_data = u_str_clone(msgId);
				if (node->list_data == NULL) {
					u_free(node);
				} else {
					list_append(soap->processedMsgIdList, node);
				}
			}
		}
		u_unlock(soap);
	} else if (!wsman_is_identify_request(op->in_doc)) {
		generate_op_fault(op, WSA_MESSAGE_INFORMATION_HEADER_REQUIRED, 0);
		debug("No MessageId Header found");
		return 1;
	}

	return retVal;
}