use UserDBentry from findWithName() to writeDMR(), add writeDMREx()

This commit is contained in:
SASANO Takayoshi 2020-03-08 08:06:27 +09:00
parent abf17e19fc
commit 4ff77c50d6
5 changed files with 58 additions and 30 deletions

View file

@ -80,28 +80,27 @@ void CDMRLookup::stop()
wait(); wait();
} }
std::string CDMRLookup::findWithName(unsigned int id) void CDMRLookup::findWithName(unsigned int id, class CUserDBentry *entry)
{ {
std::string callsign; std::string callsign;
if (id == 0xFFFFFFU) if (id == 0xFFFFFFU) {
return std::string("ALL"); entry->clear();
entry->set(keyCALLSIGN, "ALL");
class CUserDBentry entry; return;
if (m_table.lookup(id, &entry)) {
// callsign is always available
callsign = entry.get(keyCALLSIGN);
if (!entry.get(keyFIRST_NAME).empty())
callsign += " " + entry.get(keyFIRST_NAME);
LogDebug("FindWithName =%s",callsign.c_str());
} else {
char text[10U];
::snprintf(text, sizeof(text), "%u", id);
callsign = std::string(text);
} }
return callsign; if (m_table.lookup(id, entry)) {
LogDebug("FindWithName =%s %s", entry->get(keyCALLSIGN).c_str(), entry->get(keyFIRST_NAME).c_str());
} else {
entry->clear();
char text[10U];
::snprintf(text, sizeof(text), "%u", id);
entry->set(keyCALLSIGN, text);
}
return;
} }
std::string CDMRLookup::find(unsigned int id) std::string CDMRLookup::find(unsigned int id)
{ {

View file

@ -20,10 +20,9 @@
#define DMRLookup_H #define DMRLookup_H
#include "Thread.h" #include "Thread.h"
#include "Mutex.h" #include "UserDB.h"
#include <string> #include <string>
#include <unordered_map>
class CDMRLookup : public CThread { class CDMRLookup : public CThread {
public: public:
@ -35,20 +34,17 @@ public:
virtual void entry(); virtual void entry();
std::string find(unsigned int id); std::string find(unsigned int id);
std::string findWithName(unsigned int id); void findWithName(unsigned int id, class CUserDBentry *entry);
bool exists(unsigned int id); bool exists(unsigned int id);
void stop(); void stop();
private: private:
std::string m_filename; std::string m_filename;
unsigned int m_reloadTime; unsigned int m_reloadTime;
std::unordered_map<unsigned int, std::string> m_table; class CUserDB m_table;
CMutex m_mutex; bool m_stop;
bool m_stop;
bool load();
}; };
#endif #endif

View file

@ -1108,7 +1108,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
setShortLC(m_slotNo, dstId, flco, ACTIVITY_VOICE); setShortLC(m_slotNo, dstId, flco, ACTIVITY_VOICE);
std::string src = m_lookup->find(srcId); std::string src = m_lookup->find(srcId);
std::string dst = m_lookup->find(dstId); std::string dst = m_lookup->find(dstId);
std::string cn = m_lookup->findWithName(srcId); class CUserDBentry cn;
m_lookup->findWithName(srcId, &cn);
m_display->writeDMR(m_slotNo, cn, flco == FLCO_GROUP, dst, "N"); m_display->writeDMR(m_slotNo, cn, flco == FLCO_GROUP, dst, "N");
#if defined(DUMP_DMR) #if defined(DUMP_DMR)
@ -1177,7 +1178,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
setShortLC(m_slotNo, dstId, m_netLC->getFLCO(), ACTIVITY_VOICE); setShortLC(m_slotNo, dstId, m_netLC->getFLCO(), ACTIVITY_VOICE);
std::string src = m_lookup->find(srcId); std::string src = m_lookup->find(srcId);
std::string dst = m_lookup->find(dstId); std::string dst = m_lookup->find(dstId);
std::string cn = m_lookup->findWithName(srcId); class CUserDBentry cn;
m_lookup->findWithName(srcId, &cn);
m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO_GROUP, dst, "N"); m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO_GROUP, dst, "N");
@ -1373,7 +1375,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
std::string src = m_lookup->find(srcId); std::string src = m_lookup->find(srcId);
std::string dst = m_lookup->find(dstId); std::string dst = m_lookup->find(dstId);
std::string cn = m_lookup->findWithName(srcId); class CUserDBentry cn;
m_lookup->findWithName(srcId, &cn);
m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO_GROUP, dst, "N"); m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO_GROUP, dst, "N");

View file

@ -151,6 +151,28 @@ void CDisplay::writeDMR(unsigned int slotNo, const std::string& src, bool group,
writeDMRInt(slotNo, src, group, dst, type); writeDMRInt(slotNo, src, group, dst, type);
} }
void CDisplay::writeDMR(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type)
{
assert(type != NULL);
if (slotNo == 1U) {
m_timer1.start();
m_mode1 = MODE_IDLE;
} else {
m_timer2.start();
m_mode2 = MODE_IDLE;
}
if (writeDMRIntEx(slotNo, src, group, dst, type) < 0) {
std::string src_str;
src_str = src.get(keyCALLSIGN);
if (!src.get(keyFIRST_NAME).empty())
src_str += " " + src.get(keyFIRST_NAME);
writeDMRInt(slotNo, src_str, group, dst, type);
}
}
void CDisplay::writeDMRRSSI(unsigned int slotNo, unsigned char rssi) void CDisplay::writeDMRRSSI(unsigned int slotNo, unsigned char rssi)
{ {
if (rssi != 0U) if (rssi != 0U)
@ -386,6 +408,11 @@ void CDisplay::writeDStarBERInt(float ber)
{ {
} }
int CDisplay::writeDMRIntEx(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type)
{
return -1; // not supported
}
void CDisplay::writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi) void CDisplay::writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi)
{ {
} }

View file

@ -20,6 +20,7 @@
#define DISPLAY_H #define DISPLAY_H
#include "Timer.h" #include "Timer.h"
#include "UserDBentry.h"
#include <string> #include <string>
@ -48,6 +49,7 @@ public:
void clearDStar(); void clearDStar();
void writeDMR(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type); void writeDMR(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type);
void writeDMR(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type);
void writeDMRRSSI(unsigned int slotNo, unsigned char rssi); void writeDMRRSSI(unsigned int slotNo, unsigned char rssi);
void writeDMRBER(unsigned int slotNo, float ber); void writeDMRBER(unsigned int slotNo, float ber);
void writeDMRTA(unsigned int slotNo, unsigned char* talkerAlias, const char* type); void writeDMRTA(unsigned int slotNo, unsigned char* talkerAlias, const char* type);
@ -91,6 +93,7 @@ protected:
virtual void clearDStarInt() = 0; virtual void clearDStarInt() = 0;
virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type) = 0; virtual void writeDMRInt(unsigned int slotNo, const std::string& src, bool group, const std::string& dst, const char* type) = 0;
virtual int writeDMRIntEx(unsigned int slotNo, const class CUserDBentry& src, bool group, const std::string& dst, const char* type);
virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi); virtual void writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi);
virtual void writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type); virtual void writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type);
virtual void writeDMRBERInt(unsigned int slotNo, float ber); virtual void writeDMRBERInt(unsigned int slotNo, float ber);