Annotation of nono/vm/event.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2018 [email protected]
                      4: //
                      5: 
                      6: #pragma once
                      7: 
                      8: #include "device.h"
                      9: #include <list>
                     10: #include <vector>
                     11: 
                     12: // ユーザ定義リテラルを使ったサフィックス
                     13: 
                     14: // マイクロ秒
                     15: static inline uint64 operator"" _usec(unsigned long long us)
                     16: {
                     17:        return us * 1000;
                     18: }
                     19: static inline uint64 operator"" _usec(long double us)
                     20: {
                     21:        return us * 1000;
                     22: }
                     23: 
                     24: // ミリ秒
                     25: static inline uint64 operator"" _msec(unsigned long long ms)
                     26: {
                     27:        return ms * 1000_usec;
                     28: }
                     29: static inline uint64 operator"" _msec(long double ms)
                     30: {
                     31:        return ms * 1000_usec;
                     32: }
                     33: 
                     34: // 秒
                     35: static inline uint64 operator"" _sec(unsigned long long sec)
                     36: {
                     37:        return sec * 1000_msec;
                     38: }
                     39: static inline uint64 operator"" _sec(long double sec)
                     40: {
                     41:        return sec * 1000_msec;
                     42: }
                     43: 
                     44: // コールバック関数の型
                     45: typedef void (Device::*DeviceCallback_t)(int);
                     46: 
                     47: // イベント
                     48: //
                     49: // イベントは必要なデバイスごとに用意する。おそらく最初から個数が決まって
                     50: // いることが多いはずなので、デバイスクラス内のメンバ変数(実体) として
                     51: // 宣言し、デバイスのコンストラクタ等で初期化するという流れになるはず。
                     52: class Event
                     53: {
                     54:  public:
                     55:        Event();
                     56:        virtual ~Event();
                     57: 
                     58:        // 以下はイベントを呼び出す側がセットする
                     59: 
                     60:        // イベントを起こすまでの期間 [nsec]
                     61:        // 例えば今から 1msec 後にイベントを起こしたい場合は 1000000 となる。
                     62:        // ここは MPU クロックサイクルではなく仮想時間で指定する。
                     63:        uint64 time = 0;
                     64: 
                     65:        Device *dev = NULL;                             // デバイス
                     66:        DeviceCallback_t func = NULL;   // コールバック関数
                     67:        int code = 0;                                   // コールバック関数への引数
                     68:        std::string name {};                    // イベント名(表示用) 最大15文字
                     69: 
                     70:        // スケジューラが内部で使う
                     71:        bool active = false;                    // スケジューラにセットされていれば真
                     72:        uint64 cycle = 0;                               // イベントを起こす仮想サイクル
                     73: };
                     74: 
                     75: // 全イベントの配列 (scheduler.h にある有効イベントリストとは違うので注意)
                     76: extern std::vector<Event *> gEvents;

unix.superglobalmegacorp.com

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