1 // Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de
2 // All rights reserved.
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the
14 // * All advertising materials mentioning features or use of this
15 // software must display the following acknowledgement: This product
16 // includes software developed by tm3d.de and its contributors.
17 // * Neither the name of tm3d.de nor the names of its contributors may
18 // be used to endorse or promote products derived from this software
19 // without specific prior written permission.
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 #ifndef __OWINTERFACES_H_
35 #define __OWINTERFACES_H_
46 #include "owDeviceConfig.h"
48 #if defined(_WINDOWS) || defined(__WINDOWS__) || defined(_WIN32) || defined(WIN32)
49 #define USE_WINDOWS_TIME 1
51 #include "win32/usb.h" // libusb header
53 #define USE_WINDOWS_TIME 0
68 #define OWLOG_WARNING 2
82 virtual int set(int llevel,const char *format, ...) {
86 va_start (arg, format);
87 done = vsprintf (s, format, arg);
92 if (level>=loglevel) {
93 if (loglevel==OWLOG_ERROR) printf("\033[1;31m%s\033[0m\n",s);
94 else if (loglevel==OWLOG_WARNING) printf("\033[1;33m%s\033[0m\n",s);
95 else printf("%s\n",s);
99 virtual void clear() {
103 if (lcount) return level; else return 0;
105 virtual void setLogLevel(int llevel ){
122 uint8_t docrc8(uint8_t value);
123 uint16_t docrc16(uint16_t cdata);
125 // global search state
126 unsigned char ROM_NO[8];
128 int LastFamilyDiscrepancy;
134 std::vector<snum_t> device_nums;
135 std::vector<owDevice*> devices;
152 int isDevicesChanged() {
153 int dc=devices_changed;
157 virtual void Clean();
159 virtual int InitAdapter(std::string s) {
160 uint8_t param=atoi(s.c_str());
161 return InitAdapter(param);
163 virtual void ReleaseAdapter() {}
164 virtual int InitAdapter(uint8_t)=0;
165 //Return 1 if Devices Present
166 virtual int Reset()=0;
167 virtual uint8_t sendrecivBit(uint8_t bit) =0;
171 virtual uint8_t sendrecivByte(uint8_t byte) {
174 for(int i=0;i<8;i++) {
176 rb|=sendrecivBit(b&1)<<7;
182 virtual int MatchRom(snum_t snum);
183 virtual int Communicate(std::vector<uint8_t> *data, int scount, int rcount);
187 uint8_t calcCRC8(std::vector<uint8_t> data);
188 uint16_t calcCRC16(std::vector<uint8_t> data);
189 int testCRC16(std::vector<uint8_t> data);
193 int programmPage(int pagenr, std::vector<uint8_t> page, int pagesize);
194 int flashHEXFile(std::string filename,snum_t dev,int resetid,int progress);
199 LastDeviceFlag = FALSE;
200 LastFamilyDiscrepancy = 0;
206 virtual ~owInterface() {
215 #define OWDCS_DEFAULT 1
224 std::vector<int32_t> raw;
226 owDeviceConfig *config;
228 std::vector<double> values;
229 int lastfound; //0 found in last searchrom, 1 found in the searchrom befor, and so on
230 owDevice(owInterface *owi_,snum_t num);
231 //return 1 for real Config, return 0 for DefaultConig
233 virtual void setDefaultConfig();
234 //Information zum owDevice
235 std::vector<std::string> getFamilyInfo();
237 snum_t getNum() {return snum;}
239 int Communicate(std::vector<uint8_t> *data, int scount, int rcount);
240 int CommunicateShort(std::vector<uint8_t> *data, int scount, int rcount);
241 void changeID(snum_t nid);
243 virtual int convertAll() {return 1;}
244 virtual ~owDevice() {}
247 class owDeviceDS18B20:public owDevice {
249 owDeviceDS18B20(owInterface *owi_,snum_t num):owDevice(owi_,num) { }
250 virtual void setDefaultConfig();
251 int readScratchpad(std::vector<uint8_t> *sp);
252 virtual int convertAll();
256 class owDeviceDS2438:public owDevice {
258 owDeviceDS2438(owInterface *owi_,snum_t num):owDevice(owi_,num) {}
259 virtual void setDefaultConfig();
261 int setConfigByte(uint8_t cb);
262 int readScratchpad(std::vector<uint8_t> *sp, uint8_t page, int recall);
264 virtual int convertAll();
267 class owDeviceDS2450:public owDevice {
269 owDeviceDS2450(owInterface *owi_,snum_t num):owDevice(owi_,num) {}
271 virtual void setDefaultConfig();
272 virtual int convertAll();
273 void readMemory(uint8_t addr,std::vector<uint8_t> *sp);
274 void writeMemory(uint8_t addr,std::vector<uint8_t> *sp);
275 void convert(uint8_t mask, uint8_t preset);
280 class owDeviceDS2423:public owDevice {
282 owDeviceDS2423(owInterface *owi_,snum_t num):owDevice(owi_,num) {}
284 virtual void setDefaultConfig();
285 virtual int convertAll();
286 uint32_t readCounter(uint8_t page);