diff --git a/.gitignore b/.gitignore index e069c0ec3b607ddb229676aa27aba2da5e52cb96..dc3ca3f61cc352e547f5ade21408dcdf36214185 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.pyc __pycache__ build + +.vscode \ No newline at end of file diff --git a/include/packet.h b/include/packet.h index b3975ae569a8539ca2357df1447f233edee31c1c..cce243fff82607af7149768e3dd000754868dfd6 100644 --- a/include/packet.h +++ b/include/packet.h @@ -21,60 +21,109 @@ enum Offset DATA }; +// Packet impementation and hex values are based on the DP5 Programmers Guide, Version B1 + +// Packet ID first byte (packet group) enum PID1_TYPE{ - PX5_RESPONSE_STATUS = 0x80, - PX5_RESPONSE_SPECTRUM = 0x81, - PX5_RESPONSE_CONFIG = 0x82, - PX5_RESPONSE_COMMTEST = 0x8F, - PX5_ACK = 0xFF, - PX5_REQUEST_CONFIG =0x20 + DP5_P1_STATUS_REQUEST = 0x01, + DP5_P1_SPECTRUM_REQUEST = 0x02, + DP5_P1_DATA_REQUEST = 0x03, + DP5_P1_SCA_REQUEST = 0x04, + DP5_P1_TEXTCONFIG_REQUEST = 0x20, + DP5_P1_COMMAND_REQUEST = 0xF0, + DP5_P1_COMTEST_REQUEST = 0xF1, + + DP5_P1_STATUS_RESPONSE = 0x80, + DP5_P1_SPECTRUM_RESPONSE = 0x81, + DP5_P1_DATA_RESPONSE = 0x82, + DP5_P1_COMMTEST_RESPONSE = 0x8F, + + DP5_P1_ACK = 0xFF, +}; + + +// Packet ID second byte (one enum per group) + +enum PID2_SUBTYPE_STATUS_REQUEST{ + DP5_P2_STATUS_REQUEST_INFO = 0x01, +}; + +enum PID2_SUBTYPE_SPECTRUM_REQUEST{ + DP5_P2_SPECTRUM_REQUEST_SPECTRUM = 0x01, + DP5_P2_SPECTRUM_REQUEST_SPECTRUM_CLEAR = 0x02, + DP5_P2_SPECTRUM_REQUEST_SPECTRUM_STATUS = 0x03, + DP5_P2_SPECTRUM_REQUEST_SPECTRUM_STATUS_CLEAR = 0x04, + DP5_P2_SPECTRUM_REQUEST_BUFFER = 0x05, + DP5_P2_SPECTRUM_REQUEST_BUFFER_CLEAR = 0x06, + DP5_P2_SPECTRUM_REQUEST_GET_BUFFER = 0x07, +}; +enum PID2_SUBTYPE_DATA_REQUEST{ + DP5_P2_DATA_REQUEST_LISTDATA = 0x09, }; -enum STATUS_PACKET_TYPES{ - PX5_RESPONSE_STATUS_INFO = 0x01, +enum PID2_SUBTYPE_COMMAND_REQUEST{ + DP5_P2_COMMAND_REQUEST_CLEAR_SPECTRUM = 0x01, + DP5_P2_COMMAND_REQUEST_ENABLE = 0x02, + DP5_P2_COMMAND_REQUEST_DISABLE = 0x03, + DP5_P2_COMMAND_REQUEST_CLEAR_GPCOUNTER = 0x10, + DP5_P2_COMMAND_REQUEST_CLEAR_TIMER = 0x16, + DP5_P2_COMMAND_REQUEST_RESTART_BUFFER = 0x1E, + DP5_P2_COMMAND_REQUEST_CANCEL_BUFFER = 0x1F, + DP5_P2_COMMAND_REQUEST_KEEP_ALIVE_NO_SHARE = 0x21, }; -enum SPECTRUM_PACKET_TYPES{ - - PX5_RESPONSE_SPECTRUM256 = 0x01, - PX5_RESPONSE_SPECTRUM256_STATUS = 0x02, - PX5_RESPONSE_SPECTRUM512 = 0x03, - PX5_RESPONSE_SPECTRUM512_STATUS = 0x04, - PX5_RESPONSE_SPECTRUM1024 = 0x05, - PX5_RESPONSE_SPECTRUM1024_STATUS = 0x06, - PX5_RESPONSE_SPECTRUM2048 = 0x07, - PX5_RESPONSE_SPECTRUM2048_STATUS = 0x08, - PX5_RESPONSE_SPECTRUM4096 = 0x09, - PX5_RESPONSE_SPECTRUM4096_STATUS = 0x0A, - PX5_RESPONSE_SPECTRUM8192 = 0x0B, - PX5_RESPONSE_SPECTRUM8192_STATUS = 0x0C, + +enum PID2_SUBTYPE_STATUS_RESPONSE{ + DP5_P2_STATUS_RESPONSE_INFO = 0x01, +}; +enum PID2_SUBTYPE_SPECTRUM_RESPONSE{ + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM256 = 0x01, + DP5_P2_SPECTRUM_SPECTRUM256_STATUS = 0x02, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512 = 0x03, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512_STATUS = 0x04, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024 = 0x05, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024_STATUS = 0x06, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048 = 0x07, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048_STATUS = 0x08, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096 = 0x09, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096_STATUS = 0x0A, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192 = 0x0B, + DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS = 0x0C, +}; + +enum PID2_SUBTYPE_TEXTCONFIG_REQUEST{ + DP5_P2_TEXTCONFIG_REQUEST_SET = 0x02, + DP5_P2_TEXTCONFIG_REQUEST_GET = 0x03, }; -enum CONFIG_PACKET_TYPES{ - PX5_RESPONSE_CONFIG_TEXT = 0x07, - PX5_REQUEST_SET_CONFIG = 0x02, - PX5_REQUEST_GET_CONFIG = 0x03, + +enum PID2_SUBTYPE_DATA_RESPONSE{ + DP5_P2_DATA_RESPONSE_CONFIG_READBACK = 0x07, + DP5_P2_DATA_RESPONSE_LISTDATA = 0x0A, + DP5_P2_DATA_RESPONSE_LISTDATA_FULL = 0x0B, }; -enum COMMTEST_PACKET_TYPES{ - PX5_RESPONSE_COMMETEST_ECHO = 0x7F, +enum PID2_SUBTYPE_COMMTEST_RESPONSE{ + DP5_P2_COMMTEST_RESPONSE_ECHO = 0x7F, }; -enum ACK_PACKET_TYPES{ - PX5_ACK_OK = 0x00, - PX5_ACK_SYNC_ERR = 0x01, - PX5_ACK_PID_ERR = 0x02, - PX5_ACK_LEN_ERR = 0x03, - PX5_ACK_CHECKSUM_ERR = 0x04, - PX5_ACK_BADPARAM_ERR = 0x05, - PX5_ACK_BADHEX_ERR = 0x06, - PX5_ACK_BADCMD_ERR = 0x07, - PX5_ACK_FPGA_ERR = 0x08, - PX5_ACK_CP2201_ERR = 0x09, - PX5_ACK_SCOPE_ERR = 0x0A, - PX5_ACK_PC5_ERR = 0x0B, - PX5_ACK_OK_SHARING = 0x0C, - PX5_ACK_BUSY_ERR = 0x0D, - PX5_ACK_I2C_ERR = 0x0E, - PX5_ACK_OK_FPGAADDR = 0x0F, - PX5_ACK_VERSION_ERR = 0x10, - PX5_ACK_CALIB_ERR = 0x11 + + +enum PID2_SUBTYPE_ACK{ + DP5_P2_ACK_OK = 0x00, + DP5_P2_ACK_SYNC_ERR = 0x01, + DP5_P2_ACK_PID_ERR = 0x02, + DP5_P2_ACK_LEN_ERR = 0x03, + DP5_P2_ACK_CHECKSUM_ERR = 0x04, + DP5_P2_ACK_BADPARAM_ERR = 0x05, + DP5_P2_ACK_BADHEX_ERR = 0x06, + DP5_P2_ACK_BADCMD_ERR = 0x07, + DP5_P2_ACK_FPGA_ERR = 0x08, + DP5_P2_ACK_CP2201_ERR = 0x09, + DP5_P2_ACK_SCOPE_ERR = 0x0A, + DP5_P2_ACK_PC5_ERR = 0x0B, + DP5_P2_ACK_OK_SHARING = 0x0C, + DP5_P2_ACK_BUSY_ERR = 0x0D, + DP5_P2_ACK_I2C_ERR = 0x0E, + DP5_P2_ACK_OK_FPGAADDR = 0x0F, + DP5_P2_ACK_VERSION_ERR = 0x10, + DP5_P2_ACK_CALIB_ERR = 0x11 }; class AmptekException : public std::runtime_error @@ -113,19 +162,25 @@ public: public: - static const Packet PX5_REQUEST_SPECTRUM; - static const Packet PX5_REQUEST_SPECTRUM_AND_STATUS; - static const Packet PX5_REQUEST_STATUS; - static const Packet PX5_REQUEST_ENABLE; - static const Packet PX5_REQUEST_DISABLE; - static const Packet PX5_REQUEST_CLEAR_SPECTRUM; - static const Packet PX5_REQUEST_SET_CONFIG; - static const Packet PX5_REQUEST_GET_CONFIG; - static const Packet PX5_REQUEST_KEEP_ALIVE_NO_SHARING; + static const Packet DP5_PKT_REQUEST_SPECTRUM; + static const Packet DP5_PKT_REQUEST_SPECTRUM_AND_STATUS; + static const Packet DP5_PKT_REQUEST_STATUS; + static const Packet DP5_PKT_REQUEST_ENABLE; + static const Packet DP5_PKT_REQUEST_DISABLE; + static const Packet DP5_PKT_REQUEST_CLEAR_SPECTRUM; + static const Packet DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING; + static const Packet DP5_PKT_REQUEST_RESTART_SEQ_BUFFERING; + static const Packet DP5_PKT_REQUEST_CANCEL_SEQ_BUFFERING; + static const Packet DP5_PKT_REQUEST_LIST_DATA; + static const Packet DP5_PKT_REQUEST_CLEAR_LIST_TIMER; static const Packet gernerateSetConfigurationRequest(std::string text_configuration); static const Packet gernerateGetConfigurationRequest(std::string text_configuration); + static const Packet generateBufferRequest(uint16_t buffer_index); + static const Packet generateBufferAndClearRequest(uint16_t buffer_index); + static const Packet generateGetBufferRequest(uint16_t buffer_index); + }; #endif diff --git a/src/AmptekHardwareInterface.cpp b/src/AmptekHardwareInterface.cpp index 2590fab63715ee77397ca37fd31a482f5393b57d..0af63f3afcbf51a8194147b66c42913fa03a03b1 100644 --- a/src/AmptekHardwareInterface.cpp +++ b/src/AmptekHardwareInterface.cpp @@ -61,7 +61,7 @@ bool AmptekHardwareInterface::statusAgeOk( double max_age_ms ) const { bool AmptekHardwareInterface::Enable(){ try{ - expectAcknowledge( connection_handler->sendAndReceive( Packet::PX5_REQUEST_ENABLE ) ); + expectAcknowledge( connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_ENABLE ) ); } catch( AmptekException& e){ std::cerr << e.what() << std::endl; @@ -75,7 +75,7 @@ bool AmptekHardwareInterface::Enable(){ bool AmptekHardwareInterface::Disable(){ try{ - expectAcknowledge( connection_handler->sendAndReceive( Packet::PX5_REQUEST_DISABLE ) ); + expectAcknowledge( connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_DISABLE ) ); } catch( AmptekException& e){ std::cerr << e.what() << std::endl; @@ -86,7 +86,7 @@ bool AmptekHardwareInterface::Disable(){ } bool AmptekHardwareInterface::Ping(){ try{ - expectAcknowledge( connection_handler->sendAndReceive( Packet::PX5_REQUEST_KEEP_ALIVE_NO_SHARING ) ); + expectAcknowledge( connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING ) ); } catch( AmptekException& e){ std::cerr << e.what() << std::endl; @@ -98,7 +98,7 @@ bool AmptekHardwareInterface::Ping(){ bool AmptekHardwareInterface::ClearSpectrum(){ try{ - expectAcknowledge( connection_handler->sendAndReceive( Packet::PX5_REQUEST_CLEAR_SPECTRUM ) ); + expectAcknowledge( connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_CLEAR_SPECTRUM ) ); } catch( AmptekException& e){ std::cerr << e.what() << std::endl; @@ -198,8 +198,8 @@ std::vector<std::string> AmptekHardwareInterface::GetTextConfiguration(std::vect { Packet settingResponse = connection_handler->sendAndReceive( Packet::gernerateGetConfigurationRequest( cmdstream.str() ) ); - if (settingResponse.at(PID1) != PX5_RESPONSE_CONFIG - || settingResponse.at(PID2) != PX5_RESPONSE_CONFIG_TEXT) + if (settingResponse.at(PID1) != DP5_P1_DATA_RESPONSE + || settingResponse.at(PID2) != DP5_P2_DATA_RESPONSE_CONFIG_READBACK) { throw AmptekException("Failed in AmptekHardwareInterface::GetTextConfiguration: \ Response Packet did not match expected PIDs. \n\ @@ -219,10 +219,10 @@ std::vector<std::string> AmptekHardwareInterface::GetTextConfiguration(std::vect bool AmptekHardwareInterface::updateStatus(double max_age_ms){ if ( !statusAgeOk(max_age_ms)){ - Packet statusResponse = connection_handler->sendAndReceive( Packet::PX5_REQUEST_STATUS ); + Packet statusResponse = connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_STATUS ); //std::cout << statusResponse.size() << std::endl; - if (statusResponse.at(PID1) != PX5_RESPONSE_STATUS - || statusResponse.at(PID2) != PX5_RESPONSE_STATUS_INFO) + if (statusResponse.at(PID1) != DP5_P1_STATUS_RESPONSE + || statusResponse.at(PID2) != DP5_P2_STATUS_RESPONSE_INFO) { std::cerr<< "Response Packet did not match expected PIDs: " << statusResponse.toString() << std::endl; return false; @@ -238,49 +238,49 @@ bool AmptekHardwareInterface::updateStatus(double max_age_ms){ bool AmptekHardwareInterface::updateSpectrum(double max_age_ms){ if ( !spectrumAgeOk(max_age_ms)){ - Packet spectrumResponse = connection_handler->sendAndReceive( Packet::PX5_REQUEST_SPECTRUM_AND_STATUS ); + Packet spectrumResponse = connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_SPECTRUM_AND_STATUS ); //std::cout << spectrumResponse.size() << std::endl; - if (spectrumResponse.at(PID1) != PX5_RESPONSE_SPECTRUM ) + if (spectrumResponse.at(PID1) != DP5_P1_SPECTRUM_RESPONSE ) { std::cerr<< "Response Packet is not of type Spectrum: " << spectrumResponse.toString() << std::endl; return false; } bool with_status = true; switch( spectrumResponse.at(PID2) ){ - case PX5_RESPONSE_SPECTRUM256: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM256: with_status = false; // not break! use the respose with status setting the length - case PX5_RESPONSE_SPECTRUM256_STATUS: + case DP5_P2_SPECTRUM_SPECTRUM256_STATUS: spectrum_length=256; break; - case PX5_RESPONSE_SPECTRUM512: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512: with_status = false; // not break! use the respose with status setting the length - case PX5_RESPONSE_SPECTRUM512_STATUS: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512_STATUS: spectrum_length=512; break; - case PX5_RESPONSE_SPECTRUM1024: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024: with_status = false; // not break! use the respose with status setting the length - case PX5_RESPONSE_SPECTRUM1024_STATUS: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024_STATUS: spectrum_length=1024; break; - case PX5_RESPONSE_SPECTRUM2048: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048: with_status = false; // not break! use the respose with status setting the length - case PX5_RESPONSE_SPECTRUM2048_STATUS: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048_STATUS: spectrum_length=2048; break; - case PX5_RESPONSE_SPECTRUM4096: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096: with_status = false; // not break! use the respose with status setting the length - case PX5_RESPONSE_SPECTRUM4096_STATUS: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096_STATUS: spectrum_length=4096; break; - case PX5_RESPONSE_SPECTRUM8192: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192: with_status = false; // not break! use the respose with status setting the length - case PX5_RESPONSE_SPECTRUM8192_STATUS: + case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS: spectrum_length=8192; break; } @@ -466,46 +466,46 @@ double AmptekHardwareInterface::TecVoltage(double max_age_ms){ void AmptekHardwareInterface::expectAcknowledge(Packet packet){ - if (packet.at(PID1) != PX5_ACK){ + if (packet.at(PID1) != DP5_P1_ACK){ throw AmptekException("Response Package was not an Acknowledge: " + packet.toString()); }else{ - if ( packet.at(PID2) == PX5_ACK_OK - || packet.at(PID2) == PX5_ACK_OK_SHARING - || packet.at(PID2) == PX5_ACK_OK_FPGAADDR){ + if ( packet.at(PID2) == DP5_P2_ACK_OK + || packet.at(PID2) == DP5_P2_ACK_OK_SHARING + || packet.at(PID2) == DP5_P2_ACK_OK_FPGAADDR){ return; }else{ std::string error_msg; char databuffer[packet.dataLength]; switch (packet.at(PID2) ){ - case PX5_ACK_SYNC_ERR: + case DP5_P2_ACK_SYNC_ERR: error_msg = "Sync bytes in Request Packet were not correct, \ and therefore, the Request Packet was rejected."; break; - case PX5_ACK_PID_ERR: + case DP5_P2_ACK_PID_ERR: error_msg = "PID1 & PID2 combination is not recognized as a valid \ Request Packet, and therefore, the Request Packet was rejected."; break; - case PX5_ACK_LEN_ERR: + case DP5_P2_ACK_LEN_ERR: error_msg = "LEN field of the Request Packet was not consistent with \ Request Packet type defined by the PID1 & PID2 combination. \ It is not recognized as a valid Request Packet, \ and therefore, the Request Packet was rejected."; break; - case PX5_ACK_CHECKSUM_ERR: + case DP5_P2_ACK_CHECKSUM_ERR: error_msg = "Checksum of the Request Packet was incorrect, \ and therefore, the Request Packet was rejected."; break; - case PX5_ACK_BADPARAM_ERR: + case DP5_P2_ACK_BADPARAM_ERR: error_msg = "Bad parameter."; break; - case PX5_ACK_BADHEX_ERR: + case DP5_P2_ACK_BADHEX_ERR: error_msg = "Microcontroller or FPGA upload packets error: \ hex record contained in the data field \ of the Request Packet had a checksum or other structural error."; @@ -513,7 +513,7 @@ void AmptekHardwareInterface::expectAcknowledge(Packet packet){ - case PX5_ACK_BADCMD_ERR: + case DP5_P2_ACK_BADCMD_ERR: byteToChar(&(packet.at(DATA)), databuffer, packet.dataLength); error_msg ="Unrecognized command: " + std::string(databuffer); @@ -521,20 +521,20 @@ void AmptekHardwareInterface::expectAcknowledge(Packet packet){ - case PX5_ACK_FPGA_ERR: + case DP5_P2_ACK_FPGA_ERR: error_msg = "FPGA initialization failed."; break; - case PX5_ACK_CP2201_ERR: + case DP5_P2_ACK_CP2201_ERR: error_msg = "Set Ethernet Settings Request Packet was received, \ but an Ethernet controller was not detected on the DP5."; break; - case PX5_ACK_SCOPE_ERR: + case DP5_P2_ACK_SCOPE_ERR: error_msg = "Send Scope Data Request Packet was received, \ but the digital oscilloscope hasn’t triggered, \ so no data is available. [The digital oscilloscope must be armed, \ @@ -542,7 +542,7 @@ void AmptekHardwareInterface::expectAcknowledge(Packet packet){ break; - case PX5_ACK_PC5_ERR: + case DP5_P2_ACK_PC5_ERR: error_msg = "ASCII command errors – the data field will contain the \ ASCII command and parameter which caused the error. “Bad Parameter” \ means that the parameter isn’t recognized \ @@ -558,24 +558,24 @@ void AmptekHardwareInterface::expectAcknowledge(Packet packet){ break; - case PX5_ACK_BUSY_ERR: + case DP5_P2_ACK_BUSY_ERR: error_msg = "Busy, another interface in use."; break; - case PX5_ACK_I2C_ERR: + case DP5_P2_ACK_I2C_ERR: error_msg = "‘I2C Transfer’ Request Packet, but no I2C ACK \ was detected from an I2C Slave."; break; - case PX5_ACK_VERSION_ERR: + case DP5_P2_ACK_VERSION_ERR: error_msg ="Request Packet has been recognized as valid by the firmware, \ but it is not supported by the installed FPGA version. \ Update the FPGA to the latest FP version."; break; - case PX5_ACK_CALIB_ERR: + case DP5_P2_ACK_CALIB_ERR: error_msg = "Calibration Error"; break; default: diff --git a/src/AmptekSimulatorConnectionHandler.cpp b/src/AmptekSimulatorConnectionHandler.cpp index b251414303867c35d01d047453bda2949543f1ec..0db55e7b86b82f5578e7c081f04df3c9b6c44a1e 100644 --- a/src/AmptekSimulatorConnectionHandler.cpp +++ b/src/AmptekSimulatorConnectionHandler.cpp @@ -12,28 +12,28 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ Packet p(MIN_PACKET_LEN); p.initSync(); - if (pid1 == Packet::PX5_REQUEST_SPECTRUM.at(PID1) - && pid2 == Packet::PX5_REQUEST_SPECTRUM.at(PID2)) + if (pid1 == Packet::DP5_PKT_REQUEST_SPECTRUM.at(PID1) + && pid2 == Packet::DP5_PKT_REQUEST_SPECTRUM.at(PID2)) { - p.setPid1( PX5_RESPONSE_SPECTRUM ); + p.setPid1( DP5_P1_SPECTRUM_RESPONSE ); switch (speclen){ case 256: - p.setPid2( PX5_RESPONSE_SPECTRUM256 ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM256 ); break; case 512: - p.setPid2( PX5_RESPONSE_SPECTRUM512 ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512 ); break; case 1024: - p.setPid2( PX5_RESPONSE_SPECTRUM1024 ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024 ); break; case 2048: - p.setPid2( PX5_RESPONSE_SPECTRUM2048 ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048 ); break; case 4096: - p.setPid2( PX5_RESPONSE_SPECTRUM4096 ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096 ); break; case 8192: - p.setPid2( PX5_RESPONSE_SPECTRUM8192 ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192 ); break; } @@ -43,28 +43,28 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ p.resize( MIN_PACKET_LEN + len ); p.setData(arr, len); } - else if (pid1 == Packet::PX5_REQUEST_SPECTRUM_AND_STATUS.at(PID1) - && pid2 == Packet::PX5_REQUEST_SPECTRUM_AND_STATUS.at(PID2)) + else if (pid1 == Packet::DP5_PKT_REQUEST_SPECTRUM_AND_STATUS.at(PID1) + && pid2 == Packet::DP5_PKT_REQUEST_SPECTRUM_AND_STATUS.at(PID2)) { - p.setPid1( PX5_RESPONSE_SPECTRUM ); + p.setPid1( DP5_P1_SPECTRUM_RESPONSE ); switch (speclen){ case 256: - p.setPid2( PX5_RESPONSE_SPECTRUM256_STATUS ); + p.setPid2( DP5_P2_SPECTRUM_SPECTRUM256_STATUS ); break; case 512: - p.setPid2( PX5_RESPONSE_SPECTRUM512_STATUS ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512_STATUS ); break; case 1024: - p.setPid2( PX5_RESPONSE_SPECTRUM1024_STATUS ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024_STATUS ); break; case 2048: - p.setPid2( PX5_RESPONSE_SPECTRUM2048_STATUS ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048_STATUS ); break; case 4096: - p.setPid2( PX5_RESPONSE_SPECTRUM4096_STATUS ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096_STATUS ); break; case 8192: - p.setPid2( PX5_RESPONSE_SPECTRUM8192_STATUS ); + p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS ); break; } @@ -75,11 +75,11 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ p.resize( MIN_PACKET_LEN + len ); p.setData(arr, len); } - else if (pid1 == Packet::PX5_REQUEST_STATUS.at(PID1) - && pid2 == Packet::PX5_REQUEST_STATUS.at(PID2)) + else if (pid1 == Packet::DP5_PKT_REQUEST_STATUS.at(PID1) + && pid2 == Packet::DP5_PKT_REQUEST_STATUS.at(PID2)) { - p.setPid1( PX5_RESPONSE_STATUS ); - p.setPid2( PX5_RESPONSE_STATUS_INFO ); + p.setPid1( DP5_P1_STATUS_RESPONSE ); + p.setPid2( DP5_P2_STATUS_RESPONSE_INFO ); word16 len = STATUS_SIZE; byte arr[len]; createStatusData(arr); @@ -89,8 +89,8 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ else if (pid1 == 0x20 && pid2 == 0x03) { - p.setPid1( PX5_RESPONSE_CONFIG ); - p.setPid2( PX5_RESPONSE_CONFIG_TEXT ); + p.setPid1( DP5_P1_DATA_RESPONSE ); + p.setPid2( DP5_P2_DATA_RESPONSE_CONFIG_READBACK ); char configs[ request.dataLength + 1 ]; byteToChar( (byte*)&(request.at(DATA)), configs, request.dataLength ); @@ -112,28 +112,28 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ p.resize( MIN_PACKET_LEN + len ); p.setData(arr, len); } - else if( (pid1 == Packet::PX5_REQUEST_ENABLE.at(PID1) - && pid2 == Packet::PX5_REQUEST_ENABLE.at(PID2)) ) + else if( (pid1 == Packet::DP5_PKT_REQUEST_ENABLE.at(PID1) + && pid2 == Packet::DP5_PKT_REQUEST_ENABLE.at(PID2)) ) { enable(); - return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0); + return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0); } - else if ( (pid1 == Packet::PX5_REQUEST_DISABLE.at(PID1) - && pid2 == Packet::PX5_REQUEST_DISABLE.at(PID2)) ) + else if ( (pid1 == Packet::DP5_PKT_REQUEST_DISABLE.at(PID1) + && pid2 == Packet::DP5_PKT_REQUEST_DISABLE.at(PID2)) ) { disable(); - return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0); + return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0); } - else if (pid1 == Packet::PX5_REQUEST_CLEAR_SPECTRUM.at(PID1) - && pid2 == Packet::PX5_REQUEST_CLEAR_SPECTRUM.at(PID2)) + else if (pid1 == Packet::DP5_PKT_REQUEST_CLEAR_SPECTRUM.at(PID1) + && pid2 == Packet::DP5_PKT_REQUEST_CLEAR_SPECTRUM.at(PID2)) { clear(); - return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0); + return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0); } - else if (pid1 == Packet::PX5_REQUEST_KEEP_ALIVE_NO_SHARING.at(PID1) - && pid2 == Packet::PX5_REQUEST_KEEP_ALIVE_NO_SHARING.at(PID2)) + else if (pid1 == Packet::DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING.at(PID1) + && pid2 == Packet::DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING.at(PID2)) { - return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0); + return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0); } else if(pid1 == 0x20 //set Text Config && pid2 == 0x02) @@ -141,7 +141,7 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){ char configs[ request.dataLength + 1 ]; byteToChar( (byte*)&(request.at(DATA)), configs, request.dataLength ); readConfig(configs); - return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0); + return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0); } p.calcAndFillChecksum(); return p; diff --git a/src/AmptekUsbConnectionHandler.cpp b/src/AmptekUsbConnectionHandler.cpp index 34704116c700cf05953431ab0230985e46903ea2..bd9d9d024723e2a22c22288eddde1792edb7358d 100644 --- a/src/AmptekUsbConnectionHandler.cpp +++ b/src/AmptekUsbConnectionHandler.cpp @@ -129,7 +129,7 @@ bool AmptekUsbConnectionHandler::hasSerialNb(libusb_device_handle* handle, int t return true; } //request a status and check the serial nb - Packet statusReq = Packet::PX5_REQUEST_STATUS; + Packet statusReq = Packet::DP5_PKT_REQUEST_STATUS; int bytes_transferred; byte* status_data = input_buffer + DATA; int result = libusb_bulk_transfer(handle, PX5_USB_BULK_OUT_ENDPOINT, &(statusReq.at(0)), statusReq.size(), &bytes_transferred, 1000); diff --git a/src/packet.cpp b/src/packet.cpp index 91694c9de4be6cc0a9298072d35be8ec34af64c2..b2ea60fc2851269b5b926e069bb30598d817265f 100644 --- a/src/packet.cpp +++ b/src/packet.cpp @@ -2,31 +2,54 @@ #include <iostream> #include <iomanip> #include <algorithm> -const Packet Packet::PX5_REQUEST_STATUS = Packet(0x01,0x01, nullptr, 0); -const Packet Packet::PX5_REQUEST_SPECTRUM = Packet(0x02,0x01, nullptr, 0); -const Packet Packet::PX5_REQUEST_SPECTRUM_AND_STATUS = Packet(0x02,0x03, nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_STATUS = Packet( DP5_P1_STATUS_REQUEST , DP5_P2_STATUS_REQUEST_INFO , nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_SPECTRUM = Packet( DP5_P1_SPECTRUM_REQUEST , DP5_P2_SPECTRUM_REQUEST_SPECTRUM , nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_SPECTRUM_AND_STATUS = Packet( DP5_P1_SPECTRUM_REQUEST , DP5_P2_SPECTRUM_REQUEST_SPECTRUM_STATUS , nullptr, 0); -const Packet Packet::PX5_REQUEST_CLEAR_SPECTRUM = Packet(0xF0,0x01, nullptr, 0); -const Packet Packet::PX5_REQUEST_ENABLE = Packet(0xF0,0x02, nullptr, 0); -const Packet Packet::PX5_REQUEST_DISABLE = Packet(0xF0,0x03, nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_LIST_DATA = Packet( DP5_P1_DATA_REQUEST , DP5_P2_DATA_REQUEST_LISTDATA , nullptr, 0); -const Packet Packet::PX5_REQUEST_KEEP_ALIVE_NO_SHARING = Packet(0xF0,0x21, nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_CLEAR_SPECTRUM = Packet( DP5_P1_COMMAND_REQUEST , DP5_P2_COMMAND_REQUEST_CLEAR_SPECTRUM , nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_ENABLE = Packet( DP5_P1_COMMAND_REQUEST , DP5_P2_COMMAND_REQUEST_ENABLE , nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_DISABLE = Packet( DP5_P1_COMMAND_REQUEST , DP5_P2_COMMAND_REQUEST_DISABLE , nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING = Packet( DP5_P1_COMMAND_REQUEST , DP5_P2_COMMAND_REQUEST_KEEP_ALIVE_NO_SHARE, nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_RESTART_SEQ_BUFFERING = Packet( DP5_P1_COMMAND_REQUEST , DP5_P2_COMMAND_REQUEST_RESTART_BUFFER , nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_CANCEL_SEQ_BUFFERING = Packet( DP5_P1_COMMAND_REQUEST , DP5_P2_COMMAND_REQUEST_CANCEL_BUFFER , nullptr, 0); +const Packet Packet::DP5_PKT_REQUEST_CLEAR_LIST_TIMER = Packet( DP5_P1_COMMAND_REQUEST , DP5_P2_COMMAND_REQUEST_CLEAR_TIMER , nullptr, 0); const Packet Packet::gernerateSetConfigurationRequest(std::string text_configuration){ word16 len = text_configuration.size(); byte data[len]; charToByte(text_configuration.c_str(), data, len); - return Packet( PX5_REQUEST_CONFIG, CONFIG_PACKET_TYPES::PX5_REQUEST_SET_CONFIG, data, len ); + return Packet( DP5_P1_TEXTCONFIG_REQUEST, DP5_P2_TEXTCONFIG_REQUEST_SET, data, len ); } const Packet Packet::gernerateGetConfigurationRequest(std::string text_configuration){ word16 len = text_configuration.size(); byte data[len]; charToByte(text_configuration.c_str(), data, len); - return Packet( PX5_REQUEST_CONFIG, CONFIG_PACKET_TYPES::PX5_REQUEST_GET_CONFIG, data, len ); + return Packet( DP5_P1_TEXTCONFIG_REQUEST, DP5_P2_TEXTCONFIG_REQUEST_GET, data, len ); +} + +const Packet Packet::generateBufferRequest(uint16_t buffer_index){ + byte data[2]; + data[0] = buffer_index>>8; + data[1] = buffer_index; + return Packet( DP5_P1_SPECTRUM_REQUEST, DP5_P2_SPECTRUM_REQUEST_BUFFER, data, 2 ); +} +const Packet Packet::generateBufferAndClearRequest(uint16_t buffer_index){ + byte data[2]; + data[0] = buffer_index>>8; + data[1] = buffer_index; + return Packet( DP5_P1_SPECTRUM_REQUEST, DP5_P2_SPECTRUM_REQUEST_BUFFER_CLEAR, data, 2 ); +} +const Packet Packet::generateGetBufferRequest(uint16_t buffer_index){ + byte data[2]; + data[0] = buffer_index>>8; + data[1] = buffer_index; + return Packet( DP5_P1_SPECTRUM_REQUEST, DP5_P2_SPECTRUM_REQUEST_GET_BUFFER, data, 2 ); }