{S0}指数{A}{A11}{A12} {A14}{A15}{A16}{A17}{A18}{A19}{A20}{A22}
随着手机行业的广泛发展,我们的手机变得比以前更强大。今天,手机可以处理图像,声音,甚至视频。我们可以从手机的摄像头的图片,或从电脑或从网站下载。我有两个手机,西门子CXV65和诺基亚6021。它是枯燥的,我必须安装两个独立的软件,当我想转让他们的图片。这真的需要很多我的磁盘空间和减慢我的机器。
,虽然我们可以购买商业软件做到这一点,我不知道是否有可能发展自己的软件呢?这是一个惊人的想法,我没有完成。现在,我会告诉你,我怎么没在自上而下的角度来看,。在这篇文章中,您将了解什么是OBEX,FBUS,和插件的计划。我希望代码或数据的例子,在源代码中的注释,会给你一个清晰的画面。希望你喜欢这篇文章!{A23}
在我开始这个程序之前,我做了很多工作在SMS(短消息服务)使用Visual Studio 2003。 NET 1.1下很难找到一个真正稳定的和可扩展的串行端口类的,而正因为如此,大量的工作,在此期间失败。但今天,。NET 2.0和。NET 2.0 Framework精简版提供给我们下System.IO.Ports命名空间,这是稳定,可扩展和易于使用的的一个很好的串行端口类。所以,现在,我们可以写我们自己的串行端口的程序比以前容易得多。
我的手机是串行端口的手机,它提供了一个数据线插件。西门子CXV65手机有两种数据线,540数据线和510数据线。我对他们两个。 540数据线插入时,我的电脑会找到一个西门子调制解调器使用的COM3。 510数据线只是一个PL2303 USB到串行端口桥。诺基亚手机有两种电缆,DKU - 2和DKU - 5数据电缆。我的诺基亚6021使用DKU - 5数据线,也只是PL2303的桥梁。
正如您稍后将看到,西门子手机使用OBEX(对象交换)协议来处理文件传输,和大多数的诺基亚手机使用FBUS协议的协议,以及一些使用MBUS协议。 OBEX协议的详细记载,但很难找到FBUS文件。我将介绍OBEX和FBUS后来。
让我们开始!{A24}
完整的解决方案,包含七个项目:FileTransferCodeDemo
示范项目的主要形式。SDK
我的插件的软件开发工具包,其中包含:一个OBEX客户协议(OBEX文件夹)
提供的主要功能,包括连接,断开连接和文件传输。插件接​​口(IPhonePlugIn.vb)串行端口连接显示器(Monitor.vb)
自动检测这一计划的电话。插件在发现和使用服务(PlugInSerivce.vb)。插件
其他项目的所有插件。 SDK提供的服务主要是基于插件。所有插件仅用于演示,他们提供从PC只有一个单向传输到手机。索尼爱立信,西门子CX6C,摩托,自行车和OBEX协议的基础上。 NokiaS40 FBUS协议是基于。三星的协议是根据自身的AT。注意:NokiaS40 FBUS协议在PC电话传输只有一个核心技术,没有错误报告,没有失败的通知。如果失败,甚至造成死在您的手机文件,你不能删除它!!所有插件应使用您自己的风险!
我将重点放在SDK项目和插件。要获得这些项目的共同工作,请寻找到的FileTransferCodeDemo项目。{A25}{A26}
由于来自不同公司的手机都各有不同,我们可以不写一个单独的程序,以支持所有的手机。如果可能的话,,我们一定会是一个大的项目,将缺乏可扩展性。我们必须找到一种方法,使我们的生活变得更容易。插件计划将满足这样的需求:它的灵活。我们可以写一个主程序,剩下的唯一工作是只写插件和DLL文件复制。它易于管理。当我们发现漏洞,我们只需修改和测试单个插件而不触及其他插件和主程序。它易于使用。如果我有一个电话,我可以复制的DLL只有一个。{A27}
一个插件接口是一个重要的共同的功能,我们将使用在我们的插件的接口,它定义。所有插件将实现这个接口。后来,我的插件服务,会发现在DLL中实现这个接口的所有类。我的界面如下图所示:
{S2}{A28}
插件提供服务的能力,以搜索为DLL实现某个接口。 。NET提供的System.Reflection命名空间中从一个DLL中的反映。 FindPlugins功能发现所有的DLL,然后ExamineAssembly()函数使用反射来检查的DLL。的CreateInstance()函数用于创建一个对象实例的插件。请参阅有关详细信息的代码。我感谢作者写这些段。
我写了一个SelectPlugin()函数。此功能检查手机的模式ID和,然后比较LT;插件ingt。SupportModelID()字符串。如果它们匹配,函数将返回在插件数量来指示要使用哪一个插件。
可以很容易地检查了一个手机模型ID。你可以简单地发送AT命令称为quot; CGMMquot;到串行端口,然后比较返回的字符串。
{A29}
下面是代码段,以证明我的使用插件在计划: {A30}
在这里,我将只显示你在我的代码中使用的操作一些基本的串行端口。对于更多的串行端口的例子,请参见MSDN文档。
首先,你必须System.IO.Ports命名空间导入到项目中。然后你创建一个新的SerialPort的实例,在这里,我们将它称为mPort。
然后,你必须做一些设置的串行端口。{C}
在这一点上,你可以简单地使用mPort.Write()或mPort.Read()来发送和接收二进制数据。要发送AT命令,你可以使用mPort.WriteLine()和mPort.ReadLine()。
下面是一个简单的函数发送和接收AT命令。

Function SendAT(ByVal cmd As String) As String
    mPort.NewLine = Chr(13)
    mPort.WriteLine(cmd)
    mATTimeOut = 1000
    Dim response As New Text.StringBuilder
    Dim start As Date = Now
    Do
        Thread.Sleep(10)
        Dim rsp As String = mPort.ReadExisting()
        response.Append(rsp)
        If Now.Subtract(start).TotalMilliseconds > _
                               mATTimeOut Then
            Throw New TimeoutException("AT TimeOut")
        If response.ToString.Contains("OK") Or _
           response.ToString.Contains("ERROR") Then
              Exit Do
    Loop
     Return response.ToString
End Function

有关详细信息,请参阅我的程序的MSDN文件。{A31}
我发现了一个非常强大的工具,叫做HHD串口监听,监测和分析数据传输。它可以监视您的串行端口发送和接收的数据。最新版本可以发现{A32}。在这篇文章中,我使用的版本3.22,因为我发现我无法监视在4.0版本的调制解调器。{A33}{A34}
OBEX对象交换模式,这是一个IrDA或蓝牙技术的顶层协议的缩写。 OBEX是广泛应用于移动设备,如PDA和移动电话。我的手机支持OBEX。对于西门子,索尼爱立信,摩托罗拉,OBEX是易于使用,但诺基亚手机使用FBUS这是很难使用的OBEX。{A35}
关于这一问题的更多细节,请参阅{A36}协议。{A37}
这些例子是我以前的文章。我使用一个串口监视器来监视数据。是PC机的客户端和一个西门子M55服务器。
注意:
{S4}的
灰色用于真实数据的解释和黄色。 连接,断开连接
数据传输:
{五}文件发送到\声音\ 1.mid,313字节。
西门子拥有474个字节的最大包长度。因此,这个文件可以填写一个包。
简要过程:连接 - >切换到根- GT;切换到声音文件夹- GT; PUT - GT ;???/ p>
确切的过程:(忽略连接部分)
{中六}发送文件\图片\ 102725.jpg,5314字节。
简要过程:连接 - >切换到根- GT;切换到\ Pictures文件夹- GT; PUT - GT ;???/ p>
确切的过程:(忽略连接部分)
{七}{A38}
现在我们知道如何传输文件,但是我们怎样才能进入OBEX模式呢?一个移动电话公司,让他们自行决定如何进入OBEX模式。西门子
首先,你必须能够发送AT命令。然后,您发送"AT ^ SQWE = 0quot,等待响应,然后quot; ^ SQWE = 3quot,并等待响应。然后,你将在OBEX模式。
提示:我还可以看到在串行从GIPSY的OBEX状态西门子M55手机的工厂模式。
为了退出OBEX模式,请发送"quot;和等待超过一秒钟。摩托罗拉C650
,您必须能够发送AT命令。然后发送quot; AT模式= 22quot;,和你在OBEX模式。
要离开的OBEX模式,你应该关闭你的端口,然后重新打开,然后一切都会好的。索尼Ericssion T618/K508
,您必须能够发送AT命令。然后发送quot; * EOBEXquot,你会在OBEX的模式。{A39}
我Dreamworld.Protocol.OBEXClient.Command类提供了OBEX的基本操作,如连接,断开,上市文件夹,文件传输。你的工作,是落实EnterOBEX()和ExitOBEX()函数。对于更多细节为例,请参阅我的西门子CX6C项目。{A40}
正如我上面提到,FBUS协议已在互联网上没有详细的文件。据我所知,所谓的gnokii一个开源项目,该项目已做了一些工作,在这个协议的,但它仍然是不够细致。下一步做什么?我只能监视的文件传输过程中的其他软件,分析它,然后执行它。
进入诺基亚FBUS协议,你必须首先设置您的波特率为115200,并设置DTR = OFF和RTS = OFF。{A41}
FBUS要求作为帧的每一个数据段。这里是FBUS第2版(从的gnokii文件)的帧格式:名称说明FrameID0x1C的:红外/ FBUS
0X1E:串行/ FBUSDestDev,SrcDev0X00:手机
0x0c,0x10的:TE(PC)MsgType细节的gnokiiFrameLength[块]长度为2FrameToGo0x0n意味着有N - 1帧,此帧后。SeqNo[0xXY] X = 4:首块X = 0:继续块Y:序列号PaddingByte为0x00,如果FrameLength将是一个奇数,反正不存在ChkSum1异对帧的奇数ChkSum2异或上帧的偶数
让我们先来看看两个FBUS段从一个移动到PC:要求从PC
{S8}
你会发现,在发送第一帧之前,大量的0x55s发送。这些0x55s都被称为同步信号。为什么0x55s,而不是其他的十六进制值发送?你知道将0x55的二进制是1010101,而当在串行线上,这将是01010101。这些"0x55quot;将与重复quot; 01quot;,当手机接收到足够的quot; 01quot;,以确保该行是确定的,手机会切换到FBUS模式。
让我们来看看:第1帧
,这是一个请求帧版本的手机信息,请:
{S9}第2帧
这是一个确认框。每一帧TE发送将返回一个确认帧的MsgId = 0x7F的。它的格式是:
{FrameID, DestDev, SrcDev, 0x7F, 0x00, 0x02, 
        ID_Command, ID_SeqNo, ChkSum1, ChkSum2}
ID_Command:commandID您确认。ID_SeqNo:您确认的序列号。
在我们的例子中,ID_Command是0xD1这是在我们的要求0xD1的ID。
ID_SeqNo是一个数等于(SeqNo和0x0F)。在这里,号(0x40和0x0F)= 0X00。第3帧
这是我们从手机的版本信息。注意这里的顺序是0x44。这意味着序列号是4现在。每次发送一个新的帧,序列号(SEQ 1)应付款当日8。所以第5帧的序列号应该是5。第4帧
应答帧到最后一帧。您必须返回一个确认到最后一帧,只要你接收和检查帧。通常情况下,你必须作出回应,约300毫秒内。如果没有,手机会重试三次发送相同的帧。如果没有确认帧收到手机,手机会断开链接。{A42}
我觉得很难给一个完整的例子来说明这一点,但我将展示如何做到这一点。请看看我的守则草案为例。第1步:切换到FBUS模式。如你所知,发送'0 X55"几次。第2步:发送,我所说的,初始化帧到手机。详情请参阅我的小组准备()。第三步:发送完整的文件名,包括在手机上的路径,并准备发送数据。见privateSendFile()。第4步:发送数据。见privateSendFile()。第5步:发送完整的消息。
我的代码是一个守则草案,所以这将是难以阅读,它将有错误,因为我有没有关于FBUS更详细的文件。通过监控其他软件,我学会了这些步骤。如果你愿意,你可以尝试和监控{A43号}。{A44}
下面列出了一些AT命令:AT命令说明AT FSCD ="LT; D​​IRgt;"切换到LT; D​​IRgt;AT FSDI ="LT; D​​IRgt;"目录信息AT FSDL ="LT; D​​IRgt;"目录列表在FSFW =- 1,"LT; FILENAMEgt;",0,"",LT; LENgt;,LT; CRCgt;发送文件。 FSFE = 0,"LT; FILENAMEgt; quot;删除一个文件。
让我们看一个例子:请求
Change the directory to "/氓?戮莽?". Don't care the folder name here.
    If your phone is English, then it will be /Picture
41 54 2B 46 53 43 44 3D 22 2F E5 9B BE E7 89 87 AT+FSCD="/氓?戮莽??
22 0D                                           ".
Folder Successfully changed.
41 54 2B 46 53 43 44 3D 22 2F E5 9B BE E7 89 87 AT+FSCD="/氓?戮莽??
22 0D 0D 0A 4F 4B 0D 0A                         "...OK..
请求
Repeat. I don't know why.
41 54 2B 46 53 43 44 3D 22 2F E5 9B BE E7 89 87 AT+FSCD="/氓?戮莽??
22 0D                                           ".
Repeat. I don't know why.
41 54 2B 46 53 43 44 3D 22 2F E5 9B BE E7 89 87 AT+FSCD="/氓?戮莽??
22 0D 0D 0A 4F 4B 0D 0A                         "...OK..
请求
Write a file. 18752 is the length.
   880445898 is unsigned CRC32 code for the file.
41 54 2B 46 53 46 57 3D 2D 31 2C 20 22 E6 B5 8B AT+FSFW=-1, "忙碌?
E8 AF 95 2E 6A 70 67 22 2C 20 30 2C 20 22 22 2C 猫炉.jpg", 0, "",
31 38 37 35 32 2C 38 38 30 34 34 35 38 39 38 0D 18752,880445898.
OK. You can continue. "##>" indicates continue your transfer.
41 54 2B 46 53 46 57 3D 2D 31 2C 20 22 E6 B5 8B AT+FSFW=-1, "忙碌?
E8 AF 95 2E 6A 70 67 22 2C 20 30 2C 20 22 22 2C 猫炉.jpg", 0, "",
31 38 37 35 32 2C 38 38 30 34 34 35 38 39 38 0D 18752,880445898.
23 23 3E 0D 0A                                  ##>.. 
请求
Send data. Maximum data length is 512 bytes.
FF D8 FF E0 00 10 4A 46 49 46 00 01 02 00 00 01 每每..JFIF......
......
<Total 512 bytes data here>
Please continue.
0D 0A 23 23 3E 0D 0A                            ..##>..
请求
...
<Continue data segment>
...
请求
Send last segment of data. Phone will calculate
   total data you send. When phone received 
   18752 bytes, it will return OK
   
91 56 53 E9 BF 5B 55 68 AF 8E 35 66 87 06 3D 35 VS茅驴[Uh炉?5f.=5
<.......>
E3 C6 63 31 E3 C6 63 31 E3 C6 63 31 E3 C7 FF D9 茫c1茫c1茫c1茫每
Phone has received all your data.
0D 0A 4F 4B 0D 0A ..OK.. 

这所有的过程中,容易和人类可读的。尝试方案!{A45}
现在是时候休息或咖啡。我认为文件传输,不应该作为你认为的那样神秘。
OBEX协议是广泛使用的和非常强大,但并不像FBUS微小。 FBUS是很难使用,缺乏详细的文件。否则,三星的AT命令是很清楚的使用的。
这将是一个长期的方法,使一个真正稳定的文件传输工具;我学习,等你。让我们分享我们的成功和失败。与我联系,如果你有问题阅读我的文章。{A46}{A47}{A48}
的gnokii提供工具和手机使用Linux下,各种UNIX系统,和Win32的用户空间的驱动程序。{A43}

回答

评论会员:archie_de1416 时间:2011/12/06
私人小组btnSend_Click(#System.Object的,BYVAL e由于发件人)把手btnSend.Click

phone.SendFile(txtSrc.Text,txtDest.Text)

END SUB

私人小组txtSrc_TextChanged(BYVAL发件人为System.Object的,BYVAL e由于)把手txtSrc.TextChanged

如果IO.Path.GetFileName(txtDest.Text)="
txtDest.Text = IO.Path.Combine(phone.DefaultDescFilePath,IO.Path.GetFileName(txtSrc.Text))
最终如果
END SUB

闪存
错误:未将对象引用设置到对象的实例
评论会员:赛义德侯赛因Shakeer 时间:2011/12/06
您好,
PLZ你能告诉我如何从蓝牙到Windows Mobile读取数据。
等待你的答复
你可以回答我的电子邮件:
syedshakeer@rediffmail.com
评论会员:会员2712958 时间:2011/12/06
[消息删除]
评论会员:的Pankajmotiyar 时间:2011/12/06
!您好,程序是非常有趣的

我有一个问题,我该怎么办下载并保存到/从我的电脑从/到耳机的声音?

我没有找到任何有关该DOC!

非常感谢您
评论会员:缠绕 时间:2011/12/06
喜的朋友,我新的短信编程。一次我试图连接CDMA手机与AT命令我放弃了这个想法。
看了你的文章后,我再一次很认真地思考编程连接到电脑发送手机短信。

因为,我搜索的文章,在此基础上。我有点困惑。

在这个过程中,你可以引导我吗? 第一步是读取任何手机的收件箱中,甚至没有的GSM。
第二步是作为字符发送短信与Sender ID(公司名称)。我的文章或您的帮助
请回答我
评论会员:hesicong 时间:2011/12/06


我想记录的手机做PC机的语音对话。为此,我可以使用datacable或蓝色牙u能帮助我。通过发送AT命令的一些IM能够拿起电话,但录制的谈话,我没有得到任何想法。

目前IM重新编码系统连接我的手机耳机线,话筒/线路的谈话。但是,这并不是仪式办法做到这一点IM连接datacable
电话
因此,PLS建议我该怎么做。
等待答复......{ BR} 感谢和问候
评论会员:缠绕 时间:2011/12/06
嘿,伟大的代码..
但我有一个小问题,只是为了得到肯定..它从手机传送到PC ..正确的? (或反之亦然..)请答复,cuz我已经长时间
这样的代码
评论会员:kailashyaru 时间:2011/12/06
从PC到移动〜
评论会员:abicash 时间:2011/12/06
嘿Hesicong
我想2知道如果这个代码可以在诺基亚N系列或

关于修改2008年4月16日(星期三),下午2:50
评论会员:parasu_516 时间:2011/12/06
花花公子,我从印度神山。我做我的最后一年项目,我有finishd我的项目,包括模拟和工作人员突然说,我要实现实时。我只需要一台笔记本电脑和移动之间的基本文件传输方案.. ü教我好吗... ...我真的绝望了bcoz其他,我会失去我的奖学金。请邮寄kailashyaru@rediffmail.com我回到ASAP ...真的迫切..我不会采取大量的UR时间
评论会员:Oslec 时间:2011/12/06
关于AT89S52单片机的接口诺基亚3310更加简化的FBUS tutorial.Its检查本网页
www.ucdevelopers.page.tl



www.ucdevelopers.page.tl
FBUS教程
评论会员:zmrcic 时间:2011/12/06
感谢您提出这样一个内容丰富的文章,

我想知道是有可能通过"Windows窗体",这是使用手机联系人发送短信简单,如何让移动联系人通过的。Net代码??



台北爱乐
评论会员:蒂利普Manawat 时间:2011/12/06
这是很简单的...
使用AT命令
AT CPBS ="SM" - 从SIM卡电话簿
AT + CMGR = 1,1 - 电话簿中的联系人的位置

现在创建一个与事件IOPort的实例,使用的WriteLine发送响应命令和readline。

wallah! UR做! : - >


评论会员:brunili 时间:2011/12/06
我只想创造简单的应用程序手机使用VS细胞... ...这可能....

zmrcic
评论会员:rooparani 时间:2011/12/06
!喜
我与10年的经验的软件开发。我的数据库编程。
我要寻找一个可以用来拨打手机连接到电脑使用电脑的软件。就像我们拨打陆线电话连接到电脑的电话拨号。

主要目的是连接多个不同的服务,如Airtel公司,双雄手机到PC,然后拨打相应的数字为检查手机的平衡。用户不应该打扰拨打什么。
,他应该只选择服务提供商和按一下按钮,说:"检查的平衡"。
是否有可能制定这样的计划?

请帮助我。

的问候,
蒂利普Manawat

评论会员:hesicong 时间:2011/12/06
您好hesicong,

(对不起我的英语水平)我downloadnbsp; 项目。我的摩托罗拉V360(XP检测到的COM3)
连接和运行的APP。与错误
NBSP退出; debugg模式错误
NBSP

未将对象引用设置
NBSP对象的一个​​实例;
分Demo_Load(BYVAL作为System.Object的,BYVAL e由于发件人)处理MyBase.Load
mMonitor.StartMonitor()
- ; AP = PluginServices.FindPlugins(将Application.StartupPath,"Dreamworld.FileTransfer.SDK.IPhonePlugIn")
lstPlugins.Items.Add(aAp.ClassName)
NBSP中的每个AP
NBSP AAP为PluginServices.AvailablePlugin; - ; 下一步
END SUB
任何建议


感谢
我的电子邮件地址bmolinari @ gmail的COM
评论会员:黄邵Voon 时间:2011/12/06
您好先生,

& #160; 在ASP源代码只发送免费短信任何手机和我在我website.Please使用的代码,请告诉我,这怎么可能?请发送到我的e - mail地址的源代码。
我的电子邮件是roopa@mailsnare.net
  ; 感谢你主席先生,
评论会员:hesicong 时间:2011/12/06
我没有任何ASP源代码,对不起的人。
评论会员:ishita古普塔 时间:2011/12/06
喜姒琮,

我必须commment的文章写得很好。我有关,我希望你能帮助我的三星hanphones有一些问题。

我在哪里可以得到完整的AT命令为三星手机?三星三星手机所有型号相同的命令?

在此先感谢!

最好的问候,
邵文
评论会员:hesicong 时间:2011/12/06
关于AT命令三星没有完整的文件。有些像发送和写短信命令的GSM。但三星没有AT命令公布其他私人。
您应该监控三星的软件或任谷歌的沟通过程中。
评论会员:ishita古普塔 时间:2011/12/06
喜hesicong,
  ; 我想问您,在您的项目(从电脑到手机的文件传输)的演示代码,文件传输操作的图形用户界面包含一个目标文件patch.we中的一个输入栏不明确,有什么用此信息

请尽快答复....
评论会员:hesicong 时间:2011/12/06
路径应该是你把你的文件的路径。这将是各种从一部手机到另一。我得到监控传输的进展,其他节目做。你应该做一些工作如何得到路径。
评论会员:ishita古普塔 时间:2011/12/06
亲爱的主席先生,
我想知道,您的文件从PC传输到手机的演示代码中的文件做是为了成功地传输文件。
我还需要一些文件的代码
等待答复..


Ishita古普塔

关于作者

hesicong
中国
我是一名编程爱好者,
谢谢orcode.com为我们提供一个学习和分享的平台。
有什么问题。可以就本内容回复,我看到时。会尽量回复的。
或代码 网站备案号:粤ICP备15020848号-1