• 显示设备初始化 ```c DisplayInit() / main函数中调用 / FBInit() / dispmanager中调用底层FB模块的初始化函数 /
      1. RegisterDispOpr(&g_tFBOpr) /* FB模块中调用dispmanager中提供的注册函数 */

    / 注册的结构体 / / 抽象 / typedef struct DispOpr { char name; //属性成员, 初始指定名字 int iXres; //属性成员, 在相应的初始化函数中设置 int iYres; //属性成员 int iBpp; //属性成员 int (DeviceInit)(void); //方法成员 int (ShowPixel)(int iPenX, int iPenY, unsigned int dwColor); //方法成员 int (CleanScreen)(unsigned int dwBackColor); //方法成员 struct DispOpr ptNext; }T_DispOpr, PT_DispOpr; / FB / static T_DispOpr g_tFBOpr = { .name = “fb”, .DeviceInit = FBDeviceInit, / 再这里才是真正的对FB设备进行初始化(打开、映射等) / .ShowPixel = FBShowPixel, / 画点函数 / .CleanScreen = FBCleanScreen, / 清屏函数 / };

    
    - 文字初始化
    ```c
    FontsInit()                                    /* main */
        ASCIIInit()                                /* fontsmanager */
            RegisterFontOpr(&g_tASCIIFontOpr)    /* ascii模块调用fontsmanager提供的注册函数 */
        GBKInit()
            RegisterFontOpr(&g_tGBKFontOpr)
        FreeTypeInit()
            RegisterFontOpr(&g_tFreeTypeFontOpr)
    
    /* 注册的各个结构体 */
        /* 抽象出来的结构体 */
    typedef struct FontOpr {
        char *name;
        int (*FontInit)(char *pcFontFile, unsigned int dwFontSize);
        int (*GetFontBitmap)(unsigned int dwCode, PT_FontBitMap ptFontBitMap);
        struct FontOpr *ptNext;
    }T_FontOpr, *PT_FontOpr;
        /* ASCII */
    static T_FontOpr g_tASCIIFontOpr = {
        .name          = "ascii",
        .FontInit      = ASCIIFontInit,            /* ASCII字体初始化 */
        .GetFontBitmap = ASCIIGetFontBitmap,    /* 获取字体位图 */
    };
        /* GBK */
    static T_FontOpr g_tGBKFontOpr = {
        .name          = "gbk",
        .FontInit      = GBKFontInit,
        .GetFontBitmap = GBKGetFontBitmap,
    };
        /* FreeType */
    static T_FontOpr g_tFreeTypeFontOpr = {
        .name          = "freetype",
        .FontInit      = FreeTypeFontInit,
        .GetFontBitmap = FreeTypeGetFontBitmap,
    };
    
    • 编码初始化 ```c EncodingInit() AsciiEncodingInit()
        AddFontOprForEncoding(&g_tAsciiEncodingOpr, GetFontOpr("freetype"))    /* 从ascii编码添加freetype字体 */
        AddFontOprForEncoding(&g_tAsciiEncodingOpr, GetFontOpr("ascii"))    /* ascii文字 */
        AddFontOprForEncoding(&g_tAsciiEncodingOpr, GetFontOpr("gbk"))        /* gbk文字 */
        RegisterEncodingOpr(&g_tAsciiEncodingOpr)                            /* 最后注册 */
      
      Utf16leEncodingInit()
        AddFontOprForEncoding(&g_tUtf16leEncodingOpr, GetFontOpr("freetype"))
        AddFontOprForEncoding(&g_tUtf16leEncodingOpr, GetFontOpr("ascii"))
        RegisterEncodingOpr(&g_tUtf16leEncodingOpr)
      
      Utf16beEncodingInit()
        AddFontOprForEncoding(&g_tUtf16beEncodingOpr, GetFontOpr("freetype"))
        AddFontOprForEncoding(&g_tUtf16beEncodingOpr, GetFontOpr("ascii"))
        RegisterEncodingOpr(&g_tUtf16beEncodingOpr)
      
      Utf8EncodingInit()
        AddFontOprForEncoding(&g_tUtf8EncodingOpr, GetFontOpr("freetype"))
        AddFontOprForEncoding(&g_tUtf8EncodingOpr, GetFontOpr("ascii"))
        RegisterEncodingOpr(&g_tUtf8EncodingOpr)
      

    / 注册的结构体 / / 抽象 / typedef struct EncodingOpr { char name; int iHeadLen; PT_FontOpr ptFontOprSupportedHead; / 对字体的支持 / int (isSupport)(unsigned char pucBufHead); / isSupport判断是否支持 / int (GetCodeFrmBuf)(unsigned char pucBufStart, unsigned char pucBufEnd, unsigned int pdwCode); struct EncodingOpr ptNext; }T_EncodingOpr, PT_EncodingOpr; / ASCII / static T_EncodingOpr g_tAsciiEncodingOpr = { .name = “ascii”, .iHeadLen = 0, .isSupport = isAsciiCoding, .GetCodeFrmBuf = AsciiGetCodeFrmBuf, }; / UTF16LE / static T_EncodingOpr g_tUtf16leEncodingOpr = { .name = “utf-16le”, .iHeadLen = 2, / 文件头的长度(BOM) / .isSupport = isUtf16leCoding, / 是否支持 / .GetCodeFrmBuf = Utf16leGetCodeFrmBuf, / 从buf中获取编码 / }; / UTF16BE / static T_EncodingOpr g_tUtf16beEncodingOpr = { .name = “utf-16be”, .iHeadLen = 2, .isSupport = isUtf16beCoding, .GetCodeFrmBuf = Utf16beGetCodeFrmBuf, }; / UTF8 */ static T_EncodingOpr g_tUtf8EncodingOpr = { .name = “utf-8”, .iHeadLen = 3, .isSupport = isUtf8Coding, .GetCodeFrmBuf = Utf8GetCodeFrmBuf, }; ```