Refactor how frames are sent from receiver
This commit is contained in:
@@ -314,6 +314,9 @@ inline void CBOR_ENC_START_USER_DATA(CborEncoder& encoder, const char* key,
|
||||
j["space_group_number"] = message.space_group_number;
|
||||
j["roi_names"] = message.roi_names;
|
||||
j["gain_file_names"] = message.gain_file_names;
|
||||
if (message.write_master_file)
|
||||
j["write_master_file"] = message.write_master_file.value();
|
||||
|
||||
auto str = j.dump();
|
||||
|
||||
CBOR_ENC(encoder, key, str);
|
||||
@@ -394,8 +397,6 @@ void CBORStream2Serializer::SerializeSequenceStart(const StartMessage& message)
|
||||
CBOR_ENC(mapEncoder, "az_int_bin_to_q", message.az_int_bin_to_q);
|
||||
CBOR_ENC(mapEncoder, "summation", message.summation);
|
||||
|
||||
if (!message.calibration.empty())
|
||||
CBOR_ENC(mapEncoder, "calibration", message.calibration);
|
||||
CBOR_ENC_START_USER_DATA(mapEncoder, "user_data", message);
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
|
||||
@@ -418,7 +419,6 @@ void CBORStream2Serializer::SerializeSequenceEnd(const EndMessage& message) {
|
||||
CBOR_ENC(mapEncoder, "images_collected", message.images_collected_count);
|
||||
CBOR_ENC(mapEncoder, "images_sent_to_write", message.images_sent_to_write_count);
|
||||
CBOR_ENC(mapEncoder, "data_collection_efficiency", message.efficiency);
|
||||
CBOR_ENC(mapEncoder, "write_master_file", message.write_master_file);
|
||||
CBOR_ENC_RAD_INT_RESULT(mapEncoder, "az_int_result", message.az_int_result);
|
||||
CBOR_ENC_ADU_HIST(mapEncoder, "adu_histogram", message.adu_histogram);
|
||||
CBOR_ENC(mapEncoder, "adu_histogram_bin_width", message.adu_histogram_bin_width);
|
||||
@@ -454,6 +454,7 @@ void CBORStream2Serializer::SerializeImage(const DataMessage& message) {
|
||||
CBOR_ENC(mapEncoder, "xfel_event_code", message.xfel_event_code);
|
||||
CBOR_ENC(mapEncoder, "jf_info", message.jf_info);
|
||||
CBOR_ENC(mapEncoder, "receiver_aq_dev_delay", message.receiver_aq_dev_delay);
|
||||
CBOR_ENC(mapEncoder, "receiver_free_send_buf", message.receiver_free_send_buf);
|
||||
CBOR_ENC(mapEncoder, "storage_cell", message.storage_cell);
|
||||
CBOR_ENC(mapEncoder, "saturated_pixel_count", message.saturated_pixel_count);
|
||||
CBOR_ENC(mapEncoder, "error_pixel_count", message.error_pixel_count);
|
||||
@@ -464,9 +465,43 @@ void CBORStream2Serializer::SerializeImage(const DataMessage& message) {
|
||||
CBOR_ENC(mapEncoder, "roi_integrals", message.roi);
|
||||
CBOR_ENC(mapEncoder, "user_data", message.user_data);
|
||||
CBOR_ENC(mapEncoder, "data", message.image);
|
||||
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
|
||||
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
|
||||
}
|
||||
|
||||
void CBORStream2Serializer::SerializeCalibration(const CompressedImage &image) {
|
||||
CborEncoder encoder, mapEncoder;
|
||||
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
|
||||
|
||||
cborErr(cbor_encode_tag(&encoder, CborSignatureTag ));
|
||||
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength));
|
||||
CBOR_ENC(mapEncoder, "type", "calibration");
|
||||
CBOR_ENC(mapEncoder, "magic_number", user_data_magic_number);
|
||||
CBOR_ENC(mapEncoder, "data", image);
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
|
||||
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
|
||||
}
|
||||
|
||||
size_t CBORStream2Serializer::GetImageAppendOffset() {
|
||||
return curr_size + sizeof(size_t) - 1;
|
||||
}
|
||||
|
||||
void CBORStream2Serializer::AppendImage(size_t image_size) {
|
||||
if (curr_size + image_size + sizeof(size_t) + 1 >= max_buffer_size)
|
||||
throw JFJochException(JFJochExceptionCategory::CBORError, "No space to extend the image");
|
||||
|
||||
buffer[curr_size - 2] = 0x40 + 27;
|
||||
curr_size--;
|
||||
#ifdef LITTLE_ENDIAN
|
||||
size_t image_size_be = __builtin_bswap64(image_size);
|
||||
#else
|
||||
size_t image_size_be = image_size;
|
||||
#endif
|
||||
memcpy(buffer + curr_size, &image_size_be, sizeof(size_t));
|
||||
curr_size += sizeof(size_t);
|
||||
curr_size += image_size + 0;
|
||||
buffer[curr_size] = 0xFF;
|
||||
curr_size++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user