Annotation of nono/host/hostdevice.h, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2021 nono project
        !             4: // Licensed under nono-license.txt
        !             5: //
        !             6: 
        !             7: //
        !             8: // ホストデバイス (基本クラス)
        !             9: //
        !            10: 
        !            11: #pragma once
        !            12: 
        !            13: #include "thread.h"
        !            14: #include "autofd.h"
        !            15: #include "kevent.h"
        !            16: 
        !            17: using DeviceCallback_t = void (Device::*)();
        !            18: #define ToDeviceCallback(f) static_cast<DeviceCallback_t>(f)
        !            19: 
        !            20: class HostDevice : public ThreadDevice
        !            21: {
        !            22:        using inherited = ThreadDevice;
        !            23: 
        !            24:  public:
        !            25:        static const int DONE                           = 0;    // 処理終了
        !            26:        static const int DATA_FROM_VM           = 1;    // VM からの着信
        !            27:        static const int DATA_FROM_OUTER        = 2;    // 外部からの着信
        !            28:        static const int LISTEN_SOCKET          = 3;    // 待受ソケット着信
        !            29:        static const int DATA_FROM_SIGNAL       = 4;    // シグナル受信
        !            30: 
        !            31:  protected:
        !            32:        HostDevice(const std::string& objname_);
        !            33:  public:
        !            34:        virtual ~HostDevice() override;
        !            35: 
        !            36:        bool Init() override;
        !            37: 
        !            38:        void Terminate() override;
        !            39: 
        !            40:        // 設定ファイルキーのプレフィックス ("hostcomX-" とか) を返す
        !            41:        std::string GetConfigKey() const;
        !            42: 
        !            43:        // NetDriver からのディスクリプタの登録
        !            44:        int AddOuter(int fd);
        !            45:        int DelOuter(int fd);
        !            46:        int AddSignal(int rfd, int wfd);
        !            47:        int AddListen(int ls, int action);
        !            48: 
        !            49:        void SetCallbackDevice(Device *);
        !            50:        void SetRxCallback(DeviceCallback_t func);
        !            51:        void SetAcceptCallback(DeviceCallback_t func);
        !            52: 
        !            53:  protected:
        !            54:        void ThreadRun() override;
        !            55: 
        !            56:        virtual void Dispatch(int udata);
        !            57: 
        !            58:        // ドライバから読み込み。キューに投入したデータ数を返す。
        !            59:        virtual int Read() = 0;
        !            60: 
        !            61:        // ドライバに書き出し。
        !            62:        virtual void Write(uint32 data) = 0;
        !            63: 
        !            64:        bool WritePipe(uint32 data);
        !            65: 
        !            66:        // ログ出力
        !            67:        void putlogn(const char *fmt, ...) const override __printflike(2, 3);
        !            68: 
        !            69:        autofd kq {};
        !            70: 
        !            71:        // VM からの送信用パイプ
        !            72:        autofd rpipe {};
        !            73:        autofd wpipe {};
        !            74: 
        !            75:        // 各種通知コールバック
        !            76:        Device *dev {};
        !            77:        DeviceCallback_t rx_func {};
        !            78:        DeviceCallback_t accept_func {};
        !            79: 
        !            80:        // スレッド終了フラグ
        !            81:        bool exit_requested {};
        !            82: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.