zoukankan      html  css  js  c++  java
  • I.MX6 Linux mipi配置数据合成

    /***************************************************************************
     *                     I.MX6 Linux mipi配置数据合成
     * 声明:
     *     由于现有mipi配置数据不符合I.MX6的配置参数,需要将该参数进行数据转换,
     * 而这又涉及到对数据处理简单算法,主要是为了验证转换代码可靠性。 
     *
     *                                       2015-12-24 深圳 南山平山村 曾剑锋
     **************************************************************************/
    
    
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    #define REGFLAG_DELAY            0XFFE
    #define REGFLAG_END_OF_TABLE    0xFFF   // END OF REGISTERS MARKER
    #define DSI_CMD_BUF_MAXSIZE        32
    // 嵌入式产品数据存储可能涉及到的大小端
    #define BIG_ENDIAN              1
    #define LITTLE_ENDIAN            2
    
    struct LCM_setting_table {
        unsigned cmd;
        unsigned char count;
        unsigned char para_list[64];
    };
    
    static struct LCM_setting_table lcm_initialization_setting[] = {
        {0xB9,3,{0xFF,0x83,0x94}},
        
        //Set MIPI
        {0xBA,6,{0x63,0x03,0x68,0x6B,0xB2,0xC0}},
        
        //Set Power
        {0xB1,10,{0x48,0x12,0x72,0x09,0x32,0x44,0x71,0x31,0x4F,0x35}},
        
        //Set Display
        {0xB2,5,{0x65,0x80,0x64,0x05,0x07}},
        
        //Set CYC
        {0xB4,30,{0x26,0x76,0x26,0x76,0x26,0x26,0x05,0x10,0x86,0x35,0x00,0x3F,0x26,0x76,0x26,0x76,0x26,0x26,0x05,0x10,0x86,0x3F,0x00,0xFF,0x81,0x81,0x81,0x81,0x08,0x01}},
        
        //Set D3
        {0xD3,33,{0x00,0x00,0x0F,0x0F,0x01,0x01,0x10,0x10,0x32,0x10,0x00,0x00,0x00,0x32,0x15,0x04,0x05,0x04,0x32,0x15,0x14,0x05,0x14,0x37,0x33,0x04,0x04,0x37,0x00,0x00,0x47,0x05,0x40}},
        
        //Set GIP
        {0xD5,44,{0x18,0x18,0x25,0x24,0x27,0x26,0x11,0x10,0x15,0x14,0x13,0x12,0x17,0x16,0x01,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x05,0x04,0x03,0x02,0x07,0x06,0x18,0x18,0x18,0x18,0x21,0x20,0x23,0x22,0x18,0x18,0x18,0x18}},
        
        //Set D6
        {0xD6,44,{0x18,0x18,0x22,0x23,0x20,0x21,0x12,0x13,0x16,0x17,0x10,0x11,0x14,0x15,0x06,0x07,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x02,0x03,0x04,0x05,0x00,0x01,0x18,0x18,0x18,0x18,0x26,0x27,0x24,0x25,0x18,0x18,0x18,0x18}},
    
        //Set Gamma
        {0xE0,58,{0x00,0x03,0x0B,0x0E,0x10,0x13,0x17,0x15,0x2D,0x3D,0x51,0x51,0x5E,0x75,0x7C,0x84,0x94,0x9A,0x98,0xA6,0xB2,0x57,0x57,0x5A,0x60,0x64,0x6A,0x72,0x7F,0x00,0x03,0x0B,0x0E,0x10,0x13,0x17,0x15,0x2D,0x3D,0x51,0x51,0x5E,0x75,0x7C,0x84,0x94,0x9A,0x98,0xA6,0xB2,0x57,0x57,0x5A,0x60,0x64,0x6A,0x72,0x7F}},
        
        //Set VCOM
        {0xB6,2,{0x34,0x34}},
        
        //Set Panel
        {0xCC,1,{0x0D}},
        
        //Set C0
        {0xC0,2,{0x1F,0x31}},
        
        //Set D2
        {0xD2,1,{0x88}},
        
        //Set EMI,0xenhance
        {0xD4,1,{0x02}},
        
        //Set BD
        {0xBD,1,{0x01}},
        
        //Set Power
        {0xB1,1,{0x60}},
        
        //Set BD
        {0xBD,1,{0x00}},
    
        //Set Power,0xOption,0xHX5186,0xMode
        {0x11,1,    {0}},
        {REGFLAG_DELAY, 150,  {}},
        {0xBF,7,{0x40,0x81,0x50,0x00,0x1A,0xFC,0x01}},
        {0x29,1,    {0}},
        {REGFLAG_DELAY, 50,  {}},
        {REGFLAG_END_OF_TABLE, 0x00, {}}
    };
    
    /**
     * 合成数据
     *  1. buf:用于存储合成后的数据;
     *  2. pare_list:用于合成的数据源,是字节数据;
     *  3. count:调用当前函数时使用pare_list中的字节数;
     *  4. endianType:合成数据时采用大端、小端的那种。
     */
    void compoundData(unsigned int *buf, unsigned char *para_list, int count, int endianType) {
        unsigned int tmp = 0;
        int i = 0;
        for ( i = 0; i < count; i++ ) {
            tmp <<= 8;
            switch ( endianType ) {
            case BIG_ENDIAN :
                tmp |= para_list[count-i-1];
                break;
            default :
                tmp |= para_list[i];
                break;
            }
        }
        *buf = tmp;
    }
    
    static void push_table(struct LCM_setting_table *table, unsigned int count)
    {
        int index = 0;
        int err;
        int i, j;
        unsigned int buf[DSI_CMD_BUF_MAXSIZE] = {0};
    
        for (i = 0; i < count; i++) {
    
            printf("%02d | length: %03d |", i, table[i].count);
    
            unsigned cmd;
            cmd = table[i].cmd;
    
            switch (cmd) {
    
            case REGFLAG_DELAY :
                usleep(table[i].count);
                break;
    
            case REGFLAG_END_OF_TABLE :
                break;
    
            default:
                printf(" aliquot: %02d | 0x", (table[i].count)/4);
    
                /**
                 * 合成数据,buf是整形,每次合成para_list中4个字节。
                 * 这部分的是合成能够被整除的那一部分的数据,后面对余下的那一部分再进行合成。
                 */
                for ( j = 0; j < ( (table[i].count)/4 ); j++ ) {
                    index = j * 4;
                    compoundData(buf + j, &(table[i].para_list[index]), 4, LITTLE_ENDIAN);
                    //compoundData(buf + j, &(table[i].para_list[index]), 4, BIG_ENDIAN);
                    
                    //控制输出数据格式。
                    printf("%08x", buf[j]);
                }
    
                /**
                 * 接下来对4取余的余数进行合成
                 */
                index = j * 4;
                int remainder = table[i].count - index;
                if (  remainder != 0 ) {
                    compoundData(buf + j, &(table[i].para_list[index]), table[i].count - index, LITTLE_ENDIAN);
                    //compoundData(buf + j, &(table[i].para_list[index]), table[i].count - index, BIG_ENDIAN);
                    
                    //控制输出数据格式。
                    switch ( remainder ) {
                    case 1:
                        printf("%02x", buf[j]);
                        break;
                    case 2:
                        printf("%04x", buf[j]);
                        break;
                    case 3:
                        printf("%06x", buf[j]);
                        break;
                    }
                }
    
                // 对buf进行清空,对下次数据合成造成影响。
                bzero(buf, DSI_CMD_BUF_MAXSIZE); 
                //memset(buf, 0, DSI_CMD_BUF_MAXSIZE); 
                break;
            }
            printf("
    
    ");
        }
    }
    
    int main( int argc, char** argv )
    {
        push_table(lcm_initialization_setting, sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table));
    }
    
    /**
     * 输出结果:
     *     00 | length: 003 | aliquot: 00 | 0xff8394
     *     01 | length: 006 | aliquot: 01 | 0x6303686bb2c0
     *     02 | length: 010 | aliquot: 02 | 0x48127209324471314f35
     *     03 | length: 005 | aliquot: 01 | 0x6580640507
     *     04 | length: 030 | aliquot: 07 | 0x26762676262605108635003f2676267626260510863f00ff818181810801
     *     05 | length: 033 | aliquot: 08 | 0x00000f0f0101101032100000003215040504321514051437330404370000470540
     *     06 | length: 044 | aliquot: 11 | 0x1818252427261110151413121716010018181818181818181818050403020706181818182120232218181818
     *     07 | length: 044 | aliquot: 11 | 0x1818222320211213161710111415060718181818181818181818020304050001181818182627242518181818
     *     08 | length: 058 | aliquot: 14 | 0x00030b0e101317152d3d51515e757c84949a98a6b257575a60646a727f00030b0e101317152d3d51515e757c84949a98a6b257575a60646a727f
     *     09 | length: 002 | aliquot: 00 | 0x3434
     *     10 | length: 001 | aliquot: 00 | 0x0d
     *     11 | length: 002 | aliquot: 00 | 0x1f31
     *     12 | length: 001 | aliquot: 00 | 0x88
     *     13 | length: 001 | aliquot: 00 | 0x02
     *     14 | length: 001 | aliquot: 00 | 0x01
     *     15 | length: 001 | aliquot: 00 | 0x60
     *     16 | length: 001 | aliquot: 00 | 0x00
     *     17 | length: 001 | aliquot: 00 | 0x00
     *     18 | length: 150 |
     *     19 | length: 007 | aliquot: 01 | 0x408150001afc01
     *     20 | length: 001 | aliquot: 00 | 0x00
     *     21 | length: 050 |
     *     22 | length: 000 |
     *     
     *     shell returned 23
     *     
     *     Press ENTER or type command to continue
     */
  • 相关阅读:
    格式化数字,将字符串格式的数字,如:1000000 改为 1 000 000 这种展示方式
    jquery图片裁剪插件
    前端开发采坑之安卓和ios的兼容问题
    页面消息提示,上下滚动
    可以使用css的方式让input不能输入文字吗?
    智慧农村“三网合一”云平台测绘 大数据 农业 信息平台 应急
    三维虚拟城市平台测绘 大数据 规划 三维 信息平台 智慧城市
    农业大数据“一张图”平台测绘 大数据 房产 国土 农业 信息平台
    应急管理管理局安全生产预警平台应急管理系统不动产登记 测绘 大数据 规划 科教 三维 信息平台
    地下综合管廊管理平台测绘 大数据 地下管线 三维 信息平台
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5073879.html
Copyright © 2011-2022 走看看