when string passing as parameter(const)

锁定点XXXX
, 本文讨论了当持有某个特定点XXXX时所受到的限制,包括无法修改该内容及无法释放此点。这对于理解特定系统行为及其约束条件非常重要。
It means when you hold the point that point "XXXX", you

* Can not modify the content
* Can not free it
项目创建后有如下错误: AndroidManifest.xml文件的错误: 无法解析符号 '@style/Theme.FloatingSearchApp' READ_EXTERNAL_STORAGE is deprecated (and is not granted) when targeting Android 13+. If you need to query or interact with MediaStore or media files on the shared storage, you should instead use one or more new storage permissions: `READ_MEDIA_IMAGES`, `READ_MEDIA_VIDEO` or `READ_MEDIA_AUDIO`. Redundant label can be removed DatabaseHelper.kt文件的错误: 应为 <database name> 或 <defined table name>,得到 '$' Value must be ≥ 0 but `getColumnIndex` can be -1 Parameter 'question' is never used FloatingWindowService.kt文件的错误: Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout's root element) 'TYPE_PHONE: Int' is deprecated. Deprecated in Java `onTouch` should call `View#performClick` when a click is detected Do not concatenate text displayed with `setText`. Use resource string with placeholders. String literal in `setText` can not be translated. Use Android resources instead. Variable 'answer' is never used Do not concatenate text displayed with `setText`. Use resource string with placeholders. String literal in `setText` can not be translated. Use Android resources instead. MainActivity.kt文件的错误: Unresolved reference: activity_main This declaration overrides deprecated member but not marked as deprecated itself. Please add @Deprecated annotation or suppress. See https://youtrack.jetbrains.com/issue/KT-47902 for details TextRecognizer.kt文件的错误: No value passed for parameter 'options' 'getter for defaultDisplay: Display!' is deprecated. Deprecated in Java 'getMetrics(DisplayMetrics!): Unit' is deprecated. Deprecated in Java Parameter 'context' is never used floating_window.xml文件的错误: Hardcoded string "问题将显示在这里", should use `@string` resource Hardcoded string "答案将显示在这里", should use `@string` resource
06-22
[{ "resource": "/e:/esp32/esp32_spi_slave_transfer_Prj (3)/src/BLE_master.cpp", "owner": "cpp", "severity": 8, "message": "'class NimBLEScan' has no member named 'setAdvertisedDeviceCallbacks'", "startLineNumber": 30, "startColumn": 12, "endLineNumber": 30, "endColumn": 12 },{ "resource": "/e:/esp32/esp32_spi_slave_transfer_Prj (3)/src/BLE_master.cpp", "owner": "cpp", "severity": 8, "message": "'getClientListSize' is not a member of 'NimBLEDevice'", "startLineNumber": 40, "startColumn": 36, "endLineNumber": 40, "endColumn": 36 },{ "resource": "/e:/esp32/esp32_spi_slave_transfer_Prj (3)/src/BLE_master.cpp", "owner": "cpp", "severity": 8, "message": "'getClientByID' is not a member of 'NimBLEDevice'", "startLineNumber": 41, "startColumn": 39, "endLineNumber": 41, "endColumn": 39 },{ "resource": "/e:/esp32/esp32_spi_slave_transfer_Prj (3)/src/BLE_master.cpp", "owner": "cpp", "severity": 8, "message": "'class NimBLERemoteCharacteristic' has no member named 'setNotifyCallback'; did you mean 'm_notifyCallback'?", "startLineNumber": 98, "startColumn": 36, "endLineNumber": 98, "endColumn": 36 },{ "resource": "/e:/esp32/esp32_spi_slave_transfer_Prj (3)/src/BLE_master.cpp", "owner": "cpp", "severity": 8, "message": "no match for 'operator==' (operand types are 'std::__cxx11::string' {aka 'std::__cxx11::basic_string<char>'} and 'String')", "startLineNumber": 127, "startColumn": 36, "endLineNumber": 127, "endColumn": 36 }] [{ "resource": "/e:/esp32/esp32_spi_slave_transfer_Prj (3)/src/BLE_master.h", "owner": "cpp", "severity": 8, "message": "'void BLEMaster::AdvertisedDeviceCallback::onResult(NimBLEAdvertisedDevice)' marked 'override', but does not override", "startLineNumber": 26, "startColumn": 14, "endLineNumber": 26, "endColumn": 14 }] /* * Copyright 2020-2025 Ryan Powell <ryan@nable-embedded.io> and * esp-nimble-cpp, NimBLE-Arduino contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NIMBLE_CPP_DEVICE_H_ #define NIMBLE_CPP_DEVICE_H_ #include "nimconfig.h" #if CONFIG_BT_ENABLED # ifdef ESP_PLATFORM # ifndef CONFIG_IDF_TARGET_ESP32P4 # include <esp_bt.h> # endif # endif # if defined(CONFIG_NIMBLE_CPP_IDF) # include <host/ble_gap.h> # else # include <nimble/nimble/host/include/host/ble_gap.h> # endif /**** FIX COMPILATION ****/ # undef min # undef max /**************************/ # include <string> # include <vector> # if CONFIG_BT_NIMBLE_ROLE_CENTRAL # include <array> class NimBLEClient; # endif # if CONFIG_BT_NIMBLE_ROLE_OBSERVER class NimBLEScan; # endif # if CONFIG_BT_NIMBLE_ROLE_BROADCASTER # if CONFIG_BT_NIMBLE_EXT_ADV class NimBLEExtAdvertising; # else class NimBLEAdvertising; # endif # endif # if CONFIG_BT_NIMBLE_ROLE_PERIPHERAL class NimBLEServer; # if CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM > 0 class NimBLEL2CAPServer; # endif # endif # if CONFIG_BT_NIMBLE_ROLE_PERIPHERAL || CONFIG_BT_NIMBLE_ROLE_CENTRAL class NimBLEConnInfo; # endif class NimBLEAddress; class NimBLEDeviceCallbacks; # define BLEDevice NimBLEDevice # define BLEClient NimBLEClient # define BLERemoteService NimBLERemoteService # define BLERemoteCharacteristic NimBLERemoteCharacteristic # define BLERemoteDescriptor NimBLERemoteDescriptor # define BLEAdvertisedDevice NimBLEAdvertisedDevice # define BLEScan NimBLEScan # define BLEUUID NimBLEUUID # define BLEAddress NimBLEAddress # define BLEUtils NimBLEUtils # define BLEClientCallbacks NimBLEClientCallbacks # define BLEAdvertisedDeviceCallbacks NimBLEScanCallbacks # define BLEScanResults NimBLEScanResults # define BLEServer NimBLEServer # define BLEService NimBLEService # define BLECharacteristic NimBLECharacteristic # define BLEAdvertising NimBLEAdvertising # define BLEServerCallbacks NimBLEServerCallbacks # define BLECharacteristicCallbacks NimBLECharacteristicCallbacks # define BLEAdvertisementData NimBLEAdvertisementData # define BLEDescriptor NimBLEDescriptor # define BLE2904 NimBLE2904 # define BLEDescriptorCallbacks NimBLEDescriptorCallbacks # define BLEBeacon NimBLEBeacon # define BLEEddystoneTLM NimBLEEddystoneTLM # define BLEEddystoneURL NimBLEEddystoneURL # define BLEConnInfo NimBLEConnInfo # define BLEL2CAPServer NimBLEL2CAPServer # define BLEL2CAPService NimBLEL2CAPService # define BLEL2CAPServiceCallbacks NimBLEL2CAPServiceCallbacks # define BLEL2CAPClient NimBLEL2CAPClient # define BLEL2CAPClientCallbacks NimBLEL2CAPClientCallbacks # define BLEL2CAPChannel NimBLEL2CAPChannel # define BLEL2CAPChannelCallbacks NimBLEL2CAPChannelCallbacks # ifdef CONFIG_BT_NIMBLE_MAX_CONNECTIONS # define NIMBLE_MAX_CONNECTIONS CONFIG_BT_NIMBLE_MAX_CONNECTIONS # else # define NIMBLE_MAX_CONNECTIONS CONFIG_NIMBLE_MAX_CONNECTIONS # endif enum class NimBLETxPowerType { All = 0, Advertise = 1, Scan = 2, Connection = 3 }; typedef int (*gap_event_handler)(ble_gap_event* event, void* arg); /** * @brief A model of a BLE Device from which all the BLE roles are created. */ class NimBLEDevice { public: static bool init(const std::string& deviceName); static bool deinit(bool clearAll = false); static bool setDeviceName(const std::string& deviceName); static bool isInitialized(); static NimBLEAddress getAddress(); static std::string toString(); static bool whiteListAdd(const NimBLEAddress& address); static bool whiteListRemove(const NimBLEAddress& address); static bool onWhiteList(const NimBLEAddress& address); static size_t getWhiteListCount(); static NimBLEAddress getWhiteListAddress(size_t index); static bool setOwnAddrType(uint8_t type); static bool setOwnAddr(const NimBLEAddress& addr); static bool setOwnAddr(const uint8_t* addr); static void setDeviceCallbacks(NimBLEDeviceCallbacks* cb); static void setScanDuplicateCacheSize(uint16_t cacheSize); static void setScanFilterMode(uint8_t type); static void setScanDuplicateCacheResetTime(uint16_t time); static bool setCustomGapHandler(gap_event_handler handler); static void setSecurityAuth(bool bonding, bool mitm, bool sc); static void setSecurityAuth(uint8_t auth); static void setSecurityIOCap(uint8_t iocap); static void setSecurityInitKey(uint8_t initKey); static void setSecurityRespKey(uint8_t respKey); static void setSecurityPasskey(uint32_t passKey); static uint32_t getSecurityPasskey(); static bool startSecurity(uint16_t connHandle, int* rcPtr = nullptr); static bool setMTU(uint16_t mtu); static uint16_t getMTU(); static void onReset(int reason); static void onSync(void); static void host_task(void* param); static int getPower(NimBLETxPowerType type = NimBLETxPowerType::All); static bool setPower(int8_t dbm, NimBLETxPowerType type = NimBLETxPowerType::All); static bool setDefaultPhy(uint8_t txPhyMask, uint8_t rxPhyMask); # ifdef ESP_PLATFORM # ifndef CONFIG_IDF_TARGET_ESP32P4 static esp_power_level_t getPowerLevel(esp_ble_power_type_t powerType = ESP_BLE_PWR_TYPE_DEFAULT); static bool setPowerLevel(esp_power_level_t powerLevel, esp_ble_power_type_t powerType = ESP_BLE_PWR_TYPE_DEFAULT); # endif # endif # if CONFIG_BT_NIMBLE_ROLE_OBSERVER static NimBLEScan* getScan(); # endif # if CONFIG_BT_NIMBLE_ROLE_PERIPHERAL static NimBLEServer* createServer(); static NimBLEServer* getServer(); # if CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM > 0 static NimBLEL2CAPServer* createL2CAPServer(); static NimBLEL2CAPServer* getL2CAPServer(); # endif # endif # if CONFIG_BT_NIMBLE_ROLE_PERIPHERAL || CONFIG_BT_NIMBLE_ROLE_CENTRAL static bool injectConfirmPasskey(const NimBLEConnInfo& peerInfo, bool accept); static bool injectPassKey(const NimBLEConnInfo& peerInfo, uint32_t pin); # endif # if CONFIG_BT_NIMBLE_ROLE_BROADCASTER # if CONFIG_BT_NIMBLE_EXT_ADV static NimBLEExtAdvertising* getAdvertising(); static bool startAdvertising(uint8_t instId, int duration = 0, int maxEvents = 0); static bool stopAdvertising(uint8_t instId); static bool stopAdvertising(); # endif # if !CONFIG_BT_NIMBLE_EXT_ADV || defined(_DOXYGEN_) static NimBLEAdvertising* getAdvertising(); static bool startAdvertising(uint32_t duration = 0); static bool stopAdvertising(); # endif # endif # if CONFIG_BT_NIMBLE_ROLE_CENTRAL static NimBLEClient* createClient(); static NimBLEClient* createClient(const NimBLEAddress& peerAddress); static bool deleteClient(NimBLEClient* pClient); static NimBLEClient* getClientByHandle(uint16_t connHandle); static NimBLEClient* getClientByPeerAddress(const NimBLEAddress& peerAddress); static NimBLEClient* getDisconnectedClient(); static size_t getCreatedClientCount(); static std::vector<NimBLEClient*> getConnectedClients(); # endif # if CONFIG_BT_NIMBLE_ROLE_CENTRAL || CONFIG_BT_NIMBLE_ROLE_PERIPHERAL static bool deleteBond(const NimBLEAddress& address); static int getNumBonds(); static bool isBonded(const NimBLEAddress& address); static bool deleteAllBonds(); static NimBLEAddress getBondedAddress(int index); # endif private: static bool m_synced; static bool m_initialized; static uint32_t m_passkey; static ble_gap_event_listener m_listener; static uint8_t m_ownAddrType; static std::vector<NimBLEAddress> m_whiteList; static NimBLEDeviceCallbacks* m_pDeviceCallbacks; static NimBLEDeviceCallbacks defaultDeviceCallbacks; # if CONFIG_BT_NIMBLE_ROLE_OBSERVER static NimBLEScan* m_pScan; # endif # if CONFIG_BT_NIMBLE_ROLE_PERIPHERAL static NimBLEServer* m_pServer; # if CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM > 0 static NimBLEL2CAPServer* m_pL2CAPServer; # endif # endif # if CONFIG_BT_NIMBLE_ROLE_BROADCASTER # if CONFIG_BT_NIMBLE_EXT_ADV static NimBLEExtAdvertising* m_bleAdvertising; # else static NimBLEAdvertising* m_bleAdvertising; # endif # endif # if CONFIG_BT_NIMBLE_ROLE_CENTRAL static std::array<NimBLEClient*, NIMBLE_MAX_CONNECTIONS> m_pClients; # endif # ifdef ESP_PLATFORM # if CONFIG_BTDM_BLE_SCAN_DUPL || CONFIG_BT_LE_SCAN_DUPL static uint16_t m_scanDuplicateSize; static uint8_t m_scanFilterMode; static uint16_t m_scanDuplicateResetTime; # endif # endif # if CONFIG_BT_NIMBLE_ROLE_CENTRAL friend class NimBLEClient; # endif # if CONFIG_BT_NIMBLE_ROLE_OBSERVER friend class NimBLEScan; # endif # if CONFIG_BT_NIMBLE_ROLE_PERIPHERAL friend class NimBLEServer; friend class NimBLECharacteristic; # endif # if CONFIG_BT_NIMBLE_ROLE_BROADCASTER friend class NimBLEAdvertising; # if CONFIG_BT_NIMBLE_EXT_ADV friend class NimBLEExtAdvertising; friend class NimBLEExtAdvertisement; # endif # endif }; # if CONFIG_BT_NIMBLE_ROLE_CENTRAL # include "NimBLEClient.h" # include "NimBLERemoteService.h" # include "NimBLERemoteCharacteristic.h" # include "NimBLERemoteDescriptor.h" # endif # if CONFIG_BT_NIMBLE_ROLE_OBSERVER # include "NimBLEScan.h" # endif # if CONFIG_BT_NIMBLE_ROLE_PERIPHERAL # include "NimBLEServer.h" # include "NimBLEService.h" # include "NimBLECharacteristic.h" # include "NimBLEDescriptor.h" # if CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM # include "NimBLEL2CAPServer.h" # include "NimBLEL2CAPChannel.h" # endif # endif # if CONFIG_BT_NIMBLE_ROLE_BROADCASTER # if CONFIG_BT_NIMBLE_EXT_ADV # include "NimBLEExtAdvertising.h" # else # include "NimBLEAdvertising.h" # endif # endif # if CONFIG_BT_NIMBLE_ROLE_CENTRAL || CONFIG_BT_NIMBLE_ROLE_PERIPHERAL # include "NimBLEConnInfo.h" # endif # include "NimBLEAddress.h" # include "NimBLEUtils.h" /** * @brief Callbacks associated with a BLE device. */ class NimBLEDeviceCallbacks { public: virtual ~NimBLEDeviceCallbacks() {}; /** * @brief Indicates an inability to perform a store operation. * This callback should do one of two things: * -Address the problem and return 0, indicating that the store operation * should proceed. * -Return nonzero to indicate that the store operation should be aborted. * @param event Describes the store event being reported. * BLE_STORE_EVENT_FULL; or * BLE_STORE_EVENT_OVERFLOW * @return 0 if the store operation should proceed; * nonzero if the store operation should be aborted. */ virtual int onStoreStatus(struct ble_store_status_event* event, void* arg); }; #endif // CONFIG_BT_ENABLED #endif // NIMBLE_CPP_DEVICE_H_ /* * Copyright 2020-2025 Ryan Powell <ryan@nable-embedded.io> and * esp-nimble-cpp, NimBLE-Arduino contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NIMBLE_CPP_SCAN_H_ #define NIMBLE_CPP_SCAN_H_ #include "nimconfig.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_OBSERVER # include "NimBLEAdvertisedDevice.h" # include "NimBLEUtils.h" # if defined(CONFIG_NIMBLE_CPP_IDF) # include "host/ble_gap.h" # else # include "nimble/nimble/host/include/host/ble_gap.h" # endif # include <vector> class NimBLEDevice; class NimBLEScan; class NimBLEAdvertisedDevice; class NimBLEScanCallbacks; class NimBLEAddress; /** * @brief A class that contains and operates on the results of a BLE scan. * @details When a scan completes, we have a set of found devices. Each device is described * by a NimBLEAdvertisedDevice object. The number of items in the set is given by * getCount(). We can retrieve a device by calling getDevice() passing in the * index (starting at 0) of the desired device. */ class NimBLEScanResults { public: void dump() const; int getCount() const; const NimBLEAdvertisedDevice* getDevice(uint32_t idx) const; const NimBLEAdvertisedDevice* getDevice(const NimBLEAddress& address) const; std::vector<NimBLEAdvertisedDevice*>::const_iterator begin() const; std::vector<NimBLEAdvertisedDevice*>::const_iterator end() const; private: friend NimBLEScan; std::vector<NimBLEAdvertisedDevice*> m_deviceVec; }; /** * @brief Perform and manage %BLE scans. * * Scanning is associated with a %BLE client that is attempting to locate BLE servers. */ class NimBLEScan { public: bool start(uint32_t duration, bool isContinue = false, bool restart = true); bool isScanning(); void setScanCallbacks(NimBLEScanCallbacks* pScanCallbacks, bool wantDuplicates = false); void setActiveScan(bool active); void setInterval(uint16_t intervalMs); void setWindow(uint16_t windowMs); void setDuplicateFilter(uint8_t enabled); void setLimitedOnly(bool enabled); void setFilterPolicy(uint8_t filter); bool stop(); void clearResults(); NimBLEScanResults getResults(); NimBLEScanResults getResults(uint32_t duration, bool is_continue = false); void setMaxResults(uint8_t maxResults); void erase(const NimBLEAddress& address); void erase(const NimBLEAdvertisedDevice* device); # if CONFIG_BT_NIMBLE_EXT_ADV enum Phy { SCAN_1M = 0x01, SCAN_CODED = 0x02, SCAN_ALL = 0x03 }; void setPhy(Phy phyMask); void setPeriod(uint32_t periodMs); # endif private: friend class NimBLEDevice; NimBLEScan(); ~NimBLEScan(); static int handleGapEvent(ble_gap_event* event, void* arg); void onHostSync(); NimBLEScanCallbacks* m_pScanCallbacks; ble_gap_disc_params m_scanParams; NimBLEScanResults m_scanResults; NimBLETaskData* m_pTaskData; uint8_t m_maxResults; # if CONFIG_BT_NIMBLE_EXT_ADV uint8_t m_phy{SCAN_ALL}; uint16_t m_period{0}; # endif }; /** * @brief A callback handler for callbacks associated device scanning. */ class NimBLEScanCallbacks { public: virtual ~NimBLEScanCallbacks() {} /** * @brief Called when a new device is discovered, before the scan result is received (if applicable). * @param [in] advertisedDevice The device which was discovered. */ virtual void onDiscovered(const NimBLEAdvertisedDevice* advertisedDevice); /** * @brief Called when a new scan result is complete, including scan response data (if applicable). * @param [in] advertisedDevice The device for which the complete result is available. */ virtual void onResult(const NimBLEAdvertisedDevice* advertisedDevice); /** * @brief Called when a scan operation ends. * @param [in] scanResults The results of the scan that ended. * @param [in] reason The reason code for why the scan ended. */ virtual void onScanEnd(const NimBLEScanResults& scanResults, int reason); }; #endif // CONFIG_BT_ENABLED CONFIG_BT_NIMBLE_ROLE_OBSERVER #endif // NIMBLE_CPP_SCAN_H_ /* * Copyright 2020-2025 Ryan Powell <ryan@nable-embedded.io> and * esp-nimble-cpp, NimBLE-Arduino contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NIMBLE_CPP_ADVERTISED_DEVICE_H_ #define NIMBLE_CPP_ADVERTISED_DEVICE_H_ #include "nimconfig.h" #if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_OBSERVER # include "NimBLEAddress.h" # include "NimBLEScan.h" # include "NimBLEUUID.h" # if defined(CONFIG_NIMBLE_CPP_IDF) # include "host/ble_hs_adv.h" # include "host/ble_gap.h" # else # include "nimble/nimble/host/include/host/ble_hs_adv.h" # include "nimble/nimble/host/include/host/ble_gap.h" # endif # include <vector> class NimBLEScan; /** * @brief A representation of a %BLE advertised device found by a scan. * * When we perform a %BLE scan, the result will be a set of devices that are advertising. This * class provides a model of a detected device. */ class NimBLEAdvertisedDevice { public: NimBLEAdvertisedDevice() = default; uint8_t getAdvType() const; uint8_t getAdvFlags() const; uint16_t getAppearance() const; uint16_t getAdvInterval() const; uint16_t getMinInterval() const; uint16_t getMaxInterval() const; uint8_t getManufacturerDataCount() const; const NimBLEAddress& getAddress() const; std::string getManufacturerData(uint8_t index = 0) const; std::string getURI() const; std::string getPayloadByType(uint16_t type, uint8_t index = 0) const; std::string getName() const; int8_t getRSSI() const; NimBLEScan* getScan() const; uint8_t getServiceDataCount() const; std::string getServiceData(uint8_t index = 0) const; std::string getServiceData(const NimBLEUUID& uuid) const; NimBLEUUID getServiceDataUUID(uint8_t index = 0) const; NimBLEUUID getServiceUUID(uint8_t index = 0) const; uint8_t getServiceUUIDCount() const; NimBLEAddress getTargetAddress(uint8_t index = 0) const; uint8_t getTargetAddressCount() const; int8_t getTXPower() const; uint16_t getAdvLength() const; uint8_t getAddressType() const; bool isAdvertisingService(const NimBLEUUID& uuid) const; bool haveAppearance() const; bool haveManufacturerData() const; bool haveName() const; bool haveServiceData() const; bool haveServiceUUID() const; bool haveTXPower() const; bool haveConnParams() const; bool haveAdvInterval() const; bool haveTargetAddress() const; bool haveURI() const; bool haveType(uint16_t type) const; std::string toString() const; bool isConnectable() const; bool isScannable() const; bool isLegacyAdvertisement() const; # if CONFIG_BT_NIMBLE_EXT_ADV uint8_t getSetId() const; uint8_t getPrimaryPhy() const; uint8_t getSecondaryPhy() const; uint16_t getPeriodicInterval() const; uint8_t getDataStatus() const; # endif operator NimBLEAddress() const; const std::vector<uint8_t>& getPayload() const; const std::vector<uint8_t>::const_iterator begin() const; const std::vector<uint8_t>::const_iterator end() const; /** * @brief A template to convert the service data to <type\>. * @tparam T The type to convert the data to. * @param [in] skipSizeCheck If true it will skip checking if the data size is less than <tt>sizeof(<type\>)</tt>. * @return The data converted to <type\> or NULL if skipSizeCheck is false and the data is * less than <tt>sizeof(<type\>)</tt>. * @details <b>Use:</b> <tt>getManufacturerData<type>(skipSizeCheck);</tt> */ template <typename T> T getManufacturerData(bool skipSizeCheck = false) const { std::string data = getManufacturerData(); if (!skipSizeCheck && data.size() < sizeof(T)) return T(); const char* pData = data.data(); return *((T*)pData); } /** * @brief A template to convert the service data to <tt><type\></tt>. * @tparam T The type to convert the data to. * @param [in] index The vector index of the service data requested. * @param [in] skipSizeCheck If true it will skip checking if the data size is less than <tt>sizeof(<type\>)</tt>. * @return The data converted to <type\> or NULL if skipSizeCheck is false and the data is * less than <tt>sizeof(<type\>)</tt>. * @details <b>Use:</b> <tt>getServiceData<type>(skipSizeCheck);</tt> */ template <typename T> T getServiceData(uint8_t index = 0, bool skipSizeCheck = false) const { std::string data = getServiceData(index); if (!skipSizeCheck && data.size() < sizeof(T)) return T(); const char* pData = data.data(); return *((T*)pData); } /** * @brief A template to convert the service data to <tt><type\></tt>. * @tparam T The type to convert the data to. * @param [in] uuid The uuid of the service data requested. * @param [in] skipSizeCheck If true it will skip checking if the data size is less than <tt>sizeof(<type\>)</tt>. * @return The data converted to <type\> or NULL if skipSizeCheck is false and the data is * less than <tt>sizeof(<type\>)</tt>. * @details <b>Use:</b> <tt>getServiceData<type>(skipSizeCheck);</tt> */ template <typename T> T getServiceData(const NimBLEUUID& uuid, bool skipSizeCheck = false) const { std::string data = getServiceData(uuid); if (!skipSizeCheck && data.size() < sizeof(T)) return T(); const char* pData = data.data(); return *((T*)pData); } private: friend class NimBLEScan; NimBLEAdvertisedDevice(const ble_gap_event* event, uint8_t eventType); void update(const ble_gap_event* event, uint8_t eventType); uint8_t findAdvField(uint8_t type, uint8_t index = 0, size_t* data_loc = nullptr) const; size_t findServiceData(uint8_t index, uint8_t* bytes) const; NimBLEAddress m_address{}; uint8_t m_advType{}; int8_t m_rssi{}; uint8_t m_callbackSent{}; uint16_t m_advLength{}; # if CONFIG_BT_NIMBLE_EXT_ADV bool m_isLegacyAdv{}; uint8_t m_dataStatus{}; uint8_t m_sid{}; uint8_t m_primPhy{}; uint8_t m_secPhy{}; uint16_t m_periodicItvl{}; # endif std::vector<uint8_t> m_payload; }; #endif /* CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_OBSERVER */ #endif /* NIMBLE_CPP_ADVERTISED_DEVICE_H_ */
10-14
#include "ros/ros.h" #include "std_msgs/String.h" #include <sstream> /** * This tutorial demonstrates simple sending of messages over the ROS system. */ int main(int argc, char **argv) { /** * The ros::init() function needs to see argc and argv so that it can perform * any ROS arguments and name remapping that were provided at the command line. For programmatic * remappings you can use a different version of init() which takes remappings * directly, but for most command-line programs, passing argc and argv is the easiest * way to do it. The third argument to init() is the name of the node. * * You must call one of the versions of ros::init() before using any other * part of the ROS system. */ ros::init(argc, argv, "talker"); /** * NodeHandle is the main access point to communications with the ROS system. * The first NodeHandle constructed will fully initialize this node, and the last * NodeHandle destructed will close down the node. */ ros::NodeHandle n; /** * The advertise() function is how you tell ROS that you want to * publish on a given topic name. This invokes a call to the ROS * master node, which keeps a registry of who is publishing and who * is subscribing. After this advertise() call is made, the master * node will notify anyone who is trying to subscribe to this topic name, * and they will in turn negotiate a peer-to-peer connection with this * node. advertise() returns a Publisher object which allows you to * publish messages on that topic through a call to publish(). Once * all copies of the returned Publisher object are destroyed, the topic * will be automatically unadvertised. * * The second parameter to advertise() is the size of the message queue * used for publishing messages. If messages are published more quickly * than we can send them, the number here specifies how many messages to * buffer up before throwing some away. */ ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); ros::Rate loop_rate(10); /** * A count of how many messages we have sent. This is used to create * a unique string for each message. */ int count = 0; while (ros::ok()) { /** * This is a message object. You stuff it with data, and then publish it. */ std_msgs::String msg; std::stringstream ss; ss << "hello world " << count; msg.data = ss.str(); ROS_INFO("%s", msg.data.c_str()); /** * The publish() function is how you send messages. The parameter * is the message object. The type of this object must agree with the type * given as a template parameter to the advertise<>() call, as was done * in the constructor above. */ chatter_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; } #include "ros/ros.h" #include "std_msgs/String.h" /** * This tutorial demonstrates simple receipt of messages over the ROS system. */ void chatterCallback(const std_msgs::String::ConstPtr& msg) { ROS_INFO("I heard: [%s]", msg->data.c_str()); } int main(int argc, char **argv) { /** * The ros::init() function needs to see argc and argv so that it can perform * any ROS arguments and name remapping that were provided at the command line. For programmatic * remappings you can use a different version of init() which takes remappings * directly, but for most command-line programs, passing argc and argv is the easiest * way to do it. The third argument to init() is the name of the node. * * You must call one of the versions of ros::init() before using any other * part of the ROS system. */ ros::init(argc, argv, "listener"); /** * NodeHandle is the main access point to communications with the ROS system. * The first NodeHandle constructed will fully initialize this node, and the last * NodeHandle destructed will close down the node. */ ros::NodeHandle n; /** * The subscribe() call is how you tell ROS that you want to receive messages * on a given topic. This invokes a call to the ROS * master node, which keeps a registry of who is publishing and who * is subscribing. Messages are passed to a callback function, here * called chatterCallback. subscribe() returns a Subscriber object that you * must hold on to until you want to unsubscribe. When all copies of the Subscriber * object go out of scope, this callback will automatically be unsubscribed from * this topic. * * The second parameter to the subscribe() function is the size of the message * queue. If messages are arriving faster than they are being processed, this * is the number of messages that will be buffered up before beginning to throw * away the oldest ones. */ ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback); /** * ros::spin() will enter a loop, pumping callbacks. With this version, all * callbacks will be called from within this thread (the main one). ros::spin() * will exit when Ctrl-C is pressed, or the node is shutdown by the master. */ ros::spin(); return 0; }更改为三个节点形成消息的循环传递
最新发布
10-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值