日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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)⒒ハ嗥ヅ?;retCode如果為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

    文章

    3063

    瀏覽量

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

    關(guān)注

    1

    文章

    1115

    瀏覽量

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

    關(guān)注

    60

    文章

    3041

    瀏覽量

    46227
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    AI Ceph 分布式存儲教程資料大模型學(xué)習(xí)資料2026

    往往成為瓶頸。 AI 分布式存儲實(shí)戰(zhàn)的首要科技突破,在于摒棄了傳統(tǒng)的層級目錄結(jié)構(gòu),轉(zhuǎn)向扁平化的對象存儲與鍵值存儲架構(gòu)。通過去除元數(shù)據(jù)節(jié)點(diǎn)的中心化瓶頸,采用哈希環(huán)或一致性哈希算法進(jìn)行數(shù)據(jù)尋址,實(shí)現(xiàn)了數(shù)據(jù)
    發(fā)表于 05-01 17:35

    2022全新版!Java分布式架構(gòu)設(shè)計(jì)與開發(fā)實(shí)戰(zhàn)(完結(jié))

    2022全新版!Java分布式架構(gòu)設(shè)計(jì)與開發(fā)實(shí)戰(zhàn)(完結(jié)) 分庫分表實(shí)戰(zhàn):Java海量數(shù)據(jù)存儲架構(gòu)設(shè)計(jì) 在現(xiàn)代互聯(lián)網(wǎng)應(yīng)用中,隨著業(yè)務(wù)規(guī)模的指數(shù)級增長,數(shù)據(jù)庫性能瓶頸已成為制約系統(tǒng)發(fā)展的
    發(fā)表于 03-30 15:20

    M4-R1 開源鴻蒙(OpenHarmory)開發(fā)板丨串口調(diào)試助手實(shí)戰(zhàn)案例

    前言開源鴻蒙(OpenHarmony)作為國產(chǎn)分布式操作系統(tǒng),正在為智能終端與物聯(lián)網(wǎng)設(shè)備構(gòu)建統(tǒng)一的開放生態(tài)。它以開源共建的方式,為多設(shè)備協(xié)同與產(chǎn)業(yè)創(chuàng)新提供堅(jiān)實(shí)基礎(chǔ)。M4-R1開發(fā)板憑借完善的軟硬件
    的頭像 發(fā)表于 12-31 11:16 ?9327次閱讀
    M4-R1 開源<b class='flag-5'>鴻蒙</b>(OpenHarmory)<b class='flag-5'>開發(fā)</b>板丨串口調(diào)試助手<b class='flag-5'>實(shí)戰(zhàn)</b>案例

    分布式 IO 選型注意事項(xiàng)

    定義? 分布式IO是一種脫離傳統(tǒng)集中式 IO 柜,將輸入 / 輸出模塊分散部署在工業(yè)現(xiàn)場設(shè)備附近,通過工業(yè)總線(如 Profinet、EtherNet/IP、Modbus TCP 等)與 PLC、MES 等控制系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)交互的工業(yè)控制設(shè)備。其核心架構(gòu)由 “主站 +
    的頭像 發(fā)表于 12-30 14:14 ?577次閱讀
    <b class='flag-5'>分布式</b> IO 選型注意事項(xiàng)

    SC-3568HA:解鎖鴻蒙全權(quán)限API與分布式能力的工業(yè)控制平臺

    傳統(tǒng)嵌入式開發(fā)面臨硬件碎片化、高權(quán)限功能缺失、分布式協(xié)同復(fù)雜及自動化測試不足等痛點(diǎn)。SC-3568HA開發(fā)板基于鴻蒙系統(tǒng),通過統(tǒng)一內(nèi)核抽象層和硬件驅(qū)動框架解決兼容問題,開放全量系統(tǒng)AP
    的頭像 發(fā)表于 12-18 11:27 ?7675次閱讀
    SC-3568HA:解鎖<b class='flag-5'>鴻蒙</b>全權(quán)限API與<b class='flag-5'>分布式</b>能力的工業(yè)控制平臺

    一個面向單片機(jī)、事件驅(qū)動的嵌入式開發(fā)平臺介紹

    為核心,打造一個統(tǒng)一的嵌入技術(shù)生態(tài),為廣大企業(yè)用戶和嵌入式開發(fā)者們,提供搞可靠性的、高性能的、現(xiàn)代且高開發(fā)效率的嵌入式開發(fā)環(huán)境。 EventOS的主要特性列舉如下: 1、事件
    發(fā)表于 12-05 06:26

    蜻蜓FM開源“SmartXPlayer”音頻播放組件,打造鴻蒙多端音頻播放新引擎

    近日,由蜻蜓FM研發(fā)的音頻播放組件“SmartXPlayer”正式開源并上線 OpenHarmony 三方庫中心倉。作為一款專為鴻蒙多端場景打造的音頻播放引擎,SmartXPlayer基于鴻蒙系統(tǒng)
    的頭像 發(fā)表于 07-21 16:31 ?798次閱讀
    蜻蜓FM開源“SmartXPlayer”音頻播放<b class='flag-5'>組件</b>,打造<b class='flag-5'>鴻蒙</b>多端音頻播放新引擎

    分布式光伏總出問題?安科瑞分布式光伏監(jiān)控系統(tǒng)來“救場”

    一、分布式光伏的痛點(diǎn)大揭秘 在 “雙碳” 目標(biāo)的大力推動下,分布式光伏作為綠色能源領(lǐng)域的重要力量,正以前所未有的速度蓬勃發(fā)展,越來越多的企業(yè)和家庭選擇安裝分布式光伏系統(tǒng)。然而,隨著分布式
    的頭像 發(fā)表于 07-16 16:50 ?994次閱讀
    <b class='flag-5'>分布式</b>光伏總出問題?安科瑞<b class='flag-5'>分布式</b>光伏監(jiān)控系統(tǒng)來“救場”

    【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐

    【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:20 ?1175次閱讀
    【HarmonyOS 5】金融應(yīng)用<b class='flag-5'>開發(fā)</b><b class='flag-5'>鴻蒙</b><b class='flag-5'>組件</b>實(shí)踐

    開鴻開發(fā)板深度體驗(yàn):從開源鴻蒙開發(fā)到AI場景實(shí)踐

    的KaihongBoard-3588S-SBC和KaihongBoard-3576-SBC被評為“2025OpenHarmony明星開發(fā)板”,可實(shí)現(xiàn)設(shè)備快速開源鴻蒙化升級、分布式互聯(lián)協(xié)同、彈性部署等能力。
    的頭像 發(fā)表于 07-03 17:03 ?2056次閱讀
    開鴻<b class='flag-5'>開發(fā)</b>板深度體驗(yàn):從開源<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>到AI場景實(shí)踐

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

    各位開發(fā)者小伙伴們好呀!今天咱們來點(diǎn)硬核干貨!最近在鴻蒙文檔中心挖到一座“金礦”——官方竟然暗藏了100+實(shí)戰(zhàn)案例,從分布式架構(gòu)到交互動效優(yōu)化應(yīng)有盡有!這些案例不僅藏著華為工程師的私房
    的頭像 發(fā)表于 06-30 11:54 ?886次閱讀

    鴻蒙5開發(fā)寶藏案例分享---Swiper組件性能優(yōu)化實(shí)戰(zhàn)

    鴻蒙寶藏:Swiper組件性能優(yōu)化實(shí)戰(zhàn),告別卡頓丟幀! 大家好!最近在鴻蒙開發(fā)時,偶然發(fā)現(xiàn)了官方文檔里埋藏的 性能優(yōu)化寶藏案例 ,尤其是&l
    發(fā)表于 06-12 17:53

    鴻蒙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

    開源鴻蒙開發(fā)新體驗(yàn),開鴻Bot系列今日開啟預(yù)售!

    ,也是一臺輕辦公開源鴻蒙PC。憑借“新交互、新智能、新生態(tài)、新安全”四大顯著特性,滿足用戶基礎(chǔ)的輕辦公智慧場景。   ●新交互:基于KaihongOS分布式總線能力,只需一鍵即可輕
    發(fā)表于 05-16 14:13
    高碑店市| 台东县| 东方市| 常熟市| 兴宁市| 平和县| 丹寨县| 东港市| 阳泉市| 台中县| 舞钢市| 修文县| 方正县| 井冈山市| 千阳县| 澄江县| 黎平县| 阿克苏市| 彰化市| 遵义县| 当阳市| 安西县| 桂阳县| 柏乡县| 嘉定区| 白玉县| 新建县| 巢湖市| 若羌县| 瓮安县| 阳高县| 万宁市| 曲水县| 邮箱| 永城市| 额敏县| 六盘水市| 恩平市| 和林格尔县| 应城市| 巴林左旗|