-// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
+// Copyright (c) 2019, Tobias Mueller tm(at)tm3d.de\r
// All rights reserved.\r
//\r
// Redistribution and use in source and binary forms, with or without\r
void owDevice::changeID(snum_t nid) {\r
int i;\r
if (nid.byte[0] != snum.byte[0]) {\r
- owi->log->set(OWLOG_ERROR,"Family ID should not be changed, no correct ID");\r
- return;\r
+ owi->log->set(OWLOG_WARNING,"Family ID should not be changed, no correct ID");\r
+ //return;\r
}\r
std::vector<uint8_t> id;\r
for(i=0;i<7;i++) id.push_back(nid.byte[i]);\r
\r
int owDeviceDS18B20::convertAll() {\r
std::vector<uint8_t> sp;\r
- sp.push_back(0x44);\r
- Communicate(&sp, 1, 0); ///########################################################\r
- usleep(750000);\r
-\r
+ if (owCC_44_Temp==0) {\r
+ sp.push_back(0x44);\r
+ Communicate(&sp, 1, 0); ///########################################################\r
+ usleep(750000);\r
+ }\r
if (readScratchpad(&sp)) {\r
int16_t tsht;\r
tsht = sp[0] | ((int)sp[1] << 8);\r
tsht |= 0xFFFFF0000;\r
raw[0]=tsht;\r
values[0]=config->calculateValue(0, raw);\r
- return 1;\r
+ return 1;\r
} \r
return 0;\r
}\r
\r
+int owDeviceDS18B20::readMemory(int page,int start, int count,std::vector<uint8_t> *data) {\r
+ std::vector<uint8_t> d;\r
+ readScratchpad(&d);\r
+ data->insert(data->begin(),d.begin()+start,d.end());\r
+ return 8;\r
+}\r
+\r
\r
void owDeviceDS2438::setDefaultConfig() {\r
config->setConfig({1,6, 6,8, 4,7, 6,17, 0,2,3,12,4,0,0,0,0,0,0,0,0,0,0,0});\r
int owDeviceDS2438::convertAll() {\r
for(int k=0;k<owi->maxrepeat;k++) {\r
std::vector<uint8_t> sp;\r
- sp.push_back(0x44);\r
- Communicate(&sp, 1, 0);///########################################################\r
- if (owi->log->last()>=OWLOG_ERROR) continue;\r
- usleep(100000);\r
+ if (owCC_44_Temp==0) {\r
+ sp.push_back(0x44);\r
+ Communicate(&sp, 1, 0);///########################################################\r
+ if (owi->log->last()>=OWLOG_ERROR) continue;\r
+ usleep(100000);\r
+ }\r
if (setConfigByte(0x08)<=0) continue;\r
for(int k=0;k<owi->maxrepeat;k++) {\r
sp.clear();\r
return 0;\r
}\r
std::vector<uint8_t> sp;\r
- readMemory(0,&sp);\r
+ readMemory(0,0,8,&sp);\r
if (owi->log->last()>=OWLOG_WARNING) {\r
return 0;\r
}\r
\r
}\r
\r
-void owDeviceDS2450::readMemory(uint8_t addr,std::vector<uint8_t> *sp) {\r
+int owDeviceDS2450::readMemory(int page,int start, int count,std::vector<uint8_t> *data) {\r
+ std::vector<uint8_t> cl;\r
+ cl.push_back(0xAA);\r
+ cl.push_back(page*8+start);\r
+ cl.push_back(0x00);\r
+ Communicate(&cl,3,10-start);\r
+ if (owi->log->last()>=OWLOG_WARNING) {\r
+ return 0;\r
+ }\r
+ if (!owi->testCRC16(cl)) {\r
+ for (uint8_t v :cl) printf("%02X ",v);\r
+ printf("\n");\r
+ owi->log->set(OWLOG_ERROR,"CRC ERROR Reading Memory of DS2450");\r
+ return 0;\r
+ }\r
+ data->clear();\r
+ data->insert(data->begin(),cl.begin()+3,cl.end()-2);\r
+ return count;\r
+}\r
+int owDeviceDS2450::writeMemory(int page,int start, int count,std::vector<uint8_t> *data) {\r
+ std::vector<uint8_t> cl;\r
+ cl.push_back(0x55);\r
+ cl.push_back(page*8+start);\r
+ cl.push_back(0x00);\r
+ owi->MatchRom(snum);\r
+ if (owi->log->last()>=OWLOG_WARNING) {\r
+ return 0;\r
+ }\r
+ int i=0;\r
+ for(uint8_t b: (*data)) {\r
+ cl.push_back(b);\r
+ owi->Communicate(&cl,cl.size(),2);\r
+ if (owi->log->last()>=OWLOG_WARNING) {\r
+ return 0;\r
+ }\r
+ if (i>0) {\r
+ if (!owi->testCRC16(cl,i+page*8+start)) {\r
+ owi->log->set(OWLOG_ERROR,"CRC ERROR Writing Memory of DS2450");\r
+ return 0;\r
+ }\r
+ } else {\r
+ if (!owi->testCRC16(cl)) {\r
+ owi->log->set(OWLOG_ERROR,"CRC ERROR Writing Memory of DS2450");\r
+ return 0;\r
+ }\r
+ }\r
+ cl.clear();\r
+ owi->Communicate(&cl, 0, 1);\r
+ if (owi->log->last()>=OWLOG_WARNING) {\r
+ return 0;\r
+ }\r
+ if (cl[0] != b) {\r
+ owi->log->set(OWLOG_ERROR,"ERROR Writing Memory of DS2450");\r
+ return 0;\r
+ }\r
+ cl.clear();\r
+ i++;\r
+ }\r
+ return count;\r
+}\r
+\r
+\r
+void owDeviceDS2450::readMemory_int(uint8_t addr,std::vector<uint8_t> *sp) {\r
std::vector<uint8_t> cl;\r
cl.push_back(0xAA);\r
cl.push_back(addr);\r
sp->insert(sp->begin(),cl.begin()+3,cl.end()-2);\r
}\r
\r
-void owDeviceDS2450::writeMemory(uint8_t addr,std::vector<uint8_t> *sp) {\r
+void owDeviceDS2450::writeMemory_int(uint8_t addr,std::vector<uint8_t> *sp) {\r
std::vector<uint8_t> cl;\r
cl.push_back(0x55);\r
cl.push_back(addr);\r
\r
\r
\r
+void owDeviceDS2408::setDefaultConfig() {\r
+ config->setConfig({0,13, 0,13, 0,13, 0,13, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0});\r
+ configstate=OWDCS_DEFAULT;\r
+}\r
+int owDeviceDS2408::convertAll() {\r
+ std::vector<uint8_t> da;\r
+ /*da.push_back(0x11);\r
+ da.push_back(0x22);\r
+ da.push_back(0x34);\r
+ writeMemory(0,0x8b,3,&da);\r
+ readMemory(0,0x88,10,&da);\r
+ printf("\n____________________________\n");\r
+ readChannelAccess(80,&da);\r
+ owi->log->clear();\r
+ da.clear();\r
+ da.push_back(0x11);\r
+ da.push_back(0x12);\r
+ da.push_back(0x31);\r
+ da.push_back(0x14);\r
+ da.push_back(0x55);\r
+ da.push_back(0x63);\r
+ da.push_back(0x70);\r
+ owi->log->clear();\r
+ \r
+ writeChannelAccess(7,&da);*/\r
+ return 1;\r
+}\r
+int owDeviceDS2408::readMemory(int page,int start, int count,std::vector<uint8_t> *data) {\r
+ std::vector<uint8_t> cl;\r
+ cl.push_back(0xF0);\r
+ cl.push_back(start&0xFF);\r
+ cl.push_back(start>>8);\r
+ if (start>=0x90) {\r
+ owi->log->set(OWLOG_WARNING,"DS2408 reading Register. Address value to hight");\r
+ return 0;\r
+ }\r
+ count=0x90-start;\r
+ \r
+ Communicate(&cl, 3,count+2 );\r
+ for (uint8_t v :cl) printf("%02X ",v);;printf("\n");\r
+ if (!owi->testCRC16(cl)) {\r
+ owi->log->set(OWLOG_ERROR,"CRC ERROR Reading Register of DS2408");\r
+ return 0;\r
+ }\r
+ data->clear();\r
+ data->insert(data->begin(),cl.begin()+3+start,cl.begin()+start+3+count);\r
+ return count;\r
+ \r
+}\r
+\r
+int owDeviceDS2408::writeMemory(int page,int start, int count,std::vector<uint8_t> *data) {\r
+ std::vector<uint8_t> cl;\r
+ cl.push_back(0xCC);\r
+ cl.push_back(start&0xFF);\r
+ cl.push_back(start>>8);\r
+ if ((start<0x8b)&&(start>0x8b)) {\r
+ owi->log->set(OWLOG_WARNING,"DS2408 writing Register. Address value not match 0x8B 0x8C 0x8D");\r
+ return 0;\r
+ }\r
+ if ((142-start)<count)\r
+ count=142-start;\r
+ for(int i=0;i<count;i++) {\r
+ cl.push_back((*data)[i]);\r
+ }\r
+ printf("count: %i\n",count);\r
+ for (uint8_t v :cl) printf("%02X ",v);;printf("\n");\r
+ Communicate(&cl, 3+count,0 );\r
+ \r
+ return count;\r
+}\r
+\r
+\r
+\r
+\r
+int owDeviceDS2408::readChannelAccess(int count,std::vector<uint8_t> *data) {\r
+ std::vector<uint8_t> cl;\r
+ cl.push_back(0xF5);\r
+ Communicate(&cl, 1,34 );\r
+ int read=0;\r
+ for (uint8_t v :cl) printf("%02X ",v);;printf("\n");\r
+ if (!owi->testCRC16(cl)) {\r
+ owi->log->set(OWLOG_ERROR,"CRC ERROR Reading Register of DS2408");\r
+ return 0;\r
+ }\r
+ read=32;\r
+ data->clear();\r
+ data->insert(data->begin(),cl.begin()+1,cl.begin()+33);\r
+\r
+ while (read<count) {\r
+ cl.clear();\r
+ owi->Communicate(&cl,0,34);\r
+ for (uint8_t v :cl) printf("%02X ",v);;printf("\n");\r
+ if (!owi->testCRC16(cl)) {\r
+ owi->log->set(OWLOG_ERROR,"CRC ERROR Reading Register of DS2408");\r
+ return read;\r
+ }\r
+ data->insert(data->begin()+read,cl.begin(),cl.begin()+32);\r
+ read+=32;\r
+\r
+ }\r
+ \r
+\r
+ return read;\r
+}\r
+int owDeviceDS2408::writeChannelAccess(int count, std::vector<uint8_t> *data) {\r
+ std::vector<uint8_t> cl;\r
+ cl.push_back(0x5A);\r
+ Communicate(&cl, 1,0 );\r
+ for(int i=0;i<count;i++) {\r
+ cl.clear();\r
+ uint8_t v=(*data)[i];\r
+ cl.push_back(v);\r
+ cl.push_back(~v);\r
+ owi->Communicate(&cl,2,2);\r
+ for (uint8_t v :cl) printf("%02X ",v);;printf("\n");\r
+ }\r
+ return count;\r
+}\r
+int owDeviceDS2408::resetActivityLatches() {\r
+ return 1;\r
+}\r
+\r
+\r
+\r
+\r
\r
\r