表 3 MipiDsiSetCfg的参数和返回值描述
class="table-box">
参数 参数描述 handle DevHandle类型,操作句柄 cfg 结构体指针类型,MIPI DSI相应配置buf 指针 返回值 返回值描述 HDF_SUCCESS 设置MIPI DSI配置成功 负数 设置MIPI DSI配置失败
int32_t ret;
struct MipiCfg cfg = { 0 } ;
cfg. lane = DSI_4_LANES;
cfg. mode = DSI_CMD_MODE;
cfg. burstMode = VIDEO_NON_BURST_MODE_SYNC_EVENTS;
cfg. format = FORMAT_RGB_24_BIT;
cfg. pixelClk = 174 ;
cfg. phyDataRate = 384 ;
cfg. timingInfo. hsaPixels = 50 ;
cfg. timingInfo. hbpPixels = 55 ;
cfg. timingInfo. hlinePixels = 1200 ;
cfg. timingInfo. yResLines = 1800 ;
cfg. timingInfo. vbpLines = 33 ;
cfg. timingInfo. vsaLines = 76 ;
cfg. timingInfo. vfpLines = 120 ;
cfg. timingInfo. xResPixels = 1342 ;
ret = MipiDsiSetCfg ( mipiDsiHandle, & cfg) ;
if ( ret != HDF_SUCCESS) {
HDF_LOGE ( "MipiDsiSetCfg: set mipi cfg fail, ret:%d\n" , ret) ;
return ret;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
class="hide-preCode-box">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
int32_t MipiDsiGetCfg ( DevHandle handle, struct MipiCfg * cfg) ;
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
表 4 MipiDsiGetCfg的参数和返回值描述
class="table-box">参数 参数描述 handle DevHandle类型,操作句柄 cfg 结构体指针,MIPI DSI相应配置buf 指针 返回值 返回值描述 HDF_SUCCESS 获取当前MIPI DSI的配置成功 负数 获取当前MIPI DSI的配置失败
int32_t ret;
struct MipiCfg cfg;
memset ( & cfg, 0 , sizeof ( struct MipiCfg ) ) ;
ret = MipiDsiGetCfg ( mipiDsiHandle, & cfg) ;
if ( ret != HDF_SUCCESS) {
HDF_LOGEMipiDsiGetCfg: get mipi cfg fail, ret: % d! \n", ret) ;
return ret;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
发送/回读控制指令
int32_t MipiDsiTx ( PalHandle handle, struct DsiCmdDesc * cmd) ;
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
表 5 MipiDsiTx的参数和返回值描述
class="table-box">参数 参数描述 handle DevHandle类型,操作句柄 cmd 结构体指针类型,需要发送的指令数据指针 返回值 返回值描述 HDF_SUCCESS 发送成功 负数 发送失败
int32_t ret;
struct DsiCmdDesc * cmd = OsalMemCalloc ( sizeof ( struct DsiCmdDesc ) ) ;
if ( cmd == NULL ) {
return HDF_FAILURE;
}
cmd-> dtype = DTYPE_DCS_WRITE;
cmd-> dlen = 1 ;
cmd-> payload = OsalMemCalloc ( sizeof ( uint8_t ) ) ;
if ( cmd-> payload == NULL ) {
HdfFree ( cmd) ;
return HDF_FAILURE;
}
* ( cmd-> payload) = DTYPE_GEN_LWRITE;
MipiDsiSetLpMode ( mipiHandle) ;
ret = MipiDsiTx ( mipiHandle, cmd) ;
MipiDsiSetHsMode ( mipiHandle) ;
if ( ret != HDF_SUCCESS) {
HDF_LOGE ( "MipiDsiTx: mipi dsi tx fail, ret:%d\n" , ret) ;
HdfFree ( cmd-> payload) ;
HdfFree ( cmd) ;
return ret;
}
HdfFree ( cmd-> payload) ;
HdfFree ( cmd) ;
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
class="hide-preCode-box">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
int32_t MipiDsiRx ( DevHandle handle, struct DsiCmdDesc * cmd, uint32_t readLen, uint8_t * out) ;
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
表 6 MipiDsiRx的参数和返回值描述
class="table-box">参数 参数描述 handle DevHandle类型,操作句柄 cmd 结构体指针类型,需要回读的指令数据指针 readLen uint32_t类型,期望回读的数据长度 out uint8_t类型指针,回读的数据 返回值 返回值描述 HDF_SUCCESS 获取成功 负数 获取失败
int32_t ret;
uint8_t readVal = 0 ;
struct DsiCmdDesc * cmdRead = OsalMemCalloc ( sizeof ( struct DsiCmdDesc ) ) ;
if ( cmdRead == NULL ) {
return HDF_FAILURE;
}
cmdRead-> dtype = DTYPE_DCS_READ;
cmdRead-> dlen = 1 ;
cmdRead-> payload = OsalMemCalloc ( sizeof ( uint8_t ) ) ;
if ( cmdRead-> payload == NULL ) {
HdfFree ( cmdRead) ;
return HDF_FAILURE;
}
* ( cmdRead-> payload) = DDIC_REG_STATUS;
MipiDsiSetLpMode ( mipiDsiHandle) ;
ret = MipiDsiRx ( mipiDsiHandle, cmdRead, sizeof ( readVal) , & readVal) ;
MipiDsiSetHsMode ( mipiDsiHandle) ;
if ( ret != HDF_SUCCESS) {
HDF_LOGE ( "MipiDsiRx: mipi dsi rx fail, ret:%d\n" , ret) ;
HdfFree ( cmdRead-> payload) ;
HdfFree ( cmdRead) ;
return HDF_FAILURE;
}
HdfFree ( cmdRead-> payload) ;
HdfFree ( cmdRead) ;
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
class="hide-preCode-box">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
释放MIPI DSI操作句柄
MIPI DSI使用完成之后,需要释放操作句柄,释放句柄的函数如下所示:
void MipiDsiClose ( DevHandle handle) ;
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
该函数会释放掉由MipiDsiOpen申请的资源。
表 7 MipiDsiClose的参数和返回值描述
class="table-box">参数 参数描述 handle DevHandle类型,MIPI DSI操作句柄
MipiDsiClose ( mipiHandle) ;
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
使用实例
本例拟对Hi3516DV300开发板上MIPI DSI设备进行操作。
MIPI DSI完整的使用示例如下所示:
# include "hdf_log.h"
# include "mipi_dsi_if.h"
# include "osal_mem.h"
# define DTYPE_DCS_WRITE 0x05
# define DTYPE_DCS_READ 0x06
# define DTYPE_GEN_LWRITE 0x29
# define DDIC_REG_STATUS 0x0A
int32_t PalMipiDsiTestSample ( void )
{
uint8_t chnId;
int32_t ret;
DevHandle mipiDsiHandle = NULL ;
chnId = 0 ;
mipiDsiHandle = MipiDsiOpen ( chnId) ;
if ( mipiDsiHandle == NULL ) {
HDF_LOGE ( "MipiDsiOpen: failed!\n" ) ;
return HDF_FAILURE;
}
struct MipiCfg cfg = { 0 } ;
cfg. lane = DSI_2_LANES;
cfg. mode = DSI_VIDEO_MODE;
cfg. format = FORMAT_RGB_24_BIT;
cfg. burstMode = VIDEO_BURST_MODE;
cfg. timing. xPixels = 480 ;
cfg. timing. hsaPixels = 10 ;
cfg. timing. hbpPixels = 20 ;
cfg. timing. hlinePixels = 530 ;
cfg. timing. vsaLines = 2 ;
cfg. timing. vbpLines = 14 ;
cfg. timing. vfpLines = 16 ;
cfg. timing. ylines = 960 ;
cfg. timing. edpiCmdSize = 0 ;
cfg. pixelClk = 31546 ;
cfg. phyDataRate = 379 ;
ret = MipiDsiSetCfg ( mipiDsiHandle, & cfg) ;
if ( ret != 0 ) {
HDF_LOGE ( "PalMipiDsiTestSample: set mipi dsi cfg fail, ret:%d\n" , ret) ;
return ret;
}
struct DsiCmdDesc * cmd = OsalMemCalloc ( sizeof ( struct DsiCmdDesc ) ) ;
if ( cmd == NULL ) {
return - 1 ;
}
cmd-> dataType = DTYPE_DCS_WRITE;
cmd-> dataLen = 1 ;
cmd-> payload = OsalMemCalloc ( sizeof ( uint8_t ) ) ;
if ( cmd-> payload == NULL ) {
OsalMemFree ( cmd) ;
return - 1 ;
}
* ( cmd-> payload) = DTYPE_GEN_LWRITE;
MipiDsiSetLpMode ( mipiDsiHandle) ;
ret = MipiDsiTx ( mipiDsiHandle, cmd) ;
MipiDsiSetHsMode ( mipiDsiHandle) ;
if ( ret != HDF_SUCCESS) {
HDF_LOGE ( "PalMipiDsiTestSample: mipi dsi tx fail, ret:%d\n" , ret) ;
OsalMemFree ( cmd-> payload) ;
OsalMemFree ( cmd) ;
return ret;
}
OsalMemFree ( cmd-> payload) ;
OsalMemFree ( cmd) ;
uint8_t readVal = 0 ;
struct DsiCmdDesc * cmdRead = OsalMemCalloc ( sizeof ( struct DsiCmdDesc ) ) ;
if ( cmdRead == NULL ) {
return - 1 ;
}
cmdRead-> dataType = DTYPE_DCS_READ;
cmdRead-> dataLen = 1 ;
cmdRead-> payload = OsalMemCalloc ( sizeof ( uint8_t ) ) ;
if ( cmdRead-> payload == NULL ) {
OsalMemFree ( cmdRead) ;
return - 1 ;
}
* ( cmdRead-> payload) = DDIC_REG_STATUS;
MipiDsiSetLpMode ( mipiDsiHandle) ;
ret = MipiDsiRx ( mipiDsiHandle, cmdRead, sizeof ( readVal) , & readVal) ;
MipiDsiSetHsMode ( mipiDsiHandle) ;
if ( ret != HDF_SUCCESS) {
HDF_LOGE ( "PalMipiDsiTestSample: mipi dsi rx fail, ret:%d\n" , ret) ;
OsalMemFree ( cmdRead-> payload) ;
OsalMemFree ( cmdRead) ;
return ret;
}
OsalMemFree ( cmdRead-> payload) ;
OsalMemFree ( cmdRead) ;
HDF_LOGD ( "PalMipiDsiTestSample: mipi dsi tests end" ) ;
MipiDsiClose ( mipiDsiHandle) ;
return ret;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
class="hide-preCode-box">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
如果大家想更加深入的学习 OpenHarmony(鸿蒙南向) 开发的全栈内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:
搭建开发环境 Windows 开发环境的搭建 Ubuntu 开发环境搭建 Linux 与 Windows 之间的文件共享 ……
构建子系统 启动流程 子系统 分布式任务调度子系统 分布式通信子系统 驱动子系统 ……
写在最后
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙: 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:https://qr21.cn/FV7h05
data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/maniuT/article/details/141112353","extend1":"pc","ab":"new"}">>
id="blogExtensionBox" style="width:400px;margin:auto;margin-top:12px" class="blog-extension-box"> class="blog_extension blog_extension_type2" id="blog_extension">
class="extension_official" data-report-click="{"spm":"1001.2101.3001.6471"}" data-report-view="{"spm":"1001.2101.3001.6471"}">
class="blog_extension_card_left">
class="blog_extension_card_cont">
鸿蒙开发学习资料领取!!!
class="blog_extension_card_cont_r">
微信名片
评论记录:
回复评论: