KDocs 研发资料库
  • 屏融合应用方案入口汇总
  • JL701N穿戴客述问题FAQ
  • JL701N穿戴类补丁list
  • 手表软件调试
  • JL701手表硬件设计注意事项 总结
  • 手表烧录_升级工具说明
  • 手表量产相关
  • 生产烧录KEY及代码和升级代码
  • AC695N系列手表SDK开发指南
  • JL7012A手表-SDK入门指南V1.0
  • 穿戴手表JL701N-入门到进阶开发指导
  • 彩屏充电仓JL701N LVGL入门到进阶指导文档
  • AC695N手表软硬件问题整理
  • JL701N手表软硬件问题整理
  • 701n手表SDK共性问题汇总
  • UI效果参考demo文档
  • 屏幕触摸驱动相关参考
  • 穿戴类支付宝支付流程
  • AC701N_PMU_介绍
  • 经典蓝牙相关接口说明
  • music应用详细设计说明书
  • music_player接口设计说明文档
  • PO声测试以及处理方法
  • DAC性能测试指南
  • 杰理串口升级规范
  • AC696N串口升级说明
  • AC695N系列手表UI开发指南
  • AC695N添加升级UI说明文档.
  • UI布局工具使用说明
  • UI接口设计说明书
  • UI工具快速使用说明
  • 701N_UI编辑工具用户手册
  • UI工程源文件升级工具使用说明
  • 701N屏幕驱动配置说明
  • JL701N 2D图形硬件加速接口使用说明
  • JL701_watch常用例子参考
  • JL_WATCH_SDK UI相关工具使用文档
  • 智能手表音频 设计调试手册 V1.2
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 701手表 PCBA产测工具使用说明书 V1.0
  • 杰理定频问题排查2021.1.26
  • BQB5.4 20231007
  • 各类概率性死机调试解决指南
  • 不开机问题处理汇总(仅供参考)
  • 蓝牙搜索不到问题处理汇总(仅供参考)
  • 样机发烫(仅供参考)
  • 蓝牙音乐卡顿问题处理汇总(仅供参考)
  • 充电问题处理汇总(仅供参考)
  • 触摸问题处理汇总(仅供参考)
  • 功耗调试指导
  • JL701N穿戴客述问题FAQ
  • 701N 开发板新屏幕驱动修改
  • AC701 nandflash A8图片显示问题
  • 支付宝乘车码接入资料
  • 多国语言及字库使用指南
  • 查看C程序Flash 和RAM 资源占用说明文档
  • 701N_SDK3.0.1_OPUS_OGG 编解码
  • 蓝牙在线调eq说明
  • BR EDR BLE 蓝牙性能测试配置方法_
  • BLE-HID
  • BLE-HID 调试文档
  • 【问题】701v301外置flash播放wts提示音
  • 本地录音开启及调试
  • 死机分析
  • 表盘传输APP层的压缩算法
  • 功能模版:JL701_V301_UI资源使用FAT文件系统demo
  • JL7013+4G CAT1 参考设计原理图
  • 吾爱4G模组+JL701接口说明
  • (电脑一拖多)手表升级dongle工具使用补充说明
  • 蓝牙接口使用说明
  • ble 开发流程
  • 彩屏仓功耗优化
  • 彩屏仓补丁list
  • 更新字库步骤
  • 支付宝硬件接入资料

希伯来语与印地语调试总结

📎 原始文档:https://www.kdocs.cn/l/cdAa8pAc27pQ 希伯来语与印地语调试总结
一、编写目的
二、更换.a文件
三、字库接口更换
(1)获取语言类型的接口调整为font_lang_get()
(2)确认偏移表是否打开
四、字库初始化
五、添加字库文件
六、字库接口介绍
七、示例

一、编写目的

由于字库文件有相应的调整,直接使用公版SDK显示希伯来语以及印地语可能会出现问题,故作此文记录调试过程,供其他测试人员参考。
*注意:以下步骤均是基于701n_watch_release_v 1.0.2进行。
目前希伯来语以及印地语显示中遇到的问题如下所示:

编 号遇到的问题原因解决办法
1希伯来语字符不能正常显示,具体表现为显示空白字库接口调整后,相应的接口没有进行替换更新接口,具体请查看第三点
2切换为印地语后,显示ascii码表字符只能显示字符的上面部分显示的高度没有设置好更新最新的font_new.a文件,具体请看第二点
3不断切换语言,多次切换印地语后导致卡死文件句柄在字库显示退出的时候没有关更新最新的font_new.a文件,具体请看第二点

其中希伯来语问题为字符不能正常显示,原因是更新库后还要改用新的接口,以及需要注意希伯来语不支持混合的问题;而印地语主要有ascii码表字符只能显示上面部分,以及多次切换印地语后导致卡死的问题,由于涉及到库里面的函数,需要更换.a文件进行处理。 目前以上问题均得以解决,具体步骤请看下文。

二、更换.a文件

用新的font_new.a替换掉sdk\cpu\br28\liba的同名文件,并在code blocks进行rebuild。

三、字库接口更换

因多国语言与字库接口分开,使用字库时,需要将ui_language_set和ui_language_get分别换成font_lang_set和 font_lang_get。在ui_platform.c中,需要进行以下调整:

(1)获取语言类型的接口调整为font_lang_get()

imageimageimage 使用希伯来语的话还需以下修改:
imageimage 1 if (font_lang_get() == Arabic || font_lang_get() == Hebrew)

(2)确认偏移表是否打开

image

1
2
3
4
5
if(font_lang_get() == MixAllLanguage){​
font_set_offset_table (lange_offset_table ) ;
​}else{​
font_set_offset_table (NULL) ;
​}

四、字库初始化

在fontinit.c中对相应的语言进行初始化
image 如上图所示,在宏定义中添加相应的标志位BIT(),并配置相应语言的字库文件,即可完成字库的初始化。值得注意的是,希伯来语不支持混合,需要将其混合关闭才能够正常使用:
imageimage 1 .language_id = Hebrew , //希伯来语
2 .flags = FONT_SHOW_PIXEL | FONT_SHOW_MULTI_LINE , [3](3 // .pixel.file.name =)[ // .pixel.file.name =](3 // .pixel.file.name =) (char *)FONT_PATH"F_Mix.PIX", [4](4 .ascpixel.file.name =)[ .ascpixel.file.name =](4 .ascpixel.file.name =) (char *)FONT_PATH"F_CP1255.PIX", [5](5 .tabfile.name =)[ .tabfile.name =](5 .tabfile.name =) (char *)FONT_PATH"F_CP1255.TAB", 6 .isgb2312 = false ,
7 .bigendian = false ,
8 .putchar = platform_putchar ,
如上图所示,需要将F_Mix. PIX去掉,并将F_Mix.TAB文件替换成F_CP1255.TAB。印地语则保持默认配置即可,如下所示:
image 1 .language_id = Indic , //印地语
2 .flags = FONT_SHOW_PIXEL | FONT_SHOW_MULTI_LINE , [3](3 .pixel.file.name =)[ .pixel.file.name =](3 .pixel.file.name =) (char *)FONT_PATH"F_GB2312.PIX", [4](4 .ascpixel.file.name =)[ .ascpixel.file.name =](4 .ascpixel.file.name =) (char *)FONT_PATH"F_ASCII.PIX", [5](5 .tabfile.name =)[ .tabfile.name =](5 .tabfile.name =) (char *)FONT_PATH"F_GB2312.TAB", [6](6 .extfile.name =)[ .extfile.name =](6 .extfile.name =) (char *)FONT_PATH"F_UNICO.PIX", [7](7 .gposfile.name =)[ .gposfile.name =](7 .gposfile.name =) (char *)FONT_PATH"gpos.bin",
8 .isgb2312 = false ,
9 .bigendian = false ,
10 .putchar = platform_putchar ,
到此为止,字库的初始化以及希伯来语的配置修改已经完成,接下来需要添加对应的字库文件。

五、添加字库文件

将需要用到的语言所需的. PIX、 .TAB等字库文件拷贝sdk\cpu\br28\tools\ ui_resource路径下,并对
sdk\cpu\br28\tools\download\watch下的download. bat文件进行编辑,添加所需的字库文件,如下图所示:
image 这个时候就可以对相应语言进行显示了。

六、字库接口介绍

在ui_text. h中,有以下字库接口:
image 其中主要分为带id的与不带id的,带id的接口自带刷新,一般在定时器的回调函数中使用,而不带id的接口需要手动刷新后才能够显示,一般在onchange事件中使用。

七、示例

demo1:
在相应文字控件上显示印地语字符:
imageimage demo2:
通过定时器在两个控件中分别显示ascii码表的内容和对应语言的字符,每隔500ms切换一次语言并显示相应内容。

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
static u8 *hb_test = " מבחן קוד שלום " ;
static u8 *hb_test1 = "hebrew_12/3/4/ 5 " ;
static u8 *hb_test2 = " מבחן קוד שלום " ;
static u8 *hb_test3 = " indic_345%! , .?& " ;
static u8 *hb_test4 = " 345 अꃀ񞴾 " ;
static u8 *hb_test5 = "hello_china@#% " ;//हैलो 345 अꃀ񞴾 static u8 *hb_test6 = "你好中国" ;//अꃀ񞴾
static u8 *hb_test7 = "`@#$%^ , ./ " ;//अꃀ񞴾 static u8 *hb_test8 = "你好" ;//अꃀ񞴾
static u8 *hb_test9 = "एक परी∜ण कोड " ;//अꃀ񞴾
static void Hebrew_show_timer(void *priv )
{​
static lang_num = 0 ;
mem_stats();
switch (lang_num){​
case 0 :
font_lang_set(Indic ) ;
ui_text_set_textu_by_id(HEBREW_1 , (char * )hb_test3 , strlen(hb_test3) , FONT_DEFAULT) ;
ui_text_set_textu_by_id(HEBREW_WEATHER , (char * )hb_test4 , strlen(hb_test4) , FONT_DEFAULT) ;
break ;
case 1 :
font_lang_set(Hebrew) ;
ui_text_set_textu_by_id(HEBREW_1 , (char * )hb_test1 , strlen(hb_test1) , FONT_DEFAULT) ;
ui_text_set_textu_by_id(HEBREW_WEATHER , (char * )hb_test2 , strlen(hb_test2) , FONT_DEFAULT) ;
break ;
case 2 :
font_lang_set(Chinese_Simplified);
ui_text_set_textu_by_id(HEBREW_1 , (char * )hb_test5 , strlen(hb_test5) , FONT_DEFAULT) ;
ui_text_set_textu_by_id(HEBREW_WEATHER , (char * )hb_test6 , strlen(hb_test6) , FONT_DEFAULT) ;
break ;
default :
break ;​} lang_num++;
if(lang_num > 2 )
lang_num = 0 ;​}
static int HEBREW_onchange(void *ctr , enum element_change_event e , void *arg){​

image 45 struct ui_text *text = ( struct ui_text * )ctr; 46
47 static int timer = 0 ;
48 switch (e ) {​
49 case ON CHANGE INIT :
50 if(!timer){​
51 timer = sys_timer_add(NULL , Hebrew_show_timer , 500) ; 52 ​}
53 break ;
54 case ON CHANGE SHOW :
55 break ;
56 case ON CHANGE RELEASE :
57 if(timer){​
58 sys_timeout_del (timer) ;
59 timer = 0 ; 60 ​}
61 break ;
62 default :
63 return FALSE; 64 ​}
65 return FALSE; 66 ​}