diff options
author | Christian Pointner <equinox@mur.at> | 2012-01-03 23:23:31 +0000 |
---|---|---|
committer | Christian Pointner <equinox@mur.at> | 2012-01-03 23:23:31 +0000 |
commit | 5da4b7e9f38ce5772f6555a30717a9946454565e (patch) | |
tree | ea481318da4b79f114c7e8c4e921de3923980745 /tools/solarmeter/solarmeter.c | |
parent | adding datasheets for RDA 1846 (diff) |
first solar power calc tests
git-svn-id: https://svn.spreadspace.org/mur.sat@230 7de4ea59-55d0-425e-a1af-a3118ea81d4c
Diffstat (limited to 'tools/solarmeter/solarmeter.c')
-rw-r--r-- | tools/solarmeter/solarmeter.c | 88 |
1 files changed, 38 insertions, 50 deletions
diff --git a/tools/solarmeter/solarmeter.c b/tools/solarmeter/solarmeter.c index 64bca8f..1ddca80 100644 --- a/tools/solarmeter/solarmeter.c +++ b/tools/solarmeter/solarmeter.c @@ -2,61 +2,49 @@ #include <unistd.h> #include <fcntl.h> #include <stdlib.h> +#include <stdint.h> -// data via stdin -// begin = 255 followed by 9 byte 8 mal i + 1 mal u -// u = input * 5/256 // u in V -// i = input / 2.099 // i in mA - -#define UFAC 5.0f/256.0f*5.6f/1.89f +// data via $1, output to STDOUT +// begin = 255 followed by 12 bytes 2*(4*i + 1*u) + PowerH:PowerL int main (int argc, char* argv[]) { - unsigned char tmp = 0; - unsigned char buffer[9]; - float pow; - float pow_sum; - int i; - int n=0; - unsigned char *outbuffer; - int outfile_fd = -1; - - if (argc > 1) - { - outfile_fd = open(argv[1], O_WRONLY | O_CREAT | O_APPEND, 0666); + u_int8_t tmp = 0; + u_int8_t buffer[12]; + u_int16_t power = 0; + + int infile_fd = -1; + if (argc > 1) { + infile_fd = open(argv[1], O_RDONLY); + if(infile_fd < 0) { + perror("open error"); + return 1; } + } else { + infile_fd = STDIN_FILENO; + } + + while (read(infile_fd, &tmp, 1) == 1) { + if (tmp == 255) { + if (read(infile_fd, &buffer, sizeof(buffer)) != sizeof(buffer)) { + perror("read error:"); + return 2; + } + + power = (buffer[10]<<8) + buffer[11]; + printf("%5d (", power); - while (read (STDIN_FILENO, &tmp, 1) == 1) - { - if (tmp == 255) - { - if (read (STDIN_FILENO, &buffer, 9) != 9) - { - printf ("read error\n"); - return 0; - } - printf ("%5.2fV", buffer[8] * UFAC); - pow_sum = 0.0f; - for (i = 0; i<8; i++) - { - pow = (buffer[i] / 2.099f) * (buffer[8] * UFAC); - printf (" %6.2fmW", pow); - pow_sum += pow; - if (outfile_fd > 0) - { - n = asprintf(&outbuffer, "%d %6.2f %6.2f\n", i, buffer[8]*UFAC, buffer[i]/2.099f); - write(outfile_fd, outbuffer , n); - free(outbuffer); - } - } - if (outfile_fd > 0) - write(outfile_fd, "\n" , 1); - printf (" %6.2fmW", pow_sum); - printf ("\r"); - } + int i; + for(i=0; i<10; i++) + printf("%3d ", buffer[i]); + + power = (((u_int16_t)buffer[0] + (u_int16_t)buffer[1] + (u_int16_t)buffer[2] + (u_int16_t)buffer[3]) * (u_int16_t)buffer[4]) + + (((u_int16_t)buffer[5] + (u_int16_t)buffer[6] + (u_int16_t)buffer[7] + (u_int16_t)buffer[8]) * (u_int16_t)buffer[9]); + + printf(") -> %5d\r", power); } - printf ("\n"); - if (outfile_fd > 0) - close(outfile_fd); - return 0; + } + printf("\n"); + + return 0; } |