summaryrefslogtreecommitdiff
path: root/misc/open2300/patches/patch-ab
diff options
context:
space:
mode:
Diffstat (limited to 'misc/open2300/patches/patch-ab')
-rw-r--r--misc/open2300/patches/patch-ab516
1 files changed, 7 insertions, 509 deletions
diff --git a/misc/open2300/patches/patch-ab b/misc/open2300/patches/patch-ab
index 2134d32e91e..3f24dd91b4b 100644
--- a/misc/open2300/patches/patch-ab
+++ b/misc/open2300/patches/patch-ab
@@ -1,7 +1,7 @@
-$NetBSD: patch-ab,v 1.2 2004/11/11 10:19:29 martin Exp $
+$NetBSD: patch-ab,v 1.3 2004/11/29 08:22:27 martin Exp $
---- rw2300.c.orig 2004-08-01 11:51:08.000000000 +0200
-+++ rw2300.c 2004-11-11 10:45:50.000000000 +0100
+--- rw2300.c.orig 2004-11-13 13:10:39.000000000 +0100
++++ rw2300.c 2004-11-29 09:15:14.000000000 +0100
@@ -9,6 +9,7 @@
* This program is published under the GNU General Public license
*/
@@ -10,517 +10,15 @@ $NetBSD: patch-ab,v 1.2 2004/11/11 10:19:29 martin Exp $
#include "rw2300.h"
/********************************************************************/
-@@ -30,7 +31,7 @@
- int address=0x346;
- int bytes=2;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- if (temperature_conv)
-@@ -70,7 +71,7 @@
- int address=0x34B;
- int bytes=15;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *temp_min = ((data[1]>>4)*10 + (data[1]&0xF) + (data[0]>>4)/10.0 +
-@@ -125,7 +126,7 @@
- address=0x346;
- number=2;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value[0] = data_read[0]&0xF;
-@@ -137,7 +138,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -208,7 +209,7 @@
- int address=0x373;
- int bytes=2;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- if (temperature_conv)
-@@ -248,7 +249,7 @@
- int address=0x378;
- int bytes=15;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *temp_min = ((data[1]>>4)*10 + (data[1]&0xF) + (data[0]>>4)/10.0 +
-@@ -304,7 +305,7 @@
- address=0x373;
- number=2;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value[0] = data_read[0]&0xF;
-@@ -316,7 +317,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -387,7 +388,7 @@
- int address=0x3CE;
- int bytes=2;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- if (temperature_conv)
-@@ -427,7 +428,7 @@
- int address=0x3D3;
- int bytes=15;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *dp_min = ((data[1]>>4)*10 + (data[1]&0xF) + (data[0]>>4)/10.0 +
-@@ -483,7 +484,7 @@
- address=0x3CE;
- number=2;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value[0] = data_read[0]&0xF;
-@@ -495,7 +496,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -562,7 +563,7 @@
- int address=0x3FB;
- int bytes=1;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- return ((data[0] >> 4) * 10 + (data[0] & 0xF));
-@@ -591,7 +592,7 @@
- int address=0x3FB;
- int bytes=13;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *hum_min = (data[1] >> 4) * 10 + (data[1] & 0xF);
-@@ -638,7 +639,7 @@
- address=0x3FB;
- number=1;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value[0] = data_read[0]&0xF;
-@@ -648,7 +649,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -715,7 +716,7 @@
- int address=0x419;
- int bytes=1;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- return ((data[0] >> 4) * 10 + (data[0] & 0xF));
-@@ -745,7 +746,7 @@
- int address=0x419;
- int bytes=13;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *hum_min = (data[1] >> 4) * 10 + (data[1] & 0xF);
-@@ -792,7 +793,7 @@
- address=0x419;
- number=1;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value[0] = data_read[0]&0xF;
-@@ -802,7 +803,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -879,7 +880,7 @@
-
- for (i=0; i<MAXWINDRETRIES; i++)
- {
-- if (read_safe(ws2300, address, bytes, data, command)!=bytes) //Wind
-+ if (read_safe(ws2300, address, bytes, data, command, 1)!=bytes) //Wind
- read_error_exit();
-
- if ( (data[0]!=0x00) || //Invalid wind data
-@@ -935,7 +936,12 @@
-
- for (i=0; i<MAXWINDRETRIES; i++)
- {
-- if (read_safe(ws2300, address, bytes, data, command)!=bytes) //Wind
-+ // do not verify checksum here - the result is ~5.5 bytes
-+ // and apparently the weather station calculates it differently
-+ // than what we expect. example:
-+ // 0x00, 0x00, 0xd0, 0xdd, 0xdd, 0x0a - with checksum 0x97
-+ // instead of the expected 0x94.
-+ if (read_safe(ws2300, address, bytes, data, command, 0)!=bytes) //Wind
- read_error_exit();
-
- if ( (data[0]!=0x00) || //Invalid wind data
-@@ -999,7 +1005,7 @@
- int address=0x4EE;
- int bytes=15;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- if (wind_min != NULL)
-@@ -1057,7 +1063,7 @@
-
- for (i=0; i<MAXWINDRETRIES; i++)
- {
-- if (read_safe(ws2300, address, number, data_read, command)!=number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1)!=number)
- read_error_exit();
-
- if ((data_read[0]!=0x00) || //Invalid wind data
-@@ -1083,7 +1089,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -1157,7 +1163,7 @@
- int address=0x3A0;
- int bytes=2;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- if (temperature_conv)
-@@ -1199,7 +1205,7 @@
- int address=0x3A5;
- int bytes=15;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *wc_min = ( (data[1]>>4)*10 + (data[1]&0xF) + (data[0]>>4)/10.0 +
-@@ -1255,7 +1261,7 @@
- address=0x3A0;
- number=2;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value[0] = data_read[0]&0xF;
-@@ -1267,7 +1273,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -1337,7 +1343,7 @@
- int address=0x4B4;
- int bytes=3;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- return ( ((data[2] >> 4) * 1000 + (data[2] & 0xF) * 100 +
-@@ -1371,7 +1377,7 @@
- int address=0x4B4;
- int bytes=11;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *rain_max = ((data[5] >> 4) * 1000 + (data[5] & 0xF) * 100 +
-@@ -1415,7 +1421,7 @@
- address=0x4B4;
- number=3;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value[0] = data_read[0]&0xF;
-@@ -1429,7 +1435,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -1516,7 +1522,7 @@
- int address=0x497;
- int bytes=3;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- return (((data[2] >> 4) * 1000 + (data[2] & 0xF) * 100 +
-@@ -1551,7 +1557,7 @@
- int address=0x497;
- int bytes=11;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *rain_max = ((data[5] >> 4) * 1000 + (data[5] & 0xF) * 100 +
-@@ -1595,7 +1601,7 @@
- address=0x497;
- number=3;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value[0] = data_read[0]&0xF;
-@@ -1609,7 +1615,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -1697,7 +1703,7 @@
- int address=0x4D2;
- int bytes=3;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- return (((data[2] >> 4) * 1000 + (data[2] & 0xF) * 100 +
-@@ -1730,7 +1736,7 @@
- int address=0x4D2;
- int bytes=8;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- time_since->minute = ((data[3] >> 4) * 10) + (data[3] & 0xF);
-@@ -1771,7 +1777,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -1822,7 +1828,7 @@
- int address=0x5E2;
- int bytes=3;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
-
-@@ -1860,7 +1866,7 @@
- int address=0x600;
- int bytes=13;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *pres_min = ((data[2]&0xF)*1000 + (data[1]>>4)*100 +
-@@ -1874,7 +1880,7 @@
- address=0x61E; //Relative pressure time and date for min/max
- bytes=10;
-
-- if (read_safe(ws2300, address, bytes, data, command)!=bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1)!=bytes)
- read_error_exit();
-
- time_min->minute = ((data[0] >> 4) * 10) + (data[0] & 0xF);
-@@ -1911,7 +1917,7 @@
- int address=0x5D8;
- int bytes=3;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
-
-@@ -1949,7 +1955,7 @@
- int address=0x5F6;
- int bytes=13;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *pres_min = ((data[2]&0xF)*1000 + (data[1]>>4)*100 +
-@@ -1963,7 +1969,7 @@
- address=0x61E; //Relative pressure time and date for min/max
- bytes=10;
-
-- if (read_safe(ws2300, address, bytes, data, command)!=bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1)!=bytes)
- read_error_exit();
-
- time_min->minute = ((data[0] >> 4) * 10) + (data[0] & 0xF);
-@@ -2009,7 +2015,7 @@
- address=0x5D8;
- number=8;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_value_abs[0] = data_read[0]&0xF;
-@@ -2028,7 +2034,7 @@
- address=0x23B;
- number=6;
-
-- if (read_safe(ws2300, address, number, data_read, command) != number)
-+ if (read_safe(ws2300, address, number, data_read, command, 1) != number)
- read_error_exit();
-
- data_time[0] = data_read[0]&0xF;
-@@ -2112,7 +2118,7 @@
- int address=0x5EC;
- int bytes=3;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
-
-@@ -2147,7 +2153,7 @@
- const char *tendency_values[] = { "Steady", "Rising", "Falling" };
- const char *forecast_values[] = { "Rainy", "Cloudy", "Sunny" };
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- strcpy(tendency, tendency_values[data[0] >> 4]);
-@@ -2180,7 +2186,7 @@
- int address=0x6B2;
- int bytes=10;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- *interval = (data[1] & 0xF)*256 + data[0] + 1;
-@@ -2244,7 +2250,7 @@
-
- address = 0x6C6 + record*19;
-
-- if (read_safe(ws2300, address, bytes, data, command) != bytes)
-+ if (read_safe(ws2300, address, bytes, data, command, 1) != bytes)
- read_error_exit();
-
- tempint = (data[4]<<12) + (data[3]<<4) + (data[2] >> 4);
-@@ -2767,7 +2773,8 @@
- *
- ********************************************************************/
- int read_data(WEATHERSTATION ws2300, int address, int number,
-- unsigned char *readdata, unsigned char *commanddata)
-+ unsigned char *readdata, unsigned char *commanddata,
-+ int verify_checksum)
- {
-
- unsigned char answer;
-@@ -2806,8 +2813,10 @@
+@@ -2805,8 +2806,10 @@
//Read and verify checksum
if (read_device(ws2300, &answer, 1) != 1)
return -1;
- if (answer != data_checksum(readdata, number))
-+ if (answer != data_checksum(readdata, number) && verify_checksum) {
-+ errno = EIO; // make perror() output something meaningfull
++ if (answer != data_checksum(readdata, number)) {
++ errno = EIO; // perror is used - so errno needs to be meaningfull
return -1;
+ }
-
+
return i;
-@@ -2906,7 +2915,8 @@
- *
- ********************************************************************/
- int read_safe(WEATHERSTATION ws2300, int address, int number,
-- unsigned char *readdata, unsigned char *commanddata)
-+ unsigned char *readdata, unsigned char *commanddata,
-+ int verify_checksum)
- {
- int j;
-
-@@ -2915,7 +2925,7 @@
- reset_06(ws2300);
-
- // Read the data. If expected number of bytes read break out of loop.
-- if (read_data(ws2300, address, number, readdata, commanddata)==number)
-+ if (read_data(ws2300, address, number, readdata, commanddata, verify_checksum)==number)
- {
- break;
- }