diff options
-rw-r--r-- | gnss/GnssAdapter.cpp | 3 | ||||
-rw-r--r-- | location/LocationDataTypes.h | 13 | ||||
-rw-r--r-- | utils/LocIpc.cpp | 101 | ||||
-rw-r--r-- | utils/LocIpc.h | 5 | ||||
-rw-r--r-- | utils/gps_extended_c.h | 3 | ||||
-rw-r--r-- | utils/loc_cfg.cpp | 3 |
6 files changed, 97 insertions, 31 deletions
diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp index c50eeb9..a2a507a 100644 --- a/gnss/GnssAdapter.cpp +++ b/gnss/GnssAdapter.cpp @@ -3322,6 +3322,9 @@ GnssAdapter::reportSv(GnssSvNotification& svNotify) case GNSS_SIGNAL_BEIDOU_B2AI: svUsedIdMask = mGnssMbSvIdUsedInPosition.bds_b2ai_sv_used_ids_mask; break; + case GNSS_SIGNAL_BEIDOU_B2AQ: + svUsedIdMask = mGnssMbSvIdUsedInPosition.bds_b2aq_sv_used_ids_mask; + break; } } else { svUsedIdMask = mGnssSvIdUsedInPosition.bds_sv_used_ids_mask; diff --git a/location/LocationDataTypes.h b/location/LocationDataTypes.h index d6abda2..406a75c 100644 --- a/location/LocationDataTypes.h +++ b/location/LocationDataTypes.h @@ -583,7 +583,9 @@ typedef enum { /** SBAS L1 RF Band */ GNSS_SIGNAL_SBAS_L1 = (1<<17), /** NAVIC L5 RF Band */ - GNSS_SIGNAL_NAVIC_L5 = (1<<18) + GNSS_SIGNAL_NAVIC_L5 = (1<<18), + /** BEIDOU B2A_Q RF Band */ + GNSS_SIGNAL_BEIDOU_B2AQ = (1<<19) } GnssSignalTypeBits; #define GNSS_SIGNAL_TYPE_MASK_ALL\ @@ -593,7 +595,7 @@ typedef enum { GNSS_SIGNAL_BEIDOU_B1I | GNSS_SIGNAL_BEIDOU_B1C | GNSS_SIGNAL_BEIDOU_B2I|\ GNSS_SIGNAL_BEIDOU_B2AI | GNSS_SIGNAL_QZSS_L1CA | GNSS_SIGNAL_QZSS_L1S |\ GNSS_SIGNAL_QZSS_L2| GNSS_SIGNAL_QZSS_L5 | GNSS_SIGNAL_SBAS_L1 |\ - GNSS_SIGNAL_NAVIC_L5) + GNSS_SIGNAL_NAVIC_L5) | GNSS_SIGNAL_BEIDOU_B2AQ typedef enum { @@ -635,7 +637,8 @@ typedef enum { GNSS_LOC_SIGNAL_TYPE_QZSS_L5_Q = 16, /**< QZSS L5_Q RF Band */ GNSS_LOC_SIGNAL_TYPE_SBAS_L1_CA = 17, /**< SBAS L1_CA RF Band */ GNSS_LOC_SIGNAL_TYPE_NAVIC_L5 = 18, /**< NAVIC L5 RF Band */ - GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES = 19 /**< Maximum number of signal types */ + GNSS_LOC_SIGNAL_TYPE_BEIDOU_B2A_Q = 19, /**< BEIDOU B2A_Q RF Band */ + GNSS_LOC_MAX_NUMBER_OF_SIGNAL_TYPES = 20 /**< Maximum number of signal types */ } Gnss_LocSignalEnumType; typedef uint64_t GnssDataMask; @@ -938,7 +941,8 @@ typedef struct { } GnssSystemTime; typedef struct { - uint32_t size; // set to sizeof(GnssLocationInfo) + uint32_t size; // set to sizeof(GnssLocationInfo) + Location location; // basic locaiton info, latitude, longitude, and etc GnssLocationInfoFlagMask flags; // bitwise OR of GnssLocationInfoBits for param validity float altitudeMeanSeaLevel; // altitude wrt mean sea level float pdop; // position dilusion of precision @@ -971,7 +975,6 @@ typedef struct { GnssMeasUsageInfo measUsageInfo[GNSS_SV_MAX]; // GNSS Measurement Usage info uint8_t leapSeconds; // leap second float timeUncMs; // Time uncertainty in milliseconds - Location location; } GnssLocationInfoNotification; typedef struct { diff --git a/utils/LocIpc.cpp b/utils/LocIpc.cpp index 646d2d4..e857817 100644 --- a/utils/LocIpc.cpp +++ b/utils/LocIpc.cpp @@ -164,7 +164,8 @@ public: umask(0157); if (mSock->isValid() && ::bind(mSock->mSid, (struct sockaddr*)&mAddr, sizeof(mAddr)) < 0) { - LOC_LOGe("bind socket error. sock fd: %d, reason: %s", mSock->mSid, strerror(errno)); + LOC_LOGe("bind socket error. sock fd: %d: %s, reason: %s", mSock->mSid, + mAddr.sun_path, strerror(errno)); mSock->close(); } } @@ -177,26 +178,22 @@ public: } }; -class LocIpcInetTcpSender : public LocIpcSender { +class LocIpcInetSender : public LocIpcSender { protected: + int mSockType; shared_ptr<Sock> mSock; const string mName; sockaddr_in mAddr; - mutable bool mFirstTime; inline virtual bool isOperable() const override { return mSock != nullptr && mSock->isValid(); } - inline virtual ssize_t send(const uint8_t data[], uint32_t length, int32_t /* msgId */) const { - if (mFirstTime) { - mFirstTime = false; - ::connect(mSock->mSid, (const struct sockaddr*)&mAddr, sizeof(mAddr)); - } + virtual ssize_t send(const uint8_t data[], uint32_t length, int32_t /* msgId */) const { return mSock->send(data, length, 0, (struct sockaddr*)&mAddr, sizeof(mAddr)); } public: - inline LocIpcInetTcpSender(const char* name, int32_t port) : LocIpcSender(), - mSock(make_shared<Sock>((nullptr == name) ? -1 : (::socket(AF_INET, SOCK_STREAM, 0)))), + inline LocIpcInetSender(const char* name, int32_t port, int sockType) : LocIpcSender(), + mSockType(sockType), + mSock(make_shared<Sock>((nullptr == name) ? -1 : (::socket(AF_INET, mSockType, 0)))), mName((nullptr == name) ? "" : name), - mAddr({.sin_family=AF_INET, .sin_port=htons(port), .sin_addr={htonl(INADDR_ANY)}}), - mFirstTime(true) { + mAddr({.sin_family=AF_INET, .sin_port=htons(port), .sin_addr={htonl(INADDR_ANY)}}) { if (mSock != nullptr && mSock->isValid() && nullptr != name) { struct hostent* hp = gethostbyname(name); if (nullptr != hp) { @@ -206,7 +203,47 @@ public: } }; -class LocIpcInetTcpRecver : public LocIpcInetTcpSender, public LocIpcRecver { +class LocIpcInetTcpSender : public LocIpcInetSender { +protected: + mutable bool mFirstTime; + + virtual ssize_t send(const uint8_t data[], uint32_t length, int32_t /* msgId */) const { + if (mFirstTime) { + mFirstTime = false; + ::connect(mSock->mSid, (const struct sockaddr*)&mAddr, sizeof(mAddr)); + } + return mSock->send(data, length, 0, (struct sockaddr*)&mAddr, sizeof(mAddr)); + } + +public: + inline LocIpcInetTcpSender(const char* name, int32_t port) : + LocIpcInetSender(name, port, SOCK_STREAM), + mFirstTime(true) {} +}; + +class LocIpcInetRecver : public LocIpcInetSender, public LocIpcRecver { +protected: + virtual ssize_t recv() const = 0; +public: + inline LocIpcInetRecver(const shared_ptr<ILocIpcListener>& listener, const char* name, + int32_t port, int sockType) : + LocIpcInetSender(name, port, sockType), LocIpcRecver(listener, *this) { + if (mSock->isValid() && ::bind(mSock->mSid, (struct sockaddr*)&mAddr, sizeof(mAddr)) < 0) { + LOC_LOGe("bind socket error. sock fd: %d, reason: %s", mSock->mSid, strerror(errno)); + mSock->close(); + } + } + inline virtual ~LocIpcInetRecver() {} + inline virtual const char* getName() const override { return mName.data(); }; + inline virtual void abort() const override { + if (isSendable()) { + mSock->sendAbort(0, (struct sockaddr*)&mAddr, sizeof(mAddr)); + } + } + +}; + +class LocIpcInetTcpRecver : public LocIpcInetRecver { mutable int32_t mConnFd; protected: inline virtual ssize_t recv() const override { @@ -223,21 +260,26 @@ protected: public: inline LocIpcInetTcpRecver(const shared_ptr<ILocIpcListener>& listener, const char* name, int32_t port) : - LocIpcInetTcpSender(name, port), LocIpcRecver(listener, *this), mConnFd(-1) { - if (mSock->isValid() && ::bind(mSock->mSid, (struct sockaddr*)&mAddr, sizeof(mAddr)) < 0) { - LOC_LOGe("bind socket error. sock fd: %d, reason: %s", mSock->mSid, strerror(errno)); - mSock->close(); - } - } - inline virtual ~LocIpcInetTcpRecver() { if (-1 != mConnFd) ::close(mConnFd); } - inline virtual const char* getName() const override { return mName.data(); }; - inline virtual void abort() const override { - if (isSendable()) { - mSock->sendAbort(0, (struct sockaddr*)&mAddr, sizeof(mAddr)); - } + LocIpcInetRecver(listener, name, port, SOCK_STREAM), mConnFd(-1) {} + inline virtual ~LocIpcInetTcpRecver() { if (-1 != mConnFd) ::close(mConnFd);} +}; + +class LocIpcInetUdpRecver : public LocIpcInetRecver { +protected: + inline virtual ssize_t recv() const override { + socklen_t size = sizeof(mAddr); + return mSock->recv(mDataCb, 0, (struct sockaddr*)&mAddr, &size); } +public: + inline LocIpcInetUdpRecver(const shared_ptr<ILocIpcListener>& listener, const char* name, + int32_t port) : + LocIpcInetRecver(listener, name, port, SOCK_DGRAM) {} + + inline virtual ~LocIpcInetUdpRecver() {} }; + + #ifdef NOT_DEFINED class LocIpcQcsiSender : public LocIpcSender { protected: @@ -365,9 +407,16 @@ shared_ptr<LocIpcSender> LocIpc::getLocIpcInetTcpSender(const char* serverName, return make_shared<LocIpcInetTcpSender>(serverName, port); } unique_ptr<LocIpcRecver> LocIpc::getLocIpcInetTcpRecver(const shared_ptr<ILocIpcListener>& listener, - const char* serverName, int32_t port) { + const char* serverName, int32_t port) { return make_unique<LocIpcInetTcpRecver>(listener, serverName, port); } +shared_ptr<LocIpcSender> LocIpc::getLocIpcInetUdpSender(const char* serverName, int32_t port) { + return make_shared<LocIpcInetSender>(serverName, port, SOCK_DGRAM); +} +unique_ptr<LocIpcRecver> LocIpc::getLocIpcInetUdpRecver(const shared_ptr<ILocIpcListener>& listener, + const char* serverName, int32_t port) { + return make_unique<LocIpcInetUdpRecver>(listener, serverName, port); +} pair<shared_ptr<LocIpcSender>, unique_ptr<LocIpcRecver>> LocIpc::getLocIpcQmiLocServiceSenderRecverPair(const shared_ptr<ILocIpcListener>& listener, int instance) { typedef pair<shared_ptr<LocIpcSender>, unique_ptr<LocIpcRecver>> (*creator_t)(const shared_ptr<ILocIpcListener>&, int); diff --git a/utils/LocIpc.h b/utils/LocIpc.h index b91966c..42fbff3 100644 --- a/utils/LocIpc.h +++ b/utils/LocIpc.h @@ -67,6 +67,8 @@ public: static shared_ptr<LocIpcSender> getLocIpcLocalSender(const char* localSockName); static shared_ptr<LocIpcSender> + getLocIpcInetUdpSender(const char* serverName, int32_t port); + static shared_ptr<LocIpcSender> getLocIpcInetTcpSender(const char* serverName, int32_t port); static shared_ptr<LocIpcSender> getLocIpcQrtrSender(int service, int instance); @@ -75,6 +77,9 @@ public: getLocIpcLocalRecver(const shared_ptr<ILocIpcListener>& listener, const char* localSockName); static unique_ptr<LocIpcRecver> + getLocIpcInetUdpRecver(const shared_ptr<ILocIpcListener>& listener, + const char* serverName, int32_t port); + static unique_ptr<LocIpcRecver> getLocIpcInetTcpRecver(const shared_ptr<ILocIpcListener>& listener, const char* serverName, int32_t port); static unique_ptr<LocIpcRecver> diff --git a/utils/gps_extended_c.h b/utils/gps_extended_c.h index 9c63166..1ccfc46 100644 --- a/utils/gps_extended_c.h +++ b/utils/gps_extended_c.h @@ -497,6 +497,7 @@ typedef struct { uint64_t qzss_l2_sv_used_ids_mask; // QZSS L2 uint64_t qzss_l5_sv_used_ids_mask; // QZSS L5 uint64_t sbas_l1_sv_used_ids_mask; // SBAS L1 + uint64_t bds_b2aq_sv_used_ids_mask; // BDS B2AQ } GnssSvMbUsedInPosition; /* Body Frame parameters */ @@ -605,6 +606,8 @@ typedef uint32_t GnssSignalTypeMask; #define GNSS_SIGNAL_SBAS_L1 ((GnssSignalTypeMask)0x00020000ul) /** NAVIC L5 RF Band */ #define GNSS_SIGNAL_NAVIC_L5 ((GnssSignalTypeMask)0x00040000ul) +/** BEIDOU B2A_Q RF Band */ +#define GNSS_SIGNAL_BEIDOU_B2AQ ((GnssSignalTypeMask)0x00080000ul) typedef uint16_t GnssMeasUsageStatusBitMask; /** Used in fix */ diff --git a/utils/loc_cfg.cpp b/utils/loc_cfg.cpp index de887ee..55e4804 100644 --- a/utils/loc_cfg.cpp +++ b/utils/loc_cfg.cpp @@ -622,6 +622,9 @@ int loc_read_process_conf(const char* conf_file_name, uint32_t * process_count_p LOC_LOGD("%s:%d]: Setting SAP to mode: BASIC", __func__, __LINE__); loc_service_mask |= LOC_FEATURE_MASK_SAP_BASIC; } + else if(strcmp(conf.feature_sap, "MODEM_DEFAULT") == 0) { + LOC_LOGD("%s:%d]: Setting SAP to mode: MODEM_DEFAULT", __func__, __LINE__); + } else if(strcmp(conf.feature_sap, "DISABLED") == 0) { LOC_LOGD("%s:%d]: Setting SAP to mode: DISABLED", __func__, __LINE__); } |