/****************************************************************************                     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            2struct 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("\n\r");}
}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*/

I.MX6 Linux mipi配置数据合成相关推荐

  1. windows无法启动 bcd linux efi,bcdedit 无法打开启动配置数据存储的终极解决办法

    对于Windows NT6系列的用户来说,现在的系统引导趋势是采用UEFI+GPT模式,,那么在GPT分区下,windows系列引导故障处理程序有bcdedit,bcdboot等..正常情况下,执行b ...

  2. linux 内核配置简介

    Gentoo Linux Gentoo内核(gentoo-sources)特有的选项 Gentoo Linux support CONFIG_GENTOO_LINUX 选"Y"后, ...

  3. RedHat Linux网络配置详解

    1.以太网接口         以太网最常见的接口文件是ifcfg-eth0,它控制系统里的第一个以太网卡.如果系统里有多个网卡,就有多个配置文件ifcfg-eth (是特定接口的唯一标识).因为每个 ...

  4. linux内核配置系统浅析(转)

    随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中.面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后, ...

  5. linux防火墙常用控制协议,linux防火墙配置及管理.doc

    linux防火墙配置与管理2 ufw防火墙简介 我们在工作中使用防火墙保护服务器的网络服务,实际上是通过防火墙来拒绝对服务器的访问.iptable 工具根据系统管理员编写的一系列规则筛选网络数据包对于 ...

  6. Linux内核网络数据包发送(四)——Linux netdevice 子系统

    Linux内核网络数据包发送(四)--Linux netdevice 子系统 1. 前言 2. `dev_queue_xmit` and `__dev_queue_xmit` 2.1 `netdev_ ...

  7. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  8. linux基于文本的配置工具,Linux基本配置和管理 3 ---- Linux命令行文本处理工具

    1 文件浏览(简单回顾) 1 cat 查看文件的内容 2 more 以翻页的形式查看,但是只能向下翻页 3 less 以翻页的形式查看,但是能够支持向上和向下翻页 4 head 默认是查看前10行,但 ...

  9. linux 内核配置raid,在 Linux VM 上配置软件 RAID - Azure Virtual Machines | Microsoft Docs

    在 Linux 上配置软件 RAID 02/02/2017 本文内容 一种比较常见的情况是,在 Azure 中的 Linux 虚拟机上使用软件 RAID 将多个附加的数据磁盘显示为单个 RAID 设备 ...

最新文章

  1. cm 怎么限制hue数据下载_0724-6.2.0-CM接管rpm方式安装的无CM的CDH集群-2
  2. Linux驱动中,probe函数何时被调用
  3. vue根据索引删除数组中的一个对象_Vue实现动态添加或者删除对象和对象数组的操作方法...
  4. ●BZOJ 4556 [Tjoi2016Heoi2016]字符串
  5. The Code Commandments: Best Practices for OCCoding
  6. fedora如何隐藏顶部状态栏_藏在 iOS 13 里的 9 个隐藏小技巧
  7. 如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航
  8. [Flink] Not a valid protocol version This 1s not an HTTP port
  9. iview表单校验上传图片成功后,提示文字不消失
  10. 无效的变量名c语言,变量方法用法 _C语言-w3school教程
  11. mescroll.js 的下拉刷新和上拉加载 tab切换
  12. 极验打码平台官网地址
  13. nEO iMAGING——400K的图像处理软件(应急处理照片的好帮手)
  14. 南京大学计算机专业复试面试,南大计算机面试问题汇总及部分答案.doc
  15. 某音init_gorgon(),x-gorgon分析和数据的获取(3)
  16. MATLAB音频数字水印算法实现
  17. Torah RVP Claiming Tutorial
  18. 张馨予一幅画拍出几十万,然而范冰冰却一直在向粉丝要画!
  19. win10打印服务器纸规格没有显示,win10系统打印机添加了自定义的纸张却找不到的操作办法...
  20. contest12 CF514div2 ooxxx oooox ooooo

热门文章

  1. 数字逻辑电路仿真电路:与非门组成的三人表决器
  2. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.3 微信公众平台的使用...
  3. Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
  4. 利用Photoshop生成Sprite sheet
  5. rabbitmq direct reply-to 在springAMQP和python之间的使用
  6. 地球引擎中级教程——基本监督分类(含练习)
  7. xp计算机远程桌面设置密码,远程桌面连接设置,详细教您xp怎么设置远程桌面连接...
  8. 看雪2W课-Frida逆向与利用自动化 Frida开发和调试环境搭建 课时1
  9. Golang 调用http 文件上传接口 进行上传文件
  10. visibility属性