Skip to content
Snippets Groups Projects
Commit 4d22a062 authored by Sonia Minolli's avatar Sonia Minolli
Browse files

Updates for non-threaded tasks (TANGODEVIC-1647)

parent 530acbb6
No related branches found
No related tags found
No related merge requests found
......@@ -26,7 +26,7 @@
// via a http web protocol.
// ===========================================================================
namespace TIMIQLib_ns {
namespace TIMIQLib_ns {
//------------------------------------------------------------------------
// Class Description:
......@@ -36,7 +36,7 @@ class ThreadedAction : public yat::Thread
{
friend class TIMIQLib;
protected:
protected:
//- ctor ---------------------------------
ThreadedAction(yat::Thread::IOArg ioa, timIQConfig& cfg);
......@@ -81,6 +81,7 @@ class ThreadedAction : public yat::Thread
//-----------------------------
class TIMIQCurl;
//------------------------------------------------------------------------
//- TIMIQProxy Class
//- Ensures the interface of the timIQ equipment with
......@@ -91,7 +92,7 @@ class TIMIQLib
friend class ThreadedAction;
public:
// Contructor
TIMIQLib();
......@@ -157,6 +158,12 @@ class TIMIQLib
void get_boardTemperature(float& boardTemperature)
throw (Exception);
// Gets the whole data from TimIQ equipment
// i.e. temperature, i & q values, mixer values
// @param [out] val Read values.
void get_boardData(timIQval_t& val)
throw (Exception);
// Gets state of TimIQ equipment
// @param [out] status string
E_timiq_code_t get_state(std::string& status)
......@@ -168,7 +175,7 @@ class TIMIQLib
throw (Exception);
private:
//- internal members
//--------------------------
TIMIQCurl * m_timiq_hw;
......@@ -184,7 +191,7 @@ class TIMIQLib
protected:
//- internal functions
//-------------------------
......@@ -192,18 +199,13 @@ class TIMIQLib
ThreadedAction * m_timiq_task;
// execute action specified in argument
void ExecuteAction(timIQConfig & cfg)
void ExecuteAction(timIQConfig & cfg)
throw (Exception);
// end of task notification
void end_task()
throw (Exception);
// soso à supprimer:
void iVal_end_task() throw (Exception);
void qVal_end_task() throw (Exception);
void data_end_task() throw (Exception);
void boardT_end_task() throw (Exception);
};
} // namespace TIMIQLib_ns
......
......@@ -33,7 +33,7 @@ static size_t write_callback( char *buffer, size_t size, size_t nmemb, void* )
// std::cout<<"static size_t write_callback <"<<size<<"> nmemb<"<<nmemb<<">"<<std::endl;
for (size_t idx = 0; idx < size*nmemb; idx++ )
m_timiq_internal_buff.push_back(buffer[idx]);
return size*nmemb;
}
......@@ -46,11 +46,18 @@ TIMIQCurl::TIMIQCurl(const std::string& ip_address, const std::string& num_port)
m_base_addr = kHTTP_WEB_PROTOCOL + ip_address + ":"+ num_port;
m_error_string = "";
#if !defined (_SIMULATION_)
m_hw_curl = NULL;
m_thr_hw_curl = NULL;
curl_global_init(CURL_GLOBAL_ALL);
#endif
#if defined (_SIMULATION_)
m_sim_ival = 0.0;
m_sim_qval = 0.0;
#endif
}
// ============================================================================
......@@ -58,6 +65,7 @@ TIMIQCurl::TIMIQCurl(const std::string& ip_address, const std::string& num_port)
// ============================================================================
TIMIQCurl::~TIMIQCurl ()
{
#if !defined (_SIMULATION_)
if (m_hw_curl)
{
//- clean up
......@@ -71,8 +79,9 @@ TIMIQCurl::~TIMIQCurl ()
curl_easy_cleanup(m_thr_hw_curl);
m_thr_hw_curl = NULL;
}
curl_global_cleanup();
#endif
}
// ============================================================================
......@@ -102,7 +111,7 @@ E_timiq_errno_t TIMIQCurl::write_data(float& data)
// ============================================================================
E_timiq_errno_t TIMIQCurl::write_iValue(float& iValue)
{
std::cout << "TIMIQCurl::write_iValue() write iValue = " << iValue << std::endl; // soso traces
// std::cout << "TIMIQCurl::write_iValue() write iValue = " << iValue << std::endl;
E_timiq_errno_t err_num = timiq_internal_ERROR;
char buff[kMAX_DATA_SIZE];
......@@ -117,6 +126,9 @@ E_timiq_errno_t TIMIQCurl::write_iValue(float& iValue)
if (this->write_i(str_url, strbuff))
err_num = timiq_NO_ERROR;
#if defined (_SIMULATION_)
m_sim_ival = iValue;
#endif
return err_num;
}
......@@ -124,8 +136,8 @@ E_timiq_errno_t TIMIQCurl::write_iValue(float& iValue)
// TIMIQCurl::write_qValue
// ============================================================================
E_timiq_errno_t TIMIQCurl::write_qValue(float& qValue)
{
std::cout << "TIMIQCurl::write_qValue() write qValue = " << qValue << std::endl; // soso traces
{
//std::cout << "TIMIQCurl::write_qValue() write qValue = " << qValue << std::endl;
E_timiq_errno_t err_num = timiq_internal_ERROR;
char buff[kMAX_DATA_SIZE];
......@@ -140,6 +152,9 @@ std::cout << "TIMIQCurl::write_qValue() write qValue = " << qValue << std::endl;
if (this->write_i(str_url, strbuff))
err_num = timiq_NO_ERROR;
#if defined (_SIMULATION_)
m_sim_qval = qValue;
#endif
return err_num;
}
......@@ -184,6 +199,10 @@ E_timiq_errno_t TIMIQCurl::write_command(E_timiq_cmd_t& cmd, bool thr)
if (this->write_i(str_url, strbuff, thr))
err_num = timiq_NO_ERROR;
#if defined (_SIMULATION_)
m_sim_ival = 0.0;
m_sim_qval = 0.0;
#endif
return err_num;
}
......@@ -289,6 +308,23 @@ E_timiq_errno_t TIMIQCurl::read_boardTemperature(float& boardTemperature)
return err_num;
}
// ============================================================================
// TIMIQCurl::read_all
// ============================================================================
E_timiq_errno_t TIMIQCurl::read_all(timIQval_t& val)
{
E_timiq_errno_t err_num = timiq_internal_ERROR;
//- request to the web page
//- http://address/get_feedback.wsgi
std::string str_url = m_base_addr + kTIMIQ_FEEDBACK_PAGE;
if (this->read_all_i(str_url, val))
err_num = timiq_NO_ERROR;
return err_num;
}
// ============================================================================
// TIMIQCurl::read_state_and_status
// ============================================================================
......@@ -313,11 +349,12 @@ E_timiq_errno_t TIMIQCurl::connect_i(bool thr)
{
E_timiq_errno_t err_num = timiq_internal_ERROR;
m_error_string = "";
#if !defined (_SIMULATION_)
// according to flag, initialize "standard" or "threaded" curl reference
if (thr)
{
// use threaded reference
if (thr)
{
// use threaded reference
try
{
if (!m_thr_hw_curl)
......@@ -345,11 +382,11 @@ E_timiq_errno_t TIMIQCurl::connect_i(bool thr)
{
m_error_string = "TIMIQCurl::connect: exception while initializing Webserver for threaded ref...";
m_thr_hw_curl = NULL;
}
}
}
else
{
// use non threaded reference
else
{
// use non threaded reference
try
{
if (!m_hw_curl)
......@@ -377,10 +414,13 @@ E_timiq_errno_t TIMIQCurl::connect_i(bool thr)
{
m_error_string = "TIMIQCurl::connect: exception while initializing Webserver for standard ref...";
m_hw_curl = NULL;
}
}
}
return err_num;
#else
return timiq_NO_ERROR;
#endif
}
// ============================================================================
......@@ -388,12 +428,12 @@ E_timiq_errno_t TIMIQCurl::connect_i(bool thr)
// ============================================================================
bool TIMIQCurl::write_i(std::string& url, std::string& strData, bool thr)
{
#if !defined (_SIMULATION_)
//- CURL easy return code
CURLcode result;
m_error_string = "";
#if !defined (_SIMULATION_)
//- no connection is possible
if (this->connect_i(thr) != timiq_NO_ERROR)
return false;
......@@ -419,14 +459,6 @@ bool TIMIQCurl::write_i(std::string& url, std::string& strData, bool thr)
else
//- check the data returned
{
#else
m_timiq_internal_buff = "\ncommand=1\n";
m_timiq_internal_buff += "command=2\n";
m_timiq_internal_buff += "command=3\n";
m_timiq_internal_buff += "iValue=-0.000001\n";
m_timiq_internal_buff += "qValue=-0.000002";
#endif
std::size_t found = m_timiq_internal_buff.find(strData);
if (found != std::string::npos)
{
......@@ -438,11 +470,18 @@ bool TIMIQCurl::write_i(std::string& url, std::string& strData, bool thr)
//- otherwise error
m_error_string = m_timiq_internal_buff;
}
#if !defined (_SIMULATION_)
}
#endif
return false;
#else
m_error_string = "OK";
m_timiq_internal_buff = "\ncommand=1\n";
m_timiq_internal_buff += "command=2\n";
m_timiq_internal_buff += "command=3\n";
m_timiq_internal_buff += "iValue=-0.000001\n";
m_timiq_internal_buff += "qValue=-0.000002";
return true;
#endif
}
// ============================================================================
......@@ -451,12 +490,12 @@ bool TIMIQCurl::write_i(std::string& url, std::string& strData, bool thr)
bool TIMIQCurl::read_float_i(const std::string& url, const std::string& strData, float& value)
{
// std::cout <<"TIMIQCurl::read_float_i"<<std::endl;
#if !defined (_SIMULATION_)
//- CURL easy return code
CURLcode result;
m_error_string = "";
#if !defined (_SIMULATION_)
//- no connection is possible
if (this->connect_i() != timiq_NO_ERROR)
return false;
......@@ -528,7 +567,7 @@ bool TIMIQCurl::read_float_i(const std::string& url, const std::string& strData,
m_error_string = m_timiq_internal_buff;
#if !defined (_SIMULATION_)
}
#endif
#endif
return false;
}
......@@ -538,12 +577,12 @@ bool TIMIQCurl::read_float_i(const std::string& url, const std::string& strData,
// ============================================================================
bool TIMIQCurl::read_state_and_status_i(const std::string& url, std::string& status, E_timiq_code_t& codeRet)
{
#if !defined (_SIMULATION_)
//- CURL easy return code
CURLcode result;
m_error_string = "";
#if !defined (_SIMULATION_)
//- no connection is possible
if (this->connect_i() != timiq_NO_ERROR)
return false;
......@@ -614,7 +653,7 @@ bool TIMIQCurl::read_state_and_status_i(const std::string& url, std::string& sta
}
status = m_timiq_internal_buff;
m_error_string = "OK";
m_error_string = "OK";
return true;
}
......@@ -624,17 +663,282 @@ bool TIMIQCurl::read_state_and_status_i(const std::string& url, std::string& sta
#if !defined (_SIMULATION_)
}
#endif
#endif
return false;
}
// ============================================================================
// TIMIQCurl::read_all_i
// ============================================================================
bool TIMIQCurl::read_all_i(const std::string& url, timIQval_t& values)
{
#if !defined (_SIMULATION_)
//- CURL easy return code
CURLcode result;
m_error_string = "";
// time logs
//struct timeval begin, inter, depouil, end;
//gettimeofday(&begin, NULL);
//- no connection is possible
if (this->connect_i() != timiq_NO_ERROR)
return false;
// time logs
//gettimeofday(&inter, NULL);
try
{
result = send_to_webserver_i(url);
}
catch (...)
{
m_error_string = "TIMIQCurl::read_all_i: exception while reading data on " + url;
return false;
}
// time logs
//gettimeofday(&depouil, NULL);
//- check the result
//----------------------------
if (result != CURLE_OK)
{
//- HTTP error
char buff[kMAX_DATA_SIZE];
memset(buff, 0, sizeof(buff));
sprintf (buff, "TIMIQCurl::read_all_i - CURL code error <%d>",result);
m_error_string = buff;
return false;
}
//- check the returned data
std::string strData = "";
std::size_t index = 0;
// extract i value
//*****************
strData = kTIMIQ_IVALUE_KEY;
index = m_timiq_internal_buff.find(strData);
if (index != std::string::npos)
{
//- extract substring from index
std::string l_subStr = m_timiq_internal_buff.substr(index);
//- parse "="
yat::StringTokenizer tokfloatStr (l_subStr, "=");
try
{
//- field
std::string fieldStr = tokfloatStr.next_token();
//- value
std::string floatStr = tokfloatStr.next_token();
//- convert data to float
values.iVal = (float)yat::XString<float>::to_num(floatStr);
}
catch(...)
{
m_error_string = "TIMIQCurl::read_all_i: exception while converting data for i value from " + url;
m_error_string += m_timiq_internal_buff;
return false;
}
}
else
{
//- otherwise error
m_error_string = m_timiq_internal_buff;
return false;
}
// extract q value
//*****************
strData = kTIMIQ_QVALUE_KEY;
index = m_timiq_internal_buff.find(strData);
if (index != std::string::npos)
{
//- extract substring from index
std::string l_subStr = m_timiq_internal_buff.substr(index);
//- parse "="
yat::StringTokenizer tokfloatStr (l_subStr, "=");
try
{
//- field
std::string fieldStr = tokfloatStr.next_token();
//- value
std::string floatStr = tokfloatStr.next_token();
//- convert data to float
values.qVal = (float)yat::XString<float>::to_num(floatStr);
}
catch(...)
{
m_error_string = "TIMIQCurl::read_all_i: exception while converting data for q value from " + url;
m_error_string += m_timiq_internal_buff;
return false;
}
}
else
{
//- otherwise error
m_error_string = m_timiq_internal_buff;
return false;
}
// extract mixer cos value
//*************************
strData = kTIMIQ_MIXER_COS_OUTPUT_KEY;
index = m_timiq_internal_buff.find(strData);
if (index != std::string::npos)
{
//- extract substring from index
std::string l_subStr = m_timiq_internal_buff.substr(index);
//- parse "="
yat::StringTokenizer tokfloatStr (l_subStr, "=");
try
{
//- field
std::string fieldStr = tokfloatStr.next_token();
//- value
std::string floatStr = tokfloatStr.next_token();
//- convert data to float
values.mixerCos = (float)yat::XString<float>::to_num(floatStr);
}
catch(...)
{
m_error_string = "TIMIQCurl::read_all_i: exception while converting data for mixer cos value from " + url;
m_error_string += m_timiq_internal_buff;
return false;
}
}
else
{
//- otherwise error
m_error_string = m_timiq_internal_buff;
return false;
}
// extract mixer sin value
//*************************
strData = kTIMIQ_MIXER_SIN_OUTPUT_KEY;
index = m_timiq_internal_buff.find(strData);
if (index != std::string::npos)
{
//- extract substring from index
std::string l_subStr = m_timiq_internal_buff.substr(index);
//- parse "="
yat::StringTokenizer tokfloatStr (l_subStr, "=");
try
{
//- field
std::string fieldStr = tokfloatStr.next_token();
//- value
std::string floatStr = tokfloatStr.next_token();
//- convert data to float
values.mixerSin = (float)yat::XString<float>::to_num(floatStr);
}
catch(...)
{
m_error_string = "TIMIQCurl::read_all_i: exception while converting data for mixer sin value from " + url;
m_error_string += m_timiq_internal_buff;
return false;
}
}
else
{
//- otherwise error
m_error_string = m_timiq_internal_buff;
return false;
}
// extract temperature value
//****************************
strData = kTIMIQ_BOARD_TEMPERATURE_KEY;
index = m_timiq_internal_buff.find(strData);
if (index != std::string::npos)
{
//- extract substring from index
std::string l_subStr = m_timiq_internal_buff.substr(index);
//- parse "="
yat::StringTokenizer tokfloatStr (l_subStr, "=");
try
{
//- field
std::string fieldStr = tokfloatStr.next_token();
//- value
std::string floatStr = tokfloatStr.next_token();
//- convert data to float
values.temperature = (float)yat::XString<float>::to_num(floatStr);
}
catch(...)
{
m_error_string = "TIMIQCurl::read_all_i: exception while converting data for temperature from " + url;
m_error_string += m_timiq_internal_buff;
return false;
}
}
else
{
//- otherwise error
m_error_string = m_timiq_internal_buff;
return false;
}
#else
values.iVal = m_sim_ival;
values.qVal = m_sim_qval;
values.temperature = 37.2 + values.iVal + values.qVal;
values.mixerSin = values.iVal + values.qVal;
values.mixerCos = values.iVal - values.qVal;
#endif
// time logs
/*gettimeofday(&end, NULL);
std::cout << "INSTRU - TIMIQCurl::read_all_i function took "
<< (end.tv_sec * 1000.0 + end.tv_usec / 1000.0) - (begin.tv_sec * 1000.0 + begin.tv_usec / 1000.0)
<< " ms - connect took: "
<< (inter.tv_sec * 1000.0 + inter.tv_usec / 1000.0) - (begin.tv_sec * 1000.0 + begin.tv_usec / 1000.0)
<< " ms - get took: "
<< (depouil.tv_sec * 1000.0 + depouil.tv_usec / 1000.0) - (inter.tv_sec * 1000.0 + inter.tv_usec / 1000.0) << std::endl;
*/
//- success
m_error_string = "OK";
return true;
}
#if !defined (_SIMULATION_)
// ============================================================================
// TIMIQCurl::send_to_webserver_i
// ============================================================================
CURLcode TIMIQCurl::send_to_webserver_i(const std::string& url, bool thr)
{
std::cout << "TIMIQCurl::send_to_webserver_i() entering... thr? " << thr << " - url = " << url << std::endl; // soso traces
//std::cout << "TIMIQCurl::send_to_webserver_i() entering... thr? " << thr << " - url = " << url << std::endl;
CURLcode result;
......@@ -642,10 +946,10 @@ CURLcode TIMIQCurl::send_to_webserver_i(const std::string& url, bool thr)
m_timiq_internal_buff.clear();
// according to flag, use "standard" or "threaded" curl reference
if (thr)
{
if (thr)
{
// use threaded reference
/* ask libcurl to set options */
curl_easy_setopt(m_thr_hw_curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(m_thr_hw_curl, CURLOPT_PROXY, "");
......@@ -659,17 +963,17 @@ CURLcode TIMIQCurl::send_to_webserver_i(const std::string& url, bool thr)
//- perform the query
result = curl_easy_perform(m_thr_hw_curl);
std::cout << "TIMIQCurl::send_to_webserver_i() curl_easy_perform rend la main pour url = " << url << std::endl; // soso traces
// std::cout << "TIMIQCurl::send_to_webserver_i() curl_easy_perform terminates for url = " << url << std::endl;
//- clean up
curl_easy_cleanup(m_thr_hw_curl);
m_thr_hw_curl = NULL;
m_thr_hw_curl = NULL;
}
else
{
else
{
// use non threaded reference
/* ask libcurl to set options */
curl_easy_setopt(m_hw_curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(m_hw_curl, CURLOPT_PROXY, "");
......@@ -686,10 +990,11 @@ std::cout << "TIMIQCurl::send_to_webserver_i() curl_easy_perform rend la main po
//- clean up
curl_easy_cleanup(m_hw_curl);
m_hw_curl = NULL;
m_hw_curl = NULL;
}
return result;
}
#endif
}
}
......@@ -13,12 +13,29 @@
// DEPENDENCIES
// ============================================================================
#include <iostream>
#if !defined (_SIMULATION_)
#include <curl/curl.h>
#endif
#include <TIMIQTypesAndConsts.h>
namespace TIMIQLib_ns
{
//- TimIQ values structure
typedef struct timIQval
{
// Tim IQ board values
float temperature;
float iVal;
float qVal;
float mixerSin;
float mixerCos;
} timIQval_t;
class TIMIQCurl
{
public:
......@@ -79,6 +96,11 @@ namespace TIMIQLib_ns
// @param [out] state vector of string
E_timiq_errno_t read_state_and_status(std::string& status, E_timiq_code_t& codeRet);
// Reads all values (I, Q, mixer, temperature) from TimIQ equipment
// in a single command
// @param [out] val TimIQ values structure.
E_timiq_errno_t read_all(timIQval_t& values);
// Gets error messages
// @return string variable
std::string get_err_msg(void)
......@@ -92,12 +114,18 @@ namespace TIMIQLib_ns
//- IP address
std::string m_base_addr;
#if !defined (_SIMULATION_)
//- CURL easy handle
CURL * m_hw_curl;
//- CURL easy handle for threaded write actions // soso added
//- CURL easy handle for threaded write actions
CURL * m_thr_hw_curl;
#endif
#if defined (_SIMULATION_)
double m_sim_ival;
double m_sim_qval;
#endif
// message error
std::string m_error_string;
......@@ -128,7 +156,7 @@ namespace TIMIQLib_ns
bool write_i(std::string& url, std::string& strData, bool thr = true);
// reads float data from timiq WebServer
// @param url of the page, strData data value to find, [out]flaot value to extracted
// @param url of the page, strData data value to find, [out] float value to extract
// @return true if success, false otherwise
bool read_float_i(const std::string& url, const std::string& strData, float& value );
......@@ -136,13 +164,20 @@ namespace TIMIQLib_ns
// @param url of the page, string state
// @return true if success, false otherwise
bool read_state_and_status_i(const std::string& url, std::string& state, E_timiq_code_t& codeRet );
// reads all values from timiq WebServer
// @param url of the page, [out] extracted values
// @return true if success, false otherwise
bool read_all_i(const std::string& url, timIQval_t& value );
#if !defined (_SIMULATION_)
// send data to webserver
// @param url Url to use
// @param thr thr = true: use threaded curl reference, otherwise,
// use standard curl reference
// @return CURLcode
CURLcode send_to_webserver_i(const std::string& url, bool thr = false);
#endif
};
}
......
......@@ -14,7 +14,7 @@
#include "TIMIQCurl.h"
namespace TIMIQLib_ns {
namespace TIMIQLib_ns {
// ============================================================================
//- Check low level access to TIMIQ hardware pointer:
......@@ -95,6 +95,9 @@ void TIMIQLib::set_data(float data)
l_ti_cfg.id = TI_DATA;
l_ti_cfg.value = data;
this->ExecuteAction(l_ti_cfg);
/* Use direct call instead of thread (board cycle is about 30ms)
if (m_internal_timiq_state != Busy)
{
//- force timiq state = Busy
......@@ -112,42 +115,7 @@ void TIMIQLib::set_data(float data)
//- start the task to write data on TIMIQ equipment
m_timiq_task->start_undetached();
}
}
// ============================================================================
// TIMIQLib::data_end_task
// ============================================================================
void TIMIQLib::data_end_task()
throw (Exception)
{
// std::cout <<"data_end_task ..." <<std::endl;
//- Delete task
if (this->m_timiq_task)
{
if (m_timiq_task->m_ti_cfg.ti_err != timiq_NO_ERROR)
{
// std::cout <<"exit task done ..." <<std::endl;
m_timiq_task->exit();
delete m_timiq_task;
m_timiq_task = NULL;
CHECK_TIMIQ_HW;
std::string msg_err = "Set data error -msg: " + m_timiq_hw->get_err_msg();
throw Exception(static_cast<const char*>("SOFTWARE_FAILURE"),
static_cast<const char*>(msg_err.c_str()),
static_cast<const char*>("TIMIQLib::data_end_task"));
}
//- destroy otherwise
m_timiq_task->exit();
delete m_timiq_task;
m_timiq_task = NULL;
}
//- update state of TIMIQ equipment
m_internal_timiq_state = OK;
*/
}
// ============================================================================
......@@ -156,7 +124,7 @@ void TIMIQLib::data_end_task()
void TIMIQLib::set_iValue(float iValue)
throw (Exception)
{
std::cout << "TIMIQLib::set_iValue() entering... - iValue to set = " << iValue << std::endl; // soso traces
//std::cout << "TIMIQLib::set_iValue() entering... - iValue to set = " << iValue << std::endl;
//- Threading configuration
timIQConfig l_ti_cfg;
......@@ -165,6 +133,9 @@ void TIMIQLib::set_iValue(float iValue)
l_ti_cfg.id = TI_IVAL;
l_ti_cfg.value = iValue;
this->ExecuteAction(l_ti_cfg);
/* Use direct call instead of thread (board cycle is about 30ms)
if (m_internal_timiq_state != Busy)
{
//- force timiq state = Busy
......@@ -182,42 +153,8 @@ void TIMIQLib::set_iValue(float iValue)
//- start the task
m_timiq_task->start_undetached();
}
else // soso test à supprimer
{
std::cout << "TIMIQLib::set_iValue() board already busy, do nothing..." << std::endl; // soso traces
}
}
*/
// ============================================================================
// TIMIQLib::iVal_end_task
// ============================================================================
void TIMIQLib::iVal_end_task()
throw (Exception)
{
// std::cout <<"iVal_end_task ..." <<std::endl;
//- Delete task
if (this->m_timiq_task)
{
if (m_timiq_task->m_ti_cfg.ti_err != timiq_NO_ERROR)
{
m_timiq_task->exit();
m_timiq_task = NULL;
CHECK_TIMIQ_HW;
std::string msg_err = "Set I value error -msg: " + m_timiq_hw->get_err_msg();
throw Exception(static_cast<const char*>("SOFTWARE_FAILURE"),
static_cast<const char*>(msg_err.c_str()),
static_cast<const char*>("TIMIQLib::set_iValue"));
}
//- destroy otherwise
m_timiq_task->exit();
m_timiq_task = NULL;
}
//- update state of TIMIQ equipment
m_internal_timiq_state = OK;
}
// ============================================================================
......@@ -225,9 +162,7 @@ void TIMIQLib::iVal_end_task()
// ============================================================================
void TIMIQLib::end_task()
throw (Exception)
{
std::cout << "soso - end_task ..." <<std::endl;
{
//- Delete task
if (this->m_timiq_task)
{
......@@ -240,13 +175,13 @@ std::cout << "soso - end_task ..." <<std::endl;
throw Exception(static_cast<const char*>("SOFTWARE_FAILURE"),
static_cast<const char*>(msg_err.c_str()),
static_cast<const char*>("TIMIQLib::end_task"));
}
}
//- destroy otherwise
//- destroy otherwise
yat::Thread::IOArg ioa;
m_timiq_task->exit();
m_timiq_task->join(&ioa); // soso plus
m_timiq_task = NULL;
m_timiq_task->exit();
m_timiq_task->join(&ioa);
m_timiq_task = NULL;
}
}
......@@ -255,8 +190,8 @@ std::cout << "soso - end_task ..." <<std::endl;
// ============================================================================
void TIMIQLib::set_qValue(float qValue)
throw (Exception)
{
std::cout << "TIMIQLib::set_qValue() entering... - qValue to set = " << qValue << std::endl; // soso traces
{
//std::cout << "TIMIQLib::set_qValue() entering... - qValue to set = " << qValue << std::endl;
//- Threading configuration
timIQConfig l_ti_cfg;
......@@ -265,6 +200,9 @@ void TIMIQLib::set_qValue(float qValue)
l_ti_cfg.id = TI_QVAL;
l_ti_cfg.value = qValue;
this->ExecuteAction(l_ti_cfg);
/* Use direct call instead of thread (board cycle is about 30ms)
if (m_internal_timiq_state != Busy)
{
//- force timiq state = Busy
......@@ -282,40 +220,9 @@ void TIMIQLib::set_qValue(float qValue)
//- start the task to write "Q" tension value on TIMIQ equipment
m_timiq_task->start_undetached();
}
*/
}
// ============================================================================
// TIMIQLib::qVal_end_task
// ============================================================================
void TIMIQLib::qVal_end_task()
throw (Exception)
{
// std::cout <<"qVal_end_task ..." <<std::endl;
//- Delete task
if (this->m_timiq_task)
{
if (m_timiq_task->m_ti_cfg.ti_err != timiq_NO_ERROR)
{
m_timiq_task->exit();
m_timiq_task = NULL;
CHECK_TIMIQ_HW;
std::string msg_err = "Set Q value error -msg: " + m_timiq_hw->get_err_msg();
throw Exception(static_cast<const char*>("SOFTWARE_FAILURE"),
static_cast<const char*>(msg_err.c_str()),
static_cast<const char*>("TIMIQLib::qVal_end_task"));
}
//- destroy otherwise
m_timiq_task->exit();
m_timiq_task = NULL;
}
//- update state of TIMIQ equipment
m_internal_timiq_state = OK;
}
// ============================================================================
// TIMIQLib::set_boardTemperature
// ============================================================================
......@@ -329,6 +236,9 @@ void TIMIQLib::set_boardTemperature(float boardTemperature)
l_ti_cfg.id = TI_BTEMP;
l_ti_cfg.value = boardTemperature;
this->ExecuteAction(l_ti_cfg);
/* Use direct call instead of thread (board cycle is about 30ms)
if (m_internal_timiq_state != Busy)
{
//- force timiq state = Busy
......@@ -345,40 +255,8 @@ void TIMIQLib::set_boardTemperature(float boardTemperature)
//- start the task to set board temperature on TIMIQ equipment
m_timiq_task->start_undetached();
}
}
// ============================================================================
// TIMIQLib::boardT_end_task
// ============================================================================
void TIMIQLib::boardT_end_task()
throw (Exception)
{
// std::cout <<"boardT_end_task ..." <<std::endl;
//- Delete task
if (this->m_timiq_task)
{
if (m_timiq_task->m_ti_cfg.ti_err != timiq_NO_ERROR)
{
//std::cout <<"exit task done ..." <<std::endl;
m_timiq_task->exit();
m_timiq_task = NULL;
CHECK_TIMIQ_HW;
std::string msg_err = "Set board Temperature error -msg: " + m_timiq_hw->get_err_msg();
throw Exception(static_cast<const char*>("SOFTWARE_FAILURE"),
static_cast<const char*>(msg_err.c_str()),
static_cast<const char*>("TIMIQLib::boardT_end_task"));
}
//- destroy otherwise
m_timiq_task->exit();
m_timiq_task = NULL;
}
//- update state of TIMIQ equipment
m_internal_timiq_state = OK;
}
*/
}
// ============================================================================
......@@ -392,6 +270,8 @@ void TIMIQLib::set_command(E_timiq_cmd_t& cmd)
CHECK_TIMIQ_HW;
//- write command on TIMIQ equipment
/* Use direct call instead of thread (board cycle is about 30ms)
// thread PLL calibration command:
if (cmd == RECALIBRATE_PLL)
{
......@@ -417,6 +297,7 @@ void TIMIQLib::set_command(E_timiq_cmd_t& cmd)
}
}
else
*/
{
err = m_timiq_hw->write_command(cmd, false); // use standard curl reference
if (err != timiq_NO_ERROR)
......@@ -572,8 +453,8 @@ E_timiq_code_t TIMIQLib::get_state(std::string& status)
//- get internal timiq state
//- read status of TIMIQ equipment
err = m_timiq_hw->read_state_and_status(status, m_internal_timiq_state);
std::cout << "soso m_internal_timiq_state in read state and status = " << m_internal_timiq_state << std::endl;
//std::cout << "m_internal_timiq_state in read state and status = " << m_internal_timiq_state << std::endl;
if (err != timiq_NO_ERROR)
{
......@@ -582,14 +463,15 @@ std::cout << "soso m_internal_timiq_state in read state and status = " << m_inte
throw Exception(static_cast<const char*>("SOFTWARE_FAILURE"),
static_cast<const char*>(msg_err.c_str()),
static_cast<const char*>("TIMIQLib::get_status()"));
}
}
return m_internal_timiq_state;
}
// ============================================================================
// TIMIQLib::ExecuteAction
// ============================================================================
void TIMIQLib::ExecuteAction(timIQConfig & cfg)
void TIMIQLib::ExecuteAction(timIQConfig & cfg)
throw (Exception)
{
E_timiq_errno_t err;
......@@ -601,10 +483,8 @@ void TIMIQLib::ExecuteAction(timIQConfig & cfg)
switch(cfg.id)
{
//- write "I" value
case TI_IVAL:
std::cout << "soso - Execute action write iValue" << std::endl;
cfg.ti_err = m_timiq_hw->write_iValue(cfg.value);
std::cout << "soso - In Execute action - write_iValue rend la main -> end" << std::endl;
case TI_IVAL:
cfg.ti_err = m_timiq_hw->write_iValue(cfg.value);
this->end_task();
break;
......@@ -627,8 +507,7 @@ std::cout << "soso - In Execute action - write_iValue rend la main -> end" << s
break;
//- PLL calibration
case TI_CALIB:
std::cout << "soso - Execute action write calibrate" << std::endl;
case TI_CALIB:
cmd = RECALIBRATE_PLL;
cfg.ti_err = m_timiq_hw->write_command(cmd);
this->end_task();
......@@ -639,6 +518,33 @@ std::cout << "soso - Execute action write calibrate" << std::endl;
}
}
// ============================================================================
// TIMIQLib::get_boardData
// ============================================================================
void TIMIQLib::get_boardData(timIQval_t& val)
throw (Exception)
{
val.temperature = yat::IEEE_NAN;
val.iVal = yat::IEEE_NAN;
val.qVal = yat::IEEE_NAN;
val.mixerSin = yat::IEEE_NAN;
val.mixerCos = yat::IEEE_NAN;
E_timiq_errno_t err;
CHECK_TIMIQ_HW;
//- read all values from TIMIQ equipment
err = m_timiq_hw->read_all(val);
if (err != timiq_NO_ERROR)
{
std::string msg_err = "Get all data error -msg: " + m_timiq_hw->get_err_msg();
throw Exception(static_cast<const char*>("SOFTWARE_FAILURE"),
static_cast<const char*>(msg_err.c_str()),
static_cast<const char*>("TIMIQLib::get_boardData()"));
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
......@@ -671,8 +577,7 @@ ThreadedAction::~ThreadedAction()
// ============================================================================
yat::Thread::IOArg ThreadedAction::run_undetached (yat::Thread::IOArg ioa)
{
//DEBUG_STREAM << "ThreadedAction::run_undetached() entering... " << std::endl;
std::cout << "soso -- ThreadedAction::run_undetached() entering... " << std::endl;
//DEBUG_STREAM << "ThreadedAction::run_undetached() entering... " << std::endl;
m_isActionDone = false;
//- get the reference to parent task
......
......@@ -113,7 +113,7 @@ typedef enum
TI_QVAL,
TI_BTEMP,
TI_DATA,
TI_CALIB // soso add
TI_CALIB
} E_ti_t;
typedef struct timIQConfig
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment