]> sigrok.org Git - libsigrok.git/commitdiff
Add analog helper sr_analog_float_to_string().
authorBert Vermeulen <redacted>
Tue, 18 Nov 2014 00:15:41 +0000 (01:15 +0100)
committerBert Vermeulen <redacted>
Tue, 18 Nov 2014 00:15:41 +0000 (01:15 +0100)
include/libsigrok/proto.h
src/analog.c

index dfce6aa2d246392bab088506ebd7bd8442bb92bf..0f4b98848914ab1f95e1848fc564a6e9a46f38e0 100644 (file)
@@ -30,6 +30,8 @@
 
 SR_API int sr_analog_to_float(const struct sr_datafeed_analog2 *analog,
                float *buf);
+SR_API int sr_analog_float_to_string(float value, int digits, char *outbuf,
+               int bufsize);
 
 /*--- backend.c -------------------------------------------------------------*/
 
index 9def3ac8fa62347f405d2acabf2d59b98c6eb4e8..ccf6d31934bf605cc4a300d989b83055f9ceaa7d 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <stdio.h>
+#include <stdint.h>
 #include <string.h>
+#include <ctype.h>
 #include "libsigrok.h"
 #include "libsigrok-internal.h"
 
@@ -98,3 +101,36 @@ SR_API int sr_analog_to_float(const struct sr_datafeed_analog2 *analog,
 
        return SR_OK;
 }
+
+/*
+ * Convert a floating point value to a string, limited to the given
+ * number of decimal digits.
+ *
+ * @param value The value to convert.
+ * @param digits Number of digits after the decimal point to print.
+ * @param outbuf Buffer in which the resulting string will be placed.
+ * @param bufsize Size of the buffer in bytes.
+ *
+ * @retval SR_OK
+ *
+ * @since 0.4.0
+ */
+SR_API int sr_analog_float_to_string(float value, int digits, char *outbuf,
+               int bufsize)
+{
+       int cnt, i;
+
+       /* This produces at least one too many digits */
+       snprintf(outbuf, bufsize, "%.*f", digits, value);
+       for (i = 0, cnt = 0; outbuf[i] && i < bufsize; i++) {
+               if (isdigit(outbuf[i++]))
+                       cnt++;
+               if (cnt == digits) {
+                       outbuf[i] = 0;
+                       break;
+               }
+       }
+
+       return SR_OK;
+}
+