Skip to content
Snippets Groups Projects
Commit 2daa2ac0 authored by Christian Koernig's avatar Christian Koernig
Browse files

Added buffer slots to simulator

parent 66e088c0
No related branches found
No related tags found
No related merge requests found
...@@ -24,7 +24,9 @@ private: ...@@ -24,7 +24,9 @@ private:
void disable(); void disable();
void clear(); void clear();
int speclen = 1024; int speclen = 1024;
int buffer_depth = 64;
unsigned int* spectrum; unsigned int* spectrum;
byte* spectrum_buffer;
uint32_t total_counts; uint32_t total_counts;
double acc_time = 0; double acc_time = 0;
......
...@@ -69,13 +69,22 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ ...@@ -69,13 +69,22 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS ); p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS );
break; break;
} }
word16 len = 3*speclen + STATUS_SIZE; word16 len = 3*speclen + STATUS_SIZE;
p.resize( MIN_PACKET_LEN + len );
if (pid2== DP5_P2_SPECTRUM_REQUEST_SPECTRUM_STATUS){
byte arr[len]; byte arr[len];
createSpectrumData(arr); createSpectrumData(arr);
createStatusData(arr + 3*speclen); createStatusData(arr + 3*speclen);
p.resize( MIN_PACKET_LEN + len );
p.setData(arr, len); p.setData(arr, len);
}else{
size_t buffer_idx = (request.at(DATA) << 8) + request.at(DATA);
if (buffer_idx >=buffer_depth){
return Packet(DP5_P1_ACK, DP5_P2_ACK_BADPARAM_ERR, nullptr, 0);
}
byte* bufferslot = spectrum_buffer + ( (3*speclen + STATUS_SIZE)*buffer_idx );
p.setData(bufferslot, len);
}
} }
else if (pid1 == Packet::DP5_PKT_REQUEST_STATUS.at(PID1) else if (pid1 == Packet::DP5_PKT_REQUEST_STATUS.at(PID1)
&& pid2 == Packet::DP5_PKT_REQUEST_STATUS.at(PID2)) && pid2 == Packet::DP5_PKT_REQUEST_STATUS.at(PID2))
...@@ -134,6 +143,22 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ ...@@ -134,6 +143,22 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
readConfig(configs); readConfig(configs);
return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0); return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
} }
else if(pid1 == DP5_P1_SPECTRUM_REQUEST
&& pid2 == DP5_P2_SPECTRUM_REQUEST_BUFFER_CLEAR)
{
size_t buffer_idx = (request.at(DATA) << 8) + request.at(DATA);
if (buffer_idx >=buffer_depth){
return Packet(DP5_P1_ACK, DP5_P2_ACK_BADPARAM_ERR, nullptr, 0);
}
byte* bufferslot_spectrum = spectrum_buffer + ( (3*speclen + STATUS_SIZE)*buffer_idx );
byte* bufferslot_status = bufferslot_spectrum + 3*speclen;
createSpectrumData(bufferslot_spectrum);
createStatusData(bufferslot_status);
clear();
}
else{ else{
return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0); return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
} }
...@@ -144,6 +169,7 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ ...@@ -144,6 +169,7 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
AmptekSimulatorConnectionHandler::AmptekSimulatorConnectionHandler(){ AmptekSimulatorConnectionHandler::AmptekSimulatorConnectionHandler(){
spectrum = new unsigned int[speclen]; spectrum = new unsigned int[speclen];
spectrum_buffer = new byte[(3*speclen + STATUS_SIZE)*buffer_depth];
start_time = std::chrono::system_clock::now(); start_time = std::chrono::system_clock::now();
clear(); clear();
initConfigs(); initConfigs();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment