Change to read up to 256 bytes.
authorWalter Fetter Lages <w.fetter@ieee.org>
Thu, 31 May 2018 21:02:48 +0000 (18:02 -0300)
committerWalter Fetter Lages <w.fetter@ieee.org>
Thu, 31 May 2018 21:02:48 +0000 (18:02 -0300)
lib/st25_i2c.cpp
st25_i2c_read/st25_i2c_read.cpp

index 8caa5d8..d48761a 100644 (file)
@@ -78,6 +78,8 @@ St25I2c::~St25I2c(void)
 
 size_t St25I2c::read(uint16_t addr,void *buf,size_t count)
 {
+        if(count > 256) throw SizeError();
+
         bool savedFtm=false;
         if(addr >= FTM_MAILBOX && addr < FTM_MAILBOX+256) savedFtm=setFtm(true);
                 
@@ -94,6 +96,7 @@ size_t St25I2c::read(uint16_t addr,void *buf,size_t count)
 
 size_t St25I2c::read(void *buf,size_t count)
 {
+        if(count > 256) throw SizeError();
 
         size_t c;
         if((c=::read(fd_,buf,count)) < 0) throw ReadError(errno);
index 047a78e..39d7706 100644 (file)
 
 int main(int argc,char *argv[])
 {
-        if(argc != 2)
+        if(argc != 3)
         {
             std::cout << argv[0]
                 << "Read from ST25 user memory, dynamic configuration registers or FTM mailbox."
                 << std::endl;
-            std::cout << "\tUsage: " << argv[0] << " address" << std::endl;
+            std::cout << "\tUsage: " << argv[0] << " address count" << std::endl;
             return -1;
         }
         
         St25I2c st25I2c;
-        
-        unsigned char data;
 
         uint16_t addr=strtol(argv[1],NULL,0);
-            
-        st25I2c.read(addr,&data,sizeof data);
+        size_t count=strtol(argv[2],NULL,0);
+   
+        unsigned char *data=new unsigned char[count];                 
+        
+        st25I2c.read(addr,data,count);
 
-        std::cout << "0x" << std::hex << std::setw(2) << std::setfill('0')
-            << static_cast<unsigned>(data) << std::endl;
+        for(size_t i=0;i < count;i++) std::cout 
+            << "0x" << std::hex << std::setw(2) << std::setfill('0')
+            << static_cast<unsigned>(data[i]) << " ";
+        
+        delete[] data;
+            
+        std::cout << std::endl;
 
         return 0;
 }