parent
2d4ba0b8f7
commit
67a67fd794
2 changed files with 41 additions and 52 deletions
@ -1,60 +1,48 @@ |
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <stdint.h> |
||||
|
||||
#define TEN_THSND 10000 |
||||
#define BIT_16 16 |
||||
#define BIT_8 8 |
||||
|
||||
#define NORMALIZE_AND_WRITE(type) _NORMALIZE_AND_WRITE(type) |
||||
#define _NORMALIZE_AND_WRITE(type) \ |
||||
for (int i = 0; i < bars_count; i++) { \
|
||||
uint##type##_t f_##type = UINT##type##_MAX; \
|
||||
if (f[i] < TEN_THSND) \
|
||||
f_##type *= f[i] / TEN_THSND; \
|
||||
write(fd, &f_##type, sizeof(uint##type##_t)); \
|
||||
} |
||||
|
||||
int print_raw_out(int bars, int fp, int is_bin, int bit_format, int ascii_range, char bar_delim, char frame_delim, int f[200]) { |
||||
int i; |
||||
|
||||
if (is_bin == 1){//binary
|
||||
if (bit_format == 16 ){//16bit:
|
||||
|
||||
for (i = 0; i < bars; i++) { |
||||
uint16_t f16; |
||||
if (f[i] > 10000) { |
||||
f16 = 65535; |
||||
} |
||||
else { |
||||
f16 = ((float)f[i] / 10000) * 65535; |
||||
} |
||||
write(fp, &f16,sizeof(uint16_t)); |
||||
} |
||||
|
||||
} else {//8bit:
|
||||
|
||||
for (i = 0; i < bars; i++) { |
||||
uint8_t f8; |
||||
if (f[i] > 10000) { |
||||
f8 = 255; |
||||
} |
||||
else { |
||||
f8 = ((float)f[i] / 10000) * 255; |
||||
} |
||||
write(fp, &f8,sizeof(uint8_t)); |
||||
} |
||||
|
||||
int print_raw_out(int bars_count, int fd, int is_binary, int bit_format, |
||||
int ascii_range, char bar_delim, char frame_delim, const int const f[200]) { |
||||
if (is_binary) { |
||||
switch (bit_format) { |
||||
case BIT_16: |
||||
NORMALIZE_AND_WRITE(BIT_16); |
||||
break; |
||||
case BIT_8: |
||||
NORMALIZE_AND_WRITE(BIT_8); |
||||
break; |
||||
} |
||||
} else {//ascii:
|
||||
|
||||
for (i = 0; i < bars; i++) { |
||||
int f_ranged = ((float)f[i] / 10000) * ascii_range; |
||||
if (f_ranged > ascii_range) f_ranged = ascii_range; |
||||
|
||||
//finding size of number-string in byte
|
||||
int size; |
||||
if (f_ranged != 0) size = floor (log10 (abs (f_ranged))) + 1; |
||||
else size = 1; |
||||
char barheight[size]; |
||||
|
||||
sprintf(barheight, "%d", f_ranged); |
||||
write(fp, barheight,sizeof(barheight)); |
||||
|
||||
write(fp, &bar_delim, sizeof(bar_delim)); |
||||
} else { // ascii
|
||||
for (int i = 0; i < bars_count; i++) { |
||||
int f_ranged = (f[i] / 10000.0) * ascii_range; |
||||
if (f_ranged > ascii_range) |
||||
f_ranged = ascii_range; |
||||
|
||||
// finding size of number-string in byte
|
||||
int bar_height_size = 2; // a number + \0
|
||||
if (f_ranged != 0) |
||||
bar_height_size += floor (log10 (f_ranged)); |
||||
|
||||
char bar_height[bar_height_size]; |
||||
snprintf(bar_height, bar_height_size, "%d", f_ranged); |
||||
|
||||
write(fd, bar_height, bar_height_size - 1); |
||||
write(fd, &bar_delim, sizeof(bar_delim)); |
||||
} |
||||
|
||||
write(fp, &frame_delim, sizeof(frame_delim)); |
||||
|
||||
write(fd, &frame_delim, sizeof(frame_delim)); |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
@ -1 +1,2 @@ |
||||
int print_raw_out(int bars, int fp, int is_bin, int bin_datafrom, int ascii_range, char bar_delim, char frame_delim, int f[200]); |
||||
int print_raw_out(int bars_count, int fd, int is_binary, int bit_format, |
||||
int ascii_range, char bar_delim, char frame_delim, const int const f[200]); |
||||
|
||||
Loading…
Reference in new issue