diff --git a/lib/gd77.cc b/lib/gd77.cc index 55ce5648..3a23ac2d 100644 --- a/lib/gd77.cc +++ b/lib/gd77.cc @@ -91,15 +91,14 @@ GD77::uploadCallsigns() size_t totb = _callsigns.memSize(); unsigned bcount = 0; - // Then upload callsign DB for (int n=0; n<_callsigns.image(0).numElements(); n++) { unsigned addr = _callsigns.image(0).element(n).address(); unsigned size = _callsigns.image(0).element(n).data().size(); unsigned b0 = addr/BSIZE, nb = size/BSIZE; - RadioddityInterface::MemoryBank bank = ( - (0x10000 > addr) ? RadioddityInterface::MEMBANK_CALLSIGN_LOWER : RadioddityInterface::MEMBANK_CALLSIGN_UPPER ); for (unsigned b=0; bwrite(bank, (b0+b)*BSIZE, + RadioddityInterface::MemoryBank bank = ( + (0x10000 > (b0+b)*BSIZE) ? RadioddityInterface::MEMBANK_CALLSIGN_LOWER : RadioddityInterface::MEMBANK_CALLSIGN_UPPER ); + if (! _dev->write(bank, ((b0+b)*BSIZE)&0xffff, _callsigns.data((b0+b)*BSIZE, 0), BSIZE, _errorStack)) { errMsg(_errorStack) << "Cannot write block " << (b0+b) << "."; @@ -109,6 +108,7 @@ GD77::uploadCallsigns() } } + _dev->write_finish(); return true; } diff --git a/lib/gd77_callsigndb.cc b/lib/gd77_callsigndb.cc index e7522bf2..d8f4f3a1 100644 --- a/lib/gd77_callsigndb.cc +++ b/lib/gd77_callsigndb.cc @@ -7,6 +7,7 @@ #define OFFSET_USERDB 0x00000 #define USERDB_MAX_ENTRIES 10920 +#define USERDB_MAX_ENTRIES_PER_BANK 5460 #define BLOCK_SIZE 32 @@ -103,14 +104,14 @@ GD77CallsignDB::encode(UserDatabase *calldb, const Selection &selection, const E [](const UserDatabase::User &a, const UserDatabase::User &b) { return a.id < b.id; }); // Allocate segment for user db if requested - unsigned size = align_size(sizeof(userdb_t)+n*sizeof(userdb_entry_t), BLOCK_SIZE); + size_t size = align_size(sizeof(userdb_t)+n*sizeof(userdb_entry_t), BLOCK_SIZE); logDebug() << "Allocate 0x" << QString::number(size,16) << " bytes for call-sign DB."; this->image(0).addElement(OFFSET_USERDB, size); // Encode user DB userdb_t *userdb = (userdb_t *)this->data(OFFSET_USERDB); userdb->clear(); userdb->setSize(n); - userdb_entry_t *db = (userdb_entry_t *)this->data(OFFSET_USERDB+sizeof(userdb_t)); + userdb_entry_t *db = (userdb_entry_t *)this->data(OFFSET_USERDB+sizeof(userdb_t), 0); for (unsigned i=0; i