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_
37 #if defined(WIN) || defined(LINUX)
39 #if defined(_WINDOWS) || defined(__WINDOWS__) || defined(_WIN32) || defined(WIN32)
62 #include "owDeviceConfig.h"
64 #if defined(_WINDOWS) || defined(__WINDOWS__) || defined(_WIN32) || defined(WIN32)
65 #define USE_WINDOWS_TIME 1
67 //#include "win32/usb.h" // libusb header
69 #define USE_WINDOWS_TIME 0
84 #define OWLOG_WARNING 2
98 virtual int set(int llevel,const char *format, ...) {
102 va_start (arg, format);
104 done = vsprintf (s, format, arg);
107 done = vsprintf_s(s,300, format, arg);
113 if (level>=loglevel) {
114 if (loglevel==OWLOG_ERROR) printf("\033[1;31m%s\033[0m\n",s);
115 else if (loglevel==OWLOG_WARNING) printf("\033[1;33m%s\033[0m\n",s);
116 else printf("%s\n",s);
120 virtual void clear() {
124 if (lcount) return level; else return 0;
126 virtual void setLogLevel(int llevel ){
143 uint8_t docrc8(uint8_t value);
144 uint16_t docrc16(uint16_t cdata);
146 // global search state
147 unsigned char ROM_NO[8];
149 int LastFamilyDiscrepancy;
155 std::vector<snum_t> device_nums;
156 std::vector<owDevice*> devices;
173 int isDevicesChanged() {
174 int dc=devices_changed;
178 virtual void Clean();
180 virtual int InitAdapter(std::string s) {
181 uint8_t param=atoi(s.c_str());
182 return InitAdapter(param);
184 virtual void ReleaseAdapter() {}
185 virtual int InitAdapter(uint8_t)=0;
186 //Return 1 if Devices Present
187 virtual int Reset()=0;
188 virtual uint8_t sendrecivBit(uint8_t bit) =0;
192 virtual uint8_t sendrecivByte(uint8_t byte) {
195 for(int i=0;i<8;i++) {
197 rb|=sendrecivBit(b&1)<<7;
203 virtual int MatchRom(snum_t snum);
204 virtual int Communicate(std::vector<uint8_t> *data, int scount, int rcount);
208 uint8_t calcCRC8(std::vector<uint8_t> data);
209 uint16_t calcCRC16(std::vector<uint8_t> data);
210 int testCRC16(std::vector<uint8_t> data);
214 int programmPage(int pagenr, std::vector<uint8_t> page, int pagesize);
215 int flashHEXFile(std::string filename,snum_t dev,int resetid,int progress);
218 virtual int owFirst() {
220 LastDeviceFlag = FALSE;
221 LastFamilyDiscrepancy = 0;
224 virtual int owNext() {
227 virtual ~owInterface() {
236 #define OWDCS_DEFAULT 1
245 std::vector<int32_t> raw;
247 owDeviceConfig *config;
249 std::vector<double> values;
250 int lastfound; //0 found in last searchrom, 1 found in the searchrom befor, and so on
251 owDevice(owInterface *owi_,snum_t num);
252 //return 1 for real Config, return 0 for DefaultConig
254 virtual void setDefaultConfig();
255 //Information zum owDevice
256 std::vector<std::string> getFamilyInfo();
258 snum_t getNum() {return snum;}
260 int Communicate(std::vector<uint8_t> *data, int scount, int rcount);
261 int CommunicateShort(std::vector<uint8_t> *data, int scount, int rcount);
262 void changeID(snum_t nid);
264 virtual int convertAll() {return 1;}
265 virtual ~owDevice() {}
268 class owDeviceDS18B20:public owDevice {
270 owDeviceDS18B20(owInterface *owi_,snum_t num):owDevice(owi_,num) { }
271 virtual void setDefaultConfig();
272 int readScratchpad(std::vector<uint8_t> *sp);
273 virtual int convertAll();
277 class owDeviceDS2438:public owDevice {
279 owDeviceDS2438(owInterface *owi_,snum_t num):owDevice(owi_,num) {}
280 virtual void setDefaultConfig();
282 int setConfigByte(uint8_t cb);
283 int readScratchpad(std::vector<uint8_t> *sp, uint8_t page, int recall);
285 virtual int convertAll();
288 class owDeviceDS2450:public owDevice {
290 owDeviceDS2450(owInterface *owi_,snum_t num):owDevice(owi_,num) {}
292 virtual void setDefaultConfig();
293 virtual int convertAll();
294 void readMemory(uint8_t addr,std::vector<uint8_t> *sp);
295 void writeMemory(uint8_t addr,std::vector<uint8_t> *sp);
296 void convert(uint8_t mask, uint8_t preset);
301 class owDeviceDS2423:public owDevice {
303 owDeviceDS2423(owInterface *owi_,snum_t num):owDevice(owi_,num) {}
305 virtual void setDefaultConfig();
306 virtual int convertAll();
307 uint32_t readCounter(uint8_t page);