Memory access for DS2423
[owTools.git] / src / owDevice.cpp
index e710102..bdb54a9 100755 (executable)
@@ -231,8 +231,8 @@ int owDeviceDS18B20::readScratchpad(std::vector<uint8_t> *sp) {
 
 int owDeviceDS18B20::convertAll() {
        std::vector<uint8_t> sp;
-       sp.push_back(0x44);
-       Communicate(&sp, 1, 0);
+       //sp.push_back(0x44);
+       //communicate(&sp, 1, 0); ///########################################################
        usleep(750000);
 
        if (readScratchpad(&sp)) {
@@ -375,8 +375,8 @@ inline int16_t ow_fconvert(uint8_t b1, uint16_t b2) {
 int owDeviceDS2438::convertAll() {
        for(int k=0;k<owi->maxrepeat;k++)  {
                std::vector<uint8_t> sp;
-               sp.push_back(0x44);
-               Communicate(&sp, 1, 0);
+               //sp.push_back(0x44);
+               //Communicate(&sp, 1, 0);///########################################################
                if (owi->log->last()>=OWLOG_ERROR) continue;
                usleep(100000);
                if (setConfigByte(0x08)<=0) continue;
@@ -457,6 +457,8 @@ void owDeviceDS2450::readMemory(uint8_t addr,std::vector<uint8_t> *sp) {
                return;
        }
        if (!owi->testCRC16(cl)) {
+               for (uint8_t v :cl) printf("%02X ",v);
+               printf("\n");
                owi->log->set(OWLOG_ERROR,"CRC ERROR Reading Memory of DS2450");
                return;
        }
@@ -503,6 +505,8 @@ void owDeviceDS2450::convert(uint8_t mask, uint8_t preset) {
        cl.push_back(preset);
        Communicate(&cl, 3, 2);
        if (!owi->testCRC16(cl)) {
+               for (uint8_t v :cl) printf("%02X ",v);
+               printf("\n");
                owi->log->set(OWLOG_ERROR,"CRC ERROR Convert Command of DS2450");
                return;
        }
@@ -558,6 +562,45 @@ uint32_t owDeviceDS2423::readCounter(uint8_t page) {
 }
 
 
+int owDeviceDS2423::readMemory(int page,int start, int count,std::vector<uint8_t> *data){
+       std::vector<uint8_t> cl;
+       cl.push_back(0xF0);
+       uint16_t adr=page<<5;
+       cl.push_back(adr&0xFF);
+       cl.push_back((adr>>8)&0xFF);
+       Communicate(&cl, 3, 32);
+       //No CRC 
+       data->clear();
+       data->insert(data->begin(),cl.begin()+3+start,cl.begin()+start+3+count);
+       return count;   
+
+}
+int owDeviceDS2423::writeMemory(int page,int start, int count,std::vector<uint8_t> *data) {
+       std::vector<uint8_t> cl;
+       cl.push_back(0x0F);
+       uint16_t adr=(page<<5)+start;
+       cl.push_back(adr&0xFF);
+       cl.push_back(adr>>8);
+       for(int i=0;i<count;i++) {
+               cl.push_back((*data)[i]);
+       }
+       Communicate(&cl, 3+count, 0);
+       for (uint8_t v :cl) printf("%02X ",v);printf("\n");
+       cl.clear();
+       cl.push_back(0xAA);
+       Communicate(&cl, 1, 36);
+       //for (uint8_t v :cl) printf("%02X ",v);;printf("\n");
+       cl[0]=0x5A;
+       Communicate(&cl, 4, 1);
+       usleep(100000);
+       if (cl[4]!=0xAA) {
+               for (uint8_t v :cl) printf("%02X ",v);;printf("\n");
+               owi->log->set(OWLOG_ERROR,"DS2423 Copy from Scratchpad to Memmory Error");
+               //return 0;
+       }
+       return count;
+}
+