61阅读

接口说明文档-手电通说明文档

发布时间:2018-01-19 所属栏目:接口文档

一 : 手电通说明文档

手电通说明文档

手电通是一款Android系统手机与电脑连接通信的软件。

采用了定时器、android蓝牙通信、wifi通信、usb连接、重力感应、滑动、采用单例模式等技术来实现。

这里对只对类里面的重要的方法进行说明

手电通目录说明

Com.jiajia.activity:

程序的Activity类集合

1. BaseActivity:公共的Activity继承的Activity类

2. MainActivity:打开程序出现的界面的Activity类

3. MessageActivity:MainActivity的下一步,连接界面的Activity类

4. LinkBWActivity:连接的Activity类

5. HomeActivity:主界面的Activity类

6. MoukeyActivity:键鼠模式的Activity类

7. StickActivity:体感模式的Activity类

8. RacingActivity:赛车模式的Activity类

9. HelpActivity:帮助页面的Activity类

10. HelpGallery:帮助页面的自定义滑动类

11. Setting:Activity的持久化的设置的类

Com.jiajia.listener:

程序的重力感应监听器

1. GravityListener:重力感应器的类

用到场所:体感模式和赛车模式被用到

getAxis():获取重力感应数组的方法(x, y, z)

onSensorChanged():重力感应改变的方法

Com.jiajia.service:

蓝牙、wifi、usb连接的接口

1. DataService:蓝牙、wifi、usb连接的接口类

提供了这些连接公用的方法

Com.jiajia.service.bluetooth:

蓝牙连接的类集合

1. DataServiceImpl:蓝牙连接的入口类。这里创建蓝牙连接等

Connect():连接服务的方法

Connected():创建通讯读写的方法

Disconnect():断开连接的方法

Start():启动服务的方法

Write():写入数据

getState():获取服务状态

setState():设置服务状态

2. ThreadAccept:启动蓝牙

3. ThreadWriter:蓝牙的通信类

Com.jiajia.service.wifi:

Wifi和usb连接的类的集合、wifi和usb连接采用的同一个socket通信,区别是usb的地址是127.0.0.1,wifi的不是127.0.0.1

都采用的相同的端口

1. DataServiceImpl:wifi和usb连接的入口类。这里创建蓝牙连接等

Connect():连接服务的方法

Connected():创建通讯读写的方法

Disconnect():断开连接的方法

Start():启动服务的方法

Write():写入数据

getState():获取服务状态

setState():设置服务状态

2. ThreadAccept:启动wifi或usb的Socket

3. ThreadWriter:wifi或usb的通信类

Com.jiajia.timer:

定时器类

DataTimer:定时器类

Com.jiajia.util:

工具类的集合

1. AppContext:系统配置类

Exit():完全退出系统的方法

addActivity():添加Activity到list集合的方法

setActivity():设置当前的Activity

setDataService():设置当前连接的DataService的对象

2. DataConfig:数据配置类

3. DataSender:发送数据类

Send():发送数据

Type:为发送的数据类型

Data:为发送的数据

sendOperationType():发送当前操作类型的数据,这里为发送单个字节

4. JIAUpdate:检测软件自动跟新类

checkForUpdate():检测是否有跟新的版本(外部只用到了这一个方法)

5. JIAVbrator:软件震动的类

Vibrate():震动感应,默认30毫秒

Vibrate(int mis):震动感应,自定义震动的毫秒

6. Keyborad:软键盘数据定义类

writeKeycodeStringData():发送字符串的方法

writeKeyCodeData():发送指定单个字符的方法

还有一个相同的方法,是系统软键盘的发送发放(没用到了)

7. LightHandler:配置灯亮或灯暗的类

8. Position:控件的坐标的配置的类

Res.anim:

帮助页滑动的配置文件

Res.drawable-hdpi:

项目的图片和图片的配置文件

Res.layout:

项目的Activity的xml配置文件

1. connecter:进入界面的List选着的样式

2. home:主界面HomeActivity

3. help:帮助HelpActivity

4. message:连接MessageActivity

5. moukey:键鼠模式MoukeyActivity

6. moukey_modle_game:键鼠模式-游戏键功能(MoukeyActivity)

7. moukey_modle_novel:键鼠模式-IE看小说(MoukeyActivity)

8. moukey_modle_ppt:键鼠模式-PPT模式(MoukeyActivity)

9. moukey_modle_video:键鼠模式-音乐模式(MoukeyActivity)

10. racing_needforspeed:赛车模式-极品飞车(RacingActivity)

11. racing_popkart:赛车模式-跑跑卡丁车(RacingActivity)

12. racing_qqspeed:赛车模式-QQ飞车(RacingActivity)

13. racing_training:赛车模式-通用模式(RacingActivity)

14. stick:体感模式StickActivity

15. warning:进入体感模式前的提示

Res.raw:

项目的资源文件。这里主要是一个mp3文件

1. unlock:赛车模式-极品飞车的功能键选着后的提示声音 Res.values:

项目的字符串配置文件

1. strings:项目的字符串配置文件

手电通发布版本修改注意事项

修改AndroidManifest.xml文件(如下图):

修改res.values.strings.xml文件(如下图):

修改com.jiajia.util.JIAUpdate.java自动跟新的文件(如下图):

二 : DSOframer文档保存和接口说明

dsoframer是微软提供一款开源的基于web的officeActiveX控件,国内有达人在源码的基础上做了很多修改,增强了控件的功能。其实基于web的office是一个很鸡肋的东西,没有什么存在的意义。唯一的一点就是看上去比较花哨,你瞧,在浏览器上打开word文档,多吊啊。不知道原版dsoframer是否带有直接保存文档至服务器的功能,不过我手头上的一个改良版本的确是有此功能。

控件附带说明给出了保存文档至服务器的javascript函数,如:

function SaveToWeb()
{
document.all.FramerControl1.HttpInit();
document.all.FramerControl1.HttpAddPostCurrFile("FileData","mydoc.doc");
var err =document.all.FramerControl1.HttpPost("Http://202.114.12.137/newvan/pm/auxi/SaveDoc.aspx");
if (!err)
alert('保存失败!');
else
alert('保存成功!');
}


由此可见,关键问题是如何实现SaveDoc.aspx模块。于是乎在网上搜索相应的解决方案,但没有一个能在服务器上成功保存正确的文件。失望之余索性将原文档和上传文档用UltraEdit打开进行二进制级比较,然后抓包分析POST数据时http数据包的格式,最后终于找到了解决的办法,贴出来供遇到同样问题的朋友参考,代码如下:

BinaryReader bReader = newBinaryReader(Request.InputStream);
string strTemp =Encoding.GetEncoding("iso-8859-1").GetString(
bReader.ReadBytes((int)bReader.BaseStream.Length), 0,(int)bReader.BaseStream.Length);
string match = "Content-Type: application/msword\r\n\r\n";
int pos = strTemp.IndexOf(match) + match.Length;
bReader.BaseStream.Seek(pos, SeekOrigin.Begin);

string newFile = Server.MapPath(".") + "\\MyFile2.doc";
FileStream newDoc = new FileStream(newFile, FileMode.Create,FileAccess.Write);
BinaryWriter bWriter = new BinaryWriter(newDoc);
bWriter.BaseStream.Seek(0, SeekOrigin.End);


while (bReader.BaseStream.Position < bReader.BaseStream.Length -38)
bWriter.Write(bReader.ReadByte());

bReader.Close();
bWriter.Flush();
bWriter.Close();


这里应该注意的是,从字节流中获取字符串时一定要采用iso-8859-1的编码方式,不要采用utf-8或其他,因为utf-8会将asci字符也扩展成相应的unicode双字节形式。原理很简单,代码面前了无秘密。

DSOFramer原有的接口说明
===================================================================
DSOFramer原有的接口说明
1.void CreateNew(BSTR ProgIdOrTemplate)
新建文档,
其中: ProgIdOrTemplate参数:
Excel Spreadsheet "Excel.Sheet"
Excel Chart "Excel.Chart"
PowerPoint Presentation "PowerPoint.Show"
Project Project "MSProject.Project"
Visio Drawing "Visio.Drawing"
Word Document "Word.Document"
2. HRESULT Open([in] VARIANT Document, [in, optional] VARIANTReadOnly,
[in, optional] VARIANT ProgId, [in, optional] VARIANT WebUsername,[in, optional] VARIANT WebPassword)
打开文档,可以是本地文件或者是服务器文件
参数:
Document 文档路径
ReadOnly 是否已只读模式打开
ProgId OLE类型
WebUsername 用户名(访问网络的文件时候,有可能需要)
WebPassword 密码
例子:
DsoFramer1.Open "C:\TestBook.xls"
DsoFramer1.Open "C:\Plain.txt", , "Word.Document"//用Word来打开c:\plain.txt文件
DsoFramer1.Open "https://secureserver/test/mytest.asp?id=123", True,"Excel.Sheet", "MyUserAccount", "MyPassword"

3.HRESULT Save([in, optional] VARIANT SaveAsDocument, [in,optional] VARIANT OverwriteExisting,
[in, optional] VARIANT WebUsername, [in,optional] VARIANT WebPassword);
保存文件在本地
DsoFramer1.Save "c:\1.doc"

4.Activate
激活当前文档,没搞明白有什么用
5. HRESULT ActiveDocument([out,retval] IDispatch** ppdisp);
返回当前活动文档的Dispatch接口,这个接口很重要,可以通过这个接口,操作所有的文档接口。
如:下面 javascript 语句调用Office内置的对话框
var obj;
obj = new Object(document.all.FramerControl1.ActiveDocument);
if(obj !=null){
var dd;
dd = obj.Application.Dialogs(84).Show();
//... ...
//delete it
delete obj;
}
6. HRESULT Close();
关闭当前文档,建议在页面关闭的时候调用。
MS的原来的版本,有时候关不掉Word,已经修复了。
7. HRESULT Caption([out,retval] BSTR* pbstr);
属性,获取|设置窗口标题
8. HRESULT Titlebar([in] boolean vbool);
HRESULT Titlebar([out,retval] boolean*pbool);
显示或者隐藏标题栏
9. HRESULT Toolbars([in] boolean vbool);
HRESULT Toolbars([out,retval] boolean*pbool);
显示或者隐藏工具栏
10. HRESULT ModalState([in] boolean vbool);
HRESULT ModalState([out,retval] boolean*pbool);

11.HRESULT ShowDialog([in] dsoShowDialogType DlgType);
显示对话框
12.HRESULT EnableFileCommand([in] dsoFileCommandType Item, [in]boolean vbool);
HRESULT EnableFileCommand([in]dsoFileCommandType Item, [out,retval] boolean* pbool);


13. HRESULT BorderStyle([in] dsoBorderStyle style);
HRESULT BorderStyle([out, retval]dsoBorderStyle* pstyle);

14. HRESULT BorderColor([in] OLE_COLOR clr);
HRESULT BorderColor([out,retval] OLE_COLOR*pclr);

15. HRESULT BackColor([in] OLE_COLOR clr);
HRESULT BackColor([out,retval] OLE_COLOR*pclr);

16.HRESULT ForeColor([in]OLE_COLOR clr);
HRESULT ForeColor([out,retval]OLE_COLOR*pclr);

17.HRESULT TitlebarColor([in] OLE_COLOR clr);
HRESULT TitlebarColor([out,retval] OLE_COLOR* pclr);

18.HRESULT TitlebarTextColor([in] OLE_COLOR clr);
HRESULT TitlebarTextColor([out,retval]OLE_COLOR* pclr);

19.HRESULT ExecOleCommand([in] LONG OLECMDID, [in, optional]VARIANT Options, [in, optional] VARIANT* vInParam, [in, out,optional] VARIANT* vInOutParam);

20.HRESULT Menubar([in] boolean vbool);
HRESULT Menubar([out,retval] boolean*pbool);
21.HRESULT HostName([in] BSTR bstr);
HRESULT HostName([out,retval] BSTR*pbstr);

22. HRESULT DocumentFullName([out,retval] BSTR* pbstr);
文档的路径
23.HRESULT PrintOut([in, optional] VARIANT PromptUser, [in,optional] VARIANT PrinterName, [in, optional] VARIANT Copies,
[in, optional] VARIANT FromPage, [in, optional]VARIANT ToPage, [in, optional] VARIANT OutputFile);

24.HRESULT PrintPreview();

25.HRESULT PrintPreviewExit();
26.HRESULT IsReadOnly([out,retval] boolean* pbool);
是否为只读的。
27.HRESULT IsDirty([out,retval] boolean* pbool);
是否保存了,实际可以用来判读文档有没有修改
oframer.IsDirty = TRUE //文档没有保存,处于修改状态
oframer.IsDirty = FALSE //文档已经保存,没有修改
新加的接口说明(开发接口)
[color=red]当前版本:V2.2.0.8 2007-02-07
[/color]下载控件需要登录
说明:
控件未经大批量测试,难免有Bug,
发现 Bug,请及时发帖或者Mail:wanhhf@gmail.com
版本修改记录:
V2.2.0.8修改:
增加了N多个事件,挺不错的东西
[id(DSOF_DISPID_WORD_DocumentChange),helpstring("DSOF_DISPID_WORD_DocumentChange")]
HRESULT WORD_DocumentChange();
[id(DSOF_DISPID_WORD_DocumentBeforePrint),helpstring("DSOF_DISPID_WORD_DocumentBeforePrint")]
HRESULT WORD_DocumentBeforePrint();
[id(DSOF_DISPID_WORD_WindowActivate),helpstring("DSOF_DISPID_WORD_WindowActivate")]
HRESULT WORD_WindowActivate();
[id(DSOF_DISPID_WORD_WindowSelectionChange),helpstring("DSOF_DISPID_WORD_WindowSelectionChange")]
HRESULT WORD_WindowSelectionChange();
[id(DSOF_DISPID_WORD_WindowBeforeRightClick),helpstring("DSOF_DISPID_WORD_WindowBeforeRightClick")]
HRESULT WORD_WindowBeforeRightClick();
[id(DSOF_DISPID_WORD_WindowBeforeDoubleClick),helpstring("DSOF_DISPID_WORD_WindowBeforeDoubleClick")]
HRESULT WORD_WindowBeforeDoubleClick();
V2.2.0.6修改:
修改Open,参数为空时候,一个小 Bug
修改了URL过长时候一个Bug
增加了一个替换文字的接口
long ReplaceText(BSTR strSearchText, BSTRstrReplaceText, long lGradation);
V2.2.0.2修改:
修改了HttpPost相对路径的一些问题。
V2.2.0.0增加:
[id(0x00010041), helpstring("Get RevIndex")]
HRESULT GetRevCount( [out,retval] long *pbool);
[id(0x00010042), helpstring("Get Rev IndexInfo")]
HRESULT GetRevInfo([in] long lIndex, [in] longlType, [out,retval] BSTR* pbool);
[id(0x00010043), helpstring("Set DocProp")]
HRESULT SetValue([in] BSTR strValue, [in] BSTRstrName, [out,retval] long* pbool);
[id(0x00010044), helpstring("Set DocVariable")]
HRESULT SetDocVariable([in] BSTR strVarName,[in] BSTR strValue,[in] long lOpt, [out,retval] long* pbool);
[id(0x00010045), helpstring("Save page ToDoc")]
HRESULT SetPageAs([in] BSTR strLocalFile, [in]long lPageNum, [in] long lType,[out,retval] long* pbool);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
LoadDso.js
var s = ""
s += "
s += "classid=clsid:00460182-9E5E-11D5-B7C8-B8269041DD57codeBase=DSOFramer.ocx#Version=2,2,0,6' >"
s += "
"
document.write(s)
--------------------------------------------[www.61k.com]------------------------------------------------------------------------------------------------------------------------
接口文档:

//新建Word
document.all.FramerControl1.CreateNew("Word.Document");
//新建Excel
document.all.FramerControl1.CreateNew("Excel.Sheet");

//打开制定的本地文件
document.all.FramerControl1.Open("C:\\TestBook.xls");
//制定用Word来打开c:\plain.txt文件
document.all.FramerControl1.Open("C:\\Plain.txt",false,"Word.Document");
//打开服务器的文件
document.all.FramerControl1.Open "https://secureserver/test/mytest.asp?id=123",true,"Excel.Sheet", "MyUserAccount", "MyPassword");
//打开服务器的文件
document.all.FramerControl1.Open("http://localhost/1.doc", true);


//到本地
document.all.FramerControl1.Save("c:\\1.doc",true);
//服务器

//初始化Http引擎
document.all.FramerControl1.HttpInit();
//增加Post变量
document.all.FramerControl1.HttpAddPostString("RecordID","20060102200");
document.all.FramerControl1.HttpAddPostString("UserID","李局长");
//上传打开的文件
document.all.FramerControl1.HttpAddPostCurrFile("FileData","文档名.doc");
//执行上传动作
document.all.FramerControl1.HttpPost("http://xxxx.com/uploadfile.asp");

//进入留痕状态
document.all.FramerControl1.SetTrackRevisions(1);
//进入非留痕状态
document.all.FramerControl1.SetTrackRevisions(0);
//接受当前修订
document.all.FramerControl1.SetTrackRevisions(4);

document.all.FramerControl1.SetCurrUserName("张三");

document.all.FramerControl1.SetCurrTime("2006:02:0711:11:11");

//在当前WORD位置插入标签,标签名为"book1",数值为"test"
document.all.FramerControl1.SetFieldValue("book1","test","::ADDMARK::");
//设置书签"Time",数值为"2006-03-16 22:22:22"
document.all.FramerControl1.SetFieldValue("Time","2006-03-1622:22:22","");
//在书签位置"hongtou",插入红头文件"http://222.222.222.222/hongtou1.doc"这样,红头就自动插进去了
document.all.FramerControl1.SetFieldValue("hongtou","http://222.222.222.222/hongtou1.doc","::FILE::");

//只有“新建”菜单可用
document.all.FramerControl1..SetMenuDisplay(1);
//只有“打开”菜单可用
document.all.FramerControl1.SetMenuDisplay(2);
//只有“打开”和“新建”菜单可用
document.all.FramerControl1.SetMenuDisplay(3);
/*

三 : 手电通说明文档

手电通说明文档

手电通是一款Android系统手机与电脑连接通信的软件。(www.61k.com)

采用了定时器、android蓝牙通信、wifi通信、usb连接、重力感应、滑动、采用单例模式等技术来实现。

这里对只对类里面的重要的方法进行说明

手电通目录说明

Com.jiajia.activity:

程序的Activity类集合

1. BaseActivity:公共的Activity继承的Activity类

2. MainActivity:打开程序出现的界面的Activity类

3. MessageActivity:MainActivity的下一步,连接界面的Activity类

4. LinkBWActivity:连接的Activity类

5. HomeActivity:主界面的Activity类

6. MoukeyActivity:键鼠模式的Activity类

7. StickActivity:体感模式的Activity类

8. RacingActivity:赛车模式的Activity类

9. HelpActivity:帮助页面的Activity类

10. HelpGallery:帮助页面的自定义滑动类

11. Setting:Activity的持久化的设置的类

Com.jiajia.listener:

程序的重力感应监听器

1. GravityListener:重力感应器的类

用到场所:体感模式和赛车模式被用到

getAxis():获取重力感应数组的方法(x, y, z)

onSensorChanged():重力感应改变的方法

Com.jiajia.service:

蓝牙、wifi、usb连接的接口

1. DataService:蓝牙、wifi、usb连接的接口类

提供了这些连接公用的方法

手电通 手电通说明文档

Com.jiajia.service.bluetooth:

蓝牙连接的类集合

1. DataServiceImpl:蓝牙连接的入口类。[www.61k.com)这里创建蓝牙连接等

Connect():连接服务的方法

Connected():创建通讯读写的方法

Disconnect():断开连接的方法

Start():启动服务的方法

Write():写入数据

getState():获取服务状态

setState():设置服务状态

2. ThreadAccept:启动蓝牙

3. ThreadWriter:蓝牙的通信类

Com.jiajia.service.wifi:

Wifi和usb连接的类的集合、wifi和usb连接采用的同一个socket通信,区别是usb的地址是127.0.0.1,wifi的不是127.0.0.1

都采用的相同的端口

1. DataServiceImpl:wifi和usb连接的入口类。这里创建蓝牙连接等

Connect():连接服务的方法

Connected():创建通讯读写的方法

Disconnect():断开连接的方法

Start():启动服务的方法

Write():写入数据

getState():获取服务状态

setState():设置服务状态

2. ThreadAccept:启动wifi或usb的Socket

3. ThreadWriter:wifi或usb的通信类

Com.jiajia.timer:

定时器类

DataTimer:定时器类

手电通 手电通说明文档

Com.jiajia.util:

工具类的集合

1. AppContext:系统配置类

Exit():完全退出系统的方法

addActivity():添加Activity到list集合的方法

setActivity():设置当前的Activity

setDataService():设置当前连接的DataService的对象

2. DataConfig:数据配置类

3. DataSender:发送数据类

Send():发送数据

Type:为发送的数据类型

Data:为发送的数据

sendOperationType():发送当前操作类型的数据,这里为发送单个字节

4. JIAUpdate:检测软件自动跟新类

checkForUpdate():检测是否有跟新的版本(外部只用到了这一个方法)

5. JIAVbrator:软件震动的类

Vibrate():震动感应,默认30毫秒

Vibrate(int mis):震动感应,自定义震动的毫秒

6. Keyborad:软键盘数据定义类

writeKeycodeStringData():发送字符串的方法

writeKeyCodeData():发送指定单个字符的方法

还有一个相同的方法,是系统软键盘的发送发放(没用到了)

7. LightHandler:配置灯亮或灯暗的类

8. Position:控件的坐标的配置的类

Res.anim:

帮助页滑动的配置文件

Res.drawable-hdpi:

项目的图片和图片的配置文件

手电通 手电通说明文档

Res.layout:

项目的Activity的xml配置文件

1. connecter:进入界面的List选着的样式

2. home:主界面HomeActivity

3. help:帮助HelpActivity

4. message:连接MessageActivity

5. moukey:键鼠模式MoukeyActivity

6. moukey_modle_game:键鼠模式-游戏键功能(MoukeyActivity)

7. moukey_modle_novel:键鼠模式-IE看小说(MoukeyActivity)

8. moukey_modle_ppt:键鼠模式-PPT模式(MoukeyActivity)

9. moukey_modle_video:键鼠模式-音乐模式(MoukeyActivity)

10. racing_needforspeed:赛车模式-极品飞车(RacingActivity)

11. racing_popkart:赛车模式-跑跑卡丁车(RacingActivity)

12. racing_qqspeed:赛车模式-QQ飞车(RacingActivity)

13. racing_training:赛车模式-通用模式(RacingActivity)

14. stick:体感模式StickActivity

15. warning:进入体感模式前的提示

Res.raw:

项目的资源文件。[www.61k.com)这里主要是一个mp3文件

1. unlock:赛车模式-极品飞车的功能键选着后的提示声音 Res.values:

项目的字符串配置文件

1. strings:项目的字符串配置文件

手电通 手电通说明文档

手电通发布版本修改注意事项

修改AndroidManifest.xml文件(如下图):

修改res.values.strings.xml文件(如下图):

手电通 手电通说明文档

手电通 手电通说明文档

手电通 手电通说明文档

修改com.jiajia.util.JIAUpdate.java自动跟新的文件(如下图):

手电通 手电通说明文档

四 : A10_Android内容定制说明文档V2.1 65

erTech-V2.1-9/19/2011

A10 Android内容定制说明文档

V2.1

Version

Ver1.0 Ver2.0 Ver2.1

Author

Chris Chris Chris

Date

2011/09/18 2011/11/14 2011/11/21

Description

Initiation

update with sdk2.0 Add motor shake

and gps

1. Crane A10定制化内容说明.......................................................................................................2

1.1. Android Logo及Boot Animation修改................................................................2 1.2. 设备相关信息修改...................................................................................................3 1.3. 预装APK...................................................................................................................4 1.4. 预设桌面方案..........................................................................................................5 1.5. 自定义按键..............................................................................................................5 1.6. Wifi配置.................................................................................................................7 1.7. LCD Panel的修改..................................................................................................10 1.8. Touch Panel的配置方法......................................................................................13 1.9. G-Sensor的配置方法............................................................................................15 1.10. Camera的配置方法................................................................................................18 1.11. 震动马达的配置....................................................................................................27 1.12. GPS的配置方法.....................................................................................................27 1.13. Boot电池充电图标配置说明................................................................................29 1.14. Recovery功能的使用............................................................................................29 2. Android标准常用修改.............................................................................................................31

2.1. 预定义动态壁纸....................................................................................................31 待续。。..................................................................................................................................31

erTech-V2.1-9/19/2011

1. Crane A10定制化内容说明

1.1. Android Logo及Boot Animation修改

(1)Boot阶段的logo:

A10上因启动速度比较快,所以目前没有加入boot阶段的logo;(A10上建议的开机方式为长按power键,一直到logo显示出来为止,这也是目前android平板及手机上的常见做法)

(2)Android启动Logo: 位置:android2.3\device\softwinner\ crane-xx\initlogo.rle 制作过程:将logo图片转化成24bpp或32bpp bmp图片,打开LogoGen目录下的BmpConvert工具,按照《BMPConvert_UserManual.doc》文档说明来生成所需的initlogo.rle文件; 说明:ARGB值是针对fb0_pixel_sequence=0的配置值,如果fb1_pixel_sequence = 2,则选择ABGR,fb0_pixel_sequence在sys_config1.fex中填写,是disp_init的一个子键; ;----------------------------------------------------------------------------------

;disp init configuration

;fbx pixel sequence (0:ARGB 1:BGRA 2:ABGR 3:RGBA) --- 0 for linux, 2 for android ;---------------------------------------------------------------------------------- [disp_init]

disp_init_enable = 1 ……

fb0_pixel_sequence = 2 ……

fb1_pixel_sequence = 2

(3)Boot Animation: 位置:android2.3\device\softwinner\ crane-xx\media\bootanimation.zip (根文件系统位置:/system/media/bootanimation.zip) bootanimation 格式:bootanimation.zip包含part1 part2文件夹和desc.txt,part0,part1 文件夹里面放的是动画拆分的图片,格式为png或jpg; desc.txt格式: 800 480 15

p 1 0 part0 p 0 0 part1

说明:800为宽度,480为高度,15为帧数,即每秒播放动画15帧;第一项p为标志符,第二项为循环次数,1为只播放1次,0为无限循环,第三项为两次循环之间间隔的帧数,第四项为对应的目录名(图片放在desc.txt中目录名指定的目录中,目录中按字符顺序播放)

打包:

erTech-V2.1-9/19/2011

1. windows使用winrar打包,选择ZIP格式,压缩标准要选“储存”; 2. linux下,zip -0 -r ../bootanimation.zip ./* linux命令使用-0指定压缩等级为最低等级stored,即只归档不压缩,否则可能由于包格式问题引起动画显示为黑屏

注意:打包时不要带上层目录;

打包完之后发到指定目录,修改其权限值: chmod 777 bootanimation.zip

(4)Boot logo及Animation文件的编译:

加入initlogo.rle和bootanimation.zip后,要修改编译文件的拷贝方法,在android2.3\device\softwinner\ crane-xx\crane_xx.mk文件中加入:

#initlogo and bootanimation PRODUCT_COPY_FILES += \ device/softwinner/crane-xx/media/bootanimation.zip:system/media/bootanimation.zip \ device/softwinner/crane-xx/initlogo.rle:root/initlogo.rle

分号前面标示源文件位置,后面标示编译后拷贝到的根文件系统位置; 1.2.

设备相关信息修改

(1)设备型号及软件版本等信息的修改

在编译后生成的android2.3.4\out\target\product\crane-xx\system\build.prop文件中记录了设置中的显示信息,常用的信息(设置—>关于设备)如下:

型号 ---》ro.product.model

固件版本---》gsm.version.baseband

Android版本---》ro.build.version.release 版本号 ---》ro.build.display.id 内核版本是动态读取出来的~ 修改方法:

1. 编译后直接在out\target\product\crane-xx\system\build.prop文件中修改以上信息再mkimg打包即可;

2. 源码中修改android2.3\device\softwinner\ crane-xx\crane_xx.mk,添加如下: #修改固件版本为V1.3

PRODUCT_PROPERTY_OVERRIDES += \ gsm.version.baseband=V1.3 #修改设备型号为ONDA MID(等效于在build.prop文件中修改ro.product.model=ONDA MID)

PRODUCT_MODEL := ONDA MID

注意:设备型号中应该全部为英文字符,不能出现中文,可以有空格; (2)USB相关信息修改:

? flash盘符的修改:在android2.3.4\device\softwinner\crane-xx\init.sun4i.rc中

‘format_userdata’shell命令后后面接格式化用的盘符,如:

format_userdata ONDA_MID #格式化flash盘符为ONDA_MID,当打开USB设备后即可在电脑上看到给盘符;

? 连接电脑时,显示驱动的修改:

如修改设备连接电脑时,电脑显示驱动为“ONDA MID USB 2.0 Driver”,则在

erTech-V2.1-9/19/2011

sys_config1.fex文件中修改如下: [msc_feature]

vendor_name = "ONDA MID" product_name = "USB 2.0 Driver" ? 设备序列号的修改:

默认设备序列号为"20080411",该序列号主要在豌豆夹手机精灵上有显示,设备的序列号最好为英文大写字母(A~F)及数字的组合,在sys_config1.fex文件中: [usb_feature]

serial_number = "20080411" 1.3.

预装APK

预装的APK存放位置在android2.3.4\device\softwinner\crane-xx\apk\目录下,将需要预装的APK文件放在该目录下面,该目录下的apk安装有两种方法:

(1)安装到system/app目录下:

修改android2.3\device\softwinner\ crane-xx\crane_xx.mk如下: # app apks

PRODUCT_COPY_FILES += \

$(call find-copy-subdir-files,*.apk,$(LOCAL_PATH)/apk,system/app) 优点:对启动速度无影响(影响第一次烧录后启动速度);

缺点:对于apk中有lib库文件的应用,预装在该目录后,不能正常使用该应用; (2)安装到system/preinstall目录下: # pre-installed apks

PRODUCT_COPY_FILES += \

$(call find-copy-subdir-files,*.apk,$(LOCAL_PATH)/apk,system/preinstall) 优点:在系统烧录后第一次启动进入系统之后才会安装这些应用,不影响开机时间,可以有效解决预装apk(带lib库)不能使用的问题; 缺点:安装之前会做标志位,如安装过程中出现异常,则其余应用不会自动安装; 综合以上两点,对于带lib库的应用,想在一开机系统就使用的,如开机动态壁纸,则可以按照以下来做,将apk的lib库文件提取出来预安装在/system/lib目录下,将apk安装到system/app目录下,这样可以保证系统在进入系统之前可以正常安装这些带有lib库文件的应用:

# pre-installed start apks

PRODUCT_COPY_FILES += \ $(call find-copy-subdir-files,*.apk,$(LOCAL_PATH)/apk_start,system/app) # pre-installed start apks

PRODUCT_COPY_FILES += \ $(call find-copy-subdir-files,*.so,$(LOCAL_PATH)/lib,system/lib)

erTech-V2.1-9/19/2011

1.4.

预设桌面方案

目前桌面使用google默认的Launche2,源码位置为android2.3.4\packages\apps\Launcher2,桌面的快捷方式在android2.3.4\packages\apps\Launcher2\res\xml\default_workspace.xml文件中修改: <appwidget

launcher:packageName="com.google....genie.geniewidget" //widget package name launcher:className="com.google….MiniWidgetProvider" //widget class name launcher:screen="1" //第几屏 launcher:x="0" //x\y坐标 launcher:y="0"

launcher:spanX="4" //widget占用x\y的格数 launcher:spanY="1" /> <favorite

launcher:packageName="com.android.camera" //apk package name launcher:className="com.android.camera.Camera" //apk activity class name launcher:screen="1" //第几屏 launcher:x="1" //x\y坐标 launcher:y="3" />

favorite项为桌面快捷方式,appwidget项为widget的设置,其各项的意义如上面标注所示; 1.5.

自定义按键

(1) 硬件:目前KEY检测使用了ADC转换的原理实现的,由于该原理的限制,所以不

能区分组合键(功能键,不包括电源键);按照目前公版原理图,0.2V的电压变化可以区分一档,所以最多可以实现10个键;

(2) 驱动与硬件的对应关系:

A10_Android内容定制说明文档V2.1 65_android2.1

erTech-V2.1-9/19/2011

Key的驱动实现文件位置:kernel/linux2.6.36/drivers/input/keyboard/sun4i-keyboard.c; 实现原理:

1. 通过检测电压值的数字量来区分当前是第几个按键:

//0.2V mode

static unsigned char keypad_mapindex[64] =

{

0,0,0,0,0,0,0,0, //key 1, 8个, 0-7

1,1,1,1,1,1,1, //key 2, 7个, 8-14

2,2,2,2,2,2,2, //key 3, 7个, 15-21

3,3,3,3,3,3, //key 4, 6个, 22-27

4,4,4,4,4,4, //key 5, 6个, 28-33

5,5,5,5,5,5, //key 6, 6个, 34-39

6,6,6,6,6,6,6,6,6,6, //key 7, 10个,40-49

7,7,7,7,7,7,7,7,7,7,7,7,7,7 //key 8, 17个,50-63

};

2. 按键对应的键值:

static unsigned int sun4i_scankeycodes[KEY_MAX_CNT]=

{

[0 ] = 163, //KEY_NEXTSONG,

[1 ] = 165, //KEY_PREVIOUSSONG,

[2 ] = KEY_VOLUMEUP,

[3 ] = KEY_VOLUMEDOWN,

[4 ] = KEY_ENTER,

[5 ] = KEY_RESERVED,

[6 ] = KEY_RESERVED,

[7 ] = KEY_RESERVED,

[8 ] = KEY_RESERVED,

[9 ] = KEY_RESERVED,

[10] = KEY_RESERVED,

[11] = KEY_RESERVED,

[12] = KEY_RESERVED,

};

3. 当有按键事件时,通过以上两次映射将最终的键值上报:

scancode = keypad_mapindex[key_val&0x3f];

input_report_key(sun3ikbd_dev, sun3i_scankeycodes[scancode], 1);

input_sync(sun3ikbd_dev);

(3) Android键值功能映射:

映射文件为android2.3\device\softwinner\crane_xx\ sun4i-keyboard.kl,举例如下:

key 102 HOME WAKE

key 115 BACK WAKE

key 114 MENU WAKE_DROPPED

key后面的数字为驱动中上报的键值,后面为对应的功能,自定义按键时仅需要将前面

erTech-V2.1-9/19/2011

的映射值和后面的功能对应起来即可;(WAKE_DROPPED : 唤醒屏幕,但是这个按键不 会发给当前应用程序,WAKE :唤醒屏幕,但是这个按键需要发送给应用程序,后面 不加的代表没有唤醒功能)

注:如果仅想快速地匹配按键,请按照培训测验题目第一道题的做法来实现快速配置(进入adb shell,用getevent命令获取按键映射值,重填sun4i-keyboard.kl文件);

1.6. Wifi配置

(1) USB Wifi的配置:

? 配置文件:sys_config1.fex

根据硬件原理图配置‘USB控制标志’和‘usb_wifi_para’部分,前者标志usb vcc电平控制引脚及逻辑,后者标志使用哪一组usb,举例如下:

;--------------------------------

;--- USB0控制标志

;--------------------------------

[usbc0] ;usb0一般用于otg功能

usb_used = 1

usb_port_type = 2

usb_detect_type = 1

usb_id_gpio = port:PH4<0><1><default><default>

usb_det_vbus_gpio = port:PH5<0><0><default><default>

usb_drv_vbus_gpio = port:PB9<1><0><default><0>

usbwww.61k.cominit_state = 0

;--------------------------------

;--- USB1控制标志

;--------------------------------

[usbc1] ;usb1根据原理图决定是否需要打开

usb_used = 0

usb_port_type = 1

usb_detect_type = 0

usb_id_gpio =

usb_det_vbus_gpio =

usb_drv_vbus_gpio = port:PH6<1><0><default><0>

usbwww.61k.cominit_state = 1

;--------------------------------

;--- USB2控制标志

;--------------------------------

[usbc2] ;usb2打开,用于usb wifi

usb_used = 1

usb_port_type = 1

erTech-V2.1-9/19/2011

usb_detect_type = 0

usb_id_gpio =

usb_det_vbus_gpio =

;设置wifi vcc控制gpio为PH3,且配置控制逻辑为高电平打开;

usb_drv_vbus_gpio = port:PH3<1><0><default><0>

usbwww.61k.cominit_state = 0

;--------------------------------------------------------------------------------

;usb wifi configuration

;usb_wifi_id --- 0- USB0, 1- USB1, 2- USB2

;--------------------------------------------------------------------------------

[usb_wifi_para] ;设置usb wifi,且选择使用usb2

usb_wifi_used = 1

usb_wifi_usbc_num = 2 ;设置为0,代表usb_drv_vbus_gpio会随着wifi的打开或关闭而有电平高低的变化,设置为1,则该电平无法动态控制,会一直保持初始化的电平状态;

共有三组USB,USB0用于OTG,USB1/USB2用于HOST,wifi可以使用USB1或USB2,usb_wifi_usbc_num标志wifi使用哪一组usb,usb_drv_vbus_gpio标志wifi VCC是哪个GPIO控制,可根据自己的硬件原理图情况来配置该部分;

usb_drv_vbus_gpio对wifi power的控制分以下两种情况:

1)该GPIO为高时wifi vcc上电,反之wifi vcc拉低:

--》usb_drv_vbus_gpio = port:PH3<1><0><default><0>

2)该GPIO为低时wifi vcc上电,反之wifi vcc拉低:

--》usb_drv_vbus_gpio = port:PH3<1><0><default><1>

? Android层配置:

默认在android2.3.4\device\softwinner\crane-common\ BoardConfigCommon.mk文件中有以下配置:

# wifi

AVE_CUSTOM_WIFI_DRIVER_2 := true

BOARD_WPA_SUPPLICANT_DRIVER := WEXT

WPA_SUPPLICANT_VERSION := VER_0_6_X

# usb wifi "rtl8192cu"; sdio wifi "nanowifi"

BOARD_USR_WIFI := nanowifi

请在android2.3\device\softwinner\crane_xx\

BoardConfig.mk中重写BOARD_USR_WIFI变量(这样做是为了维护平台的方便,当然可以直接更改BoardConfigCommon.mk中变量): 配置成usb wifi

# WIFI

BOARD_USR_WIFI := rtl8192cu

(2) SDIO wifi配置:

? 配置文件:sys_config1.fex

根据硬件原理图来确定sdio wifi使用哪一组sdio卡接口,按照如下配置(以mmc3为例):

erTech-V2.1-9/19/2011

[mmc3_para]

sdc_used = 1

sdc_detmode = 4

bus_width = 4

sdc_cmd = port:PI04<2><1><2><default>

sdc_clk = port:PI05<2><1><2><default>

sdc_d0 = port:PI06<2><1><2><default>

sdc_d1 = port:PI07<2><1><2><default>

sdc_d2 = port:PI08<2><1><2><default>

sdc_d3 = port:PI09<2><1><2><default>

sdc_det =

sdc_use_wp = 0

sdc_wp =

;--------------------------------------------------------------------------------

;sdio wifi configuration

;wifi_sdc_id --- 0- SDC0, 1- SDC1, 2- SDC2, 3- SDC3

;sdio_wifi_mod_sel --- 0- none, 1- swl-n20(wifi), 2- usi bm-01(wifi+bt+fm),

; 3- ar6302qfn, 4- apm6xxx, 5- swb b23(wifi+bt+fm)

;--------------------------------------------------------------------------------

[sdio_wifi_para]

sdio_wifi_used =0

sdio_wifi_sdc_id = 3 ; SDC3用于wifi功能

sdio_wifi_mod_sel = 1 ;选择sdio wifi模组的型号,根据需要打开下面相关配置项 ; samsung swl-n20 sdio wifi gpio config

swl_n20_shdn = port:PH09<1><default><default><0>

swl_n20www.61k.comwakeup = port:PH10<1><default><default><1>

swl_n20_vdd_en = port:PH11<1><default><default><0>

swl_n20_vcc_en = port:PH12<1><default><default><0>

; usi bm01a sdio wifi gpio config

;usi_bm01a_wl_pwr = port:PH12<1><default><default><0>

;usi_bm01a_wlbt_regon = port:PH11<1><default><default><0>

;usi_bm01a_wl_rst = port:PH10<1><default><default><0>

;usi_bm01a_wl_wake = port:PH09<1><default><default><0>

;usi_bm01a_bt_rst = port:PB05<1><default><default><0>

;usi_bm01a_bt_wake = port:PI20<1><default><default><0>

;usi_bm01a_bt_hostwake = port:PI21<0><default><default><0>

; swb-b23/usibm01 sdio wifi gpio config

;swbb23_wl_pwr = port:PH12<1><default><default><0>

;swbb23_wl_shdn = port:PH09<1><default><default><0>

;swbb23_wl_wake = port:PB10<1><default><default><0>

;swbb23_bt_shdn = port:PB05<1><default><default><0>

;swbb23_bt_wake = port:PI20<1><default><default><0> ; sdio wifi没有热插拔,请配置检测模式为4

erTech-V2.1-9/19/2011

;swbb23_bt_hostwake = port:PI21<0><default><default><0>

; apm sdio wifi gpio config

;apm_6981_vcc_en = port:PA09<1><default><default><0>

;apm_6981_vdd_en = port:PA10<1><default><default><0>

;apm_6981_wakeup = port:PA11<1><default><default><0>

;apm_6981_rst_n = port:PA12<1><default><default><0>

;apm_6981_pwd_n = port:PA13<1><default><default><0>

mmc3_para部分配置sdio通信data及clk信号,一般不改动,sdio_wifi_para部分配置sdio wifi使用哪个sdc卡接口、相关控制GPIO的选择,请根据实际原理图来配置;

? Android层配置:

如上一部分所述,默认在android2.3.4\device\softwinner\crane-common\ BoardConfigCommon.mk文件中已将BOARD_USR_WIFI设置为nanowifi,所以不需在android2.3\device\softwinner\crane_xx\ BoardConfig.mk修改;

注:因wifi部分和android framework配置层关联比较大,更改wifi配置后,建议make clean之后再编译,否则会出现wifi无效的情况;

1.7. LCD Panel的修改

(1)基本的配置及调整

调试lcd pannel的参数:如发现屏幕闪动或显示位置有偏差,可以按照该panel的spec调整如下参数:

参数调整:用户需要根据panel的datasheet,调整如下参数:(仅供参考)

A10_Android内容定制说明文档V2.1 65_android2.1

erTech-V2.1-9/19/2011

;---------------------------------------------------------------------------------- ;lcd0 configuration

;lcd_dclk_freq: in MHZ unit ;lcd_pwm_freq: in HZ unit

;lcd_if: 0:hv(sync+de); 1:8080; 2:ttl; 3:lvds ;lcd_lvds_ch:

0:single channel; 1:dual channel

;lcd_lvds_mode: 0:NS mode; 1:JEIDA mode ;lcd_lvds_bitwidth: 0:24bit; 1:18bit ;lcd_lvds_io_cross: 0:normal; 1:pn cross

;lcd_cpu_if: 0:18bit; 1:16bit mode0; 2:16bit mode1; 3:16bit mode2; 4:16bit mode3; 5:9bit; 6:8bit 256K; 7:8bit 65K

;lcd_io_cfg0: 0x10000000 - MAGIC_VER_A, 0x04000000 - MAGIC_VER_B ;---------------------------------------------------------------------------------- [lcd0_para]

lcd_used = 1

lcd_x = 800 lcd_y = 480 lcd_dclk_freq = 33 lcd_pwm_pol = 1 lcd_swap = 0 lcd_if = 0 lcd_hbp = 40 lcd_ht = 928 lcd_vbp = 29 lcd_vt = 1050 lcd_hv_if = 0 lcd_hv_smode = 0 lcd_hv_s888_if = 0 lcd_hv_syuv_if = 0 lcd_hv_vspw = 0 lcd_hv_hspw = 0 lcd_hv_lde_used = 0 lcd_hv_lde_iovalue = 0 lcd_ttl_stvh = 0

;vbp ;(525*2)

;屏接口,0:hv,3:lvds

;hbp

;dclk频率(MHz) ;pwm频率(Hz)

lcd_pwm_freq = 12000

;该参数用于纠正亮度调节反向的问题

lcd_srgb = 0x00202020

erTech-V2.1-9/19/2011

lcd_ttl_stvdl = 0 lcd_ttl_stvdp = 0 lcd_ttl_ckvt = 0 lcd_ttl_ckvh = 0 lcd_ttl_ckvd = 0 lcd_ttl_oevt = 0 lcd_ttl_oevh = 0 lcd_ttl_oevd = 0 lcd_ttl_sthh = 0 lcd_ttl_sthd = 0 lcd_ttl_oehh = 0 lcd_ttl_oehd = 0 lcd_ttl_revd = 0 lcd_ttl_datarate = 0 lcd_ttl_revsel = 0 lcd_ttl_datainv_en = 0 lcd_ttl_datainv_sel = 0 lcd_lvds_ch = 0 lcd_lvds_mode = 0 lcd_lvds_bitwidth = 0 lcd_lvds_io_cross = 0 lcd_cpu_if = 0 lcd_cpu_da = 0 lcd_frm = 0

lcd_io_cfg0 = 0x10000000 lcd_io_cfg1 = 0 lcd_io_strength = 0

;背光控制,电路图如果没有bl enable gpio,请设置为0;否则请正确设置gpio及控制逻辑(0:低电平打开,1:高电平打开); lcd_bl_en_used = 1

;lcd power控制,请正确设置gpio及控制逻辑(0:低电平打开,1:高电平打开); lcd_power_used = 1

lcd_power = port:PH08<1><0><default><1>

;lcd pwm控制,根据原理图配置使用的哪组pwm,一般不需修改; lcd_pwm_used = 1

lcd_pwm = port:PB02<2><default><default><default>

lcd_gpio_0 = lcd_gpio_1 = lcd_gpio_2 =

lcd_bl_en = port:PH07<1><0><default><1>

;clk上升沿有效或下降沿有效

erTech-V2.1-9/19/2011

lcd_gpio_3 =

lcdd0 = port:PD00<2><default><default><default> lcdd1 = port:PD01<2><default><default><default> lcdd2 = port:PD02<2><default><default><default> lcdd3 = port:PD03<2><default><default><default> lcdd4 = port:PD04<2><default><default><default> lcdd5 = port:PD05<2><default><default><default> lcdd6 = port:PD06<2><default><default><default> lcdd7 = port:PD07<2><default><default><default> lcdd8 = port:PD08<2><default><default><default> lcdd9 = port:PD09<2><default><default><default> lcdd10 = port:PD10<2><default><default><default> lcdd11 = port:PD11<2><default><default><default> lcdd12 = port:PD12<2><default><default><default> lcdd13 = port:PD13<2><default><default><default> lcdd14 = port:PD14<2><default><default><default> lcdd15 = port:PD15<2><default><default><default> lcdd16 = port:PD16<2><default><default><default> lcdd17 = port:PD17<2><default><default><default> lcdd18 = port:PD18<2><default><default><default> lcdd19 = port:PD19<2><default><default><default> lcdd20 = port:PD20<2><default><default><default> lcdd21 = port:PD21<2><default><default><default> lcdd22 = port:PD22<2><default><default><default> lcdd23 = port:PD23<2><default><default><default> lcdclk = port:PD24<2><default><default><default> lcdde = port:PD25<2><default><default><default> lcdhsync = port:PD26<2><default><default><default> lcdvsync = port:PD27<2><default><default><default>

(2)屏驱动扩展及调试

关于屏的移植方法及驱动程序基本工作原理请查看提供的《A10 lcd 用户配置手册》文档; 1.8.

Touch Panel的配置方法

(1) 发布的SDK中,默认有对电阻屏(两点)、FT5206/FT5406(敦泰)、Goodix-TS(蕙

鼎)的支持;

(2) 打包配置文件修改:sys_config1.fex

? 电阻屏:

;----------------------------------------------------------------------------------

;rtp_screen_size : 表屏幕尺寸,以斜对角方向长度为准,以寸为单位

erTech-V2.1-9/19/2011

;tp_regidity_level : 表屏幕的硬度,以指覆按压,抬起时开始计时,多少个10ms时间单位之后,硬件采集不到数据为准;

; 通常,我们建议的屏,5寸屏设为5,7寸屏设为7,

; 对于某些供应商提供的屏,硬度可能不合要求,需要适度调整 ;rtp_press_threshold_enable: whether press threshold is enable or not. 0 is suggested.

;rtp_press_threshold : only when rtp_press_threshold_enable == 1, this para take effect.

between 0 and 0xFFFFFF is supported.more bigger, more sensitive, 0x1f40 is suggested.

;rtp_sensitive_level : between 0 and 0xf is supported.more bigger, more sensitive, 0xf is suggested.

;rtp_exchange_x_y_flag : in some case, x, y need to be exchanged, at that situation, 1 is setted. normally, 0 is setted.

;---------------------------------------------------------------------------------- [rtp_para] rtp_used = 1 rtp_screen_size = 7 rtp_regidity_level = 7 rtp_press_threshold_enable = 0 rtp_press_threshold = 0x1f40 rtp_sensitive_level = 0xf rtp_exchange_x_y_flag = 0

建议只修改rtp_screen_size和rtp_regidity_level,其他参数请暂不要修改; ?

电容屏:

;---------------------------------------------------------------------------------- ;capacitor tp configuration ;external int function ;wakeup output function

;notice --- tp_int_port & tp_io_port use the same port ;name should be compatible with the corresponding ctp driver. ;at present, only "ft5x_ts" and "Goodix-TS" is supported.

;---------------------------------------------------------------------------------- [ctp_para]

ctp_used =1

ctp_name = "ft5x_ts" ctp_twi_id = 2

ctp_twi_addr =0x38 ctp_screen_max_x = 800 ctp_screen_max_y = 480 ctp_revert_x_flag = 0 ctp_revert_y_flag = 0 ctp_exchange_x_y_flag = 0

ctp_int_port = port:PH21<6><default>

;ctp_wakeup = port:PB13<1><default><default><1>

;如果x轴反向,请置为1 ;如果y轴反向,请置为1 ;如果x、y倒置,请置为1

;touch panel name,"ft5x_ts" or "Goodix-TS" ;使用哪组I2C

;I2C设备地址(7位地址) ;touch panel的分辨率

;Touch panel的尺寸

erTech-V2.1-9/19/2011

ctp_reset = port:PH20<1><default> ctp_io_port = port:PH21<0><default>

Touch panel的GPIO请正确配置中断引脚、wakeup pin和reset pin,一般情况下,wakeup和reset pin只需留一个就可以,一般用reset,此时请把wakeup注释掉,可以减少驱动中suspend和resume时耗费的时间;

(3) Android层的配置:

? Linux driver module:

Touch panel的驱动模块为sun4i-ts.ko(RTP驱动)、ft5x_ts.ko(FT5206/FT5406驱动)、

goodix_touch.ko(Goodix驱动),在android2.3\device\softwinner\crane_xx\

mkfs.sh文件的mkimg_root()中加入相应CP语句:

cp $DRV_DIR/sun4i-ts.ko $PRODUCT_ROOT/drv/sun4i-ts.ko or cp $DRV_DIR/ft5x_ts.ko $PRODUCT_ROOT/drv/ft5x_ts.ko

or cp $DRV_DIR/ goodix_touch.ko $PRODUCT_ROOT/drv/ goodix_touch.ko

? Android:

在android2.3\device\softwinner\crane-xx\init.sun4i.rc文件中加入装载驱动模块的语句:

#insmod tp driver #insmod /drv/sun4i-ts.ko insmod /drv/ft5x_ts.ko #insmod /drv/ goodix_touch.ko

(4) CTP驱动移植及调试:

该部分请参考提供的《ctp驱动移植》及相关文档; 1.9.

G-Sensor的配置方法

(1) 发布的SDK中已添加了对MMA766、MXC6225及BMA250 G-Sensor的支持,需要

客户根据需要做如下配置:

(2) 打包配置文件修改:sys_config1.fex

;-------------------------------------------------------------------------------- ; G sensor configuration

;("mxc622x", 0x15) or ("mma7660", 0x4C) or ("bma250", 0x18) //参考设备名及I2C地址 ; gs_twi_id --- TWI ID for controlling Gsensor (0: TWI0, 1: TWI1, 2: TWI2) ;-------------------------------------------------------------------------------- [gsensor_para]

gsensor_used = 1

//标示使用gsensor

//标示使用mma7660,可为"mxc622x"、"mma7660"、"bma250" gsenser_name = "mma7660" gsensor_twi_id = 1

gsensor_twi_addr = 0x4c gsensor_int2 =

//使用哪组i2c //i2c设备地址

gsensor_int1 = port:PH00<6><1><default><default> //中断引脚,预留

根据实际使用的gsensor来做配置,mxc6225、mma7660及bma250设备名及I2C地址

A10_Android内容定制说明文档V2.1 65_android2.1

erTech-V2.1-9/19/2011

如上注释所示;

(3) MMA7660的配置:

? Linux driver module:

mma7660的驱

动模块为mma7660.ko,在

android2.3\device\softwinner\crane_xx\ mkfs.sh文件的mkimg_root()中加入:

cp $DRV_DIR/mma7660.ko $PRODUCT_ROOT/drv/mma7660.ko

? Android:

在android2.3\device\softwinner\crane-xx\init.sun4i.rc文件中加入装载驱动模块的语句:

# insmod gsensor driver insmod /drv/mma7660.ko

在android2.3\device\softwinner\crane-xx\ueventd.sun4i.rc文件中

改变相关设备节点的权限:

# sysfs properties, for mma7660 gsensor

/sys/devices/virtual/input/input* name 0660 root input /sys/devices/virtual/input/input* max 0660 root input /sys/devices/virtual/input/input* min 0660 root input /sys/devices/virtual/input/input* poll 0666 root input

? 方向的调整:

在android2.3\device\softwinner\crane-xx\BoardConfig.mk

# Gsensor board config

# we can use this string : mma7660, mxc622x,bma250 BOARD_USES_GSENSOR_TYPE := mma7660 BOARD_GSENSOR_DIRECT_X := true BOARD_GSENSOR_DIRECT_Y := true BOARD_GSENSOR_DIRECT_Z := false

BOARD_GSENSOR_XY_REVERT := true//如果x轴当y轴用,y轴当x轴,则置true

//标示用mma7660 gsensor //如果x轴反向,则置false //如果y轴反向,则置false

//如果z轴反向,则置false

MMA7660实际方向如下(参见7660 Datasheet):

(4) MXC6225的配置:

erTech-V2.1-9/19/2011

? Linux driver module:

Mxc6225

mecs.ko

mxc622x.ko

android2.3\device\softwinner\crane_xx\ mkfs.sh文件的mkimg_root()中加入:

cp $DRV_DIR/mxc622x.ko $PRODUCT_ROOT/drv/mxc622x.ko cp $DRV_DIR/mecs.ko $PRODUCT_ROOT/drv/mecs.ko

? Android:

在android2.3\device\softwinner\crane-xx\init.sun4i.rc文件中加入装载驱动模块的语句:

# gsensor module

insmod /drv/mecs.ko insmod /drv/mxc622x.ko

service memsicd /system/bin/logwrapper /system/bin/memsicd

mkdir /data/misc/sensors 0777 system system

在android2.3\device\softwinner\crane-xx\ueventd.sun4i.rc文件中

改变相关设备节点的权限:

/dev/mxc622x

0777 system system 0777 system system

/dev/ecompass_ctrl

? 方向的调整:

在android2.3\device\softwinner\crane-xx\BoardConfig.mk

# Gsensor board config

# we can use this string : mma7660, mxc622x,bma250 BOARD_USES_GSENSOR_TYPE := mxc622x BOARD_GSENSOR_DIRECT_X := true BOARD_GSENSOR_DIRECT_Y := true BOARD_GSENSOR_DIRECT_Z := false

BOARD_GSENSOR_XY_REVERT := true//如果x轴当y轴用,y轴当x轴,则置true

//标示用mxc6225 gsensor //如果x轴反向,则置false //如果y轴反向,则置false

//如果z轴反向,则置false

6225的参考坐标系,参考下图(其他IC,仅供示意)

(6225上以pin6为坐标原点,x轴指向pin1,y轴指向pin4,z轴向上)

(5) Bma250的配置:

? Linux driver module:

erTech-V2.1-9/19/2011

bma250

bma250.ko

android2.3\device\softwinner\crane_xx\ mkfs.sh文件的mkimg_root()中加入:

cp $DRV_DIR/bma250.ko $PRODUCT_ROOT/drv/ bma250.ko

? Android:

在android2.3\device\softwinner\crane-xx\init.sun4i.rc文件中加入装载驱动模块的语句:

# insmod gsensor driver insmod /drv/bma250.ko

在android2.3\device\softwinner\crane-xx\ueventd.sun4i.rc文件中

改变相关设备节点的权限:

# sysfs properties, for bma250 gsensor

/sys/devices/virtual/input/input* name 0660 root input /sys/devices/virtual/input/input* max 0660 root input /sys/devices/virtual/input/input* min 0660 root input /sys/devices/virtual/input/input* poll 0666 root input

? 方向的调整:

在android2.3\device\softwinner\crane-xx\BoardConfig.mk

# Gsensor board config

# we can use this string : mma7660, mxc622x,bma250 BOARD_USES_GSENSOR_TYPE := bma250 BOARD_GSENSOR_DIRECT_X := true BOARD_GSENSOR_DIRECT_Y := true BOARD_GSENSOR_DIRECT_Z := false

BOARD_GSENSOR_XY_REVERT := true//如果x轴当y轴用,y轴当x轴,则置true

//标示用bma250 gsensor //如果x轴反向,则置false //如果y轴反向,则置false

//如果z轴反向,则置false

(6) GSensor驱动移植:

该部分工作主要是gsensor驱动移植及hal层移植,驱动主要涉及i2c通信,hal也为android标准,请参考相关书籍即可; 1.10.

Camera的配置方法

(1) 发布的SDK中已添加了对SP0838、GC0308、OV7670、GT2005、HI704和MT9M112

的支持;

(2) 打包配置文件修改:sys_config1.fex

;-------------------------------------------------------------------------------- ;csi gpio configuration

;csi_if: 0:hv_8bit 1:hv_16bit 2:hv_24bit 3:bt656 1ch 4:bt656 2ch 5:bt656 4ch ;csi_mode: 0:sample one csi to one buffer 1:sample two csi to one buffer ;csi_dev_qty: The quantity of devices linked to csi interface ;csi_vflip: flip in vertical direction 0:disable 1:enable ;csi_hflip: flip in horizontal direction 0:disable 1:enable

erTech-V2.1-9/19/2011

;csi_stby_mode: 0:not shut down power at standby 1:shut down power at standby ;csi_iovdd: camera module io power , pmu power supply ;csi_avdd: camera module analog power , pmu power supply ;csi_dvdd: camera module core power , pmu power supply ;pmu_ldo3: fill "axp20_pll" ;pmu_ldo4: fill "axp20_hdmi"

;fill "" when not using any pmu power supply

;csi_flash_pol: the active polority of the flash light IO 0:low active 1:high active

;(“sp0838”,0x30)("gt2005", 0x78) ( "gc0308", 0x42) ("mt9m112", 0xba) ;("hi704",0x60)("mt9m113",0x78)("ov2655",0x60)

;-------------------------------------------------------------------------------- [csi0_para]

csi_used = 1 csi_mode = 0 csi_dev_qty = 1 csi_stby_mode = 0

csi_mname = "gc0308" csi_twi_id = 1 csi_twi_addr = 0x42 csi_if = 0 csi_vflip = 0 csi_hflip = 1 csi_iovdd = "" csi_avdd = "" csi_dvdd = "" csi_flash_pol = 1

csi_mname_b = "" csi_twi_id_b = 1 csi_twi_addr_b = 0x78 csi_if_b = 0 csi_vflip_b = 1 csi_hflip_b = 0 csi_iovdd_b = "" csi_avdd_b = "" csi_dvdd_b = "" csi_flash_pol_b = 1

csi_pck = port:PE00<3><default><default><default> csi_ck = port:PE01<3><default><default><default> csi_hsync = port:PE02<3><default><default><default> csi_vsync = port:PE03<3><default><default><default> csi_d0 = port:PE04<3><default><default><default>

;设备名 ;使用哪组I2C ;设备I2C地址

;设备名 ;使用哪组I2C ;设备I2C地址

;配置csi0接口上挂载camera的个数

;0:standby时不关电源,1:关电源

erTech-V2.1-9/19/2011

csi_d1 = port:PE05<3><default><default><default> csi_d2 = port:PE06<3><default><default><default> csi_d3 = port:PE07<3><default><default><default> csi_d4 = port:PE08<3><default><default><default> csi_d5 = port:PE09<3><default><default><default> csi_d6 = port:PE10<3><default><default><default> csi_d7 = port:PE11<3><default><default><default> csi_d8 = csi_d9 = csi_d10 =

A10_Android内容定制说明文档V2.1 65_android2.1

(3装载驱动模块的语句:

单摄像头:

#csi module

insmod /drv/videobuf-core.ko insmod /drv/videobuf-dma-contig.ko insmod /drv/mt9m112.ko insmod /drv/sun4i_csi0.ko

双摄像头:

#csi module

erTech-V2.1-9/19/2011

insmod /drv/videobuf-core.ko insmod /drv/videobuf-dma-contig.ko insmod /drv/gc0308.ko insmod /drv/gt2005.ko insmod /drv/sun4i_csi1.ko insmod /drv/sun4i_csi0.ko

若一个CSI接口上挂载两个camera,则只需要insmod该csi模块即可;

在android2.3\device\softwinner\crane-xx\ueventd.sun4i.rc文件中改变相关设备节点的权限:

/dev/video0 0777 system

/dev/video1 0777 system

(4) Camera参数配置

? camera.cfg

路径:android2.3.4\device\softwinner\crane-xxx\ camera.cfg

内容简介:

;-------------------------------------------------------------------------------

; 1 for single camera, 2 for double camera

;-------------------------------------------------------------------------------

number_of_camera = 1 ;camera device的个数,如果有两个camera device,则以下参数需要写两份,

分别对应不同的设备参数

;-------------------------------------------------------------------------------

; CAMERA_FACING_BACK

; gt2005

;-------------------------------------------------------------------------------

camera_id = 0 ;camera id

;-------------------------------------------------------------------------------

; 1 for CAMERA_FACING_FRONT

; 0 for CAMERA_FACING_BACK

;-------------------------------------------------------------------------------

camera_facing = 0 ;标志是该camera是前置还是后置

;-------------------------------------------------------------------------------

; driver device name

;-------------------------------------------------------------------------------

camera_device = /dev/video0 ;标志该camera是挂载的csi0接口还是csi1(/dev/video1)接口 ;-------------------------------------------------------------------------------

; device id

; for two camera devices with one CSI

;-------------------------------------------------------------------------------

device_id = 0

used_preview_size = 1//是否支持预览,及预览像素大小 ;当两个camera device公用一个CSI Interface时的device id号 ;device_id需要和sysconfig1.fex中的配置项对应; ;device_id =0 对应 csi_mname代表的camera设备 ;device_id=1对应csi_mname_b代表的camera设备; system system (双摄像头时加入)

erTech-V2.1-9/19/2011

key_support_preview_size = 1600x1200,640x480

key_default_preview_size = 640x480

used_picture_size = 1//是否支持照相,及像素大小

key_support_picture_size = 2592x1936,2048x1536,1600x1200,1280x1024,1024x768,800x600,640x480 key_default_picture_size = 1600x1200

used_flash_mode = 0//闪光配置,目前只支持on、off属性

key_support_flash_mode = on,off

key_default_flash_mode = off

used_color_effect=1//色彩效果

key_support_color_effect = none,mono,negative,sepia,aqua

key_default_color_effect = none

used_frame_rate = 1//帧率

key_support_frame_rate = 15, 30

key_default_frame_rate = 30

used_focus_mode = 0//自动对焦

key_support_focus_mode = auto,infinity,macro,fixed

key_default_focus_mode = auto

used_scene_mode = 0//场景模式

key_support_scene_mode

rty,candlelight,barcode

key_default_scene_mode = auto

used_white_balance = 1//白平衡

key_support_white_balance = auto,incandescent,fluorescent,warm-fluorescent,daylight,cloudy-daylight key_default_white_balance = auto

used_exposure_compensation = 1//曝光补偿

key_max_exposure_compensation = 4

key_min_exposure_compensation = -4

key_step_exposure_compensation = 1

key_default_exposure_compensation = 0

; only for facing back camera

used_zoom = 1//是否支持zoom功能,仅后置摄像头支持该功能

key_zoom_supported = true

key_smooth_zoom_supported = false

key_zoom_ratios = 100,120,150,200,230,250,300 = auto,auto,portrait,landscape,night,night-portrait,theatre,beach,snow,sunset,steadyphoto,fireworks,sports,pa

erTech-V2.1-9/19/2011

key_max_zoom = 6

key_default_zoom = 0

? media_profiles.xml

路径:android2.3.4\device\softwinner\crane-xxx\ media_profiles.xml

内容简介:该文件主要保存Camera支持的摄像相关参数,包括摄像质量,音视频编码格式、帧率、比特率等等,该参数主要有摄像头厂商提供:(以下Demo对应两个摄像头的情况,如果只有一个camera则只需要一份参数)

<MediaSettings>

<!-- Each camcorder profile defines a set of predefined configuration parameters -->

<!-- Back Camera -->

<CamcorderProfiles cameraId="0">

<EncoderProfile quality="low" fileFormat="mp4" duration="30">

<Video codec="h264"

bitRate="1000000"

width="640"

height="480"

frameRate="30" />

<Audio codec="aac"

bitRate="12200"

sampleRate="8000"

channels="1" />

</EncoderProfile>

<EncoderProfile quality="high" fileFormat="mp4" duration="30">

<Video codec="h264"

bitRate="3000000"

width="1600"

height="1200"

frameRate="15" />

<Audio codec="aac"

bitRate="96000"

sampleRate="44100"

channels="1" />

</EncoderProfile>

<ImageEncoding quality="90" />

<ImageEncoding quality="80" />

<ImageEncoding quality="70" />

<ImageDecoding memCap="20000000" />

</CamcorderProfiles>

<!-- Front Camera -->

<CamcorderProfiles cameraId="1">

<EncoderProfile quality="high" fileFormat="mp4" duration="60">

<Video codec="h264"

bitRate="1000000"

A10_Android内容定制说明文档V2.1 65_android2.1

erTech-V2.1-9/19/2011

width="640"

height="480"

frameRate="25" />

<Audio codec="aac"

bitRate="12200"

sampleRate="44100"

channels="1" />

</EncoderProfile>

<EncoderProfile quality="low" fileFormat="mp4" duration="30">

<Video codec="h264"

bitRate="500000"

width="320"

height="240"

frameRate="25" />

<Audio codec="aac"

bitRate="12200"

sampleRate="8000"

channels="1" />

</EncoderProfile>

<ImageEncoding quality="90" />

<ImageEncoding quality="80" />

<ImageEncoding quality="70" />

<ImageDecoding memCap="20000000" />

</CamcorderProfiles>

<EncoderOutputFileFormat name="mp4" />

<!--

If a codec is not enabled, it is invisible to the applications

In other words, the applications won't be able to use the codec

or query the capabilities of the codec at all if it is disabled

-->

<VideoEncoderCap name="h264" enabled="true"

minBitRate="64000" maxBitRate="8000000"

minFrameWidth="320" maxFrameWidth="1600"

minFrameHeight="240" maxFrameHeight="1200"

minFrameRate="1" maxFrameRate="30" />

<AudioEncoderCap name="aac" enabled="true"

minBitRate="8000" maxBitRate="320000"

minSampleRate="8000" maxSampleRate="48000"

minChannels="1" maxChannels="1" />

<VideoDecoderCap name="wmv" enabled="false"/>

<AudioDecoderCap name="wma" enabled="false"/>

</MediaSettings>

erTech-V2.1-9/19/2011

1.11. 震动马达的配置

(1) 震动马达典型电路:

震动马达部分的电路比较单一,软件端只用控制MT_G引脚的电平就可以打开和关闭马达震动;

(2) Sys_config1文件配置:

;----------------------------------------------------------------------------------

;motor configuration

;----------------------------------------------------------------------------------

[motor_para]

motor_used = 1 ; 是否启用马达,启用置1,反之置0

motor_shake = port:PB03<1><default><default><1> ;马达震动的GPIO选择及控制逻辑:0代表低电平关闭,高电平打开;1代表高电平关闭,低电平打开,请根据实际电路图来配置;

(3) 驱动及Android的配置

? Linux driver module:

震动马达的驱动模块为sun4i-vibrator.ko,源文件为linux-2.6.36\drivers\misc\ sun4i-vibrator.c,默认已经编译成模块,无需配置; ? Android:

1)将驱动模块文件copy至android根文件系统中,已供后续驱动的加载,在android2.3\device\softwinner\crane_xx\ mkfs.sh文件的mkimg_root()中加入:

cp $DRV_DIR/sun4i-vibrator.ko $PRODUCT_ROOT/drv/sun4i-vibrator.ko

2)在android2.3\device\softwinner\crane-xx\init.sun4i.rc文件中加入改变相关设备节点及装载驱动模块的语句:

# insmod vibrator

insmod /drv/sun4i-vibrator.ko

chmod 777 /sys/class/timed_output/sun4i-vibrator/enable

1.12. GPS的配置方法

(1) 发布的SDK从1.8版本集成了GPS功能,目前只支持海威讯的GPS,默认该功能

没有打开,如果客户版中加入了GPS功能,请做如下配置;

(2) 打包配置文件:sys_config1.fex

erTech-V2.1-9/19/2011

;--------------------------------------------------------------------------------

; gps gpio configuration

; gps_spi_id --- the index of SPI controller. 0: SPI0, 1: SPI1, 2: SPI2, 15: no SPI used

; gps_spi_cs_num --- the chip select number of SPI controller. 0: SPI CS0, 1: SPI CS1

; gps_lradc --- the lradc number for GPS used. 0 and 1 is valid, set 2 if not use lradc

;--------------------------------------------------------------------------------

[gps_para]

gps_used = 1 ;是否使用GPS功能

gps_spi_id = 2

gps_spi_cs_num = 0

gps_lradc = 1

gps_clk = port:PI00<2><default><default><default>

gps_sign = port:PI01<2><default><default><default>

gps_mag = port:PI02<2><default><default><default>

gps_vcc_en = port:PC22<1><default><default><0>

gps_osc_en = port:PI14<1><default><default><0>

gps_rx_en = port:PI15<1><default><default><0> ;使用的SPI接口

以上请根据硬件原理图来配置;

(3) Android层的配置:

? GPS驱动模块:

相关驱动模块为gps.ko,在android2.3\device\softwinner\crane_xx\ mkfs.sh文件的mkimg_root()中加入:

cp $DRV_DIR/gps.ko $PRODUCT_ROOT/drv/gps.ko

? Android:

1)在android2.3.4\device\softwinner\crane-common\BoardConfigCommon.mk文件中有对GPS的选择:BOARD_USES_GPS_TYPE值当没有GPS模块时用simulator关键字,用海威讯GPS模块时填写haiweixun;

(BOARD_USES_GPS_TYPE可以在android2.3\device\softwinner\crane_xx\ BoardConfig.mk文件中重写,以便于客户版的维护)

#gps

#"simulator":taget board does not have a gps hardware module;"haiweixun":use the gps module offer by haiweixun

BOARD_USES_GPS_TYPE := haiweixun

2)在android2.3\device\softwinner\crane-xx\init.sun4i.rc文件中加入装载驱动模块的语句:

#gps module

insmod /drv/gps.ko

3)在android2.3\device\softwinner\crane-xx\ueventd.sun4i.rc文件中改变相关设备节点的权限:

/dev/gps 0777 system system

(4) GPS功能测试:

调试GPS时建议使用GPS_Test_Plus_v1.1.3.apk,配合串口打印可以初步确认GPS是否正常工作。GPS正常工作时,通常有以下打印:

I/dalvikvm( 383): Total arena pages for JIT: 11

erTech-V2.1-9/19/2011

I/GBCLogMsg:( 109): $GPVER,GBCV:1.0015,Nov 6 2011,19:12:37;DRIVER:1.0008,Nov 6 2011,20:34:41

I/GBCLogMsg:( 109): $GPVER,GBCV:1.0015,Nov 6 2011,19:12:37;DRIVER:1.0008,Nov 6 2011,20:34:41

I/GBCLogMsg:( 109): $GPVER,GBCV:1.0015,Nov 6 2011,19:12:37;DRIVER:1.0008,Nov 6 2011,20:34:41

如果没有上述打印,从两方面确认问题原因:

1)通过adb shell,查看驱动是否加载,如果没有加载,则手动加载再看看结果;

2)检查硬件是否正确,GPS与IC的连线是否正确,GPS模组的晶振是否有焊上去等等;

3)如果硬件引脚使用跟参考设计不一致,请修改sys_config1.fex中GPS使用的GPIO配置。

1.13. Boot电池充电图标配置说明

(1) 在sys_config1.fex配置文件中,target下增加一项power_start,如下所示:

[target]

power_start = 0

当power_start存在,并且值是0的时候,下面的功能不起作用;

当power_start不存在,或存在但是值不是0的时候,下面的功能将生效:

?在有电池的情况下,系统处于关机状态,如果插上外部电源,会显示电池图标,3秒后自动关机;

?在有电池的情况下,系统处于关机状态,如果长按开机按键,会正常启动;

?在有电池并且有外部电源的情况下,系统处于关机状态,如果长按开机按键,会正常启动;

?在没有电池的情况下,系统处于关机状态,如果插上外部电源,会显示电池图标,3秒后正常启动;

?在没有电池但是连接有外部电源的情况下,系统处于关机状态,如果长按开机按键,会正常启动;

(2) 电池图标

电池图标是一个bmp图片,是位于\wboot\bootfs\os_show目录下的一个名为startup.bmp的文件;

如果希望更换这个显示的电池图标,直接用相应分辨率的同名文件替换掉这个文件即可。

1.14. Recovery功能的使用

(1) Recovery功能说明:

Recovery是Android的专用升级模式,用于对android自身进行更新;进入recovery模式的方法是,在android系统开机时,按住一个特定按键,则会自动进入android的recovery模式。

(2) 键值的查看

按键是通过AD转换的原理制成。当用户按下某个按键的时候,会得到这个按键对应的AD转换的值。同时,所有的按键的键值都不相同,并且,键值之间都有一定的间隔,没有相邻。比如,键值可能是5,10,15,20,但是不可能是5,11,12,13。

为了方便用户查看不同按键的键值,这种方法要求连接上串口使用,因此适合于开发阶

erTech-V2.1-9/19/2011

段使用。具体步骤是:

1) 把小机把PC通过串口线连接起来,设置屏幕焦点在串口调试软件上;

2) 用户开机之前,按住PC键盘上的数字键“3”;

3) 开机,等待,1秒后可以松开电脑键盘;

经过这样的步骤,用户会看到屏幕上有如下的打印信息出现:

(3

2) 读出a的键值a1,同时取出两个相邻于a的键值,记为b1和c1,b1大于c1;

3) 计算出(a1 + b1)/2,(a1 + c1)/2,分别填写到key_max和key_min处;

4) 如果a1刚好是所有按键的最小值,则取key_min为0;如果a1刚好是所有按键的最大值,则取key_max为63;

经过以上的步骤,就可以选择一个特定的按键进入recovery模式。取了一个平均值的原因是考虑到长时间的使用,电阻的阻值可能会略有变化导致键值变化,取范围值就可以兼容这种阻值变化带来的键值变化。

(4) 功能使用

在android编译完毕之后,使用make otapackage命令就可以在

A10_Android内容定制说明文档V2.1 65_android2.1

erTech-V2.1-9/19/2011

android2.3.4\out\target\product\crane-xxx目录下生成一个crane_xxx-ota-eng.username.zip文件,将该文件更名为update.zip后拷贝的SD卡中;

在系统启动时,按住设定的特定按键进入recovery模式,进入该模式后,系统会在SD卡目录下寻找update.zip文件,找到该文件就会进入自动升级,如没有找到该文件,则系统会提示报错;

2. Android标准常用修改

2.1. 预定义动态壁纸

(1) 预安装动态壁纸apk

将想要预定义的动态壁纸apk按照“预安装apk”中的方法安装到系统中;

(2) 配置系统启动后加载该壁纸

在android2.3.4\frameworks\base\core\res\res\values\config.xml文件中修改如下:

<!-- Component name of the default wallpaper. This will be ImageWallpaper if not

specified -->

<!--<string name="default_wallpaper_component">@null</string>-->

<string

name="default_wallpaper_component">fishnoodle.koipond_free/fishnoodle.koipond_free.WallpaperService</string>

将@null内容更改为该动态壁纸的package name和Service Class name,中间用‘/’连接;

待续。。

31

五 : 说明文档

摘要

文章研究了在遗传算法中融入拍卖决策解决飞机除冰任务安排的问题,在此基础上给出了优化任务安排的一种新的算法,通过遗传算法中一系列参数的调整,较之纯粹的FCFS(先到先服务)和ANT(蚂蚁路径寻优)的对比仿真,可以验证该方法的有效性。(www.61k.com)

程序流程图:

9c8904 说明文档

算法核心思路

1. 除冰模型】

每架飞机的除冰持续时间ti,i=1,2,3…….N

每架飞机的航班起飞时刻Fi,i=1,2,3……N

每架飞机的开始除冰时刻Si,i=1,2,3……N

?l(Si?ti?Fi)?惩罚代价函数Di??A?L(Si?ti?F)

?0?

目标函数:J?

2.遗传算法

0?Si?ti?Fi?TmaxdelaySi?ti?Fi?Tmaxdelay 其他?Di?1Ni

9c8904 说明文档

2.4 改进的GA设计

下文分别介绍添加了时间和花费后,改进的GA编码表示、初始种群的产生、适应值的计算、遗传算子的设计和算法框架。[www.61k.com)

2.4.1 染色体编码表示

GA的染色体采用问接编码方式,每个染色体是一个作业分配的优先队列q,其中的每个元素是待调度的作业。每个作业必须在qi中出现一次,作业在q中的次序表示它们的调度顺序。因为染色体并不是调度,所以需要解码算法把染色体映射为有效的调度。为了获得总体最优评价值,GA采用顺序最优算法把q解码为有效调度,即对所有作业,按它们在q中的顺序,依次为其选择具有最佳评价值的资源节点。

2.4.2 初始种群

初始种群采用随机算法生成,先把所有作业放入一个集合,然后不断从集合中随机取出一个作业,把它依次放入优先队列q中,直到作业集为空,即所有作业都进入q中为止。

2.4.3 适应值函数

适应值是用于评价解的优劣,本文认为一个调度的总评价值越小,其适应值越好。设MinIAD为一代种群中最差个体的评价值,MinIAD为全局最佳个体的评价值,定义GA中第i个染色体qi的适应值函数为

Fitness(qi)?MaxIAD?IAD(qi)?r (3) MaxIAD?MinIAD?r

其中,r是用来调整个体分布概率的参数。

2.4.4 遗传操作算子

标准GA的操作算子一般包括选择、交叉和变异3种基本形式,它们模拟了自然选择和遗传过程中发生的繁殖、杂交和突变现象,是使GA具备强大搜索能力的核心。

选择操作是GA中环境对个体适应性的评价方式,是实现群体优良基因传播的基本方式,它保证了GA迭代中适者生存、优胜劣汰的群体进化现象。本文 GA

9c8904 说明文档

中的选择算子采用轮盘赌选择方式,定义个体qi被选中的概率为:

popsize

p(qi)?Fitness(qi)/?Fitness(q) (4) i

j?1

其中,popsize为种群大小。(www.61k.com)

在GA中,杂交算子是最主要的搜索算子,它模仿自然界有性繁殖的基因重组过程,作用是将原有优良基因遗传给下一代个体,并生成包含更复杂基因结构的新个体。本文GA中的交叉算子采用一点交叉,在交叉过程中,为了保证所产生后代的合法性,先随机产生一个交叉点,然后使交叉点左边的任务顺序保持不变,交叉点及其右边的任务按它在另一个父本中的顺序进行重新排序,从而保证交叉操作后,每个个体都是合法的。染色体的交叉操作如图1所示。

9c8904 说明文档

9c8904 说明文档

q1q1

9c8904 说明文档

q2

(a)交叉前q2(b)交叉后

图一 染色体交叉操作

变异算子的主要用途是拓展新的搜索空间,当种群局部收敛时,通过变异算子的突变作用来保持一定的种群多样性。本文GA中的变异算子随机选择2个q中的位置,并交换这 2个位置上的任务。染色体的变异操作如图2所示。

9c8904 说明文档

(a)变异前

9c8904 说明文档

(b)变异后

图二 染色体变异操作

9c8904 说明文档

2.4.5 改进的GA算法框架

本文GA中的精英策略能保证最优解适应值的单调递增性,算法步骤如下:

(1)采用随机算法生成初始种群。[www.61k.com]

(2)利用顺序最优算法把染色体映射为调度并计算个体的适应值。

(3)不满足结束条件时,重复以下操作:

1)施加选择算子;

2)以既定概率施加交叉算子;

3)以既定概率施加变异算子;

4)利用顺序最优算法把染色体映射为调度并计算个体的适应值;

5)采用精英策略保留全局最佳个体。

3.ANT算法

现在以除冰任务安排为例说明基本的蚂蚁算法,m是除冰车数目,n是待除冰飞机数目。 ?i.j为除冰车结束i号飞机除冰任务之后转移到j号飞机的概率。

?i,j?dijd,其中dij是除冰车从i号飞机转移到j号飞机的权重

ij

dij?w1*?j?w2*11?w3*Djtime?Fj

w1,w2,w3是权重系数

(?j,是j飞机的型号系数,Dj是j飞机的除冰持续时间,Fj是j飞机的起飞时间,) time是i飞机的除冰结束时刻

4.本文针对指定的航班表和除冰车数目,先采用遗传算法优化出每台除冰车要处理的航班序列,在此基础上应用拍卖决策对序列进行优化,得到除冰任务的先后顺序,并以此计算对应的延误时间和延误代价,作为种群染色体选择复制参考的适应度值。最后通过多代进化,得到最优的任务安排序列。

仿真结果

9c8904 说明文档

9c8904 说明文档

图 1 遗传算法加拍卖决策优化除冰任务

9c8904 说明文档

61阅读提醒您本文地址:

图 2 蚂蚁算法优化除冰任务

9c8904 说明文档

9c8904 说明文档

图 3 航班变换情况下除冰代价(price)对比

9c8904 说明文档

图 5航班变换情况下除冰代价(time)对比

总结(conclusion )

本文结合实际情况,对机场除冰车辆调度问题从数学模型方面进行了描述,

9c8904 说明文档

9c8904 说明文档

并利用遗传算法结合拍卖决策求解了除冰车辆的优化调度问题,计算结果表明,该算法在解决此类问题中,能够得到满意的结果。(www.61k.com)但足,我们的模型只是机场除冰问题的一个简单模拟,我们做了好多假设,实际问题往往要复杂的多,模型也更加复杂。通过本文我们可以看出,只要建立合理的数学模型,通过该算法就可以得到相对较好的调度方案,因此如果要解决较复杂的机场除冰问题,需要和机场方合作,定义出需求和实际的数据,建立适当的数学模型,通过遗传算法加拍卖决策优化出较好的方案。

摘要

文章研究了在遗传算法中融入拍卖决策解决飞机除冰任务安排的问题,在此基础上给出了优化任务安排的一种新的算法,通过遗传算法中一系列参数的调整,较之纯粹的FCFS(先到先服务)和ANT(蚂蚁路径寻优)的对比仿真,可以验证该方法的有效性。

算法核心思路 2. 除冰模型

每架飞机的除冰持续时间ti,i=1,2,3…….N 每架飞机的航班起飞时刻Fi,i=1,2,3……N 每架飞机的开始除冰时刻Si,i=1,2,3……N

?l(Si?ti?Fi)?

惩罚代价函数Di??A?L(Si?ti?F)

?0?

目标函数:J?程序流程图: 0?Si?ti?Fi?Tmaxdelay

Si?ti?Fi?Tmaxdelay

其他

?D

i?1

N

i

9c8904 说明文档

拍卖决策流程图

9c8904 说明文档

1

5

Example:

9c8904 说明文档

9c8904 说明文档

除冰车数目m=5,待除冰飞机数目n=20 Step1.生成初始染色体种群,即每一台除冰车对应的待除冰飞机序列.其中某染色体的结构如下所示,5台除冰车对应的除冰任务为该表格同行的航班序号

9c8904 说明文档

Step2 运用拍卖决策决定每台除冰车除冰先后任务安排序列

如针对2号除冰车,其任务为3,7,17三架飞机.运用之前提到的代价函数(时间,价格)分别计算在当前时刻选择各飞机进行除冰所需承担的代价,选择其中代价最小的飞机作为当前时刻的除冰飞机进行除冰,并将此飞机序号从待除冰飞机序号中删除,除冰结束之后再进行上述拍卖择优,直至该除冰车对所有分配给他的待除冰飞机除冰结束.

首先拍卖得到在当前时刻下选择3号飞机进行除冰的代价最少(当前时刻8:00,代价20分钟) 接着进行下一次拍卖,选择7号飞机进行除冰的代价最少(当前时刻8:10,代价0分钟) 最后选择17号飞机进行除冰.

对其他除冰车也进行类似拍卖得到

9c8904 说明文档

9c8904 说明文档

9c8904 说明文档

Step3.计算该任务安排表对应的延误代价

Step 4 针对种群中每一个染色体组进行step1-step3

Step 5选择代价最少的作为当代进化中最优个体予以保存.

2.遗传算法

改进的GA算法框架

本文GA中的精英策略能保证最优解适应值的单调递增性,算法步骤如下: (1)采用随机算法生成初始种群。[www.61k.com)

(2)利用拍卖决策算法把染色体映射为调度并计算个体的适应值。 (3)不满足结束条件时,重复以下操作:

1)施加选择算子;

2)以既定概率施加交叉算子; 3)以既定概率施加变异算子;

4)利用顺序最优算法把染色体映射为调度并计算个体的适应值; 5)采用精英策略保留全局最佳个体。

9c8904 说明文档

9c8904 说明文档

3.ANT算法

现在以除冰任务安排为例说明基本的蚂蚁算法,m是除冰车数目,n是待除冰飞机数目。[www.61k.com] ?i.j为除冰车结束i号飞机除冰任务之后转移到j号飞机的概率。

?i,j?dijd,其中dij是除冰车从i号飞机转移到j号飞机的权重

ij

dij?w1*?j?w2*11?w3*Djtime?Fj

w1,w2,w3是权重系数

(?j,是j飞机的型号系数,Dj是j飞机的除冰持续时间,Fj是j飞机的起飞时间,) time是i飞机的除冰结束时刻

4.总结

本文针对指定的航班表和除冰车数目,先采用遗传算法优化出每台除冰车要处理的航班序列,在此基础上应用拍卖决策对序列进行优化,得到除冰任务的先后顺序,并以此计算对应的延误时间和延误代价,作为种群染色体选择复制参考的适应度值。最后通过多代进化,得到最优的任务安排序列。

仿真结果

9c8904 说明文档

图 1 遗传算法加拍卖决策优化除冰任务

9c8904 说明文档

9c8904 说明文档

图 2 蚂蚁算法优化除冰任务

9c8904 说明文档

图 3 航班变换情况下除冰代价(price)对比

9c8904 说明文档

9c8904 说明文档

61阅读提醒您本文地址:

图 5航班变换情况下除冰代价(time)对比

总结(conclusion )

本文结合实际情况,对机场除冰车辆调度问题从数学模型方面进行了描述,并利用遗传算法结合拍卖决策求解了除冰车辆的优化调度问题,计算结果表明,该算法在解决此类问题中,能够得到满意的结果。[www.61k.com]但足,我们的模型只是机场除冰问题的一个简单模拟,我们做了好多假设,实际问题往往要复杂的多,模型也更加复杂。通过本文我们可以看出,只要建立合理的数学模型,通过该算法就可以得到相对较好的调度方案,因此如果要解决较复杂的机场除冰问题,需要和机场方合作,定义出需求和实际的数据,建立适当的数学模型,通过遗传算法加拍卖决策优化出较好的方案。

61阅读提醒您本文地址:

本文标题:接口说明文档-手电通说明文档
本文地址: http://www.61k.com/1077124.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1