频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

提供一个.NET平台通用串口操作类

来源:博客网 作者: 出处:巧巧读书 2007-01-22 进入讨论组
下一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 

讨论组http://group.qqread.com


  1. 动机
应用程序开发语言
为C# 应用程序要求既能在PDA上运行,又能在PC上运行,具备良好的兼容性
应用程序要求尽可能多的兼容不同PDA上的红外线设备
.net自带的SerialPort在HP某型号PDA上操作红外线设备时,只能接受,不能发射
2. 目标
具备良好的兼容性,既能够在PC上运行也能够在PDA上运行。
挡在PDA上运行时,尽可能多的兼容红外设备。
3. 局限性
单线程
仅提供send/receive模式的接口,无事件驱动机制
4 . 关键技术问题及典型测试案例
最关键的是对EscapeCommFunction的调用,当串口为红外设备时,必须调用此函数才能确保串口 工作正常。当串口为一般的COM口时,出于兼容性的考虑,切勿调用此函数。

在HP某PDA上测试时,不管串口是否为红外设备,均调用此函数启用红外功能,均能够工作正常。
在SIEMENS某PDA上测试时,如果串口为一般COM接口,并且调用了此函数,那么串口不能正常工作,屏蔽此函数后,一切正常。
5. 源码
SerialPort Source Code
using System;
using System.Runtime.InteropServices;

namespace NativeDll
{
public class SerialPort
{
serial port api#region serial port api
//for ir control
private const int SETIR = 10;
private const int CLRIR = 11;
//win32 api constants
private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000;
private const int OPEN_EXISTING = 3;
private const int INVALID_HANDLE_VALUE = -1;
private const int MAXBLOCK = 4096;

private const uint PURGE_TXABORT = 0x0001;
// Kill the pending/current writes to the comm port.
private const uint PURGE_RXABORT = 0x0002;
// Kill the pending/current reads to the comm port.
private const uint PURGE_TXCLEAR = 0x0004;
// Kill the transmit queue if there.
private const uint PURGE_RXCLEAR = 0x0008;
// Kill the typeahead buffer if there.

[StructLayout(LayoutKind.Sequential)]
private struct DCB
{ 更多文章 更多内容请看.NET移动与嵌入式技术.NET开发手册.NET基础介绍专题,或进入讨论组讨论。
下一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章