高通LCD开发常见问题&分析
reference :
LCD driver的框架
以msm8909为例。
LCD命名规则
例如:
nt35521-720p-video
nt35521-wxga-video
nt35590-qvga-cmd
otm8018b-fwvga-video
ili9806e-fwvga-video_pixi445_tf
hx8379c-tdt-fwvga-video
……
名称 = LCD的IC型号+ 该driver下屏的分辨率+ MIPI接口+ 接口下的模式+ 屛厂供应商+ 项目名
以上参数的含义:
分辨率会有:720p,fwvga,wvga,hd……(分别指的是:
720*1280
和856*480
,1024*600
,1280*720
)供应商:truly,TFT,TDT,BYD……
LCD的接口一般又分为:dsi,dbi,dpi
其中DSI MIPI接口,MIPI联盟推出的一种高速低耗接口,根据是否有缓存分为:
CMD:Command Mode
VDO:Video Mode
MIPI
对于MIPI下的接口,CMD对应MPU接口,而VDO接口是对应的RGB接口。在VDO模式下视频数据只能通过HS mode传输。
MIPI很多参数是需要根据LCD的datasheet来计算的,其中HFP,HBP,VFP,VBF都是以同步信号(HSYNC和VSYNC)为基准计算。
在同步信号之前为Front,在之后为Back。需要注意的是,这里并不是以有效像素为基准。
关于DSI bit clock(MIPI)的计算,在dtsi中的参数描述为:qcom,mdss-dsi-panel-clockrate=<>
,一般情况该值都不建议修改。
因为SRC files文件会根据porch,resolution以及fps来计算。如果由于RF信号干扰或者其他情况需要更改的话,建议是从porch或者fps实现。
LCD的fps一般都上限为60,正常使用时候一般设置为58,因为由于LCD panel range存在刷新率温度漂移情况,所以在dtsi中关键panel-framerate
都不建议修改。
Backlight
LCD的开机在整个开机的时候是使用的是LK的initial code,只有在开机后睡眠唤醒后才会去调用kernel的参数。正常情况背光分为32阶,并且最大亮度设置为255(dtsi),针对背光还需要验证的是在开机关机休眠唤醒的时候,initial code和背光亮起的时候要搭配协调。否者会造成闪屏白屏等现象。
其次,要注意LCD的背光芯片操作背光的方式,一般分为两种模式,一种是GPIO口直接操作的,一种是以PWM的MPP来操作的。对于GPIO操作的配置在mtp。dtsi中可以参考如下:
&pmx_mdss {
qcom,num-grp-pins = <2>;
qcom,pins = <&gp 25>, <&gp 17>;
};
&mdss_dsi0 {
qcom,dsi-pref-prim-pan = <&dsi_ili9806e_fwvga_video>;
//qcom,dsi-pref-prim-pan = <&dsi_ili9806e_fwvga_video_tdt>;
pinctrl-names = "mdss_default", "mdss_sleep";
pinctrl-0 = <&mdss_dsi_active &mdss_te_active>;
pinctrl-1 = <&mdss_dsi_suspend &mdss_te_suspend>;
// qcom,platform-bklight-en-gpio = <&msm_gpio 37 0>;
qcom,platform-reset-gpio = <&msm_gpio 25 0>;
qcom,platform-blk-ctrl-gpio = <&msm_gpio 17 0>;
//modify by ke.li@tcl.com for LCD is ili9806e ,and the RST&backlight Ctrl had changed [End]--- 2015.8.28
};
而PWM的方式主要配置如下:
mpp@a100 { /* MPP 2 */
/* Backlight PWM */
// qcom,mode = <1>; /* Digital output */
// qcom,invert = <0>; /* Disable invert */
// qcom,src-sel = <4>; /* DTEST1 */
// qcom,vin-sel = <0>; /* VPH_PWR */
// qcom,master-en = <1>; /* Enable MPP */
status = "disabled";
};
而以上具体采用哪一种配置方法的选择是在本身dtsi中如下配置:
qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_gpio";
//qcom,mdss-dsi-bl-pmic-pwm-frequency = <33>;
//qcom,mdss-dsi-bl-pmic-bank-select = <0>;
//qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;
CABL
说到背光的话,还有一个算法与之有关系,是CABL,在mtk也叫CABA。
平台端的CABL功能算法是用于LCD背光灯相关计算,在更新灰阶前,处理出现不连续不均匀等的状况。当然该算法也可以回导致LCD出现灰阶部分会有波纹以及短暂的不连续的条纹情况。该配置是在system.prop中可以配置。在MTK是需要在perjectconfig中配置MTK_AAL_SUPPORT=Y.
ili9806e : The CABC (Content Adaptive Brightness Control) dynamic backlight control function is used to reduce the power consumption of the luminance source.
Initial code
LCD还有很大的一块是initial code,这块主要是依靠FAE,因为不同的ic有不同的要求,当然有些是通用的,在这块initial code中,我们需要注意的是在集成数据的时候,要保证参数take进入的正确性,否则会造成不亮,蓝屏,白屏等问题。
在MTK平台下,initial code是在driver中配置的,在qcom平台下是在dtsi中配置的。
Initial code另外需要我们注意的是最后2个寄存器0x11和0x29。这是点亮屏幕最后的两个参数,正常情况下延迟会在150ms和50ms。其余寄存器写入值可以不需要延时。
在灭屏的时候,通常会去先写0x28再写0x10,延迟应该和亮屏的2911对应。这是通常说的2810的power off模式。
另外亮屏通常用的是lp mode,而灭屏用的是hig mode。
Porch
Proch是前后廊,用于描述切屏的数据,一般出现错误和误差的情况会有上、下部分出现亮稳横纹等情况。
这是由于LCD显示的时候丢了几行数据造成的,根本原因是在LCD显示速度慢与主控写的速度,而两者没有使用一个叫Tearing effect out line的机制。
关于porch的计算:
HFP:Horizontal Back Porch = left_margin
水平后沿:在每行或者每列像素数据开始输出时要插入的像素时钟周期。
HBP:Horizontal Front Porch = right_margin
水平前沿:在每行或每列的像素结束到LCD行时钟输出脉冲之间的像素时钟。
VBP: Vertical Back Porch = upper_margin
垂直后沿:在垂直同步周期之后帧开头时的无效行数。
VFP: Vertical Front Porch = lower_margin
垂直前沿:本帧数据输出结束到下一个垂直同步周期开始之前的无效行数。
Hsync:Hsync plus width = HPW
行(水平)同步脉宽(单位是时钟周期)
Vsync: Vertical plus width = VPW
同理Vsync=VPW,垂直时钟周期。
DSI Clock
H-total = HorizontalActive + HorizontalFrontPorch + HorizontalBackPorch + HorizontalSyncPulse + HorizontalSyncSkew
V-total = VerticalActive + VerticalFrontPorch + VerticalBackPorch + VerticalSyncPulse + VerticalSyncSkew
Total pixel = H-total * V-total * 60(Hz通常都是这个,当然可以变).
Bitclk = Total pixel * bpp(byte) *8/lane number(有几路mipi data lane).
Byteclk = bitclk/8
Dsipclk(Dsi pixel clock) = (Byteclk * lane number)/bpp(byte) = Total pixel * 8
Byteclk = pclk * pixel depth / lane number
ESD Check
ESD Check功能用于检测静电的干扰,在有静电干扰的情况LCD会出现白屏,横纹等临时问题,即在休眠唤醒屏幕后能回复正常。ESD check主要的作用是检测是否受到静电干扰,并且在受到干扰的时候reset LCD使之回复正常。
在配置的时候在dtsi中,其中的配置如下:
- qcom,esd-check-enabled: Boolean used to enable ESDrecovery feature.
- qcom,mdss-dsi-panel-status-command: A byte stream formed by multiple dcspackets based on
qcomdsi controller protocol, to read the panel status.
Thisvalue is used to kick in the ESD recovery.
byte0: dcs data type
byte1: set to indicate this is an individual packet
(no chain)
byte2: virtual channel number
byte3: expect ack from client (dcs read command)
byte4: wait number of specified ms after dcs command
transmitted
byte5, 6: 16 bits length in network byte order
byte7 and beyond: number byte of payload
- qcom,mdss-dsi-panel-status-command-mode: Stringthat specifies the ctrl state for reading the panel status.
"dsi_lp_mode"= DSI low power mode
"dsi_hs_mode"= DSI high speed mode
- qcom,mdss-dsi-panel-status-check-mode: Specifies the panel status check method for ESD recovery.
"bta_check"= Uses BTA to check the panel status
"reg_read"= Reads panel status register to check the panel status
"te_signal_check"= Uses TE signal behaviour to check the panel status
- qcom,mdss-dsi-panel-status-value: Specifies the value of the panel statusregister when the panel is in good state.
LCD DTSI中各参数详细解释
大部分的设备树解析代码在:kernel/drivers/video/fbdev/msm/mdss_dsi_panel.c
中,可以自己参考去看对应的配置意义。
属性 |
描述 |
代码示例 |
参数详解 |
qcom,mdss-dsi-panel-name | 用作面板描述名称的字符串。 | qcom,mdss-dsi-panel-name = "tianma(otm1283a) 720p video mode dsi panel"; | 根据您的面板名称进行定制 |
qcom,mdss-dsi-panel-controller | 指定此面板映射到的DSIcontroller的句柄。 | qcom,mdss-dsi-panel-controller =<&mdss_dsi0>; | 保持不变 |
qcom,mdss-dsi-panel-type | 指定面板操作模式。 “dsi_video_mode” = 启用视频模式 “dsi_cmd_mode” = 启用命令模式 |
qcom,mdss-dsi-panel-type = "dsi_video_mode"; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-panel- destination | 指定面板目标显示的字符串。 "display_1" = DISPLAY_1 "display_2" = DISPLAY_2 |
qcom,mdss-dsi-panel-destination = "display_1"; | 保持不变 |
qcom,mdss-dsi-bpp | 指定面板的每像素位数。 3 = 适用于 rgb111 8 = 适用于 rgb332 12 = 适用于 rgb444 16 = 适用于 rgb565 18 = 适用于 rgb666 24 = 适用于 rgb888 |
qcom,mdss-dsi-bpp= <24>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-panel-framerate | 指定面板的帧率。60 = 每秒 60 帧(默认值) | qcom,mdss-dsi-panel-framerate =<60>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-panel-width | 指定面板宽度(单位:像素)。 | qcom,mdss-dsi-panel-width =<720>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-panel-height | 指定面板高度(单位:像素)。 | qcom,mdss-dsi-panel-height =<1280>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-h-back-porch | 水平后沿值(单位:像素)。 | qcom,mdss-dsi-h- back-porch =<100>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-h-front-porch | 水平前沿值(单位:像素)。 | qcom,mdss-dsi-h- front-porch = <52>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-h-pulse-width | 水平脉冲宽度。 | qcom,mdss-dsi-h- pulse-width = <24>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-h-sync-skew | 水平同步倾斜值。0 = 默认值。 | qcom,mdss-dsi-h- sync-skew = <0>; | 保持不变 |
qcom,mdss-dsi-v-back-porch | 垂直后沿值(单位:像素)。 | qcom,mdss-dsi-v- back-porch = <20>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-v-front-porch | 垂直前沿值(单位:像素)。 | qcom,mdss-dsi-v- front-porch = <8>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-v-pulse-width | 垂直脉冲宽度。 | qcom,mdss-dsi-v- pulse-width = <4>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-h-left-border | 水平左边框(单位:像素)。0 = 默认值 | qcom,mdss-dsi-h-left-border = <0>; | 保持不变 |
qcom,mdss-dsi-h-right-border | 水平右边框(单位:像素)。0 = 默认值 | qcom,mdss-dsi-h- right-border = <0>; | 保持不变 |
qcom,mdss-dsi-v-top-border | 垂直上边框(单位:像素)。0 = 默认值 | qcom,mdss-dsi-v- top-border = <0>; | 保持不变 |
qcom,mdss-dsi-v-bottom-border | 垂直下边框(单位:像素)。0 = 默认值 | qcom,mdss-dsi-v- bottom-border =<0>; | 保持不变 |
qcom,mdss-dsi-border-color | 如有边框,定义边框颜色值。0 = 默认值。 | qcom,mdss-dsi-border-color = <0>; | 保持不变 |
qcom,mdss-dsi-panel-timings | 长度为 12 的数组,用于指定面板的PHY 定时设置。 | qcom,mdss-dsi-panel-timings = [92 1A 12 00 3E 42 161E 14 03 04 00]; | 开始尝试启动此面板时保持不变;如果面板启动失败,请创建用例,帮助微调参数 |
qcom,mdss-dsi-virtual- channel-id | 指定虚拟频道标识符。0 = 默认值。 | qcom,mdss-dsi-virtual-channel-id =<0>; | 保持不变 |
qcom,mdss-dsi-stream | 指定要使用的数据包流。 0 = 流 0(默认值) 1 = 流 1 |
qcom,mdss-dsi-stream = <0>; | 保持不变 |
qcom,mdss-dsi-on-command | 长度可变的数组,用于列举面板的 init命令。 关于格式,请参考 kernel\drivers\video\msm\mdss\mdss_dsi.h 中的 dsi_cmd_desc 结构定义。 由多个基于 qcom DSI 控制器协议的dcs 数据包构成的字节流。 字节 0 – DCS 数据类型字节 1 – 设置此字节表示这是独立数据包(无链)字节 2 – 虚拟频道编号字节 3 – 需要来自客户端的确认(dcs 读取命令)字节 4 – 在传输 dcs 命令后等待指定的毫秒数字节 5、6 – 按网络字节顺序列出的16 位长度字节 7 及以上 – 净荷的字节数 |
qcom,mdss-dsi-on- command =[ 32 01 00 00 00 0002 00 00 29 01 00 00 10 00 02 FF 99]; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-off-command | 长度可变的数组,用于列举面板关闭 命令。 | qcom,mdss-dsi-off-command =[ 05 01 00 00 32 02 28 00 05 01 00 00 7802 10 00]; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-on-command-state | 指定用于发送 ON 命令的控制状态的字符串。 "dsi_lp_mode" = DSI 低功率模式(默认值) "dsi_hs_mode" = DSI 高速模式 |
qcom,mdss-dsi-on- command-state ="dsi_lp_mode"; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-off-command- state | 指定用于发送 OFF 命令的控制状态的字符串。 "dsi_lp_mode" = DSI 低功率模式(默认值) "dsi_hs_mode" = DSI 高速模式 |
qcom,mdss-dsi-off- command-state ="dsi_hs_mode"; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-color-order | 指定 R、G 和 B 通道排序。 "rgb_swap_rgb" =DSI_RGB_SWAP_RGB(默认值) "rgb_swap_rbg" =DSI_RGB_SWAP_RBG "rgb_swap_brg" = DSI_RGB_SWAP_BRG "rgb_swap_grb" = |
qcom,mdss-dsi-color-order = "rgb_swap_rgb"; | 根据您的面板规格进行定制 |
DSI_RGB_SWAP_GRB "rgb_swap_gbr" =DSI_RGB_SWAP_GBR |
|||
qcom,mdss-dsi-underflow-color | 指定面板下溢颜色的控制器设置。0xff = 默认值。 | qcom,mdss-dsi-underflow-color =<0xff>; | 保持不变 |
qcom,mdss-dsi-h-sync-pulse | 指定面板的脉冲模式选项。 0 = 不在 vs/ve 数据包之后发送hsa/he(默认值) 1 = 在 vs/ve 数据包之后发送 hsa/he |
qcom,mdss-dsi-h-sync-pulse = <1>; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-hfp-power- mode | 用于确定水平前沿(HFP)空白期的DSI 通道状态的布尔值 | qcom,mdss-dsi-hfp-power-mode; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-hbp-power- mode | 用于确定水平后沿(HBP)空白期期间的 DSI 通道状态的布尔值。 | qcom,mdss-dsi-hbp-power-mode; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-hsa-power- mode | 用于确定水平同步活跃(HSA)模式 期间的 DSI 通道状态的布尔值。 | qcom,mdss-dsi-hsa-power-mode; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-bllp-eof-Power- mode |
用于确定低功率空白期(BLLP)EOF 模式期间的 DSI 通道状态的布尔值。 | qcom,mdss-dsi-bllp-eof-power-mode | 根据您的面板规格进行定制 |
qcom,mdss-dsi-bllp-power- mode | 用于确定低功率空白期(BLLP)模式 期间的 DSI 通道状态的布尔值。 | qcom,mdss-dsi-bllp-power-mode; | 根据您的面板规格进行定制 |
qcom,mdss-dsi-traffic-mode | 指定面板流量模式。 "non_burst_sync_pulse" = 使用同步脉冲的非突发流量(默认值)。 "non_burst_sync_event" = 使用同步 启动事件的非突发流量。 "burst_mode" = 突发模式。 |
qcom,mdss-dsi-traffic-mode = "burst_mode" | 根据您的面板规格进行定制 |
qcom, mdss-dsi-lane-0-state | 指定是否启用数据通道 0 的布尔值。 | qcom, mdss-dsi-lane-0-state | 根据您的面板规格进行定制 |
qcom, mdss-dsi-lane-1-state | 指定是否启用数据通道 1 的布尔值。 | qcom, mdss-dsi-lane-1-state | 根据您的面板规格进行定制 |
qcom, mdss-dsi-lane-2-state | 指定是否启用数据通道 2 的布尔值。 | qcom, mdss-dsi-lane-2-state; | 根据您的面板规格进行定制 |
qcom, mdss-dsi-lane-3-state | 指定是否启用数据通道 3 的布尔值。 | qcom, mdss-dsi-lane-3-state; | 根据您的面板规格进行定制 |
qcom, mdss-dsi-t-clk-post | 指定模式切换后的字节时钟周期。 | qcom, mdss-dsi-t- clk-post = <0x04>; |
开始尝试启动此面板 时保持不变;如果面 板启动失败,请创建 用例,帮助微调参数 |
qcom, mdss-dsi-t-clk-pre | 指定模式切换前的字节时钟周期。 | qcom, mdss-dsi-t-c-pre = <0x1C>; | 开始尝试启动此面板时 保持不变;如果面板启 |
qcom, mdss-dsi-dma-trigger | 指定用于 DMA 路径的触发机制。"none" = 无触发 "trigger_te" = 断开用于触发的检查信 号线 "trigger_sw" = 由软件触发(默认设置) "trigger_sw_seof" = 软件触发和帧触发的开始/结束。 "trigger_sw_te" = 软件触发和 TE |
qcom, mdss-dsi-dma-trigger = "trigger_sw"; | 保持不变 |
qcom, mdss-dsi-mdp-trigger | 指定用于 MDP 路径的触发机制。 "none" = 无触发 "trigger_te" = 断开用于触发的检查信号线 "trigger_sw" = 由软件触发(默认设置) "trigger_sw_te" = 软件触发和 TE |
qcom, mdss-dsi-mdp-trigger = "none"; | 保持不变 |
qcom, mdss-dsi-bl-pmic- control-type | 指定对此面板实施背光控制的字符串。 |
qcom, mdss-dsi-bl- pmic-control-type = "bl_ctrl_wled"; (White Light Emitting Diode) |
根据您的面板规格进行定制 |
"bl_ctrl_pwm" = 由 PWM GPIO 控制的背光。 "bl_ctrl_wled" = 由 WLED 控制的背光。 "bl_ctrl_dcs" = 由 DCS 命令控制的背光。 其他:未知背光控制。(默认值) |
|||
qcom, mdss-dsi-reset- sequence | 列出重置 GPIO 值和睡眠序列的数组 每个命令具有下面定义的格式: --> 重置 GPIO 值 --> 睡眠值(毫秒) |
qcom, mdss-dsi-reset-sequence =<1 2>, <0 10>, <1 10>; | 根据您的面板规格进行定制 |
qcom, mdss-dsi-bl-min-level | 指定面板支持的最低背光级别。0 = 默认值。 | qcom, mdss-dsi-bl-min-level = <1>; | 保持不变 |
qcom, mdss-dsi-bl-max-level | 指定面板支持的最高背光级别。255 = 默认值。 | qcom, mdss-dsi-bl- max-level = <255>; | 保持不变 |
qcom, mdss-dsi-lane-map | 指定数据通道交换配置。 "lane_map_0123" = <0 1 2 3>(默认值) "lane_map_3012" = <3 0 1 2> "lane_map_2301" = <2 3 0 1> "lane_map_1230" = <1 2 3 0> "lane_map_0321" = <0 3 2 1> "lane_map_1032" = <1 0 3 2> " lane_map_2103" = <2 1 0 3> "lane_map_3210" = <3 2 1 0> |
qcom, mdss-dsi-lane-map = "lane_map_0123"; | 根据您的面板规格进行定制 |
附录:Mipi中CMD和VDO模式的区别
Mipi两种应用模式:VDO(video mode)是视频模式,CMD是commond mode命令模式
与传统工作模式RGB接口相似,由于不使用专用的数据信号传输同步,控制信号和RGB数据都以mipi总线传输,主机需要定期刷新显示器,显示器就不需要帧缓冲器。
Dsi虽然不需要帧缓冲器,但主机定期以告诉模式发送dsi视频文报,消耗了大量的CPU资源。
所以一般在选择driver的时候根据项目要求以下情况来选择:
IC型号——MIPI接口——SYNC模式——分辨率——平台——模组厂商
高通LCD开发常见问题&分析的更多相关文章
- linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
- linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
- 高通Android display架构分析
目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...
- 高通LCD驱动调试
本文转载自:http://www.itgo.me/a/x6305658852004979994/lcd%20qcom 来自 :http://blog.csdn.net/dacaozuo/article ...
- 高通android开发摘要
一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...
- 高通LCD的pwm背光驱动
发生异常的现象: msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭:测量高通pwm,发现正常的时候pwm的管脚LCM_BL_PWM为低电平,失败的时候为高电平: 根据原理图: mpp是什么? ...
- 高通MSM8255 GPS 调试分析&&Android系统之Broadcom GPS 移植【转】
本文转载自:http://blog.csdn.net/gabbzang/article/details/12063031 http://blog.csdn.NET/dwyane_zhang/artic ...
- 微信小程序开发常见问题分析
距离微信小程序内测版发布已经有十几天的时间了,网上对微信小程序的讨论也异常火爆,从发布到现在微信小程序一直占领着各种技术论坛的头条,当然各种平台也对微信小程序有新闻报道,毕竟腾讯在国内影响力还是很大的 ...
- 高通android开发缩写
1.TLMM MSM TLMM pinmux controller,Qualcomm MSM integrates a GPIO and Pin mux/config hardware, (TOP L ...
- 使用高通SDK开发AR应用
具体AR是什么效果我这里就不说了,直接上过程: 1.去官网注册一个帐号https://developer.vuforia.com 2.下载SDK for Unity,并导入Unity 3.点击Deve ...
随机推荐
- LLM应用实战:当KBQA集成LLM(二)
1. 背景 又两周过去了,本qiang~依然奋斗在上周提到的项目KBQA集成LLM,感兴趣的可通过传送门查阅先前的文章<LLM应用实战:当KBQA集成LLM>. 本次又有什么更新呢?主要是 ...
- 简说python之初连ORACLE数据库
目录 Python操作Oracle数据库 1.安装cx_Oracle模块 2.安装oracle客户端 3.python操作oracle示例 4.配置TNS 5.通过tns连接数据库的python 通过 ...
- docker 完美部署gitea
效果: docker-compose version: "3" networks: gitea: external: false services: server: image: ...
- tomcat(2)- tomcat目录结果和配置文件
目录 1 Tomcat目录结构 2 Tomcat的配置文件 2.1 server.xml配置文件 2.2 server.xml配置文件结构 2.3 WEB应用自动部署 2.4 配置文件各个组件的关联 ...
- 纯JS实现多张图片无缝滚动和多张图片上下滚动的效果--JavaScript实例集锦(初学)
我们会看到很多的网站上会使用多张图片无缝滚动的效果. 下面我就介绍几种纯JS实现多张图片的无缝滚动,并实现鼠标移到图片上运动停止的效果,可以控制图片左右滚动.1.效果展示: 代码实现: <!DO ...
- linux下安装来自github的package失败
最近使用go来做web服务器,当然还是得使用框架,于是找了几个:beego.echo等,但是我在安装得时候总是出现这类报错 cannot find package "github.com/l ...
- vulnhub靶场 --> JANGOW: 1.0.1
靶机下载地址 JANGOW: 1.0.1 << 点我下载 开始打靶 IP发现 nmap扫描网段发现靶机ip:192.168.111.140 端口发现 对靶机进行常规端口扫描 访问网站 访问 ...
- Hive笔记01
hive如何实现两个区域人均利润一样的时候,排名一样,出现1.2.2.3.4,这种重复排名的情况? 方案一 在Hive中,可以使用窗口函数和排名函数来实现重复排名的情况.具体步骤如下: 使用窗口函数计 ...
- C#中位枚举(Flags)
在日常的开发工作当中,位枚举可能会被经常使用,如星期多选.租期多选等等,我们可以将多选字段做或运算,然后保存到数据库表的字段中,如 1 | 2 = 3(0001 | 0010 = 0011 = 3). ...
- mysql存储地理信息的方法
MySQL 存储地理信息通常使用 GEOMETRY 数据类型或其子类型(如 POINT, LINESTRING, POLYGON 等).为了支持这些数据类型,MySQL 提供了 SPATIAL 索引, ...