1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env perl
- #
- # Eric Jiang
- # http://notes.ericjiang.com/posts/54
- # This software is public domain.
- #
- # NOTE: This code is not maintained!
- # There is a newer version written in C:
- # https://github.com/erjiang/usbscale
- #
- use bytes;
- my $data;
- #prevents us from repeating messages
- my $waitingflag = 0;
- while (1) {
- $data = `cat /dev/hidraw7 | head -c 7`;
- my $report = ord(substr($data, 0, 1));
- my $status = ord(substr($data, 1, 1));
- my $unit = ord(substr($data, 2, 1));
- my $exp = ord(substr($data, 3, 1));
- my $lsb = ord(substr($data, 4, 1));
- my $msb = ord(substr($data, 5, 1));
- my $weight = ($msb * 256 + $lsb) / 10;
- if($exp != 255 && $exp != 0) {
- $weight ^= $exp;
- }
- #print "$report $status $unit $exp $weight\n";
- if($report != 0x03) {
- die "Error reading scale data!\n";
- }
- if($status == 0x01) {
- die "Scale reports FAULT!\n";
- } elsif ($status == 0x02 || $weight == 0) {
- if($waitingflag != 0x02) {
- print "Zero'd...\n";
- $waitingflag = 0x02;
- }
- } elsif ($status == 0x03) {
- if($waitingflag != 0x03) {
- print "Weighing...\n";
- $waitingflag = 0x03;
- }
- } elsif ($status == 0x04) {
- my $unitName = "units";
- if($unit == 11) {
- $unitName = "ounces";
- } elsif ($unit == 12) {
- $unitName = "pounds";
- }
- print "$weight $unitName\n";
- last;
- } elsif ($status == 0x05) {
- if($waitingflag != 0x05) {
- print "Scale reports Under Zero...\n";
- $waitingflag = 0x05;
- }
- } elsif ($status == 0x06) {
- if($waitingflag != 0x06) {
- print "Scale reports Over Weight!\n";
- $waitingflag = 0x06;
- }
- } elsif ($status == 0x07) {
- if($waitingflag != 0x07) {
- print "Scale reports Calibration Needed!\n";
- $waitingflag = 0x07;
- }
- } elsif ($status == 0x08) {
- if($waitingflag != 0x08) {
- print "Scale reports Re-zeroing Needed!\n";
- $waitingflag = 0x08;
- }
- } else {
- die "Unknown status code: $status\n";
- }
- }
|