+ if ((s=getArg("x"))!="") {
+ std::vector<uint8_t> v;
+ int sp=0;
+ std::string ts="";
+ for ( std::string::iterator it = s.begin() ; it < s.end(); it++ ,sp++) {
+ if (isxdigit(*it)) {
+ char c=(*it);
+ ts.append(1,c);
+ if (ts.length()>=2) {
+ v.push_back(strtoul(ts.c_str(),NULL, 16));
+ ts="";
+ }
+ }
+ }
+ if (ts.length()!=0) {
+ v.push_back(strtoul(ts.c_str(),NULL, 16));
+ }
+ printf("Send ");
+ for (uint8_t val :v) printf("%02X ",val);
+ printf(" to selected Device\n");
+ int sel=selectDevice();
+ if (sel==0) exit(0);
+ sel-=1;
+ owDevice* dev=owi->devices[sel];
+ dev->Communicate(&v,v.size(),0);
+ for (uint8_t val :v) printf("%02X ",val);
+ printf("\n");
+ exit(0);
+
+
+ }
+
+ //------------------------------------------------------------------------------------------
+ // --------------------- Memory functions
+ //------------------------------------------------------------------------------------------
+
+ if ((s=getArg("m"))!="") {
+ int pnr=0;
+ std::vector<uint8_t> mem;
+ if(s.find("read")!=std::string::npos) {
+ size_t cla=s.find_first_of("(",0);
+ size_t page=s.find_first_of("p=",cla);
+ size_t epage=s.find_first_of(";",page);
+ if (epage==std::string::npos) epage=s.find_first_of(")",page);
+ std::string pn=s.substr(page+2,epage-page-2);
+ printf("%s Read Memory Page %s of Device:\n",s.c_str(),pn.c_str());
+ pnr=atoi(pn.c_str());
+
+ } else
+ if(s.find("write")!=std::string::npos) {
+ size_t cla=s.find("(",0);
+ size_t page=s.find("p=",cla);
+ size_t epage=s.find(";",page);
+ if (epage==std::string::npos) epage=s.find_first_of(")",page);
+ std::string pn=s.substr(page+2,epage-page-2);
+ size_t data=s.find("d=",cla);
+ size_t edata=s.find(";",data);
+ if (edata==std::string::npos) edata=s.find(")",data);
+ std::string pd=s.substr(data+2,edata-data-2);
+ std::istringstream pdss(pd);
+ //std::cout << pd <<std::endl;
+ while (!pdss.eof()) {
+ int v;
+ pdss>>std::hex>>v;
+ mem.push_back(v);
+ }
+ printf("Write ");
+ for(uint8_t v :mem) printf("%02X ",v);
+ printf("to Memory Page %s of Device:\n",pn.c_str());
+ pnr=atoi(pn.c_str());
+
+ } else exit(1);
+ int sel=selectDevice();
+ if (sel==0) exit(0);
+ sel-=1;
+ //snum_t snum=owi->devices[sel]->getNum();
+ owDevice* dev=owi->devices[sel];
+ if(s.find("read")!=std::string::npos) {
+ int r=dev->readMemory(pnr,0,dev->getPageSize(),&mem);
+ for(int i=0;i<r;i++) printf("%02X ",mem[i]);
+ printf("\n");
+ exit(0);
+ } else
+ if(s.find("write")!=std::string::npos) {
+ int r=dev->writeMemory(pnr,0,dev->getPageSize(),&mem);
+ r=dev->readMemory(pnr,0,dev->getPageSize(),&mem);
+ for(int i=0;i<r;i++) printf("%02X ",mem[i]);
+ printf("\n");
+ exit(0);
+ }
+ }