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[];
}; static struct LCM_setting_table lcm_initialization_setting[] = {
{0xB9,,{0xFF,0x83,0x94}}, //Set MIPI
{0xBA,,{0x63,0x03,0x68,0x6B,0xB2,0xC0}}, //Set Power
{0xB1,,{0x48,0x12,0x72,0x09,0x32,0x44,0x71,0x31,0x4F,0x35}}, //Set Display
{0xB2,,{0x65,0x80,0x64,0x05,0x07}}, //Set CYC
{0xB4,,{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,,{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,,{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,,{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,,{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,,{0x34,0x34}}, //Set Panel
{0xCC,,{0x0D}}, //Set C0
{0xC0,,{0x1F,0x31}}, //Set D2
{0xD2,,{0x88}}, //Set EMI,0xenhance
{0xD4,,{0x02}}, //Set BD
{0xBD,,{0x01}}, //Set Power
{0xB1,,{0x60}}, //Set BD
{0xBD,,{0x00}}, //Set Power,0xOption,0xHX5186,0xMode
{0x11,, {}},
{REGFLAG_DELAY, , {}},
{0xBF,,{0x40,0x81,0x50,0x00,0x1A,0xFC,0x01}},
{0x29,, {}},
{REGFLAG_DELAY, , {}},
{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 = ;
int i = ;
for ( i = ; i < count; i++ ) {
tmp <<= ;
switch ( endianType ) {
case BIG_ENDIAN :
tmp |= para_list[count-i-];
break;
default :
tmp |= para_list[i];
break;
}
}
*buf = tmp;
} static void push_table(struct LCM_setting_table *table, unsigned int count)
{
int index = ;
int err;
int i, j;
unsigned int buf[DSI_CMD_BUF_MAXSIZE] = {}; for (i = ; 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)/); /**
* 合成数据,buf是整形,每次合成para_list中4个字节。
* 这部分的是合成能够被整除的那一部分的数据,后面对余下的那一部分再进行合成。
*/
for ( j = ; j < ( (table[i].count)/ ); j++ ) {
index = j * ;
compoundData(buf + j, &(table[i].para_list[index]), , LITTLE_ENDIAN);
//compoundData(buf + j, &(table[i].para_list[index]), 4, BIG_ENDIAN); //控制输出数据格式。
printf("%08x", buf[j]);
} /**
* 接下来对4取余的余数进行合成
*/
index = j * ;
int remainder = table[i].count - index;
if ( remainder != ) {
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 :
printf("%02x", buf[j]);
break;
case :
printf("%04x", buf[j]);
break;
case :
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配置数据合成的更多相关文章
- Linux内核配置选项
http://blog.csdn.net/wdsfup/article/details/52302142 http://www.manew.com/blog-166674-12962.html Gen ...
- I.MX6 Linux I2C device& driver hacking
/******************************************************************************************* * I.MX6 ...
- 在 Linux 上配置一个 syslog 服务器
syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器,路由器,交换机以及其他主机)都可以把日志发送给它. 通过设置一个syslo ...
- Linux 目录配置
一.Linux 目录配置标准:FHS FHS(Filessystem Hierarchy Standard) 的重点在于规范每个特定的目录下应该要放置什么样子的数据. FHS依据文件系统使用的频繁与否 ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- I.MX6 Android 5.1 快速合成系统
/**************************************************************************** * I.MX6 Android 5.1 快速 ...
- I.MX6 Linux udev porting
/*********************************************************************** * I.MX6 Linux udev porting ...
- I.MX6 Linux kernel LVDS backlight enable
/*************************************************************************** * I.MX6 Linux kernel LV ...
- Linux 上的数据可视化工具
Linux 上的数据可视化工具 5 种开放源码图形化工具简介 Linux® 上用来实现数据的图形可视化的应用程序有很多,从简单的 2-D 绘图到 3-D 制图,再到科学图形编程和图形模拟.幸运的是,这 ...
随机推荐
- Web App中的Flexbox应用
虽然语法可能比较混杂,但 Flexbox 还是名不虚传的.它创造的是可伸缩的.有弹性的.可改变视觉顺序的智能盒子.它提供了简单的CSS布局方案范例让容器总是处于垂直水平居中的位置.使用盒模型来工作是非 ...
- (转)【移动开发】Android中三种超实用的滑屏方式汇总(ViewPager、ViewFlipper、ViewFlow)
转自: http://smallwoniu.blog.51cto.com/3911954/1308959 现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习 ...
- sql主键的一点重要理解
sql只会读取数据,不会自动设置主键,所以绑定数据后要设置主键(前台) 不管是int或者uniqueidentifier只要类型对得上就可以用,int自增其实没什么太大优势(但是通常都会用自增来做,从 ...
- Spark基础与Java Api介绍
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3832405.html 一.Spark简介 1.什么是Spark 发源于AMPLab实验室的分布式内存计 ...
- HTML5文档结构语义:页眉的header和hgroup标签使用
HTML5提供了新的结构元素——例如header.hgroup.article.section.footer.nav等来定义网页,将使网页结构更加简洁严谨,语义更加结构化,而不用迂回通过class或i ...
- 我们为什么需要DTO(数据传输对象)
原文:http://www.cnblogs.com/Gyoung/archive/2013/03/23/2977233.html DTO即数据传输对象(Data Transfer Object).之前 ...
- Linux命令(3):wc命令
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...
- Matlab多个Figure图合成一个Fig
案例:之前跑过的程序 已经生成了多个matlab图,现在需要进行合并到一个图中. 解决方案,利用图像句柄把figure图像中的参数读入到内存中,然后重新subplot绘制. 程序如下: clc;cle ...
- 加密解密(5)SSL形象比喻
转自: http://blog.csdn.net/cloverphp/article/details/11737433 前言: 关于公钥,私钥请看前几篇文章 SSL 协议既用到了公钥加密技术(握手 ...
- [androd] android的在线源码网站,各个版本都有(目前已到俺android 4.2,但不包含kernel部分的代码)
android的在线源码阅读网站,各个版本都有(目前最新版本已到android 4.2,但不包含kernel部分的代码) 这个网站最大的特点是:可以在网页上方的搜索框,搜索整个网站所存储的源码中的字符 ...