diff --git a/src/fpga.cpp b/src/fpga.cpp index e447b5ba84b4e66a84e2ff5d1dadbbdd0b842f1e..e3dc21337be9408ee59b08bca1c0008949c85256 100644 --- a/src/fpga.cpp +++ b/src/fpga.cpp @@ -223,7 +223,7 @@ CPointMap * Fpga::get_pointMap(void) } bool Fpga::point(TermOutput& termout, const char cmd, const string addr, - const unsigned int *data, const int nvalues) + const char *data, const int nvalues) { bool ret, retval = false; uint mask_cnt = 0; @@ -276,7 +276,7 @@ bool Fpga::point(TermOutput& termout, const char cmd, const string addr, try { uint didx = 0; if (cmd == 'W') { - didx = idx * nof_values * reg_format_size_in_words(format); + didx = idx * nof_values * reg_format_size_in_bytes(format); } if ((ret = node->exec_cmd(cmd, relative_addr, type, instance, &data[didx], nof_values, format))) { diff --git a/src/fpga.h b/src/fpga.h index 14f62ec1d3a79dc84cdcfaf38e264d6f10b14ba5..5bbd57c057aadc1dbc3d64576d57429ae9fe920e 100644 --- a/src/fpga.h +++ b/src/fpga.h @@ -49,7 +49,7 @@ public: ~Fpga(); bool point(TermOutput& termout, const char cmd, const std::string addr, - const unsigned int *data, const int len); + const char *data, const int len); Node * select_node(const int nr); std::vector<int> get_all_nodes(void); diff --git a/src/map.cpp b/src/map.cpp index d584a8111c5feb41cb2abb7e2b36a51165a0b053..ad1ec61ede5cab494bab72a401fc987f5eeb3f78 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -66,7 +66,7 @@ bool UniboardMap::read(TermOutput& termout, bool UniboardMap::write(TermOutput& termout, const string addr, - const unsigned int *data, + const char *data, const int nvalues) { bool retval = false; diff --git a/src/map.h b/src/map.h index 051be34cc831cc6b1c791c3b70c016ac706dbb1f..b2d021a928fd72ae7c2924e3d4fec81d58d4f058 100644 --- a/src/map.h +++ b/src/map.h @@ -54,7 +54,7 @@ bool is_initialized(void) { return initialized; } bool init(TermOutput& termout); bool write(TermOutput& termout, const std::string addr, - const unsigned int *data, const int nvalues); + const char *data, const int nvalues); bool read(TermOutput& termout, const std::string addr, const int nvalues); diff --git a/src/node.cpp b/src/node.cpp index 64cbe881e456f63fc982798ac02ed1c29832bb3a..388c87d56e6b102d2982e9689f3d43bc22d750f5 100644 --- a/src/node.cpp +++ b/src/node.cpp @@ -112,11 +112,15 @@ void Node::worker() case 'R': { // read if (strcmp(p->type, "fpga") == 0 || strcmp(p->type, "mm") == 0) { r.retval = periph_fpga->read(termout, p->relative_addr, p->type, p->data, p->nvalues, p->format); + r.nof_vals = termout.nof_vals; + r.datatype = termout.datatype; } } break; case 'W': { // write if (strcmp(p->type, "fpga") == 0 || strcmp(p->type, "mm") == 0) { r.retval = periph_fpga->write(termout, p->relative_addr, p->type, p->data, p->nvalues, p->format); + r.nof_vals = p->nvalues; + r.datatype = p->format; } } break; default: { @@ -132,8 +136,8 @@ void Node::worker() r.retval = 0; //cerr << "Node::worker '...' exception" << endl; } - r.nof_vals = termout.nof_vals; - r.datatype = termout.datatype; + // r.nof_vals = termout.nof_vals; + // r.datatype = termout.datatype; // cout << " p.relative_addr=" << p->relative_addr << endl; // cout << " p.type=" << p->type << endl; @@ -151,10 +155,10 @@ void Node::worker() reply_queue.Push(outbuf); } - cout << "Node::worker job" - << " Uniboard=" << UniboardNr - << " New node IP=" << myIPaddr - << " leaving!!" << endl; + // cout << "Node::worker job" + // << " Uniboard=" << UniboardNr + // << " New node IP=" << myIPaddr + // << " leaving!!" << endl; } Node::Node(const string ipaddr, const uint unb, const uint localnr, const string type, @@ -259,7 +263,7 @@ uint32_t Node::ppsOffsetCnt(void) { bool Node::exec_cmd(const char cmd, const string relative_addr, - const string type, const string instance, const unsigned int *data, + const string type, const string instance, const char *data, const int nvalues, const int format) { pread_cmd_struct p; @@ -271,10 +275,10 @@ bool Node::exec_cmd(const char cmd, const string relative_addr, p.nvalues = nvalues; p.format = format; if (cmd == 'W') { - memcpy((void *)p.data, (void *)data, nvalues*reg_format_size_in_words(format)*4); + memcpy((void *)p.data, (void *)data, nvalues*reg_format_size_in_bytes(format)); // cout << " p.relative_addr=" << p.relative_addr // << " p.nvalues=" << p.nvalues - // << " p.format=" << p.format; + // << " p.format=" << p.format << endl; } array<unsigned char, cmd_buf_size> outbuf; diff --git a/src/node.h b/src/node.h index 4006e2924fa4eb044d7c24013f3a68adf862a0d7..cdd8568deb98281aad1a6007c067373533488ca3 100644 --- a/src/node.h +++ b/src/node.h @@ -101,7 +101,7 @@ class Node { void worker(); bool exec_cmd(const char cmd, const std::string relative_addr, - const std::string type, const std::string instance, const unsigned int *data, + const std::string type, const std::string instance, const char *data, const int nvalues, const int format); bool exec_reply(TermOutput& t); diff --git a/src/opcua/ua_server.cpp b/src/opcua/ua_server.cpp index e56d50cdb3dc39efee93ad82505412bf38a5a1fb..9cc9cef850d0989993627f3abf980cb7eca46206 100644 --- a/src/opcua/ua_server.cpp +++ b/src/opcua/ua_server.cpp @@ -128,168 +128,45 @@ static UA_StatusCode ua_read_DataSource(UA_Server *server, cerr << "ua_read_DataSource error: " << e.what() << endl; } + + uint type = ntype.identifier.numeric - 1; + uint32_t sz; // if scalar (only TR_* points) if (termout.nof_vals == 1) { - switch (ntype.identifier.numeric - 1) { - case UA_TYPES_STRING: { - char *ptr = (char *)termout.val; - UA_String value = UA_STRING_ALLOC((char *)ptr); - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_STRING]); - dataValue->hasValue = true; - } break; - case UA_TYPES_FLOAT: { - float *ptr = (float *)termout.val; - UA_Float value = (UA_Float)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_FLOAT]); - dataValue->hasValue = true; - } break; - case UA_TYPES_DOUBLE: { - double *ptr = (double *)termout.val; - UA_Double value = (UA_Double)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_DOUBLE]); - dataValue->hasValue = true; - } break; - case UA_TYPES_INT16: { - int16_t *ptr = (int16_t *)termout.val; - UA_Int16 value = (UA_Int16)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_INT16]); - dataValue->hasValue = true; - } break; - case UA_TYPES_UINT16: { - uint16_t *ptr = (uint16_t *)termout.val; - UA_UInt16 value = (UA_UInt16)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_UINT16]); - dataValue->hasValue = true; - } break; - case UA_TYPES_INT32: { - int32_t *ptr = (int32_t *)termout.val; - UA_Int32 value = (UA_Int32)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_INT32]); - dataValue->hasValue = true; - } break; - case UA_TYPES_UINT32: { - uint32_t *ptr = (uint32_t *)termout.val; - UA_UInt32 value = (UA_UInt32)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_UINT32]); - dataValue->hasValue = true; - } break; - case UA_TYPES_INT64: { - int64_t *ptr = (int64_t *)termout.val; - UA_Int64 value = (UA_Int64)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_INT64]); - dataValue->hasValue = true; - } break; - case UA_TYPES_UINT64: { - uint64_t *ptr = (uint64_t *)termout.val; - UA_UInt64 value = (UA_UInt64)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_UINT64]); - dataValue->hasValue = true; - } break; - case UA_TYPES_BOOLEAN: { - bool *ptr = (bool *)termout.val; - UA_Boolean value = (UA_Boolean)ptr[0]; - UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_BOOLEAN]); - dataValue->hasValue = true; - } break; - default: { - dataValue->hasValue = false; - } break; + if (type == UA_TYPES_STRING) { + char *ptr = (char *)termout.val; + UA_String value = UA_STRING_ALLOC((char *)ptr); + UA_Variant_setScalarCopy(&dataValue->value, &value, &UA_TYPES[UA_TYPES_STRING]); + dataValue->hasValue = true; + } + else { + UA_Variant_setScalarCopy(&dataValue->value, termout.val, &UA_TYPES[type]); + dataValue->hasValue = true; } } // else array else { - switch (ntype.identifier.numeric - 1) { - case UA_TYPES_STRING: { - UA_String *values = (UA_String *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_STRING]); - char *ptr = (char *)termout.val; - for (unsigned int i=0; i<termout.nof_vals; i++) { - values[i] = UA_STRING_ALLOC((char *)ptr); - ptr += SIZE1STRING; - } - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_STRING]); - dataValue->hasValue = true; - } break; - case UA_TYPES_FLOAT: { - UA_Float *values = (UA_Float *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_FLOAT]); - float *ptr = (float *)termout.val; - for (unsigned int i=0; i<termout.nof_vals; i++) { - values[i] = UA_Float(ptr[i]); - } - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_FLOAT]); - dataValue->hasValue = true; - } break; - case UA_TYPES_DOUBLE: { - UA_Double *values = (UA_Double *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_DOUBLE]); - double *ptr = (double *)termout.val; - for (unsigned int i=0; i<termout.nof_vals; i++) { - values[i] = UA_Double(ptr[i]); - //cout << i << " ptr=" << ptr[i] << " value=" << values[i] << endl; - } - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_DOUBLE]); - dataValue->hasValue = true; - } break; - case UA_TYPES_INT16: { - UA_Int16 *values = (UA_Int16 *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_INT16]); - int16_t *ptr = (int16_t *)termout.val; - for (uint i=0; i<termout.nof_vals; i++) { - values[i] = UA_Int16(ptr[i]); - } - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_INT16]); - dataValue->hasValue = true; - } break; - case UA_TYPES_UINT16: { - UA_UInt16 *values = (UA_UInt16 *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_UINT16]); - uint16_t *ptr = (uint16_t *)termout.val; - for (uint i=0; i<termout.nof_vals; i++) { - values[i] = UA_UInt16(ptr[i]); - } - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_UINT16]); - dataValue->hasValue = true; - } break; - case UA_TYPES_INT32: { - UA_Int32 *values = (UA_Int32 *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_INT32]); - int32_t *ptr = (int32_t *)termout.val; - for (uint i=0; i<termout.nof_vals; i++) { - values[i] = UA_Int32(ptr[i]); - } - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_INT32]); - dataValue->hasValue = true; - } break; - case UA_TYPES_UINT32: { - UA_UInt32 *values = (UA_UInt32 *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_UINT32]); - uint32_t *ptr = (uint32_t *)termout.val; - for (uint i=0; i<termout.nof_vals; i++) { - values[i] = UA_UInt32(ptr[i]); - } - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_UINT32]); - dataValue->hasValue = true; - } break; - case UA_TYPES_INT64: { - UA_Int64 *values = (UA_Int64 *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_INT64]); - memcpy(values, termout.val, termout.nof_vals*sizeof(UA_Int64)); - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_INT64]); - dataValue->hasValue = true; - } break; - case UA_TYPES_UINT64: { - UA_UInt64 *values = (UA_UInt64 *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_UINT64]); - memcpy(values, termout.val, termout.nof_vals*sizeof(UA_UInt64)); - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_UINT64]); - dataValue->hasValue = true; - } break; - case UA_TYPES_BOOLEAN: { - UA_Boolean *values = (UA_Boolean *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_BOOLEAN]); - bool *ptr = (bool *)termout.val; - for (unsigned int i=0; i<termout.nof_vals; i++) { - values[i] = UA_Boolean(ptr[i]); - } - UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_BOOLEAN]); - dataValue->hasValue = true; - } break; - default: { - dataValue->hasValue = false; - } break; + if (type == UA_TYPES_STRING) { + UA_String *values = (UA_String *) UA_Array_new(termout.nof_vals, &UA_TYPES[UA_TYPES_STRING]); + char *ptr = (char *)termout.val; + for (unsigned int i=0; i<termout.nof_vals; i++) { + values[i] = UA_STRING_ALLOC((char *)ptr); + ptr += SIZE1STRING; + } + UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[UA_TYPES_STRING]); + dataValue->hasValue = true; } + else { + void * values = UA_Array_new(termout.nof_vals, &UA_TYPES[type]); + + sz = termout.nof_vals * UA_TYPES[type].memSize; + memcpy(values, termout.val, sz); + UA_Variant_setArray(&dataValue->value, values, termout.nof_vals, &UA_TYPES[type]); + dataValue->hasValue = true; + } + } + delete[] regname; return UA_STATUSCODE_GOOD; } @@ -323,80 +200,29 @@ static UA_StatusCode ua_write_DataSource(UA_Server *server, if (data->hasValue && data->value.arrayLength > 0) { //data.value is of type UA_Variant. uint type = ntype.identifier.numeric - 1; - uint32_t *data_sdp; + char *data_sdp; uint32_t sz; - if ((type == UA_TYPES_DOUBLE) || (type == UA_TYPES_INT64) || (type == UA_TYPES_UINT64)) { - sz = data->value.arrayLength * 2; - } else if (type == UA_TYPES_STRING) { - sz = data->value.arrayLength * (SIZE1STRING / 4); - } else { - sz = data->value.arrayLength; + if (type == UA_TYPES_STRING) { + sz = data->value.arrayLength * SIZE1STRING; + data_sdp = new char[sz]; + UA_String *dptr = (UA_String *)data->value.data; + UA_String str_data; + for (int i=0; i<(int)data->value.arrayLength; i++){ + str_data = dptr[i]; + memcpy((void *)&(data_sdp[i*SIZE1STRING]), (void *)str_data.data, str_data.length); + } + retval = true; } - data_sdp = new uint32_t[sz]; - memset((void *)data_sdp, 0, sizeof(uint32_t)*sz); - - retval = true; - switch (ntype.identifier.numeric - 1) { - case UA_TYPES_STRING: { - UA_String *dptr = (UA_String *)data->value.data; - UA_String str_data; - for (int i=0; i<(int)data->value.arrayLength; i++){ - str_data = dptr[i]; - memcpy((void *)&(data_sdp[i*(SIZE1STRING/4)]), (void *)str_data.data, str_data.length); - } - } break; - case UA_TYPES_FLOAT: { - memcpy(data_sdp, data->value.data, data->value.arrayLength*sizeof(UA_Float)); - } break; - case UA_TYPES_DOUBLE: { - memcpy(data_sdp, data->value.data, data->value.arrayLength*sizeof(UA_Double)); - } break; - case UA_TYPES_INT16: { - int16_t *dptr = (int16_t *)data->value.data; - for (uint i=0; i<data->value.arrayLength; i++) { - data_sdp[i] = (uint32_t)dptr[i]; - } - } break; - case UA_TYPES_UINT16: { - uint16_t *dptr = (uint16_t *)data->value.data; - for (uint i=0; i<data->value.arrayLength; i++) { - data_sdp[i] = (uint32_t)dptr[i]; - } - } break; - case UA_TYPES_INT32: { - int32_t *dptr = (int32_t *)data->value.data; - for (uint i=0; i<data->value.arrayLength; i++) { - data_sdp[i] = (uint32_t)dptr[i]; - } - } break; - case UA_TYPES_UINT32: { - uint32_t *dptr = (uint32_t *)data->value.data; - for (uint i=0; i<data->value.arrayLength; i++) { - data_sdp[i] = (uint32_t)dptr[i]; - } - } break; - case UA_TYPES_INT64: { // TODO: 64b -> 32b, not used yet but should give an error - int64_t *dptr = (int64_t *)data->value.data; - for (uint i=0; i<data->value.arrayLength; i++) { - data_sdp[i] = (uint64_t)dptr[i]; - } - } break; - case UA_TYPES_UINT64: { // TODO: 64b -> 32b, not used yet but should give an error - uint64_t *dptr = (uint64_t *)data->value.data; - for (uint i=0; i<data->value.arrayLength; i++) { - data_sdp[i] = (uint64_t)dptr[i]; - } - } break; - case UA_TYPES_BOOLEAN: { - bool *dptr = (bool *)data->value.data; - for (unsigned int i=0; i<data->value.arrayLength; i++) { - data_sdp[i] = (uint32_t)dptr[i]; - } - } break; - default: { - cout << "UA_TYPES_?: not implemented yet" << endl; + else { + try { + sz = data->value.arrayLength * UA_TYPES[type].memSize; + data_sdp = new char[sz]; + memcpy((void *)data_sdp, (void *)data->value.data, sz); + retval = true; + } catch (runtime_error& e) { + cerr << "ua_write_DataSource error: " << e.what() << endl; retval = false; - } break; + } } if (retval) { @@ -410,12 +236,16 @@ static UA_StatusCode ua_write_DataSource(UA_Server *server, // UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND,"ua_write_DataSource: for fpga class"); SD.unb->write(termout, regname, data_sdp, data->value.arrayLength); } + delete[] data_sdp; } catch (runtime_error& e) { cerr << "ua_write_DataSource error: " << e.what() << endl; retval = false; } } - delete[] data_sdp; + else { + cerr << "ua_write no retval" << endl; + delete[] data_sdp; + } } delete[] regname; @@ -1076,6 +906,11 @@ int ua_server_init(bool warm_start) ua_add_Variable(mUaServer, m, format, size, perm); } } + cout << "sizeof bool=" << UA_TYPES[UA_TYPES_BOOLEAN].memSize << endl; + cout << "sizeof int16=" << UA_TYPES[UA_TYPES_INT16].memSize << endl; + cout << "sizeof int32=" << UA_TYPES[UA_TYPES_INT32].memSize << endl; + cout << "sizeof float=" << UA_TYPES[UA_TYPES_FLOAT].memSize << endl; + cout << "sizeof double=" << UA_TYPES[UA_TYPES_DOUBLE].memSize << endl; return 0; } diff --git a/src/periph/fpga.cpp b/src/periph/fpga.cpp index 5c3a1c2c483d4d02b682ae37a882f5bab512d3d0..8fe5c127074b879e48c78c79005b9cd220e2288b 100644 --- a/src/periph/fpga.cpp +++ b/src/periph/fpga.cpp @@ -332,9 +332,13 @@ bool Periph_fpga::write(TermOutput& termout, const string addr, const string typ return false; } - uint32_t *data_ptr = (uint32_t *)data; + termout.nof_vals = nvalues; + termout.datatype = format; + + // uint32_t *data_ptr = (uint32_t *)data; if (type == "mm") { + uint32_t *data_ptr = (uint32_t *)data; retval = Write(addr, data_ptr, true); } else { // "fpga/..." @@ -345,6 +349,7 @@ bool Periph_fpga::write(TermOutput& termout, const string addr, const string typ // retval = true; // } else if (addr == "fpga/flash_init") { + uint32_t *data_ptr = (uint32_t *)data; Flash_select = data_ptr[0]; if (Flash_select == 0) { // factory Flash_page_start = Flash_fact_sector_start * Flash_pages_per_sector; @@ -357,29 +362,30 @@ bool Periph_fpga::write(TermOutput& termout, const string addr, const string typ flash_erase(); } else if (addr == "fpga/flash_pages") { - retval = flash_pages(data_ptr, nvalues); + retval = flash_pages(data, nvalues); } else if (addr == "fpga/flash_page") { - retval = flash_page(data_ptr); + retval = flash_page(data); } else if (addr == "fpga/flash_prot") { - retval = flash_prot(data_ptr); + retval = flash_prot(data); } else if (addr == "fpga/epcs_mmdp_data") { // write to FIFO + uint32_t *data_ptr = (uint32_t *)data; retval = Write("mm/0/REG_MMDP_DATA/0/data", data_ptr, true); } else if (addr == "fpga/scrap") { - retval = write_fpga_scrap(data_ptr); + retval = write_fpga_scrap(data); } else if (addr == "fpga/weights") { - retval = write_fpga_weights(data_ptr); + retval = write_fpga_weights(data); } else if (addr == "fpga/sst_offload_weighted_subbands") { - retval = write_sst_offload_weighted_subbands(data_ptr); + retval = write_sst_offload_weighted_subbands(data); } else if (addr == "fpga/sst_offload_enable") { - retval = write_sst_offload_enable(data_ptr); + retval = write_sst_offload_enable(data); } else if (addr == "fpga/sst_offload_hdr_eth_destination_mac") { retval = write_sst_offload_hdr_eth_destination_mac(data); @@ -388,10 +394,10 @@ bool Periph_fpga::write(TermOutput& termout, const string addr, const string typ retval = write_sst_offload_hdr_ip_destination_address(data); } else if (addr == "fpga/sst_offload_hdr_udp_destination_port") { - retval = write_sst_offload_hdr_udp_destination_port(data_ptr); + retval = write_sst_offload_hdr_udp_destination_port(data); } else if (addr == "fpga/bst_offload_enable") { - retval = write_bst_offload_enable(data_ptr); + retval = write_bst_offload_enable(data); } else if (addr == "fpga/bst_offload_hdr_eth_destination_mac") { retval = write_bst_offload_hdr_eth_destination_mac(data); @@ -400,13 +406,13 @@ bool Periph_fpga::write(TermOutput& termout, const string addr, const string typ retval = write_bst_offload_hdr_ip_destination_address(data); } else if (addr == "fpga/bst_offload_hdr_udp_destination_port") { - retval = write_bst_offload_hdr_udp_destination_port(data_ptr); + retval = write_bst_offload_hdr_udp_destination_port(data); } else if (addr == "fpga/bst_offload_nof_beamlets_per_packet") { - retval = write_bst_offload_nof_beamlets_per_packet(data_ptr); + retval = write_bst_offload_nof_beamlets_per_packet(data); } else if (addr == "fpga/xst_offload_enable") { - retval = write_xst_offload_enable(data_ptr); + retval = write_xst_offload_enable(data); } else if (addr == "fpga/xst_offload_hdr_eth_destination_mac") { retval = write_xst_offload_hdr_eth_destination_mac(data); @@ -415,46 +421,46 @@ bool Periph_fpga::write(TermOutput& termout, const string addr, const string typ retval = write_xst_offload_hdr_ip_destination_address(data); } else if (addr == "fpga/xst_offload_hdr_udp_destination_port") { - retval = write_xst_offload_hdr_udp_destination_port(data_ptr); + retval = write_xst_offload_hdr_udp_destination_port(data); } else if (addr == "fpga/xst_processing_enable") { - retval = write_xst_processing_enable(data_ptr); + retval = write_xst_processing_enable(data); } else if (addr == "fpga/xst_integration_interval") { - retval = write_xst_integration_interval(data_ptr); + retval = write_xst_integration_interval(data); } else if (addr == "fpga/xst_subband_select") { - retval = write_xst_subband_select(data_ptr); + retval = write_xst_subband_select(data); } else if (addr == "fpga/processing_enable") { - retval = write_processing_enable(data_ptr); + retval = write_processing_enable(data); } else if (addr == "fpga/sdp_info_station_id") { - retval = write_sdp_info_station_id(data_ptr); + retval = write_sdp_info_station_id(data); } else if (addr == "fpga/sdp_info_observation_id") { - retval = write_sdp_info_observation_id(data_ptr); + retval = write_sdp_info_observation_id(data); } else if (addr == "fpga/sdp_info_nyquist_sampling_zone_index") { - retval = write_sdp_info_nyquist_sampling_zone_index(data_ptr); + retval = write_sdp_info_nyquist_sampling_zone_index(data); } else if (addr == "fpga/wg_enable") { - retval = write_wg_enable(data_ptr); + retval = write_wg_enable(data); } else if (addr == "fpga/wg_amplitude") { - retval = write_wg_amplitude(data_ptr); + retval = write_wg_amplitude(data); } else if (addr == "fpga/wg_phase") { - retval = write_wg_phase(data_ptr); + retval = write_wg_phase(data); } else if (addr == "fpga/wg_frequency") { - retval = write_wg_frequency(data_ptr); + retval = write_wg_frequency(data); } else if (addr == "fpga/signal_input_samples_delay") { - retval = write_signal_input_samples_delay(data_ptr); + retval = write_signal_input_samples_delay(data); } else if (addr == "fpga/subband_weights") { - retval = write_subband_weights(data_ptr); + retval = write_subband_weights(data); } else { throw runtime_error("address " + addr + " not found!"); @@ -651,13 +657,14 @@ bool Periph_fpga::read_system_info(TermOutput& termout) return retval; } -bool Periph_fpga::flash_prot(uint32_t *data) +bool Periph_fpga::flash_prot(const char *data) { bool retval = false; uint32_t passphrase_protect = 0; uint32_t passphrase_unprotect = 0xBEDA221E; + uint32_t *_ptr = (uint32_t *)data; - if (*data == 0) { // unprotect + if (*_ptr == 0) { // unprotect retval = Write("mm/0/REG_EPCS/0/unprotect", &passphrase_unprotect); } else { // protect @@ -666,9 +673,10 @@ bool Periph_fpga::flash_prot(uint32_t *data) return retval; } -bool Periph_fpga::flash_page(uint32_t *data) +bool Periph_fpga::flash_page(const char *data) { bool retval = false; + uint32_t *_ptr = (uint32_t *)data; wait_while_epcs_busy(1); // write address @@ -676,7 +684,7 @@ bool Periph_fpga::flash_page(uint32_t *data) retval = Write("mm/0/REG_EPCS/0/addr", &addr); // write to FIFO - retval = Write("mm/0/REG_MMDP_DATA/0/data", data); + retval = Write("mm/0/REG_MMDP_DATA/0/data", _ptr); // write_write uint32_t d = 1; @@ -685,7 +693,7 @@ bool Periph_fpga::flash_page(uint32_t *data) return retval; } -bool Periph_fpga::flash_pages(uint32_t *data, const uint len) +bool Periph_fpga::flash_pages(const char *data, const uint len) { bool retval = false; uint page_size_words = Flash_page_size_bytes / sizeof(uint32_t); @@ -694,7 +702,7 @@ bool Periph_fpga::flash_pages(uint32_t *data, const uint len) cout << "Periph_fpga::flash_pages nof_pages=" << nof_pages << endl; for (uint p=0; p<nof_pages; p++) { - retval = flash_page(&data[(p*page_size_words)]); + retval = flash_page(&data[(p*Flash_page_size_bytes)]); Flash_page_start++; } return retval; @@ -892,15 +900,16 @@ bool Periph_fpga::read_fpga_scrap(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_fpga_scrap(uint32_t *data) +bool Periph_fpga::write_fpga_scrap(const char *data) { + uint32_t *_ptr = (uint32_t *)data; uint32_t nvalues = mmap->getSpan("mm/0/RAM_SCRAP/0/data"); cout << "Periph_fpga::write_fpga_scrap " << nvalues << " values" << endl; for (uint i=0; i<nvalues; i++) { - cout << data[i] << " "; + cout << _ptr[i] << " "; } cout << endl; - bool retval = Write("mm/0/RAM_SCRAP/0/data", data); + bool retval = Write("mm/0/RAM_SCRAP/0/data", _ptr); return retval; } @@ -927,8 +936,9 @@ bool Periph_fpga::read_fpga_weights(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_fpga_weights(const uint32_t *data) +bool Periph_fpga::write_fpga_weights(const char *data) { + uint32_t *_ptr = (uint32_t *)data; bool retval = false; uint32_t nvalues_scrap = mmap->getSpan("mm/0/RAM_SCRAP/0/data"); uint32_t nvalues = mmap->getSpan("mm/0/RAM_BF_WEIGHTS/0/data"); @@ -936,7 +946,6 @@ bool Periph_fpga::write_fpga_weights(const uint32_t *data) uint32_t *data_scrap = new uint32_t[nvalues_scrap]; - const uint32_t *ptr = data; uint si=0; for (uint i=0; i<nblocks; i++) { for (uint j=0; j<nvalues_scrap; j++) { @@ -945,12 +954,12 @@ bool Periph_fpga::write_fpga_weights(const uint32_t *data) if (si >= nvalues) { break; } - ds = *ptr++; + ds = *_ptr++; si++; if (si >= nvalues) { break; } - ds |= ((*ptr++) << 16); + ds |= ((*_ptr++) << 16); si++; data_scrap[j] = ds; } @@ -978,11 +987,12 @@ bool Periph_fpga::read_sst_offload_weighted_subbands(TermOutput& termout, int fo return retval; } -bool Periph_fpga::write_sst_offload_weighted_subbands(uint32_t *data) +bool Periph_fpga::write_sst_offload_weighted_subbands(const char *data) { + uint32_t *_ptr = (uint32_t *)data; uint32_t *reg = new uint32_t[1]; reg[0] = 0; - if (data[0] == 0) reg[0] = 1; + if (_ptr[0] == 0) reg[0] = 1; bool retval = Write("mm/0/REG_DP_SELECTOR/0/input_select", reg); delete[] reg; return retval; @@ -1005,9 +1015,11 @@ bool Periph_fpga::read_sst_offload_enable(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_sst_offload_enable(uint32_t *data) +bool Periph_fpga::write_sst_offload_enable(const char *data) { - return Write("mm/0/REG_STAT_ENABLE_SST/0/enable", data); + uint32_t _data[1]; + _data[0] = (uint32_t)data[0]; + return Write("mm/0/REG_STAT_ENABLE_SST/0/enable", _data); } @@ -1123,9 +1135,10 @@ bool Periph_fpga::read_sst_offload_hdr_udp_destination_port(TermOutput& termout, return retval; } -bool Periph_fpga::write_sst_offload_hdr_udp_destination_port(uint32_t *data) +bool Periph_fpga::write_sst_offload_hdr_udp_destination_port(const char *data) { - return Write("mm/0/REG_STAT_HDR_DAT_SST/0/udp_destination_port", data); + uint32_t *_ptr = (uint32_t *)data; + return Write("mm/0/REG_STAT_HDR_DAT_SST/0/udp_destination_port", _ptr); } bool Periph_fpga::read_bst_offload_enable(TermOutput& termout, int format) @@ -1149,13 +1162,16 @@ bool Periph_fpga::read_bst_offload_enable(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_bst_offload_enable(uint32_t *data) +bool Periph_fpga::write_bst_offload_enable(const char *data) { + bool *_ptr = (bool *)data; bool retval = true; string regname; + uint32_t _data[1]; for (uint32_t i=0; i<C_N_beamsets; i++) { regname = "mm/" + to_string(i) + "/REG_STAT_ENABLE_BST/0/enable"; - retval &= Write(regname, &data[i]); + _data[0] = (uint32_t)_ptr[i]; + retval &= Write(regname, _data); } return retval; } @@ -1313,13 +1329,14 @@ bool Periph_fpga::read_bst_offload_hdr_udp_destination_port(TermOutput& termout, return retval; } -bool Periph_fpga::write_bst_offload_hdr_udp_destination_port(uint32_t *data) +bool Periph_fpga::write_bst_offload_hdr_udp_destination_port(const char *data) { + uint32_t *_ptr = (uint32_t *)data; bool retval = true; string regname; for (uint32_t i=0; i<C_N_beamsets; i++) { regname = "mm/" + to_string(i) + "/REG_STAT_HDR_DAT_BST/0/udp_destination_port"; - retval &= Write(regname, &data[i]); + retval &= Write(regname, &_ptr[i]); } return retval; } @@ -1344,13 +1361,14 @@ bool Periph_fpga::read_bst_offload_nof_beamlets_per_packet(TermOutput& termout, return retval; } -bool Periph_fpga::write_bst_offload_nof_beamlets_per_packet(uint32_t *data) +bool Periph_fpga::write_bst_offload_nof_beamlets_per_packet(const char *data) { + uint32_t *_ptr = (uint32_t *)data; bool retval = true; string regname; for (uint32_t i=0; i<C_N_beamsets; i++) { regname = "mm/" + to_string(i) + "/REG_STAT_HDR_DAT_BST/0/TODO"; - if (Write(regname, &data[i]) == false) { + if (Write(regname, &_ptr[i]) == false) { retval = false; } } @@ -1374,9 +1392,11 @@ bool Periph_fpga::read_xst_offload_enable(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_xst_offload_enable(uint32_t *data) +bool Periph_fpga::write_xst_offload_enable(const char *data) { - return Write("mm/0/REG_STAT_ENABLE_XST/0/enable", data); + uint32_t _data[1]; + _data[0] = (bool)data[0]; + return Write("mm/0/REG_STAT_ENABLE_XST/0/enable", _data); } @@ -1492,9 +1512,10 @@ bool Periph_fpga::read_xst_offload_hdr_udp_destination_port(TermOutput& termout, return retval; } -bool Periph_fpga::write_xst_offload_hdr_udp_destination_port(uint32_t *data) +bool Periph_fpga::write_xst_offload_hdr_udp_destination_port(const char *data) { - return Write("mm/0/REG_STAT_HDR_DAT_XST/0/udp_destination_port", data); + uint32_t *_ptr = (uint32_t *)data; + return Write("mm/0/REG_STAT_HDR_DAT_XST/0/udp_destination_port", _ptr); } bool Periph_fpga::read_xst_processing_enable(TermOutput& termout, int format) @@ -1513,7 +1534,7 @@ bool Periph_fpga::read_xst_processing_enable(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_xst_processing_enable(uint32_t *data) +bool Periph_fpga::write_xst_processing_enable(const char *data) { bool retval = true; uint32_t *reg = new uint32_t[2]; @@ -1557,8 +1578,9 @@ bool Periph_fpga::read_xst_integration_interval(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_xst_integration_interval(uint32_t *data) +bool Periph_fpga::write_xst_integration_interval(const char *data) { + uint32_t *_ptr = (uint32_t *)data; // TODO, fill in if supported in FW // return Write("mm/0/REG_STAT_HDR_DAT_XST/0/??", data); return true; @@ -1583,11 +1605,12 @@ bool Periph_fpga::read_xst_subband_select(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_xst_subband_select(uint32_t *data) +bool Periph_fpga::write_xst_subband_select(const char *data) { + uint32_t *_ptr = (uint32_t *)data; bool retval = true; - retval &= Write("mm/0/REG_CROSSLETS_INFO/0/offset", &data[1]); - retval &= Write("mm/0/REG_CROSSLETS_INFO/0/step", &data[0]); + retval &= Write("mm/0/REG_CROSSLETS_INFO/0/offset", &_ptr[1]); + retval &= Write("mm/0/REG_CROSSLETS_INFO/0/step", &_ptr[0]); return retval; } @@ -1608,14 +1631,14 @@ bool Periph_fpga::read_processing_enable(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_processing_enable(uint32_t *data) +bool Periph_fpga::write_processing_enable(const char *data) { // write dp_on 0 // write bsn_init [calc val for next sec] // write bsn_time_offset [calc val if odd] // write dp_on_pps 1 // write dp_on 1 - + uint32_t *reg = new uint32_t[2]; reg[0] = 0; reg[1] = 0; @@ -1687,8 +1710,9 @@ bool Periph_fpga::read_sdp_info_station_id(TermOutput& termout, int format) { return retval; } -bool Periph_fpga::write_sdp_info_station_id(uint32_t *data) { - bool retval = Write("mm/0/REG_SDP_INFO/0/station_id", data); +bool Periph_fpga::write_sdp_info_station_id(const char *data) { + uint32_t *_ptr = (uint32_t *)data; + bool retval = Write("mm/0/REG_SDP_INFO/0/station_id", _ptr); return retval; } @@ -1707,8 +1731,9 @@ bool Periph_fpga::read_sdp_info_observation_id(TermOutput& termout, int format) return retval; } -bool Periph_fpga::write_sdp_info_observation_id(uint32_t *data) { - bool retval = Write("mm/0/REG_SDP_INFO/0/observation_id", data); +bool Periph_fpga::write_sdp_info_observation_id(const char *data) { + uint32_t *_ptr = (uint32_t *)data; + bool retval = Write("mm/0/REG_SDP_INFO/0/observation_id", _ptr); return retval; } @@ -1727,8 +1752,9 @@ bool Periph_fpga::read_sdp_info_nyquist_sampling_zone_index(TermOutput& termout, return retval; } -bool Periph_fpga::write_sdp_info_nyquist_sampling_zone_index(uint32_t *data) { - bool retval = Write("mm/0/REG_SDP_INFO/0/nyquist_zone_index", data); +bool Periph_fpga::write_sdp_info_nyquist_sampling_zone_index(const char *data) { + uint32_t *_ptr = (uint32_t *)data; + bool retval = Write("mm/0/REG_SDP_INFO/0/nyquist_zone_index", _ptr); return retval; } @@ -1830,7 +1856,8 @@ bool Periph_fpga::read_wg_enable(TermOutput& termout, int format) { return retval; } -bool Periph_fpga::write_wg_enable(uint32_t *data) { +bool Periph_fpga::write_wg_enable(const char *data) { + bool *_ptr = (bool *)data; bool retval = true; uint32_t *reg = new uint32_t[4]; uint64_t scheduled_bsn; @@ -1841,7 +1868,7 @@ bool Periph_fpga::write_wg_enable(uint32_t *data) { // turn off waveform for (uint i=0; i< C_S_pn; i++) { - wg_enable = (bool)data[i]; + wg_enable = _ptr[i]; if (wg_enable == false) { regname1 = "mm/0/REG_WG/" + to_string(i) + "/mode"; regname2 = "mm/0/REG_WG/" + to_string(i) + "/nof_samples"; @@ -1851,7 +1878,7 @@ bool Periph_fpga::write_wg_enable(uint32_t *data) { } // turn on waveform for (uint i=0; i< C_S_pn; i++) { - wg_enable = (bool)data[i]; + wg_enable = _ptr[i]; if (wg_enable == true) { regname1 = "mm/0/REG_WG/" + to_string(i) + "/mode"; regname2 = "mm/0/REG_WG/" + to_string(i) + "/nof_samples"; @@ -1860,7 +1887,7 @@ bool Periph_fpga::write_wg_enable(uint32_t *data) { } } // get bsn and add latency - wg_enable = (bool)data[0]; + wg_enable = _ptr[0]; if (wg_enable == true) { regname1 = "mm/0/REG_BSN_SCHEDULER/0/scheduled_bsn"; retval = Read(regname1, reg); @@ -1873,7 +1900,7 @@ bool Periph_fpga::write_wg_enable(uint32_t *data) { } // write sheduled bsn for (uint i=0; i< C_S_pn; i++) { - wg_enable = (bool)data[i]; + wg_enable = _ptr[i]; if (wg_enable == true) { regname1 = "mm/0/REG_BSN_SCHEDULER/" + to_string(i) + "/scheduled_bsn"; retval = Write(regname1, reg); @@ -1911,13 +1938,13 @@ bool Periph_fpga::read_wg_amplitude(TermOutput& termout, int format) { return retval; } -bool Periph_fpga::write_wg_amplitude(uint32_t *data) { +bool Periph_fpga::write_wg_amplitude(const char *data) { + double *_ptr = (double *)data; bool retval = true; uint32_t *reg = new uint32_t[2]; double ampl; string regname; - double *_ptr = (double *)data; for (uint i=0; i< C_S_pn; i++) { regname = "mm/0/REG_WG/" + to_string(i) + "/ampl"; ampl = (*_ptr) * C_WG_AMPL_UNIT; @@ -1958,13 +1985,13 @@ bool Periph_fpga::read_wg_phase(TermOutput& termout, int format) { return retval; } -bool Periph_fpga::write_wg_phase (uint32_t *data) { +bool Periph_fpga::write_wg_phase (const char *data) { + double *_ptr = (double *)data; bool retval = true; uint32_t *reg = new uint32_t[2]; float phase; string regname; - double *_ptr = (double *)data; for (uint i=0; i< C_S_pn; i++) { regname = "mm/0/REG_WG/" + to_string(i) + "/phase"; phase = (*_ptr) * C_WG_PHASE_UNIT; @@ -2006,13 +2033,13 @@ bool Periph_fpga::read_wg_frequency(TermOutput& termout, int format) { return retval; } -bool Periph_fpga::write_wg_frequency(uint32_t *data) { +bool Periph_fpga::write_wg_frequency(const char *data) { + double *_ptr = (double *)data; bool retval = true; uint32_t *reg = new uint32_t[2]; double freq, intpart; string regname; - double *_ptr = (double *)data; for (uint i=0; i<C_S_pn; i++) { regname = "mm/0/REG_WG/" + to_string(i) + "/freq"; freq = (*_ptr) / C_F_adc; @@ -2222,14 +2249,14 @@ bool Periph_fpga::read_jesd204b_rx_err1(TermOutput& termout, int format, int mod return retval; } -bool Periph_fpga::write_signal_input_samples_delay(uint32_t *data) { +bool Periph_fpga::write_signal_input_samples_delay(const char *data) { + uint32_t *_ptr = (uint32_t *)data; bool retval = true; uint32_t *reg = new uint32_t[2]; uint32_t min_sample_delay = 0; uint32_t max_sample_delay = 4095; uint32_t sample_delay; string regname; - uint32_t *_ptr = (uint32_t *)data; for (uint i=0; i< C_S_pn; i++) { sample_delay = *_ptr; if ((sample_delay < min_sample_delay) || (sample_delay > max_sample_delay)) { @@ -2237,7 +2264,7 @@ bool Periph_fpga::write_signal_input_samples_delay(uint32_t *data) { retval = false; } else { regname = "mm/0/REG_DP_SHIFTRAM/" + to_string(i) + "/shift"; - reg[0] = (uint32_t)sample_delay; + reg[0] = sample_delay; retval = Write(regname, reg); _ptr++; } @@ -2263,7 +2290,8 @@ bool Periph_fpga::read_signal_input_samples_delay(TermOutput& termout, int forma return retval; } -bool Periph_fpga::write_subband_weights(uint32_t *data) { +bool Periph_fpga::write_subband_weights(const char *data) { + uint32_t *_ptr = (uint32_t *)data; bool retval = true; string regname; uint32_t span; @@ -2274,7 +2302,7 @@ bool Periph_fpga::write_subband_weights(uint32_t *data) { regname = "mm/0/RAM_EQUALIZER_GAINS/" + to_string(i) + "/data"; span = mmap->getSpan((regname)); data_ptr = i * span; - retval = Write(regname, &data[data_ptr]); + retval = Write(regname, &_ptr[data_ptr]); } return retval; } diff --git a/src/periph/fpga.h b/src/periph/fpga.h index eea3a2415f2c30c97388334cdfcaaa2c35d89466..2a4fea97b5f346e9914f577509065feefbcfdb31 100644 --- a/src/periph/fpga.h +++ b/src/periph/fpga.h @@ -82,9 +82,9 @@ private: bool flash_erase_sector(uint32_t sector); bool flash_erase(); - bool flash_pages(uint32_t *data, const uint len); - bool flash_page(uint32_t *data); - bool flash_prot(uint32_t *data); + bool flash_pages(const char *data, const uint len); + bool flash_page(const char *data); + bool flash_prot(const char *data); bool wait_while_epcs_busy(uint sleeptime); std::string read_design_name(); std::string read_design_note(); @@ -97,68 +97,68 @@ private: bool read_fpga_temperature(TermOutput& termout, int format); bool read_fpga_scrap(TermOutput& termout, int format); - bool write_fpga_scrap(uint32_t *data); + bool write_fpga_scrap(const char *data); bool read_fpga_weights(TermOutput& termout, int format); - bool write_fpga_weights(const uint32_t *data); + bool write_fpga_weights(const char *data); bool read_sst_offload_weighted_subbands(TermOutput& termout, int format); - bool write_sst_offload_weighted_subbands(uint32_t *data); + bool write_sst_offload_weighted_subbands(const char *data); bool read_sst_offload_enable(TermOutput& termout, int format); - bool write_sst_offload_enable(uint32_t *data); + bool write_sst_offload_enable(const char *data); bool read_sst_offload_hdr_eth_destination_mac(TermOutput& termout, int format); bool write_sst_offload_hdr_eth_destination_mac(const char *data); bool read_sst_offload_hdr_ip_destination_address(TermOutput& termout, int format); bool write_sst_offload_hdr_ip_destination_address(const char *data); bool read_sst_offload_hdr_udp_destination_port(TermOutput& termout, int format); - bool write_sst_offload_hdr_udp_destination_port(uint32_t *data); + bool write_sst_offload_hdr_udp_destination_port(const char *data); bool read_bst_offload_enable(TermOutput& termout, int format); - bool write_bst_offload_enable(uint32_t *data); + bool write_bst_offload_enable(const char *data); bool read_bst_offload_hdr_eth_destination_mac(TermOutput& termout, int format); bool write_bst_offload_hdr_eth_destination_mac(const char *data); bool read_bst_offload_hdr_ip_destination_address(TermOutput& termout, int format); bool write_bst_offload_hdr_ip_destination_address(const char *data); bool read_bst_offload_hdr_udp_destination_port(TermOutput& termout, int format); - bool write_bst_offload_hdr_udp_destination_port(uint32_t *data); + bool write_bst_offload_hdr_udp_destination_port(const char *data); bool read_bst_offload_nof_beamlets_per_packet(TermOutput& termout, int format); - bool write_bst_offload_nof_beamlets_per_packet(uint32_t *data); + bool write_bst_offload_nof_beamlets_per_packet(const char *data); bool read_xst_subband_select(TermOutput& termout, int format); - bool write_xst_subband_select(uint32_t *data); + bool write_xst_subband_select(const char *data); bool read_xst_integration_interval(TermOutput& termout, int format); - bool write_xst_integration_interval(uint32_t *data); + bool write_xst_integration_interval(const char *data); bool read_xst_processing_enable(TermOutput& termout, int format); - bool write_xst_processing_enable(uint32_t *data); + bool write_xst_processing_enable(const char *data); bool read_xst_offload_enable(TermOutput& termout, int format); - bool write_xst_offload_enable(uint32_t *data); + bool write_xst_offload_enable(const char *data); bool read_xst_offload_hdr_eth_destination_mac(TermOutput& termout, int format); bool write_xst_offload_hdr_eth_destination_mac(const char *data); bool read_xst_offload_hdr_ip_destination_address(TermOutput& termout, int format); bool write_xst_offload_hdr_ip_destination_address(const char *data); bool read_xst_offload_hdr_udp_destination_port(TermOutput& termout, int format); - bool write_xst_offload_hdr_udp_destination_port(uint32_t *data); + bool write_xst_offload_hdr_udp_destination_port(const char *data); bool read_processing_enable(TermOutput& termout, int format); - bool write_processing_enable(uint32_t *data); + bool write_processing_enable(const char *data); bool read_sdp_info_station_id(TermOutput& termout, int format); - bool write_sdp_info_station_id(uint32_t *data); + bool write_sdp_info_station_id(const char *data); bool read_sdp_info_observation_id(TermOutput& termout, int format); - bool write_sdp_info_observation_id(uint32_t *data); + bool write_sdp_info_observation_id(const char *data); bool read_sdp_info_nyquist_sampling_zone_index(TermOutput& termout, int format); - bool write_sdp_info_nyquist_sampling_zone_index(uint32_t *data); + bool write_sdp_info_nyquist_sampling_zone_index(const char *data); bool read_sdp_info_antenna_band_index(TermOutput& termout, int format); bool read_sdp_info_f_adc(TermOutput& termout, int format); bool read_sdp_info_fsub_type(TermOutput& termout, int format); bool read_wg_enable(TermOutput& termout, int format); - bool write_wg_enable(uint32_t *data); + bool write_wg_enable(const char *data); bool read_wg_amplitude(TermOutput& termout, int format); - bool write_wg_amplitude(uint32_t *data); + bool write_wg_amplitude(const char *data); bool read_wg_phase(TermOutput& termout, int format); - bool write_wg_phase (uint32_t *data); - bool write_wg_frequency(uint32_t *data); + bool write_wg_phase (const char *data); + bool write_wg_frequency(const char *data); bool read_wg_frequency(TermOutput& termout, int format); bool read_bsn_monitor_input_sync_timeout(TermOutput& termout, int format, int mode); @@ -172,10 +172,10 @@ private: bool read_jesd204b_rx_err0(TermOutput& termout, int format, int mode); bool read_jesd204b_rx_err1(TermOutput& termout, int format, int mode); - bool write_signal_input_samples_delay(uint32_t *data); + bool write_signal_input_samples_delay(const char *data); bool read_signal_input_samples_delay(TermOutput& termout, int format); - bool write_subband_weights(uint32_t *data); + bool write_subband_weights(const char *data); bool read_subband_weights(TermOutput& termout, int format); bool read_sdp_info_block_period(TermOutput& termout, int format); diff --git a/src/tr.cpp b/src/tr.cpp index f63ce90be75573e2d748e63547d180a69ca6cbd6..b5319cf3064e8b3351a6eb183e4e43a2d169156a 100644 --- a/src/tr.cpp +++ b/src/tr.cpp @@ -52,9 +52,9 @@ TranslatorMap::TranslatorMap() translatorMap->add_register("TR_fpga_mask_R", "-", C_N_pn, 1, "RO", REG_FORMAT_BOOLEAN); translatorMap->add_register("TR_fpga_mask_RW", "-", C_N_pn, 1, "RW", REG_FORMAT_BOOLEAN); translatorMap->add_register("TR_software_version_R", "-", 1, 1, "RO", REG_FORMAT_STRING); - translatorMap->add_register("TR_start_time_R", "-", 1, 1, "RO", REG_FORMAT_UINT32); + translatorMap->add_register("TR_start_time_R", "-", 1, 1, "RO", REG_FORMAT_INT64); // translatorMap->add_register("TR_tod_client_status_R", "-", 1, 1, "RO", REG_FORMAT_BOOLEAN); // TODO: PTP client is part of linux, can I get a status? - translatorMap->add_register("TR_tod_R", "-", 1, 1, "RO", REG_FORMAT_UINT32); + translatorMap->add_register("TR_tod_R", "-", 1, 1, "RO", REG_FORMAT_INT64); translatorMap->add_register("TR_tod_pps_delta_R", "-", 1, 1, "RO", REG_FORMAT_DOUBLE); translatorMap->add_register("TR_fpga_communication_error_R", "-", C_N_pn, 1, "RO", REG_FORMAT_BOOLEAN); // translatorMap->add_register("TR_reload_RW", "-", 1, 1, "RW", REG_FORMAT_BOOLEAN); // Maybe for future. @@ -68,7 +68,7 @@ TranslatorMap::~TranslatorMap() } bool TranslatorMap::translator(TermOutput& termout, const char cmd, const string addr, - const unsigned int *data, const int nvalues) + const char *data, const int nvalues) { bool retval = false; termout.clear(); @@ -173,7 +173,7 @@ bool TranslatorMap::read(TermOutput& termout, } bool TranslatorMap::write(TermOutput& termout, - const string addr, const unsigned int *data, + const string addr, const char *data, const int nvalues) { return translator(termout, 'W', addr, data, nvalues); diff --git a/src/tr.h b/src/tr.h index 66826ee98c644db55ab7c8c2fcaac300f72ea486..b9047a07767f0dc2fa0f886d5f41c4832da81443 100644 --- a/src/tr.h +++ b/src/tr.h @@ -54,10 +54,10 @@ public: }; bool translator(TermOutput& termout, const char cmd, const std::string addr, - const unsigned int *data, const int len); + const char *data, const int len); bool write(TermOutput& termout, const std::string addr, - const unsigned int *data, const int nvalues); + const char *data, const int nvalues); bool read(TermOutput& termout, const std::string addr, const int nvalues); };