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);
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);
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;
}