summaryrefslogtreecommitdiff
path: root/tools/solarmeter/solarmeter.c
diff options
context:
space:
mode:
authorChristian Pointner <equinox@mur.at>2012-01-03 23:23:31 +0000
committerChristian Pointner <equinox@mur.at>2012-01-03 23:23:31 +0000
commit5da4b7e9f38ce5772f6555a30717a9946454565e (patch)
treeea481318da4b79f114c7e8c4e921de3923980745 /tools/solarmeter/solarmeter.c
parentadding 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.c88
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;
}