#include #include #include #include #include // 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[]) { u_int8_t tmp = 0; u_int8_t buffer[12]; u_int32_t power[2]; 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) { int ret = read(infile_fd, &buffer, sizeof(buffer)); if(ret < 0) { perror("read error"); return 2; } else if(!ret) { return 0; } else if(ret != sizeof(buffer)) { continue; } power[0] = (buffer[10]<<8) + buffer[11]; printf("%5d (", power[0]); int i; for(i=0; i<10; i++) printf("%3d ", buffer[i]); power[1] = (((u_int16_t)buffer[0] + (u_int16_t)buffer[1] + (u_int16_t)buffer[2] + (u_int16_t)buffer[3]) * (u_int32_t)buffer[4]) + (((u_int16_t)buffer[5] + (u_int16_t)buffer[6] + (u_int16_t)buffer[7] + (u_int16_t)buffer[8]) * (u_int32_t)buffer[9]); int tmp = 0; if(power[1]%128 >= 64) tmp=1; power[1] /= 128; power[1] += tmp; printf(") -> %s (%5d) \n", power[1] == power[0] ? "ok" : "xx", power[1]); } } printf("\n"); return 0; }