Skip to content
Snippets Groups Projects
Commit 4ec61f2e authored by Kenneth Hiemstra's avatar Kenneth Hiemstra
Browse files

fixed the enable_mask

parent b056d77d
No related branches found
No related tags found
No related merge requests found
......@@ -128,6 +128,7 @@ bool Fpga::point(const uint clientId, TermOutput& termout, const char cmd, const
std::string type = "fpga";
std::string instance = "";
try {
if(cmd == 'R') pointMap->getReadPermission(addr);
else if(cmd == 'W') pointMap->getWritePermission(addr);
......@@ -138,7 +139,7 @@ bool Fpga::point(const uint clientId, TermOutput& termout, const char cmd, const
// FIXME: move these relative_addr to some new pointmap entry
if(addr == "fpga_mask_RW") {
relative_addr = "fpga/mask";
relative_addr = "fpga/enable_mask_RW";
} else if(addr == "fpga_status_R") {
relative_addr = "fpga/status";
} else if(addr == "fpga_temp_R") {
......@@ -175,6 +176,13 @@ bool Fpga::point(const uint clientId, TermOutput& termout, const char cmd, const
retval = true;
}
if(cmd=='W') {
cout << "Fpga::point WRITE:";
for(int i=0;i< nvalues;i++)
cout << data[i] << " ";
cout << endl;
}
strs_pre << "[";
for(uint idx = 0; idx<nodes.size(); idx++) {
auto node = select_node(nodes[idx]);
......@@ -193,6 +201,9 @@ bool Fpga::point(const uint clientId, TermOutput& termout, const char cmd, const
uint didx = 0;
if(cmd == 'W') {
didx = idx*nof_values;
cout << "fpga: W node_nr=" << node_nr << " nof_values=" << nof_values
<< " rel addr=" << relative_addr << " idx=" << idx << " didx=" <<
didx << " data=" << data[didx] << endl;
}
if((ret=node->exec_cmd(clientId, strs, cmd, relative_addr, type, instance, offs,
&data[didx], nof_values, format))) {
......@@ -233,6 +244,7 @@ bool Fpga::point(const uint clientId, TermOutput& termout, const char cmd, const
if(cmd == 'R') {
termout.strout << "(" << node_nr << (ret ? ",0,[" : ",1,[") << termresults.strout.str() << "])";
cout << "Fpga::enabled[" << idx << "]=" << (int)enabled[idx] << endl;
termout.enabled[idx] = enabled[idx];
switch(termresults.datatype) {
......@@ -250,10 +262,15 @@ bool Fpga::point(const uint clientId, TermOutput& termout, const char cmd, const
break;
}
} else if(cmd == 'W') {
termout.strout << "(" << node_nr << "," << (ret ? "0)" : "1)");
}
}
cout << "Fpga::point READ termout.valint ";
for(int i=0;i< nodes.size();i++)
cout << (int)termout.valint[i] << " ";
cout << endl;
termout.strout << "]";
if(nodes.size() == 0) {
termout.strerr << "no nodes";
......
......@@ -91,14 +91,14 @@ void Node::worker(const int clientId)
strerror(errno),clientId,UniboardNr, myIPaddr.c_str(), Type.c_str(), LocalNr, GlobalNr);
continue;
} else {
printf("Node::worker job (size=%d) for client[%d] Uniboard=%d node IP=%s type=%s localnr=%d globalnr=%d\n",
(int)ret,clientId,UniboardNr, myIPaddr.c_str(), Type.c_str(), LocalNr, GlobalNr);
// printf("Node::worker job (size=%d) for client[%d] Uniboard=%d node IP=%s type=%s localnr=%d globalnr=%d\n",
// (int)ret,clientId,UniboardNr, myIPaddr.c_str(), Type.c_str(), LocalNr, GlobalNr);
}
//m.lock();
pread_cmd_struct *p = (pread_cmd_struct *)buf;
/*
cout << "clientId=" << p->clientId;
cout << " p.relative_addr=" << p->relative_addr;
cout << " p.type=" << p->type << endl;
......@@ -107,7 +107,7 @@ void Node::worker(const int clientId)
cout << " p.nvalues=" << p->nvalues;
cout << " p.format=" << p->format;
cout << " p.cmd=" << p->cmdId << endl;
*/
termout.clear();
memset((void *)&r,0,sizeof(r));
......@@ -307,7 +307,14 @@ bool Node::exec_cmd(const uint clientId, std::ostringstream& strs, const char cm
p.offs = offs;
p.nvalues = nvalues;
p.format = format;
if(cmd == 'W') memcpy((void *)p.data, (void *)data, nvalues*sizeof(unsigned int));
if(cmd == 'W') {
memcpy((void *)p.data, (void *)data, nvalues*sizeof(unsigned int));
cout << " p.relative_addr=" << p.relative_addr;
cout << " p.offs=" << p.offs;
cout << " p.nvalues=" << p.nvalues;
cout << " p.format=" << p.format;
cout << " data=" << p.data[0] << endl;
}
ret = write(cmd_pipe[clientId][1], (void *)&p, sizeof(p));
if(ret < 0) {
......
......@@ -172,7 +172,6 @@ static UA_StatusCode read_DataSource(UA_Server *server,
uint UNB_client_ID = c_CLIENT_ID_UASERVER;
if(!SD.control_mutex[UNB_client_ID].try_lock()) {
cerr << "uaserver: mutex not ready !!!\n";
return UA_STATUSCODE_GOOD; // FIXME: add a busy node
......@@ -294,6 +293,7 @@ static UA_StatusCode write_DataSource(UA_Server *server,
//data.value is a UA_Variant
cout << "data.value.arrayLength=" << data->value.arrayLength << endl;
unsigned int *data_sdp = new unsigned int[data->value.arrayLength];
switch(ntype.identifier.numeric-1) {
case UA_TYPES_STRING: {
......@@ -306,33 +306,44 @@ static UA_StatusCode write_DataSource(UA_Server *server,
retval = false;
}
break;
case UA_TYPES_INT32:
case UA_TYPES_BOOLEAN: {
case UA_TYPES_INT32: {
retval = true;
unsigned int *dptr = (unsigned int *)data->value.data;
for(unsigned int i=0;i<data->value.arrayLength;i++) {
data_sdp[i] = (unsigned int)dptr[i];
}
}
break;
case UA_TYPES_BOOLEAN: {
retval = true;
bool *dptr = (bool *)data->value.data;
for(unsigned int i=0;i<data->value.arrayLength;i++) {
data_sdp[i] = (unsigned int)dptr[i];
}
}
break;
default:
cout << "UA_TYPES_?: not implemented yet" << endl;
retval = false;
break;
}
if(retval) {
CMDstatus cmdstatus = {CMD_STATUS_OK, 0,0};
CMDstatus cmdstatusnew = cmdstatus;
TermOutput termout;
uint UNB_client_ID = c_CLIENT_ID_UASERVER;
while(!SD.control_mutex[UNB_client_ID].try_lock()) { cerr << "uaserver: mutex not ready\n"; usleep(100000); }
try {
if(SD.unb->write(UNB_client_ID, termout, regname, 0, dptr, data->value.arrayLength))
if(SD.unb->write(UNB_client_ID, termout, regname, 0, data_sdp, data->value.arrayLength))
cmdstatus.status=CMD_STATUS_OK;
} catch(runtime_error& e) {
cerr << "update_BAND_Variable error: " << e.what() << endl;
termout.strout << e.what();
retval = false;
}
SD.control_mutex[UNB_client_ID].unlock();
retval = true;
}
break;
default:
cout << "UA_TYPES_?: not implemented yet" << endl;
retval = false;
break;
}
delete []data_sdp;
}
delete []regname;
return UA_STATUSCODE_GOOD;
......
......@@ -65,7 +65,7 @@ Periph_fpga::Periph_fpga(UCP *ucp,
registerMap->add_register("fpga/note", 0, 0, 0xffffffff, 0, "RO", "COMP", 0, REG_FORMAT_STRING);
registerMap->add_register("fpga/temp", 0, 1, 0xffffffff, 0, "RO", "COMP", 0, REG_FORMAT_STRING);
registerMap->add_register("fpga/status", 0, 1, 0xffffffff, 0, "RO", "COMP", 0, REG_FORMAT_STRING);
registerMap->add_register("fpga/mask", 0, 1, 0xffffffff, 0, "RO", "COMP", 0, REG_FORMAT_STRING);
registerMap->add_register("fpga/enable_mask_RW", 0, 1, 0xffffffff, 0, "RW", "COMP", 0, REG_FORMAT_BOOLEAN);
registerMap->add_register("fpga/rbf", 0, 0, 0xffffffff, 0, "RW", "COMP", 0, REG_FORMAT_STRING);
registerMap->add_register("fpga/flash_init", 0, 0, 0xffffffff, 0, "WO", "COMP", 0, REG_FORMAT_STRING);
registerMap->add_register("fpga/flash_erase", 0, 0, 0xffffffff, 0, "WO", "COMP", 0, REG_FORMAT_STRING);
......@@ -185,13 +185,14 @@ bool Periph_fpga::read_fpga_status(TermOutput& termout, int format)
return true;
}
bool Periph_fpga::write_fpga_mask(const uint *data)
bool Periph_fpga::write_fpga_enable_mask(const uint *data)
{
Enabled = (bool)*data;
cout << "Periph_fpga::write_fpga_enable_mask: data=" << Enabled << endl;
return true;
}
bool Periph_fpga::read_fpga_mask(TermOutput& termout, int format)
bool Periph_fpga::read_fpga_enable_mask(TermOutput& termout, int format)
{
termout.strout << "\"" << Enabled << "\"";
termout.valint[0] = (int)Enabled;
......@@ -290,8 +291,8 @@ bool Periph_fpga::read(UCP *ucp, TermOutput& termout, const std::string addr,
retval = wait_while_epcs_busy(ucp,1000);
} else if(addr == "fpga/status") {
retval = read_fpga_status(termout, format);
} else if(addr == "fpga/mask") {
retval = read_fpga_mask(termout, format);
} else if(addr == "fpga/enable_mask_RW") {
retval = read_fpga_enable_mask(termout, format);
} else if(addr == "fpga/scrap_RW") {
retval = read_fpga_scrap_RW(termout, format);
} else if(addr == "fpga/scrap_R") {
......@@ -335,8 +336,8 @@ bool Periph_fpga::write(UCP *ucp, const std::string addr, const std::string type
} else if(addr == "fpga/epcs_mmdp_data") {
// write to FIFO
retval = Write(ucp, "mm/0/REG_MMDP_DATA", 0, len, (uint32_t *)data);
} else if(addr == "fpga/mask") {
retval = write_fpga_mask(data);
} else if(addr == "fpga/enable_mask_RW") {
retval = write_fpga_enable_mask(data);
} else if(addr == "fpga/scrap_RW") {
retval = write_fpga_scrap_RW(ucp, data, len);
} else {
......
......@@ -70,8 +70,8 @@ public:
std::string read_design_note(UCP *ucp);
bool read_fpga_status(TermOutput& termout, int format);
bool read_fpga_mask(TermOutput& termout, int format);
bool write_fpga_mask(const uint *data);
bool read_fpga_enable_mask(TermOutput& termout, int format);
bool write_fpga_enable_mask(const uint *data);
bool read_stamps(UCP *ucp, TermOutput& termout);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment