女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙實(shí)戰(zhàn)開發(fā):【分布式軟總線組件】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-15 18:00 ? 次閱讀

簡介

現(xiàn)實(shí)中多設(shè)備間通信方式多種多樣(WIFI、藍(lán)牙等),不同的通信方式使用差異大,導(dǎo)致通信問題多;同時還面臨設(shè)備間通信鏈路的融合共享和沖突無法處理等挑戰(zhàn)。分布式軟總線實(shí)現(xiàn)近場設(shè)備間統(tǒng)一的分布式通信管理能力,提供不區(qū)分鏈路的設(shè)備間發(fā)現(xiàn)連接、組網(wǎng)和傳輸能力,主要功能如下:

  • 發(fā)現(xiàn)連接:提供基于Wifi、藍(lán)牙等通信方式的設(shè)備發(fā)現(xiàn)連接能力。
  • 設(shè)備組網(wǎng):提供統(tǒng)一的設(shè)備組網(wǎng)和拓?fù)涔芾砟芰Γ瑸閿?shù)據(jù)傳輸提供已組網(wǎng)設(shè)備信息。
  • 數(shù)據(jù)傳輸:提供數(shù)據(jù)傳輸通道,支持消息、字節(jié)、流、文件的數(shù)據(jù)傳輸能力。

業(yè)務(wù)方通過使用分布式軟總線提供的API實(shí)現(xiàn)設(shè)備間的高速通信,不用關(guān)心通信細(xì)節(jié),進(jìn)而實(shí)現(xiàn)業(yè)務(wù)平臺的高效部署與運(yùn)行能力。

系統(tǒng)架構(gòu)


圖 1 分布式軟總線組件架構(gòu)圖

約束

  • 組網(wǎng)設(shè)備需在同一局域網(wǎng)中 或者 距離相近的近場設(shè)備間。
  • 組網(wǎng)之前,需先完成設(shè)備綁定,綁定流程參見安全子系統(tǒng)中說明。
  • 傳輸完成數(shù)據(jù)收發(fā)之后,業(yè)務(wù)要主動關(guān)閉會話,釋放資源。

說明

使用說明

須知: 使用跨設(shè)備通信時,必須添加權(quán)限ohos.permission.DISTRIBUTED_DATASYNCohos.permission.DISTRIBUTED_SOFTBUS_CENTER,該權(quán)限類型為 dangerous

設(shè)備主動發(fā)現(xiàn)手機(jī)時,手機(jī)需打開超級終端的允許被“附近設(shè)備”發(fā)現(xiàn)開關(guān)(設(shè)置-超級終端-我的設(shè)備-允許被發(fā)現(xiàn)-附近設(shè)備),才能被設(shè)備發(fā)現(xiàn)。

1、發(fā)現(xiàn)

  • 發(fā)布流程
  1. 上層應(yīng)用需要對外發(fā)布自身能力時,調(diào)用服務(wù)發(fā)布接口發(fā)布自身能力。
    // 發(fā)布回調(diào)
    typedef struct {
        /** Callback for publish result */
        void (*OnPublishResult)(int publishId, PublishResult reason);
    } IPublishCb;
    
    // 發(fā)布服務(wù)
    int32_t PublishLNN(const char *pkgName, const PublishInfo *info, const IPublishCb *cb);
    
  2. 上層應(yīng)用不再需要對外發(fā)布自身能力時,調(diào)用StopPublishLNN接口注銷服務(wù)。
    // 注銷服務(wù)
    int32_t StopPublishLNN(const char *pkgName, int32_t publishId);
    
  • 發(fā)現(xiàn)流程
  1. 上層應(yīng)用需要發(fā)現(xiàn)特定能力設(shè)備時,調(diào)用發(fā)現(xiàn)接口啟動發(fā)現(xiàn)。
    // 發(fā)現(xiàn)回調(diào)
    typedef struct {
        /** Callback that is invoked when a device is found */
        void (*OnDeviceFound)(const DeviceInfo *device);
        /** Callback for a subscription result */
        void (*OnDiscoverResult)(int32_t refreshId, RefreshResult reason);
    } IRefreshCallback;
    
    // 發(fā)現(xiàn)服務(wù)
    int32_t RefreshLNN(const char *pkgName, const SubscribeInfo *info, const IRefreshCallback *cb);
    
  2. 當(dāng)軟總線發(fā)現(xiàn)到設(shè)備時,通過回調(diào)接口通知業(yè)務(wù)所發(fā)現(xiàn)的設(shè)備信息。
  3. 上層應(yīng)用不再需要發(fā)現(xiàn)時,調(diào)用StopRefreshLNN接口停止設(shè)備發(fā)現(xiàn)。
    // 停止發(fā)現(xiàn)
    int32_t StopRefreshLNN(const char *pkgName, int32_t refreshId);
    

2、組網(wǎng)

  1. 發(fā)起組網(wǎng)請求,攜帶組網(wǎng)連接地址信息,并且提供組網(wǎng)執(zhí)行結(jié)果回調(diào)函數(shù)。
    // 組網(wǎng)連接地址
    typedef struct {
        ConnectionAddrType type;
        union {
            struct BrAddr {
                char brMac[BT_MAC_LEN];
            } br;
            struct BleAddr {
                char bleMac[BT_MAC_LEN];
                uint8_t udidHash[UDID_HASH_LEN];
            } ble;
            struct IpAddr {
                char ip[IP_STR_MAX_LEN];
                uint16_t port; 
            } ip;
        } info;
        char peerUid[MAX_ACCOUNT_HASH_LEN];
    } ConnectionAddr;
    
    // 組網(wǎng)連接地址類型
    typedef enum {
        CONNECTION_ADDR_WLAN = 0,
        CONNECTION_ADDR_BR,
        CONNECTION_ADDR_BLE,
        CONNECTION_ADDR_ETH,
        CONNECTION_ADDR_MAX
    } ConnectionAddrType;
    
    // 組網(wǎng)請求執(zhí)行結(jié)果回調(diào)
    typedef void (*OnJoinLNNResult)(ConnectionAddr *addr, const char *networkId, int32_t retCode);
    
    // 發(fā)起組網(wǎng)請求
    int32_t JoinLNN(const char *pkgName, ConnectionAddr *target, OnJoinLNNResult cb);
    
  2. 等待組網(wǎng)結(jié)果,JoinLNN()返回成功表示軟總線接受了組網(wǎng)請求,組網(wǎng)結(jié)果通過回調(diào)函數(shù)通知業(yè)務(wù);組網(wǎng)回調(diào)函數(shù)中addr參數(shù)內(nèi)容和JoinLNN()的入?yún)⒒ハ嗥ヅ洌籸etCode如果為0,表示組網(wǎng)成功,此時networkId為有效值,后續(xù)傳輸、退網(wǎng)等接口均需使用該參數(shù);retCode如果不為0,表示組網(wǎng)失敗,此時networkId為無效值。
  3. 使用傳輸相關(guān)接口進(jìn)行數(shù)據(jù)傳輸。
  4. 發(fā)送退網(wǎng)請求,攜帶組網(wǎng)成功后返回的networkId,并且提供退網(wǎng)執(zhí)行結(jié)果回調(diào)。
    // 退網(wǎng)執(zhí)行結(jié)果回調(diào)
    typedef void (*OnLeaveLNNResult)(const char *networkId, int32_t retCode);
    
    // 退網(wǎng)請求
    int32_t LeaveLNN(const char *pkgName, const char *networkId, OnLeaveLNNResult cb);
    
  5. 等待退網(wǎng)完成,OnLeaveLNNResult()的networkId和退網(wǎng)請求接口中的networkId互相匹配;retCode為0表示退網(wǎng)成功,否則退網(wǎng)失敗。退網(wǎng)成功后,networkId變?yōu)闊o效值,后續(xù)不應(yīng)該被繼續(xù)使用。
  6. 使用節(jié)點(diǎn)(即設(shè)備)注冊和注銷接口,監(jiān)聽網(wǎng)絡(luò)中節(jié)點(diǎn)狀態(tài)變化等事件。
    // 事件掩碼
    #define EVENT_NODE_STATE_ONLINE 0x1
    #define EVENT_NODE_STATE_OFFLINE 0x02
    #define EVENT_NODE_STATE_INFO_CHANGED 0x04
    #define EVENT_NODE_STATUS_CHANGED 0x08
    #define EVENT_NODE_STATE_MASK 0xF
    
    // 節(jié)點(diǎn)信息
    typedef struct {
        char networkId[NETWORK_ID_BUF_LEN];
        char deviceName[DEVICE_NAME_BUF_LEN];
        uint16_t deviceTypeId;
    } NodeBasicInfo;
    
    // 節(jié)點(diǎn)狀態(tài)事件回調(diào)
    typedef struct {
        uint32_t events; // 組網(wǎng)事件掩碼
        void (*onNodeOnline)(NodeBasicInfo *info);   // 節(jié)點(diǎn)上線事件回調(diào)
        void (*onNodeOffline)(NodeBasicInfo *info);  // 節(jié)點(diǎn)下線事件回調(diào)
        void (*onNodeBasicInfoChanged)(NodeBasicInfoType type, NodeBasicInfo *info); // 節(jié)點(diǎn)信息變化事件回調(diào)
        void (*onNodeStatusChanged)(NodeStatusType type, NodeStatus *status); // 設(shè)備運(yùn)行狀態(tài)變化事件回調(diào)
    } INodeStateCb;
    
    //  注冊節(jié)點(diǎn)狀態(tài)事件回調(diào)
    int32_t RegNodeDeviceStateCb(const char *pkgName, INodeStateCb *callback);
    
    // 注銷節(jié)點(diǎn)狀態(tài)事件回調(diào)
    int32_t UnregNodeDeviceStateCb(INodeStateCb *callback);
    

3、傳輸

  1. 創(chuàng)建Socket。
    typedef struct {
        char *name;                 // 本端Socket名稱
        char *peerName;             // 對端Socket名稱
        char *peerNetworkId;        // 對端Socket的網(wǎng)絡(luò)ID
        char *pkgName;              // 調(diào)用者包名
        TransDataType dataType;     // 傳輸?shù)臄?shù)據(jù)類型,需要與發(fā)送方法一致
    } SocketInfo;
    
    // 創(chuàng)建Socket
    int32_t Socket(SocketInfo info);
    
  2. 服務(wù)端啟動監(jiān)聽,客戶端進(jìn)行綁定。
    // Socket回調(diào)函數(shù)
    typedef struct {
        void (*OnBind)(int32_t socket, PeerSocketInfo info);
        void (*OnShutdown)(int32_t socket, ShutdownReason reason);
        void (*OnBytes)(int32_t socket, const void *data, uint32_t dataLen);
        void (*OnMessage)(int32_t socket, const void *data, uint32_t dataLen);
        void (*OnStream)(int32_t socket, const StreamData *data, const StreamData *ext, const StreamFrameInfo *param);
        void (*OnFile)(int32_t socket, FileEvent *event);
        void (*OnQos)(int32_t socket, QoSEvent eventId, const QosTV *qos, uint32_t qosCount);
    } ISocketListener;
    
    typedef enum {
        QOS_TYPE_MIN_BW,            // 最小帶寬
        QOS_TYPE_MAX_LATENCY,       // 最大建鏈時延
        QOS_TYPE_MIN_LATENCY,       // 最小建鏈時延
        QOS_TYPE_MAX_WAIT_TIMEOUT,  // 最大超時時間
        QOS_TYPE_MAX_BUFFER,        // 最大緩存
        QOS_TYPE_FIRST_PACKAGE,     // 首包大小
        QOS_TYPE_MAX_IDLE_TIMEOUT,  // 最大空閑時間
        QOS_TYPE_TRANS_RELIABILITY, // 傳輸可靠性
        QOS_TYPE_BUTT,
    } QosType;
    
    typedef struct {
        QosType qos;
        int32_t value;
    } QosTV;
    
    // 監(jiān)聽Socket,由服務(wù)端開啟。
    int32_t Listen(int32_t socket, const QosTV qos[], uint32_t qosCount, const ISocketListener *listener);
    
    // 綁定Socket,由客戶端開啟。
    int32_t Bind(int32_t socket, const QosTV qos[], uint32_t qosCount, const ISocketListener *listener);
    
  3. 通過Socket向?qū)Χ嗽O(shè)備發(fā)送數(shù)據(jù)。
    // 發(fā)送字節(jié)數(shù)據(jù)
    int32_t SendBytes(int32_t socket, const void *data, uint32_t len);
    // 發(fā)送消息數(shù)據(jù)
    int32_t SendMessage(int32_t socket, const void *data, uint32_t len);
    // 發(fā)送流數(shù)據(jù)# 分布式軟總線組件
    int32_t SendStream(int32_t socket, const StreamData *data, const StreamData *ext, const StreamFrameInfo *param);
    // 發(fā)送文件
    int32_t SendFile(int32_t socket, const char *sFileList[], const char *dFileList[], uint32_t fileCnt);
    
  4. 關(guān)閉Socket。
    // 關(guān)閉Socket
    void Shutdown(int32_t socket);
    

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2952

    瀏覽量

    89369
  • 分布式
    +關(guān)注

    關(guān)注

    1

    文章

    980

    瀏覽量

    75181
  • 鴻蒙
    +關(guān)注

    關(guān)注

    59

    文章

    2526

    瀏覽量

    43788
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用接續(xù)提升內(nèi)容發(fā)布體驗(yàn)

    ?【開發(fā)經(jīng)驗(yàn)分享】鴻蒙應(yīng)用接續(xù)功能實(shí)戰(zhàn):這些隱藏案例助你實(shí)現(xiàn)跨設(shè)備絲滑流轉(zhuǎn)! 各位開發(fā)者小伙伴們好呀~今天在肝項(xiàng)目時意外解鎖了HarmonyOS的一個\"寶藏技能\"——應(yīng)用接續(xù)
    發(fā)表于 06-03 18:25

    鴻蒙5開發(fā)寶藏案例分享---一多開發(fā)實(shí)例(游戲)

    ——鴻蒙用****分布式總線三行代碼搞定設(shè)備發(fā)現(xiàn)! // 核心代碼示例 import distributedDeviceManager from
    發(fā)表于 06-03 18:22

    抗干擾CAN總線通信技術(shù)在分布式電力系統(tǒng)中的應(yīng)用

    摘要 :隨著分布式電力系統(tǒng)的廣泛應(yīng)用,其通信系統(tǒng)的可靠性與穩(wěn)定性受到了前所未有的挑戰(zhàn)。CAN總線通信技術(shù)以其卓越的抗干擾性能和可靠性,在眾多通信技術(shù)中脫穎而出,成為解決分布式電力系統(tǒng)通信問題的關(guān)鍵
    的頭像 發(fā)表于 04-14 18:24 ?199次閱讀

    分布式日志追蹤ID實(shí)戰(zhàn)

    作者:京東物流 張小龍 本文通過介紹分布式應(yīng)用下各個場景的全局日志ID透傳思路,以及介紹分布式日志追蹤ID簡單實(shí)現(xiàn)原理和實(shí)戰(zhàn)效果,從而達(dá)到通過提高日志查詢排查問題的效率。 背景 開發(fā)
    的頭像 發(fā)表于 01-20 10:16 ?583次閱讀

    分布式云化數(shù)據(jù)庫有哪些類型

    分布式云化數(shù)據(jù)庫有哪些類型?分布式云化數(shù)據(jù)庫主要類型包括:關(guān)系型分布式數(shù)據(jù)庫、非關(guān)系型分布式數(shù)據(jù)庫、新SQL分布式數(shù)據(jù)庫、以列方式存儲數(shù)據(jù)、
    的頭像 發(fā)表于 01-15 09:43 ?403次閱讀

    #新年新氣象,大家新年快樂!#AIGC入門及鴻蒙入門

    、配置SDK等。 3. 開發(fā)實(shí)踐**: 學(xué)習(xí)鴻蒙系統(tǒng)的架構(gòu)和API,了解其組件化、分布式等特性。 通過官方文檔和社區(qū)資源,學(xué)習(xí)和掌握鴻蒙應(yīng)用
    發(fā)表于 01-13 10:46

    AIGC入門及鴻蒙入門

    JDK、配置SDK等。 3. 開發(fā)實(shí)踐: 學(xué)習(xí)鴻蒙系統(tǒng)的架構(gòu)和API,了解其組件化、分布式等特性。 通過官方文檔和社區(qū)資源,學(xué)習(xí)和掌握鴻蒙應(yīng)
    發(fā)表于 01-13 10:32

    HarmonyOS Next 應(yīng)用元服務(wù)開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)文件資產(chǎn)遷移

    設(shè)備文件訪問實(shí)現(xiàn)文件的遷移,難以獲取文件同步完成的時間。為了保證更高的成功率,文件的遷移不建議繼續(xù)通過該方式實(shí)現(xiàn),推薦使用分布式數(shù)據(jù)對象攜帶資產(chǎn)的方式。開發(fā)者此前通過跨設(shè)備文件訪問實(shí)現(xiàn)的文件遷移依然生效
    發(fā)表于 12-24 10:11

    HarmonyOS Next 應(yīng)用元服務(wù)開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)權(quán)限與基礎(chǔ)數(shù)據(jù)

    設(shè)備文件訪問實(shí)現(xiàn)文件的遷移,難以獲取文件同步完成的時間。為了保證更高的成功率,文件的遷移不建議繼續(xù)通過該方式實(shí)現(xiàn),推薦使用分布式數(shù)據(jù)對象攜帶資產(chǎn)的方式。開發(fā)者此前通過跨設(shè)備文件訪問實(shí)現(xiàn)的文件遷移依然生效
    發(fā)表于 12-24 09:40

    名單公布!【書籍評測活動NO.53】鴻蒙操作系統(tǒng)設(shè)計(jì)原理與架構(gòu)

    的底層設(shè)計(jì)邏輯出發(fā),針對不同關(guān)鍵子系統(tǒng)的目標(biāo)功能和實(shí)現(xiàn)路徑做實(shí)際分析解讀,幫助開發(fā)者理解鴻蒙操作系統(tǒng)的底層邏輯,開發(fā)更適合系統(tǒng)邏輯的架構(gòu)代碼。 以分布式
    發(fā)表于 12-16 15:10

    分布式光伏監(jiān)控系統(tǒng)在能源領(lǐng)域中的重要性

    在當(dāng)今能源領(lǐng)域,分布式光伏發(fā)電作為一種可持續(xù)的能源解決方案正日益普及。而分布式光伏監(jiān)控系統(tǒng)在其中扮演著至關(guān)重要的角色,為分布式光伏發(fā)電的高效運(yùn)行和管理帶來了諸多顯著好處。 一、提升發(fā)電效率
    的頭像 發(fā)表于 12-09 14:39 ?671次閱讀
    <b class='flag-5'>分布式</b>光伏監(jiān)控系統(tǒng)在能源領(lǐng)域中的重要性

    分布式光伏為企業(yè)帶來哪些便捷!

    光伏開發(fā)試點(diǎn)方案的通知》中指出:“為加快推進(jìn)屋頂分布式光伏發(fā)展,擬在全國組織開展整縣(市、區(qū))推進(jìn)屋頂分布式光伏開發(fā)試點(diǎn)工作”? 一,行業(yè)痛點(diǎn): 1,監(jiān)管困難:
    的頭像 發(fā)表于 11-18 15:34 ?698次閱讀
    <b class='flag-5'>分布式</b>光伏為企業(yè)帶來哪些便捷!

    分布式光纖測溫解決方案

    分布式光纖測溫解決方案
    的頭像 發(fā)表于 11-12 01:02 ?499次閱讀
    <b class='flag-5'>分布式</b>光纖測溫解決方案

    分布式IO模擬量模塊:多領(lǐng)域應(yīng)用的高效能解決方案

    分布式IO模擬量模塊是分布式IO系統(tǒng)中的重要組件,用于實(shí)現(xiàn)現(xiàn)場設(shè)備或過程的模擬量信號的采集、監(jiān)視和控制。該模塊通常與現(xiàn)場總線耦合器配合使用,能夠接收來自現(xiàn)場設(shè)備的模擬量信號(如電流、電
    的頭像 發(fā)表于 10-24 16:30 ?536次閱讀

    鴻蒙開發(fā)管理:ohos.account.distributedAccount 分布式帳號管理

    獲取分布式帳號單實(shí)例對象。
    的頭像 發(fā)表于 07-08 10:03 ?439次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>管理:ohos.account.distributedAccount <b class='flag-5'>分布式</b>帳號管理