void Output_Thread::Send(QByteArray out_data)//посылка данных { //реализовать добавление 0 после D7 в теле протокола quint8 i,j=3; //--------------------------------------------------- while((out_data.indexOf((char)0xD7,j))!=-1) { i=out_data.indexOf((char)0xD7,j); out_data.insert(i+1,(char)0x0); j=i+1; qDebug() << "D7 DETECTED"; } //--------------------------------------------------- if(port->isOpen()) { data=out_data; qint64 snd=port->write(data.data(),data.size()); qDebug() << "Write is : " << out_data.size() << " bytes"; if(snd==data.size()) { emit Send_OK(true);//передан весь буфер } else { emit Send_OK(false);//передан не весь буфер } } else { emit Send_OK(false);//порт был закрыт } usleep(2000); }
int Dump(void) { int exit = 0; int ret; uint16_t cmd, len; uint32_t addr; char str[30]; unsigned int i; uint8_t* ptr; while(!exit) { // wait for command ret = RecvPacket(&cmd, &len, buf); //if(ret) continue; // pb with ret val // or keypress if(kbhit()) exit = !0; // and process switch(cmd) { case CMD_IS_READY: Send_OK(); break; case CMD_EXIT: Send_EXIT(); exit = !0; break; case CMD_REQ_SIZE: Send_SIZE(ROM_size); sprintf(str, "Size: %lu KB", ROM_size >> 10); DrawStr(0, 60, str, A_REPLACE ); break; case CMD_REQ_BLOCK: addr = ((uint32_t)buf[0] << 0); addr |= ((uint32_t)buf[1] << 8); addr |= ((uint32_t)buf[2] << 16); addr |= ((uint32_t)buf[3] << 24); if(addr > ROM_size) Send_ERR(); #if 0 if(addr >= 0x10000 && addr < 0x12000) // read protected (certificate) addr = 0; if(addr >= 0x18000 && addr < 0x1A000) // read protected (certificate) addr = 0; #endif //sprintf(str, "%02x %02x %02x %02x ", buf[0], buf[1], buf[2], buf[3]); //DrawStr(0, 80, str, A_REPLACE ); sprintf(str, "Done: %lu/%luKB ", addr >> 10, ROM_size >> 10); DrawStr(0, 60, str, A_REPLACE ); // Check for filled blocks (like 0xff) ptr = (uint8_t *)(ROM_base + addr); for(i = 0; i < BLK_SIZE; i++) if(ptr[i] != ptr[0]) break; if(i == BLK_SIZE) Send_RDATA(ptr[0]); else Send_DATA(BLK_SIZE, (uint8_t *)(ROM_base + addr)); break; case CMD_NONE: break; default: break; } } USBLinkClose(); return 0; }