From 5398c69061a72e7a6ad3423c4e17516ee6d09de6 Mon Sep 17 00:00:00 2001 From: Tobias Date: Fri, 17 Feb 2017 10:28:51 +0100 Subject: [PATCH] Remove tools - Create extra repository --- programmer/programmer/programmer.asmproj | 18 +- tools/chowid.py | 143 -------- tools/owReadBMP.py | 130 ------- tools/owflash.py | 255 -------------- tools/owflashtest.py | 241 ------------- tools/readTempHum.py | 125 ------- tools_cmd/bin/ib90usb.dll | Bin 94208 -> 0 bytes tools_cmd/bin/ib97e32.dll | Bin 90112 -> 0 bytes tools_cmd/bin/ib97u32.dll | Bin 106496 -> 0 bytes tools_cmd/bin/ibfs32.dll | Bin 135168 -> 0 bytes tools_cmd/bin/ibusb32.dll | Bin 147456 -> 0 bytes tools_cmd/rwOW/crcutil.c | 119 ------- tools_cmd/rwOW/ibfs32.lib | Bin 14230 -> 0 bytes tools_cmd/rwOW/ibtmexcw.h | 234 ------------- tools_cmd/rwOW/main.cpp | 391 --------------------- tools_cmd/rwOW/owerr.c | 348 ------------------- tools_cmd/rwOW/ownet.h | 422 ----------------------- tools_cmd/rwOW/tmexlnk.c | 368 -------------------- tools_cmd/rwOW/tmexnet.c | 249 ------------- tools_cmd/rwOW/tmexses.c | 212 ------------ tools_cmd/rwOW/tmextran.c | 199 ----------- 21 files changed, 9 insertions(+), 3445 deletions(-) delete mode 100644 tools/chowid.py delete mode 100644 tools/owReadBMP.py delete mode 100644 tools/owflash.py delete mode 100644 tools/owflashtest.py delete mode 100644 tools/readTempHum.py delete mode 100644 tools_cmd/bin/ib90usb.dll delete mode 100644 tools_cmd/bin/ib97e32.dll delete mode 100644 tools_cmd/bin/ib97u32.dll delete mode 100644 tools_cmd/bin/ibfs32.dll delete mode 100644 tools_cmd/bin/ibusb32.dll delete mode 100644 tools_cmd/rwOW/crcutil.c delete mode 100644 tools_cmd/rwOW/ibfs32.lib delete mode 100644 tools_cmd/rwOW/ibtmexcw.h delete mode 100644 tools_cmd/rwOW/main.cpp delete mode 100644 tools_cmd/rwOW/owerr.c delete mode 100644 tools_cmd/rwOW/ownet.h delete mode 100644 tools_cmd/rwOW/tmexlnk.c delete mode 100644 tools_cmd/rwOW/tmexnet.c delete mode 100644 tools_cmd/rwOW/tmexses.c delete mode 100644 tools_cmd/rwOW/tmextran.c diff --git a/programmer/programmer/programmer.asmproj b/programmer/programmer/programmer.asmproj index 432687f..a077c58 100644 --- a/programmer/programmer/programmer.asmproj +++ b/programmer/programmer/programmer.asmproj @@ -28,15 +28,15 @@ 1 - - - - - - - - - + + + + + + + + + com.atmel.avrdbg.tool.atmelice diff --git a/tools/chowid.py b/tools/chowid.py deleted file mode 100644 index 0eed2c5..0000000 --- a/tools/chowid.py +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/python -# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the -# distribution. -# * All advertising materials mentioning features or use of this -# software must display the following acknowledgement: This product -# includes software developed by tm3d.de and its contributors. -# * Neither the name of tm3d.de nor the names of its contributors may -# be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - -import time -import subprocess - -def owcom(dev,send,rc): - res=[] - f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0) - f.write("".join(map(chr, send))) - if (rc!=0): - res=map(ord,f.read(rc)) - f.close() - return res - - -def crc8(arr): - lscrc=0x0; - for v in arr: - bit=1; - while bit<256: - if (v&bit)==bit: - lb=1 - else: - lb=0 - if (lscrc&1)!=lb: - lscrc=(lscrc>>1)^0x8c - else: - lscrc=(lscrc>>1) - bit=bit*2 - return lscrc - -def testnr(s): - for c in s.lower()[:]: - if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']): - return False - return True - -def addid(id,val): - for i in range(7): - id[i+1]=id[i+1]+val - if id[i+1]>254: - id[i+1]=id[i+1]-254 - val=1 - else: - return id - return id -# - -l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True) -dc=0 -dl=[] -for g in (l.split("\n")): - if len(g)>2: - if testnr(g[0:2]): - dl.append(g) - dc=dc+1 - print dc,") ",g -if dc==0: - print "No 1-Wire Device found" - exit(0) -n=int(raw_input("No. of Device: ")) -n=n-1 -if (n>dc-1)or(n<0): - exit(0) -print dl[n], "will be changed" -s=dl[n] -nr=[int(s[0:2],16),int(s[13:15],16),int(s[11:13],16),int(s[9:11],16),int(s[7:9],16),int(s[5:7],16),int(s[3:5],16)] -nr.append(crc8(nr)) -onr=nr[:] -re=1 -while re: - re=0 - print "Number: %02X %02X %02X %02X %02X %02X %02X %02X" % tuple(nr) - print "1) Increment the old ID" - print "2) Add a value to the old ID (value < 255)" - print "3) Input 6 hex numbers like AA,B5,00,32,12,F1" - print "4) Exit" - cho=int(raw_input("Press the number of your choice: ")) - if cho==1: - nr=addid(nr,1) - elif cho==2: - val=int(raw_input("Add value <255: ")) - nr=addid(nr,val) - elif cho==3: - hn=raw_input("Input six numbers in hex (like AA,B5,00,32,12,F1): ") - i=1 - for hnt in hn.split(","): - nr[i]=int(hnt,16) - i=i+1 - elif cho==4: - exit() - else: - re=1 -nr[7]=crc8(nr[:-1]) -print "New ID: %02X %02X %02X %02X %02X %02X %02X %02X" % tuple(nr) -cho=raw_input("Set this ID? [Y/n): ") -if (cho!='Y'): - exit() - - -owcom(s,[0x75]+nr,0) -nnr=owcom(s,[0xA7],8) -print "New ID: %02X %02X %02X %02X %02X %02X %02X %02X" % tuple(nnr) -if nr!=nnr: - print "ERROR writing new ID\nMaybe it's no simulatet ow device from tm3d.de" - exit(0) -print "Old ID: %02X %02X %02X %02X %02X %02X %02X %02X" % tuple(onr) -owcom(s,[0x79,onr[1],onr[5],onr[6]],0) -print "Done.\nWait for a new Searchrom from Master\nSometimes the old nr keeps in the directory" diff --git a/tools/owReadBMP.py b/tools/owReadBMP.py deleted file mode 100644 index 00eac22..0000000 --- a/tools/owReadBMP.py +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/python -# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the -# distribution. -# * All advertising materials mentioning features or use of this -# software must display the following acknowledgement: This product -# includes software developed by tm3d.de and its contributors. -# * Neither the name of tm3d.de nor the names of its contributors may -# be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - -import time -import subprocess -import sys - -def owcom(dev,send,rc): - res=[] - f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0) - f.write("".join(map(chr, send))) - if (rc!=0): - res=map(ord,f.read(rc)) - f.close() - return res - - -def crc8(arr): - lscrc=0x0; - for v in arr: - bit=1; - while bit<256: - if (v&bit)==bit: - lb=1 - else: - lb=0 - if (lscrc&1)!=lb: - lscrc=(lscrc>>1)^0x8c - else: - lscrc=(lscrc>>1) - bit=bit*2 - return lscrc - -def testnr(s): - for c in s.lower()[:]: - if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']): - return False - return True - -def addid(id,val): - for i in range(7): - id[i+1]=id[i+1]+val - if id[i+1]>254: - id[i+1]=id[i+1]-254 - val=1 - else: - return id - return id -# - - -l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True) -dc=0 -dl=[] -for g in (l.split("\n")): - if len(g)>2: - if testnr(g[0:2]): - if (g[0:2]=="26"): - dl.append(g) - dc=dc+1 - print dc,") ",g -if dc==0: - print "No 26 1-Wire Device found" - exit(0) -n=int(raw_input("No. of Device (28-Device will get automatically): ")) -n=n-1 -if (n>dc-1)or(n<0): - exit(0) -s=dl[n] -config=owcom(s,[0x85],17) -print(config) -s2="%02x-%02x%02x%02x%02x%02x%02x" % (config[9],config[15],config[14],config[13],config[12],config[11],config[10]) -print("Second Device: %s" %( s2)) -f=open("/sys/bus/w1/devices/%s/w1_slave" %(s2),"rb",0) -res=f.read().split(" ") -f.close() -Press=((int(res[0],16)+int(res[1],16)*256)/16.0*3.2+700) -owcom(s,[0x4E,0x00,0x01],0) -owcom(s,[0x44],0) -time.sleep(1) -owcom(s,[0xB4],0) -time.sleep(1) - -p=owcom(s,[0xBE,0x00],10) -print (p) -T=((p[1]+p[2]*256)/256.0) -if (config[5]==8): - RH=((p[3]+p[4]*256)/100.0) -if (config[5]==7): - RH=(((p[3]+p[4]*256)/ 500.0 - 0.16) / 0.0062) / (1.0546 - 0.00216*T); - -print("Temperatur: %f °C" %(T)); -print("Luftfeuchte: %f %%" %(RH)); -print("Druck (absolut): %f hPa" %(Press)); -h=float(raw_input("Höhe über Meerespiegel in m: ")) -P0=Press/((1-h/44330)**5.255) -print("Druck (normalisiert): %f hPa" %(P0)); diff --git a/tools/owflash.py b/tools/owflash.py deleted file mode 100644 index 0d37e84..0000000 --- a/tools/owflash.py +++ /dev/null @@ -1,255 +0,0 @@ -#!/usr/bin/python -# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the -# distribution. -# * All advertising materials mentioning features or use of this -# software must display the following acknowledgement: This product -# includes software developed by tm3d.de and its contributors. -# * Neither the name of tm3d.de nor the names of its contributors may -# be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - -import time -import subprocess -import sys - -def owcom(dev,send,rc): - res=[] - f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0) - f.write("".join(map(chr, send))) - if (rc!=0): - res=map(ord,f.read(rc)) - f.close() - return res - - -def crc8(arr): - lscrc=0x0; - for v in arr: - bit=1; - while bit<256: - if (v&bit)==bit: - lb=1 - else: - lb=0 - if (lscrc&1)!=lb: - lscrc=(lscrc>>1)^0x8c - else: - lscrc=(lscrc>>1) - bit=bit*2 - return lscrc - -def testnr(s): - for c in s.lower()[:]: - if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']): - return False - return True - -def addid(id,val): - for i in range(7): - id[i+1]=id[i+1]+val - if id[i+1]>254: - id[i+1]=id[i+1]-254 - val=1 - else: - return id - return id -# - - - -#start search -f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0) -f.write("-1") -f.close() - - -print "Open Hex File ...", -fi=open(sys.argv[1],"r") -data=[] -for l in fi.readlines(): - sys.stdout.write(".") - sys.stdout.flush() - bc=int(l[1:3],16) - fw=int(l[3:7],16) - ty=int(l[7:9],16) - chsm=bc+(fw>>8)+(fw&0xFF)+ty - for i in range(bc): - p=9+(i*2) - d=int(l[p:p+2],16) - chsm=(chsm+d)&0xFF - data.append(d) - chsm=(chsm+int(l[9+bc*2:11+bc*2],16))&0xFF - if (chsm!=0): - print "Error Checksum...." - exit() - #print bc,fw,ty,chsm -fi.close() -print - -l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True) -dc=0 -dl=[] -for g in (l.split("\n")): - if len(g)>2: - if testnr(g[0:2]): - if (g[0:2]!="28"): - dl.append(g) - dc=dc+1 - print dc,") ",g -if dc==0: - print "No 1-Wire Device found" - exit(0) -n=int(raw_input("No. of Device: ")) -n=n-1 -if (n>dc-1)or(n<0): - exit(0) -s=dl[n] -if (s!="a3-55aa55aa55aa"): - sys.stdout.write('Go to Flashmode....') - sys.stdout.flush() - owcom(s,[0x88],0) - owcom(s,[0x88],0) - owcom(s,[0x88],0) - for i in range (20): - l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True) - dc=0 - dl=[] - sys.stdout.write(".") - sys.stdout.flush() - for g in (l.split("\n")): - if (g[0:15]=="a3-55aa55aa55aa"): - break - if (g[0:15]!="a3-55aa55aa55aa"): - time.sleep(1) - if (g[0:15]=="a3-55aa55aa55aa"): - print "found" - else: - print "ERROR Enter Flashmode!" - exit() - f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0) - f.write(s) - f.close() - time.sleep(5) - -#stop search -print("Disable Device Search (Wait 15s)") -f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0) -f.write("0") -f.close() -time.sleep(15) - -s="a3-55aa55aa55aa" -prog=data -l=len(prog) -if (l>7551): - print "Code to big ... Max 7552 Byte (118 Pages)" - exit() -pages= l/64 -for i in range(64-(l%64)): - #print i - prog.append(0xFF) -pages= len(prog)/64 -if (pages>118): - print "Code to big ... Max 7552 Byte (118 Pages)" - exit() - - -print "Programm Page (of ", pages,")" - -for i in range(pages): - sys.stdout.write("%i " % (i+1) ) - sys.stdout.flush() - - h=i*64; - hl=h&0xFF - hh=h>>8 - #print hh, hl - mem=[hl,hh]+prog[h:h+64] - erroc=0 - while (1): - owcom(s,[0x0F]+mem,0) - rmem=owcom(s,[0xAA],66) - if (rmem!=mem): - print rmem - erroc=erroc+1 - if erroc>5: - print "WRITING ERROR ... " - exit() - continue - owcom(s,[0x55],0) - time.sleep(0.05) - owcom(s,[0xB8,hl,hh],0) - time.sleep(0.05) - rmem=owcom(s,[0xAA],66) - if (rmem!=mem): - print "error in flash" - print mem - print rmem - erroc=erroc+1 - if erroc>5: - print "WRITING ERROR ... " - exit() - continue - #for v in rmem: - # print "%02X " % (v), - break -print "\nReset AVR" -owcom(s,[0x89],0) -time.sleep(1) -f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0) -f.write("a3-55aa55aa55aa") -f.close() - -print("Enable Device Search") -f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0) -f.write("-1") -f.close() - - - - - - -#mem=[0x00,0x2] -#for i in range (64): -# mem.append(i) -#owcom(s,[0x0F]+mem,0) -#rmem=owcom(s,[0xAA],70) -#print rmem -#owcom(s,[0x55],0) -#time.sleep(0.05) -#owcom(s,[0xB8,0x00,0x02],0) -#time.sleep(0.05) -#rmem=owcom(s,[0xAA],70) -#print rmem -#for v in rmem: -# print "%02X " % (v) - - - diff --git a/tools/owflashtest.py b/tools/owflashtest.py deleted file mode 100644 index 5e0b1a6..0000000 --- a/tools/owflashtest.py +++ /dev/null @@ -1,241 +0,0 @@ -#!/usr/bin/python -# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the -# distribution. -# * All advertising materials mentioning features or use of this -# software must display the following acknowledgement: This product -# includes software developed by tm3d.de and its contributors. -# * Neither the name of tm3d.de nor the names of its contributors may -# be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - -import time -import subprocess -import sys - -def owcom(dev,send,rc): - res=[] - f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0) - f.write("".join(map(chr, send))) - if (rc!=0): - res=map(ord,f.read(rc)) - f.close() - return res - - -def crc8(arr): - lscrc=0x0; - for v in arr: - bit=1; - while bit<256: - if (v&bit)==bit: - lb=1 - else: - lb=0 - if (lscrc&1)!=lb: - lscrc=(lscrc>>1)^0x8c - else: - lscrc=(lscrc>>1) - bit=bit*2 - return lscrc - -def testnr(s): - for c in s.lower()[:]: - if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']): - return False - return True - -def addid(id,val): - for i in range(7): - id[i+1]=id[i+1]+val - if id[i+1]>254: - id[i+1]=id[i+1]-254 - val=1 - else: - return id - return id -# - - - -#start search -f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0) -f.write("-1") -f.close() - - -print "Open Hex File ...", -fi=open(sys.argv[1],"r") -data=[] -for l in fi.readlines(): - sys.stdout.write(".") - sys.stdout.flush() - bc=int(l[1:3],16) - fw=int(l[3:7],16) - ty=int(l[7:9],16) - chsm=bc+(fw>>8)+(fw&0xFF)+ty - for i in range(bc): - p=9+(i*2) - d=int(l[p:p+2],16) - chsm=(chsm+d)&0xFF - data.append(d) - chsm=(chsm+int(l[9+bc*2:11+bc*2],16))&0xFF - if (chsm!=0): - print "Error Checksum...." - exit() - #print bc,fw,ty,chsm -fi.close() -print - -l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True) -dc=0 -dl=[] -for g in (l.split("\n")): - if len(g)>2: - if testnr(g[0:2]): - if (g[0:2]!="28"): - dl.append(g) - dc=dc+1 - print dc,") ",g -if dc==0: - print "No 1-Wire Device found" - exit(0) -n=int(raw_input("No. of Device: ")) -n=n-1 -if (n>dc-1)or(n<0): - exit(0) -s=dl[n] -if (s!="a3-55aa55aa55aa"): - sys.stdout.write('Go to Flashmode....') - sys.stdout.flush() - owcom(s,[0x88],0) - owcom(s,[0x88],0) - owcom(s,[0x88],0) - for i in range (20): - l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True) - dc=0 - dl=[] - sys.stdout.write(".") - sys.stdout.flush() - for g in (l.split("\n")): - if (g[0:15]=="a3-55aa55aa55aa"): - break - if (g[0:15]!="a3-55aa55aa55aa"): - time.sleep(1) - if (g[0:15]=="a3-55aa55aa55aa"): - print "found" - else: - print "ERROR Enter Flashmode!" - exit() - f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0) - f.write(s) - f.close() - time.sleep(5) - -#stop search -print("Disable Device Search (Wait 15s)") -f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0) -f.write("0") -f.close() -time.sleep(15) - -s="a3-55aa55aa55aa" -prog=data -l=len(prog) -if (l>7551): - print "Code to big ... Max 7552 Byte (118 Pages)" - exit() -pages= l/64 -for i in range(64-(l%64)): - #print i - prog.append(0xFF) -pages= len(prog)/64 -if (pages>118): - print "Code to big ... Max 7552 Byte (118 Pages)" - exit() - - -print "Programm Page (of ", pages,")" - -for i in range(pages): - sys.stdout.write("%i " % (i+1) ) - sys.stdout.flush() - - h=i*64; - hl=h&0xFF - hh=h>>8 - #print hh, hl - mem=[hl,hh]+prog[h:h+64] - erroc=0 - while (1): - owcom(s,[0x0F]+mem,0) - rmem=owcom(s,[0xAA],66) - if (rmem!=mem): - print rmem - erroc=erroc+1 - if erroc>5: - print "WRITING ERROR ... " - exit() - continue - #for v in rmem: - # print "%02X " % (v), - break -print "\nReset AVR" -owcom(s,[0x89],0) -time.sleep(1) -f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_remove","r+b",0) -f.write("a3-55aa55aa55aa") -f.close() - -print("Enable Device Search") -f=open("/sys/bus/w1/devices/w1_bus_master1/w1_master_search","r+b",0) -f.write("-1") -f.close() - - - - - - -#mem=[0x00,0x2] -#for i in range (64): -# mem.append(i) -#owcom(s,[0x0F]+mem,0) -#rmem=owcom(s,[0xAA],70) -#print rmem -#owcom(s,[0x55],0) -#time.sleep(0.05) -#owcom(s,[0xB8,0x00,0x02],0) -#time.sleep(0.05) -#rmem=owcom(s,[0xAA],70) -#print rmem -#for v in rmem: -# print "%02X " % (v) - - - diff --git a/tools/readTempHum.py b/tools/readTempHum.py deleted file mode 100644 index d129db6..0000000 --- a/tools/readTempHum.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/python -# Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the -# distribution. -# * All advertising materials mentioning features or use of this -# software must display the following acknowledgement: This product -# includes software developed by tm3d.de and its contributors. -# * Neither the name of tm3d.de nor the names of its contributors may -# be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - -import time -import subprocess -import sys - -def owcom(dev,send,rc): - res=[] - f=open("/sys/bus/w1/devices/%s/rw" %(dev),"r+b",0) - f.write("".join(map(chr, send))) - if (rc!=0): - res=map(ord,f.read(rc)) - f.close() - return res - - -def crc8(arr): - lscrc=0x0; - for v in arr: - bit=1; - while bit<256: - if (v&bit)==bit: - lb=1 - else: - lb=0 - if (lscrc&1)!=lb: - lscrc=(lscrc>>1)^0x8c - else: - lscrc=(lscrc>>1) - bit=bit*2 - return lscrc - -def testnr(s): - for c in s.lower()[:]: - if not((c) in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','-']): - return False - return True - -def addid(id,val): - for i in range(7): - id[i+1]=id[i+1]+val - if id[i+1]>254: - id[i+1]=id[i+1]-254 - val=1 - else: - return id - return id -# - -def readDS18B20(s): - f=open("/sys/bus/w1/devices/%s/w1_slave" %(s),"rb",0) - res=f.read().split(" ") - f.close() - T=((int(res[0],16)+int(res[1],16)*256)/16.0) - print("Temperatur: %f °C" %(T)); - -def readDS2438(s): - owcom(s,[0x4E,0x00,0x01],0) - owcom(s,[0x44],0) - time.sleep(1) - owcom(s,[0xB4],0) - time.sleep(1) - owcom(s,[0xB8,0x00],0) - crc=1 - while crc: - p=owcom(s,[0xBE,0x00],9) - crc=crc8(p) - #print (p) - T=((p[1]+p[2]*256)/256.0) - RH=(((p[3]+p[4]*256)/ 500.0 - 0.16) / 0.0062) / (1.0546 - 0.00216*T); - print("Temperatur: %f °C" %(T)); - print("Luftfeuchte: %f %%" %(RH)); - - - -l=subprocess.check_output("ls /sys/bus/w1/devices/", shell=True) -dc=0 -dl=[] -for g in (l.split("\n")): - if len(g)>2: - if testnr(g[0:2]): - if (g[0:2]=="26"): - print dc,") ",g - readDS2438(g) - dl.append(g) - dc=dc+1 - if (g[0:2]=="28"): - print dc,") ",g - readDS18B20(g) - dl.append(g) - dc=dc+1 diff --git a/tools_cmd/bin/ib90usb.dll b/tools_cmd/bin/ib90usb.dll deleted file mode 100644 index ca0f06902654b3b631fed3d9120ac5c29e0f3722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94208 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 SgaQ!?L?{rU!2bgj`2PSr%u(e4 diff --git a/tools_cmd/bin/ibfs32.dll b/tools_cmd/bin/ibfs32.dll deleted file mode 100644 index bced54152bd2275fbdfdbc1b0efe13e5b7c02f60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135168 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%0DV2Jvui`x6*nT=p1E-=I($ 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 8; - - if (oddparity[cdata & 0xf] ^ oddparity[cdata >> 4]) - utilcrc16[portnum&0x0FF] ^= 0xc001; - - cdata <<= 6; - utilcrc16[portnum&0x0FF] ^= cdata; - cdata <<= 1; - utilcrc16[portnum&0x0FF] ^= cdata; - - return utilcrc16[portnum&0x0FF]; -} - -//-------------------------------------------------------------------------- -// Update the Dallas Semiconductor One Wire CRC (utilcrc8) from the global -// variable utilcrc8 and the argument. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'x' - data byte to calculate the 8 bit crc from -// -// Returns: the updated utilcrc8. -// -uchar docrc8(int portnum, uchar x) -{ - utilcrc8[portnum&0x0FF] = dscrc_table[utilcrc8[portnum&0x0FF] ^ x]; - return utilcrc8[portnum&0x0FF]; -} diff --git a/tools_cmd/rwOW/ibfs32.lib b/tools_cmd/rwOW/ibfs32.lib deleted file mode 100644 index a856f6e6b74859e26749fddae8ec8217291ae5e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14230 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 -#include -#include -#include -#ifndef _WIN32_WCE -#include -#include -#include -#include -#include -#include -#endif - -/* type defs */ -typedef unsigned char uchar; -typedef unsigned short ushort; -typedef unsigned long ulong; - -/* typedef structure sent back by TMEX routines */ -typedef struct -{ -uchar name[4]; -uchar extension; -uchar startpage; -uchar numpages; -uchar attrib; -uchar bitmap[32]; -} FileEntry; - -/* structure to hold directory path */ -typedef struct -{ -uchar NumEntries; /* number of entries in path 0-10 */ -char Ref; /* reference character '\' or '.' */ -char Entries[10][4]; /* sub-directory entry names */ -} DirectoryPath; - -/* Holds info of each object in the Directory list */ -struct DirNumInfo -{ -unsigned char Name[4]; -unsigned char Extension; -char Attrib; -}; - -/* structure to hold exportable device parameters by family code (3.11) */ -typedef struct -{ -short features[32]; -char dscrptn[255]; -} Specification; - - -/* Error codes from TMEX functions */ -#define NO_DEVICE -1 -#define WRONG_TYPE -2 -#define FILE_READ_ERR -3 -#define BUFFER_TOO_SMALL -4 -#define HANDLE_NOT_AVAIL -5 -#define FILE_NOT_FOUND -6 -#define REPEAT_FILE -7 -#define HANDLE_NOT_USED -8 -#define FILE_WRITE_ONLY -9 -#define OUT_OF_SPACE -10 -#define FILE_WRITE_ERR -11 -#define TMFILE_READ_ONLY -12 -#define FUNC_NOT_SUP -13 -#define BAD_FILENAME -14 -#define CANT_DEL_READ_ONLY -15 -#define HANDLE_NOT_EXIST -16 -#define ONE_WIRE_PORT_ERROR -17 -#define INVALID_DIRECTORY -18 -#define DIRECTORY_NOT_EMPTY -19 -#define UNABLE_TO_CREATE_DIR -20 -#define NO_PROGRAM_JOB -21 -#define PROGRAM_WRITE_PROTECT -22 -#define NON_PROGRAM_PARTS -23 -#define ADDFILE_TERMINATED -24 -#define TIMEOUT -25 -#define INVALID_ARGUMENT -26 -#define BAD_ACK -27 -#define INVALID_SESSION -200 -#define NO_BASDRV_FOUND -201 - -/* Basic physical level error codes */ -#define BPORT_NOT_INITIALIZED -1 -#define BPORT_NOT_EXIST -2 -#define BNO_SUCH_FUNCTION -3 - -/* Transport level error codes */ -#define TERROR_READ_WRITE -4 -#define TBUFFER_TOO_SMALL -5 -#define TDEVICE_TOO_SMALL -6 -#define TNO_DEVICE -7 -#define TBLOCK_TOO_BIG -8 -#define TWRONG_TYPE -9 -#define TPAGE_REDIRECTED -10 -#define TPROGRAM_NOT_POSSIBLE -11 -#define BCOM_FAILURE -12 -#define BCOM_EVENT -13 - -/* for TMOneWireLevel */ -#define LEVEL_NORMAL 0 -#define LEVEL_STRONG_PULLUP 1 -#define LEVEL_BREAK 2 -#define LEVEL_PROGRAM 3 -#define PRIMED_NONE 0 -#define PRIMED_BIT 1 -#define PRIMED_BYTE 2 -#define LEVEL_READ 1 -#define LEVEL_SET 0 - -/* misc */ -#define GENERAL_FAIL -2 -#define BAD_ARGUMENT 50 -#define NO_DRIVERS 51 -#define KEY_ABORT 52 -#define OUT_MEMORY 53 -#define NORMAL_EXIT 0 - -#define TRUE 1 -#define FALSE 0 -#define DIR_READ 1 -#define DIR_SET 0 -#define DIR_REMOVE 1 -#define DIR_MAKE 0 - -/* for specification */ -#define NOMEM 0 -#define NVRAM 1 -#define EPROM1 2 -#define EPROM2 3 -#define EPROM3 4 -#define EEPROM1 5 -#define MNVRAM 6 -#define EEPROM2 7 -#define NVRAM2 8 -#define NVRAM3 9 -#define FTR_REG_PAGES 0 -#define FTR_REG_LEN 1 -#define FTR_STAT_PAGES 2 -#define FTR_STAT_LEN 3 -#define FTR_MAX_COM 4 -#define FTR_MEM_TYPE 5 - -// session -extern long __fastcall TMExtendedStartSession(short, short, void far *); -extern short __fastcall TMValidSession(long); -extern short __fastcall TMEndSession(long); -extern short __fastcall Get_Version(char far *); -// file_operations -extern short __fastcall TMFirstFile(long, void far *, FileEntry far *); -extern short __fastcall TMNextFile(long, void far *, FileEntry far *); -extern short __fastcall TMOpenFile(long, void far *, FileEntry far *); -extern short __fastcall TMCreateFile(long, void far *, short far *, FileEntry far *); -extern short __fastcall TMCloseFile(long, void far *, short); -extern short __fastcall TMReadFile(long, void far *, short, uchar far *, short); -extern short __fastcall TMWriteFile(long, void far *, short, uchar far *, short); -extern short __fastcall TMDeleteFile(long, void far *, FileEntry far *); -extern short __fastcall TMFormat(long, void far *); -extern short __fastcall TMAttribute(long, void far *, short, FileEntry far *); -extern short __fastcall TMReNameFile(long, void far *, short, FileEntry far *); -extern short __fastcall TMChangeDirectory(long, void far *, short, DirectoryPath far *); -extern short __fastcall TMDirectoryMR(long, void far *, short, FileEntry far *); -extern short __fastcall TMCreateProgramJob(long, void far *); -extern short __fastcall TMDoProgramJob(long, void far *); -extern short __fastcall TMWriteAddFile(long, void far *, short, short, short, uchar far *, short); -extern short __fastcall TMTerminateAddFile(long, void far *, FileEntry far *); -extern short __fastcall TMGetFamilySpec(long, void far *, Specification *); -// transport -extern short __fastcall TMReadPacket(long, void far *, short, uchar far *, short); -extern short __fastcall TMWritePacket(long, void far *, short, uchar far *, short); -extern short __fastcall TMBlockIO(long, uchar far *, short); -extern short __fastcall TMExtendedReadPage(long, void far *, short, uchar far *, short); -extern short __fastcall TMProgramByte(long, void far *, short, short, short, short far *, short); -extern short __fastcall TMProgramBlock(long, void far *, uchar far *, short, short, short far *); /* (3.11) */ -extern long __fastcall TMCRC(short, uchar far *, ushort, short); -// network -extern short __fastcall TMSkipFamily(long, void far *); -extern short __fastcall TMFamilySearchSetup(long, void far *, short); -extern short __fastcall TMFirst(long, void far *); -extern short __fastcall TMNext(long, void far *); -extern short __fastcall TMAccess(long, void far *); -extern short __fastcall TMOverAccess(long, void far *); -extern short __fastcall TMStrongAccess(long, void far *); -extern short __fastcall TMStrongAlarmAccess(long, void far *); -extern short __fastcall TMRom(long, void far *, short far *); -extern short __fastcall TMFirstAlarm(long, void far *); -extern short __fastcall TMNextAlarm(long, void far *); -extern short __fastcall TMAutoOverDrive(long, void far *, short); -extern short __fastcall TMSearch(short, short, short, short); -// hardware_specific -extern short __fastcall TMSetup(long); -extern short __fastcall TMTouchByte(long, short); -extern short __fastcall TMTouchReset(long); -extern short __fastcall TMTouchBit(long, short); -extern short __fastcall TMClose(long); -extern short __fastcall TMProgramPulse(long); -extern short __fastcall TMOneWireCom(long, short, short); -extern short __fastcall TMOneWireLevel(long, short, short, short); -extern short __fastcall TMGetTypeVersion(short,char far *); -extern short __fastcall TMBlockStream(long, uchar far *, short); -extern short __fastcall TMGetAdapterSpec(long, Specification far *); -extern short __fastcall TMReadDefaultPort(short far *, short far *); - diff --git a/tools_cmd/rwOW/main.cpp b/tools_cmd/rwOW/main.cpp deleted file mode 100644 index fa6df19..0000000 --- a/tools_cmd/rwOW/main.cpp +++ /dev/null @@ -1,391 +0,0 @@ -#define _CRT_SECURE_NO_WARNINGS 1 -extern "C" { -#include "ownet.h" -} -#include -#include -#include - -FILE *fio; -char s[100], fname[254]; - - -SMALLINT ReadDS2430(int portnum, uchar SerialNum[8]) { - uchar rt = FALSE; - uchar send_block[145]; - uchar send_cnt = 0, i; - int address; - char s[100]; - FILE *f; - sprintf(s, "%02X%02X%02X%02X%02X%02X%02X%02X.bin", SerialNum[7], SerialNum[6], SerialNum[5], SerialNum[4], SerialNum[3], SerialNum[2], SerialNum[1], SerialNum[0]); - fprintf(fio, ">14\n"); - send_cnt = 0; - printf("Read Data MEM \n"); - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_block[send_cnt++] = 0xF0; - send_block[send_cnt++] = 0x00; - for (i = 0; i<32; i++) send_block[send_cnt++] = 0xFF; - if (!owBlock(portnum, FALSE, send_block, send_cnt)) { printf("ERROR RUN COMMAND \n"); return 1; } - for (i = 2; i TEST DS2433 \n"); - fprintf(fio, ">23\n"); - - send_cnt = 0; - printf("\nRead MEM ALL \n"); - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_block[send_cnt++] = 0xF0; - send_block[send_cnt++] = 0x00; - send_block[send_cnt++] = 0x00; - for (j = 0; j<16; j++) { - for (i = 0; i<32; i++) send_block[send_cnt++] = 0xFF; - if (!owBlock(portnum, FALSE, send_block, send_cnt)) { printf("ERROR RUN COMMAND \n"); return 1; } - for (i = j?0:3; i < send_cnt; i++) { printf("%02X ", send_block[i]); fprintf(fio, "%02X ", send_block[i]); } - send_cnt = 0; - printf("\n"); - fprintf(fio, "\n"); - } - -} - - -int findDev(uchar code) { - int find = 0; - fio = fopen(fname, "r"); - while (!feof(fio)) { - s[0] = fgetc(fio); - if (s[0] == '>') { - s[0] = fgetc(fio); - s[1] = fgetc(fio); - s[2] = 0; - uchar w = strtol(s, NULL, 16); - if (code ==w) return 1; - } - } - fclose(fio); - return 0; -} - - - -SMALLINT WriteDS2433(int portnum, uchar SerialNum[8]) { - uchar rt = FALSE; - uchar send_block[145]; - uchar send_cnt = 0, i, j; - int address; - send_cnt = 0; - printf("-----> TEST DS2433 \n"); - if (findDev(0x23)) { - for (j = 0; j < 16; j++) { - for (i = 0; i < 32; i++) { - fscanf(fio, "%02X", &send_block[i + 3]); - } - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_block[0] = 0x0F; - send_block[1] = j << 5; - send_block[2] = j >> 3; - if (!owBlock(portnum, FALSE, send_block, 32 + 3)) { printf("ERROR RUN COMMAND \n"); return 1; } - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_cnt = 0; - send_block[send_cnt++] = 0xAA; - for (i = 0; i < 32 + 3; i++) send_block[send_cnt++] = 0xFF; - if (!owBlock(portnum, FALSE, send_block, send_cnt)) { printf("ERROR RUN COMMAND \n"); return 1; } - for (i = 0; i < send_cnt; i++) { printf("%02X ", send_block[i]); } - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_cnt = 0; - send_block[send_cnt++] = 0x55; - send_cnt += 3; - if (!owBlock(portnum, FALSE, send_block, send_cnt)) { printf("ERROR RUN COMMAND \n"); return 1; } - msDelay(100); - printf("\n"); - } - - } - fclose(fio); - return 0; - - -} - - -SMALLINT WriteDS2430(int portnum, uchar SerialNum[8]) { - uchar rt = FALSE; - uchar send_block[145]; - uchar send_cnt = 0, i, j; - int address; - send_cnt = 0; - printf("-----> TEST DS2430 \n"); - if (findDev(0x14)) { - for (i = 0; i < 32; i++) { - fscanf(fio, "%02X", &send_block[i + 2]); - } - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_block[0] = 0x0F; - send_block[1] = 0; - if (!owBlock(portnum, FALSE, send_block, 32 + 2)) { printf("ERROR RUN COMMAND \n"); return 1; } - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_cnt = 0; - send_block[send_cnt++] = 0xAA; - send_block[send_cnt++] = 0x00; - for (i = 0; i < 32 + 2; i++) send_block[send_cnt++] = 0xFF; - if (!owBlock(portnum, FALSE, send_block, send_cnt)) { printf("ERROR RUN COMMAND \n"); return 1; } - for (i = 0; i < send_cnt; i++) { printf("%02X ", send_block[i]); } - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_cnt = 0; - send_block[send_cnt++] = 0x55; - send_block[send_cnt++] = 0xA5; - if (!owBlock(portnum, FALSE, send_block, send_cnt)) { printf("ERROR RUN COMMAND \n"); return 1; } - msDelay(100); - printf("\n"); - } - fclose(fio); - -} -/* -SMALLINT WriteDS2430(int portnum, uchar SerialNum[8], const char *fname) { - uchar rt = FALSE; - uchar send_block[145]; - uchar send_cnt = 0, i; - int address; - uchar readbl[64]; - FILE *f; - f = fopen(fname, "rb"); - fread(readbl, 1, 32 + 16, f); - fclose(f); - ResetDS2430(portnum, SerialNum); - msDelay(1000); - send_cnt = 0; - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_block[send_cnt++] = 0x0F; - send_block[send_cnt++] = 0x00; - for (i = 0; i<32; i++) send_block[send_cnt++] = readbl[i + 8]; - if (!owBlock(portnum, FALSE, send_block, send_cnt)) { printf("ERROR RUN COMMAND \n"); return 1; } - send_cnt = 0; - if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; } - send_block[send_cnt++] = 0xAA; - send_block[send_cnt++] = 0x00; - for (i = 0; i<32; i++) send_block[send_cnt++] = 0xFF; - if (!owBlock(portnum, FALSE, send_block, send_cnt)) { printf("ERROR RUN COMMAND \n"); return 1; } - for (i = 0; i= '0') && (s[i] <= '9')) { - b += s[i] - '0'; - } else - if ((s[i] >= 'A') && (s[i] <= 'F')) { - b += s[i] - 'A'+10; - } else - if ((s[i] >= 'a') && (s[i] <= 'f')) { - b += s[i] - 'a'+10; - } - - } - return b; -} - -void strcpys(char *s, const char* d,bool up) { - if (strlen(d) > 7990) { - strncpy(s, d, 7990); - s[200] = 0; - } - else strcpy(s, d); - if (up) { - for (int i = 0; i= 'a') && (s[i] <= 'z')) - s[i] += 'A' - 'a'; - } -} - -int main(int argc, char *argv[]) { - uchar SNum[8]; - int rslt, cnt, i; - uchar send_block[256]; - uchar send_cnt = 0; - int portnum; - char adapter[20]; - int found = 0; - int rw = 0; - int err = 0; - char s[8000]; - int adt = 0; - int mod = 0; - if (argc >= 2) { - strcpys(s, argv[1],true); - - - if (strncmp(s,"USB",3)==0) {adt = 6;} - if (strncmp(s, "COM", 3) == 0) { adt = 5; } - if (adt != 0) { - strcpy(s, argv[1] + 3); - sprintf(adapter, "{%s,%i}\0",s,adt); - printf("Open Port %s\n", argv[1]); - if ((portnum = owAcquireEx(adapter)) < 0) { - printf("ERROR \n", adt); - } - else mod = 1; - - } - if ((argc == 2) && (mod == 1)) mod = 2; - if (argc > 2) { - strcpys(s, argv[2],true); - if (strncmp(s, "DC", 2) == 0) { - if (argc > 3) { - if (strlen(argv[3])>=16) - for (int i = 0; i < 16; i += 2) { - SNum[7 - (i / 2)] = conf2(argv[3] + i); - - } - printf("Select: %02X%02X%02X%02X%02X%02X%02X%02X\n", SNum[7], SNum[6], SNum[5], SNum[4], SNum[3], SNum[2], SNum[1], SNum[0]); - mod = 3; - } - - } - } - if ((mod == 3) && (argc>4)) { - strcpys(s, argv[4], true); - mod = 4; - } - - } - - if (mod == 2) { - rslt = owFirst(portnum, TRUE, FALSE); - cnt = 0; - while (rslt) { - cnt++; - owSerialNum(portnum, &SNum[0], TRUE); - printf("%02X%02X%02X%02X%02X%02X%02X%02X\n", SNum[7], SNum[6], SNum[5], SNum[4], SNum[3], SNum[2], SNum[1], SNum[0]); - // fprintf(ft,"%02X%02X%02X%02X%02X%02X%02X%02X\n",SNum[7],SNum[6],SNum[5],SNum[4],SNum[3],SNum[2],SNum[1],SNum[0]); -/* switch (SNum[0]) { - - - case 0x14: { - //TestDS2430(portnum,&SNum[0]); - //scanf("%i",&i); - //ResetDS2430(portnum,&SNum[0]); - //uchar id[]={0x14,0xF5 ,0xEA ,0x24 ,0x06 ,0x00 ,0x00 ,0x5E}; - //SetIDDS2430(portnum,&SNum[0],id); - if (rw) WriteDS2430(portnum, &SNum[0]); else ReadDS2430(portnum, &SNum[0]); - //WriteDS2430(portnum,&SNum[0],"5E00000624EAF514.bin"); - break; - } - case 0x23: { - //TestDS2433(portnum,&SNum[0]); - //TestDS2433_reset(portnum,&SNum[0]); - //scanf("%i",&i); - if (rw) WriteDS2433(portnum, &SNum[0]); else ReadDS2433(portnum, &SNum[0]); - break; - } - }*/ - rslt = owNext(portnum, TRUE, FALSE); - } - } - if (mod == 4) { - owSerialNum(portnum, SNum, FALSE); - strcat(s, "_R"); - int len = strlen(s); - int i = 0; - while (i < len) { - if (s[i] == '_') { - if (s[i + 1] == 'R') { - if (owAccess(portnum)) { - if (owBlock(portnum, FALSE, send_block, send_cnt)) { - for (int j = 0; j < send_cnt; j++) { - printf("%02X", send_block[j]); - } - printf("\n"); - } - else printf("ERROR RESET\n"); - } - else printf("ERROR SEND\n"); - send_cnt = 0; - } - if (s[i + 1] == 'P') { - if (i + 2 < len) { - i += 2; - msDelay(conf2(s + i)); - - } - } - } - else { - send_block[send_cnt++] = conf2(s + i); - } - i += 2; - - - } - } - if (mod>0) owRelease(portnum); - - return 0; -} \ No newline at end of file diff --git a/tools_cmd/rwOW/owerr.c b/tools_cmd/rwOW/owerr.c deleted file mode 100644 index 76c5176..0000000 --- a/tools_cmd/rwOW/owerr.c +++ /dev/null @@ -1,348 +0,0 @@ -//--------------------------------------------------------------------------- -// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES -// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of Dallas Semiconductor -// shall not be used except as stated in the Dallas Semiconductor -// Branding Policy. -//--------------------------------------------------------------------------- -// -// owerr.c - Library functions for error handling with 1-Wire library -// -// Version: 1.00 -// - -#include -#ifndef _WIN32_WCE -#include -#endif -#ifdef _WIN64 -#include -#endif -#include "ownet.h" - -#ifndef SIZE_OWERROR_STACK - #ifdef SMALL_MEMORY_TARGET - //for small memory, only hole 1 error - #define SIZE_OWERROR_STACK 1 - #else - #define SIZE_OWERROR_STACK 10 - #endif -#endif - -//--------------------------------------------------------------------------- -// Variables -//--------------------------------------------------------------------------- - -// Error Struct for holding error information. -// In DEBUG, this will also hold the line number and filename. -typedef struct -{ - int owErrorNum; -#ifdef DEBUG - int lineno; - char *filename; -#endif -} owErrorStruct; - -// Ring-buffer used for stack. -// In case of overflow, deepest error is over-written. -static owErrorStruct owErrorStack[SIZE_OWERROR_STACK]; - -// Stack pointer to top-most error. -static int owErrorPointer = 0; - - -//--------------------------------------------------------------------------- -// Functions Definitions -//--------------------------------------------------------------------------- -int owGetErrorNum(void); -void owClearError(void); -int owHasErrors(void); -#ifdef DEBUG - void owRaiseError(int,int,char*); -#else - void owRaiseError(int); -#endif -#ifndef SMALL_MEMORY_TARGET - void owPrintErrorMsg(FILE *); - void owPrintErrorMsgStd(); - char *owGetErrorMsg(int); -#endif - - -//-------------------------------------------------------------------------- -// The 'owGetErroNum' returns the error code of the top-most error on the -// error stack. NOTE: This function has the side effect of popping the -// current error off the stack. All successive calls to 'owGetErrorNum' -// will further clear the error stack. -// -// For list of error codes, see 'ownet.h' -// -// Returns: int : The error code of the top-most error on the stack -// -int owGetErrorNum(void) -{ - int i = owErrorStack[ owErrorPointer ].owErrorNum; - owErrorStack[ owErrorPointer ].owErrorNum = 0; - if(!owErrorPointer) - owErrorPointer = SIZE_OWERROR_STACK - 1; - else - owErrorPointer = (owErrorPointer - 1); - return i; -} - -//-------------------------------------------------------------------------- -// The 'owClearError' clears all the errors. -// -void owClearError(void) -{ - owErrorStack[ owErrorPointer ].owErrorNum = 0; -} - -//-------------------------------------------------------------------------- -// The 'owHasErrors' is a boolean test function which tests whether or not -// a valid error is waiting on the stack. -// -// Returns: TRUE (1) : When there are errors on the stack. -// FALSE (0): When stack's errors are set to 0, or NO_ERROR_SET. -// -int owHasErrors(void) -{ - if(owErrorStack[ owErrorPointer ].owErrorNum) - return 1; //TRUE - else - return 0; //FALSE -} - -#ifdef DEBUG - //-------------------------------------------------------------------------- - // The 'owRaiseError' is the method for raising an error onto the error - // stack. - // - // Arguments: int err - the error code you wish to raise. - // int lineno - DEBUG only - the line number where it was raised - // char* filename - DEBUG only - the file name where it occured. - // - void owRaiseError(int err, int lineno, char* filename) - { - owErrorPointer = (owErrorPointer + 1) % SIZE_OWERROR_STACK; - owErrorStack[ owErrorPointer ].owErrorNum = err; - owErrorStack[ owErrorPointer ].lineno = lineno; - owErrorStack[ owErrorPointer ].filename = filename; - } -#else - //-------------------------------------------------------------------------- - // The 'owRaiseError' is the method for raising an error onto the error - // stack. - // - // Arguments: int err - the error code you wish to raise. - // - void owRaiseError(int err) - { - owErrorPointer = (owErrorPointer + 1) % SIZE_OWERROR_STACK; - owErrorStack[ owErrorPointer ].owErrorNum = err; - } -#endif - - -// SMALL_MEMORY_TARGET - embedded microcontrollers, where these -// messaging functions might not make any sense. -#ifndef SMALL_MEMORY_TARGET - //Array of meaningful error messages to associate with codes. - //Not used on targets with low memory (i.e. PIC). - static char *owErrorMsg[125] = - { - /*000*/ "No Error Was Set", - /*001*/ "No Devices found on 1-Wire Network", - /*002*/ "1-Wire Net Reset Failed", - /*003*/ "Search ROM Error: Couldn't locate next device on 1-Wire", - /*004*/ "Access Failed: Could not select device", - /*005*/ "DS2480B Adapter Not Detected", - /*006*/ "DS2480B: Wrong Baud", - /*007*/ "DS2480B: Bad Response", - /*008*/ "Open COM Failed", - /*009*/ "Write COM Failed", - /*010*/ "Read COM Failed", - /*011*/ "Data Block Too Large", - /*012*/ "Block Transfer failed", - /*013*/ "Program Pulse Failed", - /*014*/ "Program Byte Failed", - /*015*/ "Write Byte Failed", - /*016*/ "Read Byte Failed", - /*017*/ "Write Verify Failed", - /*018*/ "Read Verify Failed", - /*019*/ "Write Scratchpad Failed", - /*020*/ "Copy Scratchpad Failed", - /*021*/ "Incorrect CRC Length", - /*022*/ "CRC Failed", - /*023*/ "Failed to acquire a necessary system resource", - /*024*/ "Failed to initialize system resource", - /*025*/ "Data too long to fit on specified device.", - /*026*/ "Read exceeds memory bank end.", - /*027*/ "Write exceeds memory bank end.", - /*028*/ "Device select failed", - /*029*/ "Read Scratch Pad verify failed.", - /*030*/ "Copy scratchpad complete not found", - /*031*/ "Erase scratchpad complete not found", - /*032*/ "Address read back from scrachpad was incorrect", - /*033*/ "Read page with extra-info not supported by this memory bank", - /*034*/ "Read page packet with extra-info not supported by this memory bank", - /*035*/ "Length of packet requested exceeds page size", - /*036*/ "Invalid length in packet", - /*037*/ "Program pulse required but not available", - /*038*/ "Trying to access a read-only memory bank", - /*039*/ "Current bank is not general purpose memory", - /*040*/ "Read back from write compare is incorrect, page may be locked", - /*041*/ "Invalid page number for this memory bank", - /*042*/ "Read page with CRC not supported by this memory bank", - /*043*/ "Read page with CRC and extra-info not supported by this memory bank", - /*044*/ "Read back from write incorrect, could not lock page", - /*045*/ "Read back from write incorrect, could not lock redirect byte", - /*046*/ "The read of the status was not completed.", - /*047*/ "Page redirection not supported by this memory bank", - /*048*/ "Lock Page redirection not supported by this memory bank", - /*049*/ "Read back byte on EPROM programming did not match.", - /*050*/ "Can not write to a page that is locked.", - /*051*/ "Can not lock a redirected page that has already been locked.", - /*052*/ "Trying to redirect a locked redirected page.", - /*053*/ "Trying to lock a page that is already locked.", - /*054*/ "Trying to write to a memory bank that is write protected.", - /*055*/ "Error due to not matching MAC.", - /*056*/ "Memory Bank is write protected.", - /*057*/ "Secret is write protected, can not Load First Secret.", - /*058*/ "Error in Reading Scratchpad after Computing Next Secret.", - /*059*/ "Load Error from Loading First Secret.", - /*060*/ "Power delivery required but not available", - /*061*/ "Not a valid file name.", - /*062*/ "Unable to Create a Directory in this part.", - /*063*/ "That file already exists.", - /*064*/ "The directory is not empty.", - /*065*/ "The wrong type of part for this operation.", - /*066*/ "The max len for this file is too small.", - /*067*/ "This is not a write once bank.", - /*068*/ "The file can not be found.", - /*069*/ "There is not enough space available.", - /*070*/ "There is not a page to match that bit in the bitmap.", - /*071*/ "There are no jobs for EPROM parts.", - /*072*/ "Function not supported to modify attributes.", - /*073*/ "Handle is not in use.", - /*074*/ "Tring to read a write only file.", - /*075*/ "There is no handle available for use.", - /*076*/ "The directory provided is an invalid directory.", - /*077*/ "Handle does not exist.", - /*078*/ "Serial Number did not match with current job.", - /*079*/ "Can not program EPROM because a non-EPROM part on the network.", - /*080*/ "Write protect redirection byte is set.", - /*081*/ "There is an inappropriate directory length.", - /*082*/ "The file has already been terminated.", - /*083*/ "Failed to read memory page of iButton part.", - /*084*/ "Failed to match scratchpad of iButton part.", - /*085*/ "Failed to erase scratchpad of iButton part.", - /*086*/ "Failed to read scratchpad of iButton part.", - /*087*/ "Failed to execute SHA function on SHA iButton.", - /*088*/ "SHA iButton did not return a status completion byte.", - /*089*/ "Write data page failed.", - /*090*/ "Copy secret into secret memory pages failed.", - /*091*/ "Bind unique secret to iButton failed.", - /*092*/ "Could not install secret into user token.", - /*093*/ "Transaction Incomplete: signature did not match.", - /*094*/ "Transaction Incomplete: could not sign service data.", - /*095*/ "User token did not provide a valid authentication response.", - /*096*/ "Failed to answer a challenge on the user token.", - /*097*/ "Failed to create a challenge on the coprocessor.", - /*098*/ "Transaction Incomplete: service data was not valid.", - /*099*/ "Transaction Incomplete: service data was not updated.", - /*100*/ "Unrecoverable, catastrophic service failure occured.", - /*101*/ "Load First Secret from scratchpad data failed.", - /*102*/ "Failed to match signature of user's service data.", - /*103*/ "Subkey out of range for the DS1991.", - /*104*/ "Block ID out of range for the DS1991", - /*105*/ "Password is enabled", - /*106*/ "Password is invalid", - /*107*/ "This memory bank has no read only password", - /*108*/ "This memory bank has no read/write password", - /*109*/ "1-Wire is shorted", - /*110*/ "Error communicating with 1-Wire adapter", - /*111*/ "CopyScratchpad failed: Ending Offset must go to end of page", - /*112*/ "WriteScratchpad failed: Ending Offset must go to end of page", - /*113*/ "Mission can not be stopped while one is not in progress", - /*114*/ "Error stopping the mission", - /*115*/ "Port number is outside (0,MAX_PORTNUM) interval", - /*116*/ "Level of the 1-Wire was not changed", - /*117*/ "Both the Read Only and Read Write Passwords must be set", - /*118*/ "Failure to change latch state." - /*119*/ "Could not open usb port through libusb", - /*120*/ "Libusb DS2490 port already opened", - /*121*/ "Failed to set libusb configuration", - /*122*/ "Failed to claim libusb interface", - /*123*/ "Failed to set libusb altinterface", - /*124*/ "No adapter found at this port number" - }; - - char *owGetErrorMsg(int err) - { - return owErrorMsg[err]; - } - -#ifndef __C51__ - //-------------------------------------------------------------------------- - // The 'owPrintErrorMsg' is the method for printing an error from the stack. - // The destination for the print is specified by the argument, fileno, which - // can be stderr, stdout, or a log file. In non-debug mode, the output is - // of the form: - // Error num: Error msg - // - // In debug-mode, the output is of the form: - // Error num: filename line#: Error msg - // - // NOTE: This function has the side-effect of popping the error off the stack. - // - // Arguments: FILE*: the destination for printing. - // - void owPrintErrorMsg(FILE *filenum) - { - #ifdef DEBUG - int l = owErrorStack[ owErrorPointer ].lineno; - char *f = owErrorStack[ owErrorPointer ].filename; - int err = owGetErrorNum(); - fprintf(filenum,"Error %d: %s line %d: %s\r\n",err,f,l,owErrorMsg[err]); - #else - int err = owGetErrorNum(); - fprintf(filenum,"Error %d: %s\r\n",err,owErrorMsg[err]); - #endif - } -#endif //__C51__ - - // Same as above, except uses default printf output - void owPrintErrorMsgStd() - { - #ifdef DEBUG - int l = owErrorStack[ owErrorPointer ].lineno; - char *f = owErrorStack[ owErrorPointer ].filename; - int err = owGetErrorNum(); - printf("Error %d: %s line %d: %s\r\n",err,f,l,owErrorMsg[err]); - #else - int err = owGetErrorNum(); - printf("Error %d: %s\r\n",err,owErrorMsg[err]); - #endif - } -#endif - diff --git a/tools_cmd/rwOW/ownet.h b/tools_cmd/rwOW/ownet.h deleted file mode 100644 index 7c0c144..0000000 --- a/tools_cmd/rwOW/ownet.h +++ /dev/null @@ -1,422 +0,0 @@ -//--------------------------------------------------------------------------- -// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES -// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of Dallas Semiconductor -// shall not be used except as stated in the Dallas Semiconductor -// Branding Policy. -//--------------------------------------------------------------------------- -// -// ownet.h - Include file for 1-Wire Net library -// -// Version: 2.10 -// -// History: 1.02 -> 1.03 Make sure uchar is not defined twice. -// 1.03 -> 2.00 Changed 'MLan' to 'ow'. -// 2.00 -> 2.01 Added error handling. Added circular-include check. -// 2.01 -> 2.10 Added raw memory error handling and SMALLINT -// 2.10 -> 3.00 Added memory bank functionality -// Added file I/O operations -// - -#ifndef OWNET_H -#define OWNET_H - -//--------------------------------------------------------------// -// Common Includes to ownet applications -//--------------------------------------------------------------// -#include - - -//--------------------------------------------------------------// -// Target Specific Information -//--------------------------------------------------------------// -//--------------------------------------------------------------// -// Handhelds (PalmOS, WinCE) -//--------------------------------------------------------------// -#ifdef __MC68K__ - //MC68K is the type of processor in the PILOT - //Metrowerk's CodeWarrior defines this symbol - #include - #ifndef strcmp - #include - #define strcmp StrCompare - #endif - #include -#endif - -#ifdef _WIN32_WCE - //All of our projects had this flag defined by default (_WIN32_WCE), - //but I'm not 100% positive that this is _the_ definitive - //flag to use to identify a WinCE system. - #include "WinCElnk.h" - #ifndef FILE - #define FILE int - extern int sprintf(char *buffer, char *format,...); - extern void fprintf(FILE *fp, char *format,...); - extern void printf(char *format,...); - #endif -#endif - -#if !defined(_WIN32_WCE) && !defined(__MC68K__) - #include -#endif - -#ifdef __C51__ - #define FILE int - #define exit(c) return - typedef unsigned int ushort; - typedef unsigned long ulong; - #define SMALLINT uchar -#endif - -#ifdef __ICCMAXQ__ - #define FILE int - #define stdout 0 - #define stdin 1 - #define stderr 2 - typedef unsigned int ushort; - typedef unsigned long ulong; - #define SMALLINT short - #define main micro_main - #define real_main main - #define SMALL_MEMORY_TARGET -#endif - - -//--------------------------------------------------------------// -// Typedefs -//--------------------------------------------------------------// -#ifndef SMALLINT - // - // purpose of smallint is for compile-time changing of formal - // parameters and return values of functions. For each target - // machine, an integer is alleged to represent the most "simple" - // number representable by that architecture. This should, in - // most cases, produce optimal code for that particular arch. - // BUT... The majority of compilers designed for embedded - // processors actually keep an int at 16 bits, although the - // architecture might only be comfortable with 8 bits. - // The default size of smallint will be the same as that of - // an integer, but this allows for easy overriding of that size. - // - // NOTE: - // In all cases where a smallint is used, it is assumed that - // decreasing the size of this integer to something as low as - // a single byte _will_not_ change the functionality of the - // application. e.g. a loop counter that will iterate through - // several kilobytes of data should not be SMALLINT. The most - // common place you'll see smallint is for boolean return types. - // - #define SMALLINT int -#endif - -// setting max baud -#ifdef _WINDOWS - // 0x02 = PARAMSET_19200 -#define MAX_BAUD 0x02 -#else - // 0x06 = PARMSET_115200 -#define MAX_BAUD 0x06 -#endif - -#ifndef OW_UCHAR - #define OW_UCHAR - typedef unsigned char uchar; - #if !defined(__MINGW32__) && (defined(__CYGWIN__) || defined(__GNUC__)) - typedef unsigned long ulong; - //ushort already defined in sys/types.h - #include - #else - #if defined(_WIN32) || defined(WIN32) || defined(__MC68K__) || defined(_WIN32_WCE) || defined(_DOS) || defined(_WINDOWS) || defined(__MINGW32__) - typedef unsigned short ushort; - typedef unsigned long ulong; - #endif - #endif - #ifdef __sun__ - #include - #endif - #ifdef SDCC - //intent of ushort is 2 bytes unsigned. - //for ds390 in sdcc, an int, not a short, - //is 2 bytes. - typedef unsigned int ushort; - #endif -#endif - -// general defines -#define WRITE_FUNCTION 1 -#define READ_FUNCTION 0 - -// error codes -// todo: investigate these and replace with new Error Handling library -#define READ_ERROR -1 -#define INVALID_DIR -2 -#define NO_FILE -3 -#define WRITE_ERROR -4 -#define WRONG_TYPE -5 -#define FILE_TOO_BIG -6 - -// Misc -#define FALSE 0 -#define TRUE 1 - -#ifndef MAX_PORTNUM - #define MAX_PORTNUM 16 -#endif - -// mode bit flags -#define MODE_NORMAL 0x00 -#define MODE_OVERDRIVE 0x01 -#define MODE_STRONG5 0x02 -#define MODE_PROGRAM 0x04 -#define MODE_BREAK 0x08 - -// Output flags -#define LV_ALWAYS 2 -#define LV_OPTIONAL 1 -#define LV_VERBOSE 0 - -//--------------------------------------------------------------// -// Error handling -//--------------------------------------------------------------// -extern int owGetErrorNum(void); -extern int owHasErrors(void); - -//Clears the stack. -#define OWERROR_CLEAR() while(owHasErrors()) owGetErrorNum(); - -#ifdef DEBUG - //Raises an exception with extra debug info - #define OWERROR(err) owRaiseError(err,__LINE__,__FILE__) - extern void owRaiseError(int,int,char*); - #define OWASSERT(s,err,ret) if(!(s)){owRaiseError((err),__LINE__,__FILE__);return (ret);} -#else - //Raises an exception with just the error code - #define OWERROR(err) owRaiseError(err) - extern void owRaiseError(int); - #define OWASSERT(s,err,ret) if(!(s)){owRaiseError((err));return (ret);} -#endif - -#ifdef SMALL_MEMORY_TARGET - #define OWERROR_DUMP(fileno) /*no-op*/; -#else - //Prints the stack out to the given file. - #define OWERROR_DUMP(fileno) while(owHasErrors()) owPrintErrorMsg(fileno); - extern void owPrintErrorMsg(FILE *); - extern void owPrintErrorMsgStd(); - extern char *owGetErrorMsg(int); -#endif - -#define OWERROR_NO_ERROR_SET 0 -#define OWERROR_NO_DEVICES_ON_NET 1 -#define OWERROR_RESET_FAILED 2 -#define OWERROR_SEARCH_ERROR 3 -#define OWERROR_ACCESS_FAILED 4 -#define OWERROR_DS2480_NOT_DETECTED 5 -#define OWERROR_DS2480_WRONG_BAUD 6 -#define OWERROR_DS2480_BAD_RESPONSE 7 -#define OWERROR_OPENCOM_FAILED 8 -#define OWERROR_WRITECOM_FAILED 9 -#define OWERROR_READCOM_FAILED 10 -#define OWERROR_BLOCK_TOO_BIG 11 -#define OWERROR_BLOCK_FAILED 12 -#define OWERROR_PROGRAM_PULSE_FAILED 13 -#define OWERROR_PROGRAM_BYTE_FAILED 14 -#define OWERROR_WRITE_BYTE_FAILED 15 -#define OWERROR_READ_BYTE_FAILED 16 -#define OWERROR_WRITE_VERIFY_FAILED 17 -#define OWERROR_READ_VERIFY_FAILED 18 -#define OWERROR_WRITE_SCRATCHPAD_FAILED 19 -#define OWERROR_COPY_SCRATCHPAD_FAILED 20 -#define OWERROR_INCORRECT_CRC_LENGTH 21 -#define OWERROR_CRC_FAILED 22 -#define OWERROR_GET_SYSTEM_RESOURCE_FAILED 23 -#define OWERROR_SYSTEM_RESOURCE_INIT_FAILED 24 -#define OWERROR_DATA_TOO_LONG 25 -#define OWERROR_READ_OUT_OF_RANGE 26 -#define OWERROR_WRITE_OUT_OF_RANGE 27 -#define OWERROR_DEVICE_SELECT_FAIL 28 -#define OWERROR_READ_SCRATCHPAD_VERIFY 29 -#define OWERROR_COPY_SCRATCHPAD_NOT_FOUND 30 -#define OWERROR_ERASE_SCRATCHPAD_NOT_FOUND 31 -#define OWERROR_ADDRESS_READ_BACK_FAILED 32 -#define OWERROR_EXTRA_INFO_NOT_SUPPORTED 33 -#define OWERROR_PG_PACKET_WITHOUT_EXTRA 34 -#define OWERROR_PACKET_LENGTH_EXCEEDS_PAGE 35 -#define OWERROR_INVALID_PACKET_LENGTH 36 -#define OWERROR_NO_PROGRAM_PULSE 37 -#define OWERROR_READ_ONLY 38 -#define OWERROR_NOT_GENERAL_PURPOSE 39 -#define OWERROR_READ_BACK_INCORRECT 40 -#define OWERROR_INVALID_PAGE_NUMBER 41 -#define OWERROR_CRC_NOT_SUPPORTED 42 -#define OWERROR_CRC_EXTRA_INFO_NOT_SUPPORTED 43 -#define OWERROR_READ_BACK_NOT_VALID 44 -#define OWERROR_COULD_NOT_LOCK_REDIRECT 45 -#define OWERROR_READ_STATUS_NOT_COMPLETE 46 -#define OWERROR_PAGE_REDIRECTION_NOT_SUPPORTED 47 -#define OWERROR_LOCK_REDIRECTION_NOT_SUPPORTED 48 -#define OWERROR_READBACK_EPROM_FAILED 49 -#define OWERROR_PAGE_LOCKED 50 -#define OWERROR_LOCKING_REDIRECTED_PAGE_AGAIN 51 -#define OWERROR_REDIRECTED_PAGE 52 -#define OWERROR_PAGE_ALREADY_LOCKED 53 -#define OWERROR_WRITE_PROTECTED 54 -#define OWERROR_NONMATCHING_MAC 55 -#define OWERROR_WRITE_PROTECT 56 -#define OWERROR_WRITE_PROTECT_SECRET 57 -#define OWERROR_COMPUTE_NEXT_SECRET 58 -#define OWERROR_LOAD_FIRST_SECRET 59 -#define OWERROR_POWER_NOT_AVAILABLE 60 -#define OWERROR_XBAD_FILENAME 61 -#define OWERROR_XUNABLE_TO_CREATE_DIR 62 -#define OWERROR_REPEAT_FILE 63 -#define OWERROR_DIRECTORY_NOT_EMPTY 64 -#define OWERROR_WRONG_TYPE 65 -#define OWERROR_BUFFER_TOO_SMALL 66 -#define OWERROR_NOT_WRITE_ONCE 67 -#define OWERROR_FILE_NOT_FOUND 68 -#define OWERROR_OUT_OF_SPACE 69 -#define OWERROR_TOO_LARGE_BITNUM 70 -#define OWERROR_NO_PROGRAM_JOB 71 -#define OWERROR_FUNC_NOT_SUP 72 -#define OWERROR_HANDLE_NOT_USED 73 -#define OWERROR_FILE_WRITE_ONLY 74 -#define OWERROR_HANDLE_NOT_AVAIL 75 -#define OWERROR_INVALID_DIRECTORY 76 -#define OWERROR_HANDLE_NOT_EXIST 77 -#define OWERROR_NONMATCHING_SNUM 78 -#define OWERROR_NON_PROGRAM_PARTS 79 -#define OWERROR_PROGRAM_WRITE_PROTECT 80 -#define OWERROR_FILE_READ_ERR 81 -#define OWERROR_ADDFILE_TERMINATED 82 -#define OWERROR_READ_MEMORY_PAGE_FAILED 83 -#define OWERROR_MATCH_SCRATCHPAD_FAILED 84 -#define OWERROR_ERASE_SCRATCHPAD_FAILED 85 -#define OWERROR_READ_SCRATCHPAD_FAILED 86 -#define OWERROR_SHA_FUNCTION_FAILED 87 -#define OWERROR_NO_COMPLETION_BYTE 88 -#define OWERROR_WRITE_DATA_PAGE_FAILED 89 -#define OWERROR_COPY_SECRET_FAILED 90 -#define OWERROR_BIND_SECRET_FAILED 91 -#define OWERROR_INSTALL_SECRET_FAILED 92 -#define OWERROR_VERIFY_SIG_FAILED 93 -#define OWERROR_SIGN_SERVICE_DATA_FAILED 94 -#define OWERROR_VERIFY_AUTH_RESPONSE_FAILED 95 -#define OWERROR_ANSWER_CHALLENGE_FAILED 96 -#define OWERROR_CREATE_CHALLENGE_FAILED 97 -#define OWERROR_BAD_SERVICE_DATA 98 -#define OWERROR_SERVICE_DATA_NOT_UPDATED 99 -#define OWERROR_CATASTROPHIC_SERVICE_FAILURE 100 -#define OWERROR_LOAD_FIRST_SECRET_FAILED 101 -#define OWERROR_MATCH_SERVICE_SIGNATURE_FAILED 102 -#define OWERROR_KEY_OUT_OF_RANGE 103 -#define OWERROR_BLOCK_ID_OUT_OF_RANGE 104 -#define OWERROR_PASSWORDS_ENABLED 105 -#define OWERROR_PASSWORD_INVALID 106 -#define OWERROR_NO_READ_ONLY_PASSWORD 107 -#define OWERROR_NO_READ_WRITE_PASSWORD 108 -#define OWERROR_OW_SHORTED 109 -#define OWERROR_ADAPTER_ERROR 110 -#define OWERROR_EOP_COPY_SCRATCHPAD_FAILED 111 -#define OWERROR_EOP_WRITE_SCRATCHPAD_FAILED 112 -#define OWERROR_HYGRO_STOP_MISSION_UNNECESSARY 113 -#define OWERROR_HYGRO_STOP_MISSION_ERROR 114 -#define OWERROR_PORTNUM_ERROR 115 -#define OWERROR_LEVEL_FAILED 116 -#define OWERROR_PASSWORD_NOT_SET 117 -#define OWERROR_LATCH_NOT_SET 118 -#define OWERROR_LIBUSB_OPEN_FAILED 119 -#define OWERROR_LIBUSB_DEVICE_ALREADY_OPENED 120 -#define OWERROR_LIBUSB_SET_CONFIGURATION_ERROR 121 -#define OWERROR_LIBUSB_CLAIM_INTERFACE_ERROR 122 -#define OWERROR_LIBUSB_SET_ALTINTERFACE_ERROR 123 -#define OWERROR_LIBUSB_NO_ADAPTER_FOUND 124 - -// One Wire functions defined in ownetu.c -SMALLINT owFirst(int portnum, SMALLINT do_reset, SMALLINT alarm_only); -SMALLINT owNext(int portnum, SMALLINT do_reset, SMALLINT alarm_only); -void owSerialNum(int portnum, uchar *serialnum_buf, SMALLINT do_read); -void owFamilySearchSetup(int portnum, SMALLINT search_family); -void owSkipFamily(int portnum); -SMALLINT owAccess(int portnum); -SMALLINT owVerify(int portnum, SMALLINT alarm_only); -SMALLINT owOverdriveAccess(int portnum); - - -// external One Wire functions defined in owsesu.c - SMALLINT owAcquire(int portnum, char *port_zstr); - int owAcquireEx(char *port_zstr); - void owRelease(int portnum); - -// external One Wire functions defined in findtype.c -// SMALLINT FindDevices(int,uchar FamilySN[][8],SMALLINT,int); - -// external One Wire functions from link layer owllu.c -SMALLINT owTouchReset(int portnum); -SMALLINT owTouchBit(int portnum, SMALLINT sendbit); -SMALLINT owTouchByte(int portnum, SMALLINT sendbyte); -SMALLINT owWriteByte(int portnum, SMALLINT sendbyte); -SMALLINT owReadByte(int portnum); -SMALLINT owSpeed(int portnum, SMALLINT new_speed); -SMALLINT owLevel(int portnum, SMALLINT new_level); -SMALLINT owProgramPulse(int portnum); -SMALLINT owWriteBytePower(int portnum, SMALLINT sendbyte); -SMALLINT owReadBytePower(int portnum); -SMALLINT owHasPowerDelivery(int portnum); -SMALLINT owHasProgramPulse(int portnum); -SMALLINT owHasOverDrive(int portnum); -SMALLINT owReadBitPower(int portnum, SMALLINT applyPowerResponse); -// external One Wire global from owllu.c -extern SMALLINT FAMILY_CODE_04_ALARM_TOUCHRESET_COMPLIANCE; - -// external One Wire functions from transaction layer in owtrnu.c -SMALLINT owBlock(int portnum, SMALLINT do_reset, uchar *tran_buf, SMALLINT tran_len); -SMALLINT owReadPacketStd(int portnum, SMALLINT do_access, int start_page, uchar *read_buf); -SMALLINT owWritePacketStd(int portnum, int start_page, uchar *write_buf, - SMALLINT write_len, SMALLINT is_eprom, SMALLINT crc_type); -SMALLINT owProgramByte(int portnum, SMALLINT write_byte, int addr, SMALLINT write_cmd, - SMALLINT crc_type, SMALLINT do_access); - -// link functions -void msDelay(int len); -long msGettick(void); - -// ioutil.c functions prototypes -int EnterString(char *msg, char *buf, int min, int max); -int EnterNum(char *msg, int numchars, long *value, long min, long max); -int EnterHex(char *msg, int numchars, ulong *value); -int ToHex(char ch); -int getkeystroke(void); -int key_abort(void); -void ExitProg(char *msg, int exit_code); -int getData(uchar *write_buff, int max_len, SMALLINT gethex); -void PrintHex(uchar* buffer, int cnt); -void PrintChars(uchar* buffer, int cnt); -void PrintSerialNum(uchar* buffer); - -// external functions defined in crcutil.c -void setcrc16(int portnum, ushort reset); -ushort docrc16(int portnum, ushort cdata); -void setcrc8(int portnum, uchar reset); -uchar docrc8(int portnum, uchar x); - -#endif //OWNET_H diff --git a/tools_cmd/rwOW/tmexlnk.c b/tools_cmd/rwOW/tmexlnk.c deleted file mode 100644 index 7fa329a..0000000 --- a/tools_cmd/rwOW/tmexlnk.c +++ /dev/null @@ -1,368 +0,0 @@ -//--------------------------------------------------------------------------- -// Copyright (C) 2001 Dallas Semiconductor Corporation, All Rights Reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES -// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of Dallas Semiconductor -// shall not be used except as stated in the Dallas Semiconductor -// Branding Policy. -//--------------------------------------------------------------------------- -// -// TMEXLnk.C - Link module to call on TMEX low-level functions to -// excersize the general 1-Wire Net functions. -// (Requires TMEX 3.11 or newer) -// -// Version: 3.00 -// -// History: 1.00 -> 1.01 Return values in owLevel corrected. -// Added function msDelay. -// 1.02 -> 1.03 Add msGettick, always return owLevel success -// to hide adapters (DS9097E) that do not have -// power delivery capabilities. -// 1.03 -> 2.00 Changed 'MLan' to 'ow'. Added support for -// multiple ports. -// 2.10 -> 3.00 Added owReadBitPower and owWriteBytePower - -#include "ownet.h" -#include - -// external TMEX variables -extern long SessionHandle[MAX_PORTNUM]; -extern uchar StateBuffer[MAX_PORTNUM][5120]; -extern short far pascal TMTouchByte(long, short); -extern short far pascal TMTouchReset(long); -extern short far pascal TMTouchBit(long, short); -extern short far pascal TMProgramPulse(long); -extern short far pascal TMOneWireCom(long, short, short); -extern short far pascal TMOneWireLevel(long, short, short, short); - -// globals -SMALLINT FAMILY_CODE_04_ALARM_TOUCHRESET_COMPLIANCE = FALSE; // for compatibility purposes - -//-------------------------------------------------------------------------- -// Reset all of the devices on the 1-Wire Net and return the result. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// -// Returns: TRUE(1): presense pulse(s) detected, device(s) reset -// FALSE(0): no presense pulses detected -// -SMALLINT owTouchReset(int portnum) -{ - int result; - - // Assume valid Session - result = TMTouchReset(SessionHandle[portnum]); - - // success if the normal or alarm presence - if ((result == 1) || (result == 2)) - return TRUE; - else - return FALSE; -} - - -//-------------------------------------------------------------------------- -// Send 1 bit of communication to the 1-Wire Net and return the -// result 1 bit read from the 1-Wire Net. The parameter 'sendbit' -// least significant bit is used and the least significant bit -// of the result is the return bit. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'sendbit' - the least significant bit is the bit to send -// -// Returns: 0: 0 bit read from sendbit -// 1: 1 bit read from sendbit -// -SMALLINT owTouchBit(int portnum, SMALLINT sendbit) -{ - // Assume valid Session - return TMTouchBit(SessionHandle[portnum],(short)sendbit); -} - -//-------------------------------------------------------------------------- -// Send 8 bits of communication to the 1-Wire Net and verify that the -// 8 bits read from the 1-Wire Net is the same (write operation). -// The parameter 'sendbyte' least significant 8 bits are used. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'sendbyte' - 8 bits to send (least significant byte) -// -// Returns: TRUE: bytes written and echo was the same -// FALSE: echo was not the same -// -SMALLINT owTouchByte(int portnum, SMALLINT sendbyte) -{ - // Assume valid Session - return TMTouchByte(SessionHandle[portnum],(short)sendbyte); -} - -//-------------------------------------------------------------------------- -// Send 8 bits of communication to the MicroLAN and verify that the -// 8 bits read from the MicroLAN is the same (write operation). -// The parameter 'sendbyte' least significant 8 bits are used. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'sendbyte' - 8 bits to send (least significant byte) -// -// Returns: TRUE: bytes written and echo was the same -// FALSE: echo was not the same -// -SMALLINT owWriteByte(int portnum, SMALLINT sendbyte) -{ - return (owTouchByte(portnum,sendbyte) == sendbyte) ? TRUE : FALSE; -} - -//-------------------------------------------------------------------------- -// Send 8 bits of read communication to the 1-Wire Net and and return the -// result 8 bits read from the 1-Wire Net. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// -// Returns: TRUE: 8 bytes read from 1-Wire Net -// FALSE: the 8 bytes were not read -// -SMALLINT owReadByte(int portnum) -{ - return owTouchByte(portnum,0xFF); -} - -//-------------------------------------------------------------------------- -// Set the 1-Wire Net communucation speed. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'new_speed' - new speed defined as -// MODE_NORMAL 0x00 -// MODE_OVERDRIVE 0x01 -// -// Returns: current 1-Wire Net speed -// -SMALLINT owSpeed(int portnum, SMALLINT new_speed) -{ - return TMOneWireCom(SessionHandle[portnum],0,(short)new_speed); -} - -//-------------------------------------------------------------------------- -// Set the 1-Wire Net line level. The values for new_level are -// as follows: -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'new_level' - new level defined as -// MODE_NORMAL 0x00 -// MODE_STRONG5 0x02 -// MODE_PROGRAM 0x04 -// MODE_BREAK 0x08 (not supported) -// -// Returns: current 1-Wire Net level -// -SMALLINT owLevel(int portnum, SMALLINT new_level) -{ - int rslt; - int docheck = FALSE; - - // check for DS2480 bug - if (((SessionHandle[portnum] & 0x0F0) == 0x050) && - (TMOneWireLevel(SessionHandle[portnum],1,0,0) == 1)) - docheck = TRUE; - - switch (new_level) - { - case MODE_NORMAL: - rslt = TMOneWireLevel(SessionHandle[portnum],0,0,0); - // test code for DS2480 bug - if (docheck) - TMTouchBit(SessionHandle[portnum],1); - break; - case MODE_STRONG5: - rslt = TMOneWireLevel(SessionHandle[portnum],0,1,0); - break; - case MODE_PROGRAM: - rslt = TMOneWireLevel(SessionHandle[portnum],0,3,0); - break; - case MODE_BREAK: - rslt = TMOneWireLevel(SessionHandle[portnum],0,2,0); - break; - default: - rslt = 0; - } - - // Assume TMEX can do it so always return NewLevel - return new_level; -} - -//-------------------------------------------------------------------------- -// This procedure creates a fixed 480 microseconds 12 volt pulse -// on the 1-Wire Net for programming EPROM iButtons. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// -// Returns: TRUE successful -// FALSE program voltage not available -// -SMALLINT owProgramPulse(int portnum) -{ - return TMProgramPulse(SessionHandle[portnum]); -} - -//-------------------------------------------------------------------------- -// Description: -// Delay for at least 'len' ms -// -void msDelay(int len) -{ - Sleep(len); -} - -//-------------------------------------------------------------------------- -// Get the current millisecond tick count. Does not have to represent -// an actual time, it just needs to be an incrementing timer. -// -long msGettick(void) -{ - return GetTickCount(); -} - -//-------------------------------------------------------------------------- -// Send 8 bits of communication to the 1-Wire Net and verify that the -// 8 bits read from the 1-Wire Net is the same (write operation). -// The parameter 'sendbyte' least significant 8 bits are used. After the -// 8 bits are sent change the level of the 1-Wire net. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to -// OpenCOM to indicate the port number. -// 'sendbyte' - 8 bits to send (least significant byte) -// -// Returns: TRUE: bytes written and echo was the same -// FALSE: echo was not the same -// -SMALLINT owWriteBytePower(int portnum, SMALLINT sendbyte) -{ - // prime for power delivery after byte - TMOneWireLevel(SessionHandle[portnum],0,1,2); - - // send the byte and start strong pullup - if(TMTouchByte(SessionHandle[portnum],(short)sendbyte) != sendbyte) - { - TMOneWireLevel(SessionHandle[portnum],0,0,0); - return FALSE; - } - - return TRUE; -} - -//-------------------------------------------------------------------------- -// Read 8 bits of communication to the 1-Wire Net and verify that the -// 8 bits read from the 1-Wire Net is the same (write operation). -// The parameter 'sendbyte' least significant 8 bits are used. After the -// 8 bits are read change the level of the 1-Wire net. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to -// OpenCOM to indicate the port number. -// 'sendbyte' - 8 bits to send (least significant byte) -// -// Returns: TRUE: bytes written and echo was the same -// FALSE: echo was not the same -// -SMALLINT owReadBytePower(int portnum) -{ - SMALLINT sendbyte = 0xFF; - - // prime for power delivery after byte - TMOneWireLevel(SessionHandle[portnum],0,1,2); - - // send the byte and start strong pullup - return TMTouchByte(SessionHandle[portnum],(short)sendbyte); -} - -//-------------------------------------------------------------------------- -// Send 1 bit of communication to the 1-Wire Net and verify that the -// response matches the 'applyPowerResponse' bit and apply power delivery -// to the 1-Wire net. Note that some implementations may apply the power -// first and then turn it off if the response is incorrect. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to -// OpenCOM to indicate the port number. -// 'applyPowerResponse' - 1 bit response to check, if correct then start -// power delivery -// -// Returns: TRUE: bit written and response correct, strong pullup now on -// FALSE: response incorrect -// -SMALLINT owReadBitPower(int portnum, SMALLINT applyPowerResponse) -{ - // prime for power delivery after bit - TMOneWireLevel(SessionHandle[portnum],0,1,1); - - // send the byte and start strong pullup - if(TMTouchBit(SessionHandle[portnum],0x01) != applyPowerResponse) - { - TMOneWireLevel(SessionHandle[portnum],0,0,0); - return FALSE; - } - - return TRUE; -} - -//-------------------------------------------------------------------------- -// This procedure indicates wether the adapter can deliver power. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to -// OpenCOM to indicate the port number. -// -// Returns: TRUE because all userial adapters have over drive. -// -SMALLINT owHasPowerDelivery(int portnum) -{ - return TRUE; -} - -//-------------------------------------------------------------------------- -// This procedure indicates wether the adapter can deliver power. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to -// OpenCOM to indicate the port number. -// -// Returns: TRUE because all userial adapters have over drive. -// -SMALLINT owHasOverDrive(int portnum) -{ - return TRUE; -} - -//-------------------------------------------------------------------------- -// This procedure creates a fixed 480 microseconds 12 volt pulse -// on the 1-Wire Net for programming EPROM iButtons. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to -// OpenCOM to indicate the port number. -// -// Returns: TRUE program volatage available -// FALSE program voltage not available -SMALLINT owHasProgramPulse(int portnum) -{ - return TMProgramPulse(SessionHandle[portnum]); -} \ No newline at end of file diff --git a/tools_cmd/rwOW/tmexnet.c b/tools_cmd/rwOW/tmexnet.c deleted file mode 100644 index 3f9b77d..0000000 --- a/tools_cmd/rwOW/tmexnet.c +++ /dev/null @@ -1,249 +0,0 @@ -//--------------------------------------------------------------------------- -// Copyright (C) 2001 Dallas Semiconductor Corporation, All Rights Reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES -// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of Dallas Semiconductor -// shall not be used except as stated in the Dallas Semiconductor -// Branding Policy. -//--------------------------------------------------------------------------- -// -// tmexnet.C - Wrapper class to hook 1-Wire Public Domain API to TMEX API -// for network functions. -// -// Version: 3.00 -// -// - -#include "ownet.h" -#include - -uchar StateBuffer[MAX_PORTNUM][5120]; - -// external TMEX variables -extern long SessionHandle[MAX_PORTNUM]; -extern short far pascal TMSearch(long session_handle, void *start_buffer, - short ResetSearch, short PerformReset, - short SrchCmd); -extern short pascal TMFirst(long, void *); -extern short pascal TMNext(long, void *); -extern short pascal TMAccess(long, void *); -extern short pascal TMStrongAccess(long, void *); -extern short pascal TMStrongAlarmAccess(long, void *); -extern short pascal TMOverAccess(long, void *); -extern short pascal TMRom(long, void *, short *); -extern short pascal TMFirstAlarm(long, void *); -extern short pascal TMNextAlarm(long, void *); -extern short pascal TMFamilySearchSetup(long, void *, short); -extern short pascal TMSkipFamily(long, void *); -extern short pascal TMAutoOverDrive(long, void *, short); - - -//-------------------------------------------------------------------------- -// The 'owFirst' finds the first device on the 1-Wire Net This function -// contains one parameter 'alarm_only'. When -// 'alarm_only' is TRUE (1) the find alarm command 0xEC is -// sent instead of the normal search command 0xF0. -// Using the find alarm command 0xEC will limit the search to only -// 1-Wire devices that are in an 'alarm' state. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'do_reset' - TRUE (1) perform reset before search, FALSE (0) do not -// perform reset before search. -// 'alarm_only' - TRUE (1) the find alarm command 0xEC is -// sent instead of the normal search command 0xF0 -// -// Returns: TRUE (1) : when a 1-Wire device was found and it's -// Serial Number placed in the global SerialNum[portnum] -// FALSE (0): There are no devices on the 1-Wire Net. -// -SMALLINT owFirst(int portnum, SMALLINT do_reset, SMALLINT alarm_only) -{ - return (TMSearch(SessionHandle[portnum], StateBuffer[portnum], 1, - (short)do_reset, (short)((alarm_only) ? 0xEC : 0xF0)) == 1); -} - -//-------------------------------------------------------------------------- -// The 'owNext' function does a general search. This function -// continues from the previos search state. The search state -// can be reset by using the 'owFirst' function. -// This function contains one parameter 'alarm_only'. -// When 'alarm_only' is TRUE (1) the find alarm command -// 0xEC is sent instead of the normal search command 0xF0. -// Using the find alarm command 0xEC will limit the search to only -// 1-Wire devices that are in an 'alarm' state. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'do_reset' - TRUE (1) perform reset before search, FALSE (0) do not -// perform reset before search. -// 'alarm_only' - TRUE (1) the find alarm command 0xEC is -// sent instead of the normal search command 0xF0 -// -// Returns: TRUE (1) : when a 1-Wire device was found and it's -// Serial Number placed in the global SerialNum[portnum] -// FALSE (0): when no new device was found. Either the -// last search was the last device or there -// are no devices on the 1-Wire Net. -// -SMALLINT owNext(int portnum, SMALLINT do_reset, SMALLINT alarm_only) -{ - return (TMSearch(SessionHandle[portnum], StateBuffer[portnum], 0, - (short)do_reset, (short)((alarm_only) ? 0xEC : 0xF0)) == 1); -} - -//-------------------------------------------------------------------------- -// The 'owSerialNum' function either reads or sets the SerialNum buffer -// that is used in the search functions 'owFirst' and 'owNext'. -// This function contains two parameters, 'serialnum_buf' is a pointer -// to a buffer provided by the caller. 'serialnum_buf' should point to -// an array of 8 unsigned chars. The second parameter is a flag called -// 'do_read' that is TRUE (1) if the operation is to read and FALSE -// (0) if the operation is to set the internal SerialNum buffer from -// the data in the provided buffer. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'serialnum_buf' - buffer to that contains the serial number to set -// when do_read = FALSE (0) and buffer to get the serial -// number when do_read = TRUE (1). -// 'do_read' - flag to indicate reading (1) or setting (0) the current -// serial number. -// -void owSerialNum(int portnum, uchar *serialnum_buf, SMALLINT do_read) -{ - short ROM[8],i; - - // check if reading or writing - if (do_read) - { - ROM[0] = 0; - } - else - { - for (i = 0; i < 8; i++) - ROM[i] = serialnum_buf[i]; - } - - // call TMEX to read or set the current device - TMRom(SessionHandle[portnum], StateBuffer[portnum], ROM); - - // place in 'serialnum_buf' - if (do_read) - { - for (i = 0; i < 8; i++) - serialnum_buf[i] = (uchar)ROM[i]; - } -} - -//-------------------------------------------------------------------------- -// Setup the search algorithm to find a certain family of devices -// the next time a search function is called 'owNext'. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to -// OpenCOM to indicate the port number. -// 'search_family' - family code type to set the search algorithm to find -// next. -// -void owFamilySearchSetup(int portnum, SMALLINT search_family) -{ - TMFamilySearchSetup(SessionHandle[portnum], StateBuffer[portnum], - (short)search_family); -} - -//-------------------------------------------------------------------------- -// Set the current search state to skip the current family code. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// -void owSkipFamily(int portnum) -{ - TMSkipFamily(SessionHandle[portnum], StateBuffer[portnum]); -} - -//-------------------------------------------------------------------------- -// The 'owAccess' function resets the 1-Wire and sends a MATCH Serial -// Number command followed by the current SerialNum code. After this -// function is complete the 1-Wire device is ready to accept device-specific -// commands. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// -// Returns: TRUE (1) : reset indicates present and device is ready -// for commands. -// FALSE (0): reset does not indicate presence or echos 'writes' -// are not correct. -// -SMALLINT owAccess(int portnum) -{ - return (TMAccess(SessionHandle[portnum], StateBuffer[portnum]) == 1); -} - -//---------------------------------------------------------------------- -// The function 'owVerify' verifies that the current device -// is in contact with the 1-Wire Net. -// Using the find alarm command 0xEC will verify that the device -// is in contact with the 1-Wire Net and is in an 'alarm' state. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'alarm_only' - TRUE (1) the find alarm command 0xEC -// is sent instead of the normal search -// command 0xF0. -// -// Returns: TRUE (1) : when the 1-Wire device was verified -// to be on the 1-Wire Net -// with alarm_only == FALSE -// or verified to be on the 1-Wire Net -// AND in an alarm state when -// alarm_only == TRUE. -// FALSE (0): the 1-Wire device was not on the -// 1-Wire Net or if alarm_only -// == TRUE, the device may be on the -// 1-Wire Net but in a non-alarm state. -// -SMALLINT owVerify(int portnum, SMALLINT alarm_only) -{ - if (alarm_only) - return (TMStrongAlarmAccess(SessionHandle[portnum], StateBuffer[portnum]) == 1); - else - return (TMStrongAccess(SessionHandle[portnum], StateBuffer[portnum]) == 1); -} - -//---------------------------------------------------------------------- -// Perform a overdrive MATCH command to select the 1-Wire device with -// the address in the ID data register. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// -// Returns: TRUE: If the device is present on the 1-Wire Net and -// can do overdrive then the device is selected. -// FALSE: Device is not present or not capable of overdrive. -// -// *Note: This function could be converted to send DS2480 -// commands in one packet. -// -SMALLINT owOverdriveAccess(int portnum) -{ - return (TMOverAccess(SessionHandle[portnum], StateBuffer[portnum]) == 1); -} diff --git a/tools_cmd/rwOW/tmexses.c b/tools_cmd/rwOW/tmexses.c deleted file mode 100644 index fea8798..0000000 --- a/tools_cmd/rwOW/tmexses.c +++ /dev/null @@ -1,212 +0,0 @@ -//--------------------------------------------------------------------------- -// Copyright (C) 2001 Dallas Semiconductor Corporation, All Rights Reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES -// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of Dallas Semiconductor -// shall not be used except as stated in the Dallas Semiconductor -// Branding Policy. -//--------------------------------------------------------------------------- -// -// owsestmx.c - Acquire and release a Session on the 1-Wire Net using TMEX. -// (Requires TMEX 3.11 or newer) -// -// Version: 2.01 -// -// History: 1.03 -> 2.00 Changed 'MLan' to 'ow'. Added support for -// multiple ports. -// 2.00 -> 2.01 Added support for owError library. -// - -#include -#include -#include "ownet.h" - -// external function prototypes -extern long far pascal TMExtendedStartSession(short, short, void far *); -extern short far pascal TMEndSession(long); -extern short far pascal TMClose(long); -extern short far pascal TMSetup(long); -extern short far pascal TMReadDefaultPort(short far *, short far *); - -short PortNum=1,PortType=2; -long SessionHandle[MAX_PORTNUM]; -SMALLINT handle_init = FALSE; - -//--------------------------------------------------------------------------- -// Attempt to acquire a 1-Wire net using a com port and a DS2480 based -// adapter. -// -// 'port_zstr' - zero terminated port name. For this platform -// use format {port number, port type}. -// -// Returns: port number and -1 if not successful in setting up the port. -// -int owAcquireEx(char *port_zstr) -{ - int portnum; - int string_counter, counter, i, lenmax; - char portnum_str[15]; - char porttype_str[15]; - void *tmex_options = NULL; - - if(!handle_init) - { - for(i=0; i 12) - lenmax = 12; - string_counter = 1; - counter = 0; - do - { - portnum_str[counter] = port_zstr[string_counter]; - - counter++; - string_counter++; - } - while((port_zstr[string_counter] != ',') && (string_counter <= lenmax)); - - portnum_str[counter] = '\0'; - - string_counter++; - counter = 0; - - do - { - porttype_str[counter] = port_zstr[string_counter]; - - counter++; - string_counter++; - } - while((port_zstr[string_counter] != '}') && (string_counter <= lenmax)); - - porttype_str[counter] = '\0'; - - PortNum = atoi(portnum_str); - PortType = atoi(porttype_str); - } - - // open a session - SessionHandle[portnum] = TMExtendedStartSession(PortNum,PortType,tmex_options); - - // check the session handle - if (SessionHandle[portnum] <= 0) - { - OWERROR(OWERROR_GET_SYSTEM_RESOURCE_FAILED); - SessionHandle[portnum] = 0; - return -1; - } - - // setup the port - if (TMSetup(SessionHandle[portnum]) != 1) - { - TMClose(SessionHandle[portnum]); - TMEndSession(SessionHandle[portnum]); - OWERROR(OWERROR_SYSTEM_RESOURCE_INIT_FAILED); - SessionHandle[portnum] = 0; - return -1; - } - - return portnum; -} - -//--------------------------------------------------------------------------- -// Attempt to acquire a 1-Wire net using a com port and a DS2480 based -// adapter. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'port_zstr' - zero terminated port name. For this platform -// use format COMX where X is the port number. -// -// Returns: TRUE - success, COM port opened -// -SMALLINT owAcquire(int portnum, char *port_zstr) -{ - int i; - - if(!handle_init) - { - for(i=0; i=0 && !SessionHandle[portnum], - OWERROR_PORTNUM_ERROR, FALSE ); - - // read the default PortNum and PortType - TMReadDefaultPort(&PortNum,&PortType); - - // convert the string in port_zstr to be the port number - PortNum = atoi(port_zstr); - - // open a session - SessionHandle[portnum] = TMExtendedStartSession(PortNum,PortType,NULL); - - // check the session handle - if (SessionHandle[portnum] <= 0) - { - OWERROR(OWERROR_GET_SYSTEM_RESOURCE_FAILED); - SessionHandle[portnum] = 0; - return FALSE; - } - - // setup the port - if (TMSetup(SessionHandle[portnum]) != 1) - { - TMClose(SessionHandle[portnum]); - TMEndSession(SessionHandle[portnum]); - OWERROR(OWERROR_SYSTEM_RESOURCE_INIT_FAILED); - SessionHandle[portnum] = 0; - return FALSE; - } - - return TRUE; -} - -//--------------------------------------------------------------------------- -// Release the previously acquired a 1-Wire net. -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// -void owRelease(int portnum) -{ - TMClose(SessionHandle[portnum]); - TMEndSession(SessionHandle[portnum]); - SessionHandle[portnum] = 0; -} - diff --git a/tools_cmd/rwOW/tmextran.c b/tools_cmd/rwOW/tmextran.c deleted file mode 100644 index 4a4b926..0000000 --- a/tools_cmd/rwOW/tmextran.c +++ /dev/null @@ -1,199 +0,0 @@ -//--------------------------------------------------------------------------- -// Copyright (C) 1999 Dallas Semiconductor Corporation, All Rights Reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES -// OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of Dallas Semiconductor -// shall not be used except as stated in the Dallas Semiconductor -// Branding Policy. -//--------------------------------------------------------------------------- -// -// tmexnet.C - Wrapper class to hook 1-Wire Public Domain API to TMEX API -// for transport functions. -// -// Version: 3.00 -// - -#include "ownet.h" -#include - -// external TMEX variables -extern long SessionHandle[MAX_PORTNUM]; -extern short far pascal TMBlockIO(long, uchar *, short); -extern short far pascal TMBlockStream(long, uchar *, short); - -//-------------------------------------------------------------------------- -// The 'owBlock' transfers a block of data to and from the -// 1-Wire Net with an optional reset at the begining of communication. -// The result is returned in the same buffer. -// -// 'do_reset' - cause a owTouchReset to occure at the begining of -// communication TRUE(1) or not FALSE(0) -// 'tran_buf' - pointer to a block of unsigned -// chars of length 'TranferLength' that will be sent -// to the 1-Wire Net -// 'tran_len' - length in bytes to transfer -// Supported devices: all -// -// Returns: TRUE (1) : The optional reset returned a valid -// presence (do_reset == TRUE) or there -// was no reset required. -// FALSE (0): The reset did not return a valid prsence -// (do_reset == TRUE). -// -// The maximum tran_len is 64 -// -SMALLINT owBlock(int portnum, SMALLINT do_reset, uchar *tran_buf, SMALLINT tran_len) -{ - short rslt; - - // check for a block too big - if (tran_len > 192) - { - OWERROR(OWERROR_BLOCK_TOO_BIG); - return FALSE; - } - - // check if need to do a owTouchReset first - if (do_reset) - rslt = TMBlockIO(SessionHandle[portnum], tran_buf, (short)tran_len); - else - rslt = TMBlockStream(SessionHandle[portnum], tran_buf, (short)tran_len); - - return (rslt == tran_len); -} - -//-------------------------------------------------------------------------- -// Write a byte to an EPROM 1-Wire device. -// -// Supported devices: crc_type=0(CRC8) -// DS1982 -// crc_type=1(CRC16) -// DS1985, DS1986, DS2407 -// -// 'portnum' - number 0 to MAX_PORTNUM-1. This number is provided to -// indicate the symbolic port number. -// 'write_byte' - byte to program -// 'addr' - address of byte to program -// 'write_cmd' - command used to write (0x0F reg mem, 0x55 status) -// 'crc_type' - CRC used (0 CRC8, 1 CRC16) -// 'do_access' - Flag to access device for each byte -// (0 skip access, 1 do the access) -// WARNING, only use do_access=0 if programing the NEXT -// byte immediatly after the previous byte. -// -// Returns: >=0 success, this is the resulting byte from the program -// effort -// -1 error, device not connected or program pulse voltage -// not available -// -SMALLINT owProgramByte(int portnum, SMALLINT write_byte, int addr, SMALLINT write_cmd, - SMALLINT crc_type, SMALLINT do_access) -{ - ushort lastcrc16; - uchar lastcrc8; - - // optionally access the device - if (do_access) - { - if (!owAccess(portnum)) - { - OWERROR(OWERROR_ACCESS_FAILED); - return -1; - } - - // send the write command - if (!owWriteByte(portnum,write_cmd)) - { - OWERROR(OWERROR_WRITE_BYTE_FAILED); - return -1; - } - - // send the address - if (!owWriteByte(portnum,addr & 0xFF) || !owWriteByte(portnum,addr >> 8)) - { - OWERROR(OWERROR_WRITE_BYTE_FAILED); - return -1; - } - } - - // send the data to write - if (!owWriteByte(portnum,write_byte)) - { - OWERROR(OWERROR_WRITE_BYTE_FAILED); - return -1; - } - - // read the CRC - if (crc_type == 0) - { - // calculate CRC8 - if (do_access) - { - setcrc8(portnum,0); - docrc8(portnum,(uchar)write_cmd); - docrc8(portnum,(uchar)(addr & 0xFF)); - docrc8(portnum,(uchar)(addr >> 8)); - } - else - setcrc8(portnum,(uchar)(addr & 0xFF)); - - docrc8(portnum,(uchar)write_byte); - // read and calculate the read crc - lastcrc8 = docrc8(portnum,(uchar)owReadByte(portnum)); - // crc should now be 0x00 - if (lastcrc8 != 0) - { - OWERROR(OWERROR_CRC_FAILED); - return -1; - } - } - else - { - // CRC16 - if (do_access) - { - setcrc16(portnum,0); - docrc16(portnum,(ushort)write_cmd); - docrc16(portnum,(ushort)(addr & 0xFF)); - docrc16(portnum,(ushort)(addr >> 8)); - } - else - setcrc16(portnum,(ushort)addr); - docrc16(portnum,(ushort)write_byte); - // read and calculate the read crc - docrc16(portnum,(ushort)owReadByte(portnum)); - lastcrc16 = docrc16(portnum,(ushort)owReadByte(portnum)); - // crc should now be 0xB001 - if (lastcrc16 != 0xB001) - return -1; - } - - // send the program pulse - if (!owProgramPulse(portnum)) - { - OWERROR(OWERROR_PROGRAM_PULSE_FAILED); - return -1; - } - - // read back and return the resulting byte - return owReadByte(portnum); -} - - -- 2.34.1