-
- double data_offset = -wdq_channel.m_min_scaled_data;
- double data_scale = 0.;
- if (wdq_channel.m_max_scaled_data != wdq_channel.m_min_scaled_data)
- data_scale = 65535. / (wdq_channel.m_max_scaled_data -
- wdq_channel.m_min_scaled_data);
+
+ double data_offset = 0, data_scale = 0;
+ if (g_preserve_zero) {
+ double max_value = fabs(wdq_channel.m_max_scaled_data);
+ if (fabs (wdq_channel.m_min_scaled_data) > max_value)
+ max_value = fabs (wdq_channel.m_min_scaled_data);
+ if (max_value != 0.)
+ data_scale = 32767. / max_value;
+ } else {
+ data_offset = -wdq_channel.m_min_scaled_data;
+ if (wdq_channel.m_max_scaled_data != wdq_channel.m_min_scaled_data)
+ data_scale = 65535. / (wdq_channel.m_max_scaled_data -
+ wdq_channel.m_min_scaled_data);
+ }