Annotation of nono/host/hostdevice.h, revision 1.1.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.