2004年12月08日






房屋租赁合同





  房屋租赁合同
编号:
  本合同当事人
  出租方(以下简称甲方):
  承租方(以下简称乙方):
  根据《中华人民共和国合同法》及相关法律法规的规定,甲、乙双方在平等、自愿的基础上,就甲方将房屋出租给乙方使用,乙方承租甲方房屋事宜,为明确双方权利义务,经协商一致,订立本合同。
  第一条 甲方保证所出租的房屋符合国家对租赁房屋的有关规定。
  第二条 房屋的坐落、面积、装修、设施情况
  1、甲方出租给乙方的房屋位于 (省、市)(区、县) ;门牌号为   2、出租房屋面积共 平方米(建筑面积/使用面积/套内面积)。
  3、该房屋现有装修及设施、设备情况详见合同附件。
  该附件作为甲方按照本合同约定交付乙方使用和乙方在本合同租赁期满交还该房屋时的验收依据。
  第三条 甲方应提供房产证(或具有出租权的有效证明)、身份证明(营业执照)等文件,乙方应提供身份证明文件。双方验证后可复印对方文件备存。所有复印件仅供本次租赁使用。
  第四条 租赁期限、用途
  1、该房屋租赁期共  个月。自 年 月 日起至 年 月 日止。
  2、乙方向甲方承诺,租赁该房屋仅作为   使用。
  3、租赁期满,甲方有权收回出租房屋,乙方应如期交还。
  乙方如要求续租,则必须在租赁期满 个月之前书面通知甲方,经甲方同意后,重新签订租赁合同。
  第五条 租金及支付方式
  1、 该房屋每月租金为  元(大写 万 仟 佰 拾 元整)。
租金总额为  元(大写 万 仟 佰 拾 元整)。
  2、 房屋租金支付方式如下:

  甲方收款后应提供给乙方有效的收款凭证。
  第六条 租赁期间相关费用及税金
  1、 甲方应承担的费用:
  (1)租赁期间,房屋和土地的产权税由甲方依法交纳。如果发生政府有关部门征收本合同中未列出项目但与该房屋有关的费用,应由甲方负担。
  (2) 。
  2、乙方交纳以下费用:
  (1)            。
  (2) 。
  乙方应按时交纳自行负担的费用。
  甲方不得擅自增加本合同未明确由乙方交纳的费用。
  第七条 房屋修缮与使用
  1、在租赁期内,甲方应保证出租房屋的使用安全。该房屋及所属设施的维修责任除双方在本合同及补充条款中约定外,均由甲方负责(乙方使用不当除外)。
  甲方提出进行维修须提前 日书面通知乙方,乙方应积极协助配合。
  乙方向甲方提出维修请求后,甲方应及时提供维修服务。
  对乙方的装修装饰部分甲方不负有修缮的义务。
  2、乙方应合理使用其所承租的房屋及其附属设施。如因使用不当造成房屋及设施损坏的,乙方应立即负责修复或经济赔偿。
  乙方如改变房屋的内部结构、装修或设置对房屋结构有影响的设备,设计规模、范围、工艺、用料等方案均须事先征得甲方的书面同意后方可施工。租赁期满后或因乙方责任导致退租的,除双方另有约定外,甲方有权选择以下权利中的一种:
  (1)依附于房屋的装修归甲方所有。
  (2)要求乙方恢复原状。
  (3)向乙方收取恢复工程实际发生的费用。
  第八条 房屋的转让与转租
  1、租赁期间,甲方有权依照法定程序转让该出租的房屋,转让后,本合同对新的房屋所有人和乙方继续有效。
  2、 未经甲方同意,乙方不得转租、转借承租房屋。
  3、甲方出售房屋,须在  个月前书面通知乙方,在同等条件下,乙方有优先购买权。
  第九条 合同的变更、解除与终止
  1、双方可以协商变更或终止本合同。
  2、甲方有以下行为之一的,乙方有权解除合同:
 (1)不能提供房屋或所提供房屋不符合约定条件,严重影响居住。
 (2)甲方未尽房屋修缮义务,严重影响居住的。
  3、房屋租赁期间,乙方有下列行为之一的,甲方有权解除合同,收回出租房屋;
 (1)未经甲方书面同意,转租、转借承租房屋。
 (2)未经甲方书面同意,拆改变动房屋结构。
 (3)损坏承租房屋,在甲方提出的合理期限内仍未修复的。
 (4)未经甲方书面同意,改变本合同约定的房屋租赁用途。
 (5)利用承租房屋存放危险物品或进行违法活动。
 (6)逾期未交纳按约定应当由乙方交纳的各项费用,已经给甲方造成严重损害的。
 (7)拖欠房租累计  个月以上。
  4、租赁期满前,乙方要继续租赁的,应当在租赁期满 个月前书面通知甲方。如甲方在租期届满后仍要对外出租的,在同等条件下,乙方享有优先承租权。
  5、租赁期满合同自然终止。
  6、因不可抗力因素导致合同无法履行的,合同终止。
  第十条 房屋交付及收回的验收
  1、甲方应保证租赁房屋本身及附属设施、设备处于能够正常使用状态。
  2、验收时双方共同参与,如对装修、器物等硬件设施、设备有异议应当场提出。当场难以检测判断的,应于 日内向对方主张。
  3、乙方应于房屋租赁期满后,将承租房屋及附属设施、设备交还甲方。
  4、乙方交还甲方房屋应当保持房屋及设施、设备的完好状态,不得留存物品或影响房屋的正常使用。对未经同意留存的物品,甲方有权处置。
  第十一条 甲方违约责任处理规定
  1、甲方因不能提供本合同约定的房屋而解除合同的,应支付乙方本合同租金总额 %的违约金。甲方除应按约定支付违约金外,还应对超出违约金以外的损失进行赔偿。
  2、如乙方要求甲方继续履行合同的,甲方每逾期交房一日,则每日应向乙方支付日租金  倍的滞纳金。甲方还应承担因逾期交付给乙方造成的损失。
  3、由于甲方怠于履行维修义务或情况紧急,乙方组织维修的,甲方应支付乙方费用或折抵租金,但乙方应提供有效凭证。
  4、甲方违反本合同约定,提前收回房屋的,应按照合同总租金的 %向乙方支付违约金,若支付的违约金不足弥补乙方损失的,甲方还应该承担赔偿责任。
  5、甲方因房屋权属瑕疵或非法出租房屋而导致本合同无效时,甲方应赔偿乙方损失。
  第十二条 乙方违约责任
  1、租赁期间,乙方有下列行为之一的,甲方有权终止合同,收回该房屋,乙方应按照合同总租金的 %向甲方支付违约金。若支付的违约金不足弥补甲方损失的,乙方还应负责赔偿直至达到弥补全部损失为止。
 (1)未经甲方书面同意,将房屋转租、转借给他人使用的;
 (2)未经甲方书面同意,拆改变动房屋结构或损坏房屋;
 (3)改变本合同规定的租赁用途或利用该房屋进行违法活动的;
 (4)拖欠房租累计 个月以上的。
  2、在租赁期内,乙方逾期交纳本合同约定应由乙方负担的费用的,每逾期一天,则应按上述费用总额的 %支付甲方滞纳金。
  3、在租赁期内,乙方未经甲方同意,中途擅自退租的,乙方应该按合同总租金 %的额度向甲方支付违约金。若支付的违约金不足弥补甲方损失的,乙方还应承担赔偿责任。
  4、乙方如逾期支付租金,每逾期一日,则乙方须按日租金的 倍支付滞纳金。
  5、租赁期满,乙方应如期交还该房屋。乙方逾期归还,则每逾期一日应向甲方支付原日租金 倍的滞纳金。乙方还应承担因逾期归还给甲方造成的损失。
  第十三条 免责条件
  1、因不可抗力原因致使本合同不能继续履行或造成的损失,甲、乙双方互不承担责任。
  2、因国家政策需要拆除或改造已租赁的房屋,使甲、乙双方造成损失的,互不承担责任。
  3、因上述原因而终止合同的,租金按照实际使用时间计算,不足整月的按天数计算,多退少补。
  4、不可抗力系指“不能预见、不能避免并不能克服的客观情况”。
  第十四条 本合同未尽事宜,经甲、乙双方协商一致,可订立补充条款。补充条款及附件均为本合同组成部分,与本合同具有同等法律效力。
  第十五条 争议解决
  本合同项下发生的争议,由双方当事人协商或申请调解;协商或调解解决不成的,按下列第  种方式解决(以下两种方式只能选择一种):
  1、提请 仲裁委员会仲裁。
  2、依法向有管辖权的人民法院提起诉讼。
  第十六条 其他约定事项
  1、
  2、   第十七条 本合同自双方签(章)后生效。
  第十八条 本合同及附件一式  份,由甲、乙双方各执  份。具有同等法律效力。
甲方: 乙方:
身份证号(或营业执照号): 身份证号:
电话: 电话:
传真: 传真:
地址: 地址:
邮政编码: 邮政编码:
房产证号:
房地产经纪机构资质证书号码:
签约代表:

签约日期:年 月 日    签约日期: 年 月 日
签约地点: 签约地点:
  设 施 、设 备 清 单
  本《设施清单》为  (甲方)同  (乙方)所签订的编号为 房屋租赁合同的附件。
  甲方向乙方提供以下设施、设备:
  一、燃气管道 [ ] 煤气罐 [ ]
  二、暖气管道 [ ]
  三、热水管道 [ ]
  四、燃气热水器 [ ]  型号:
    电热水器 [ ]   型号:
  五、空调 [ ]  型号及数量:
  六、家具 [ ]  型号及数量:
  七、电器 [ ]  型号及数量:
  八、水表现数: 电表现数: 燃气表现数:
  九、装修状况:
  十、其它设施、设备:
  甲方:         乙方:
                  签约日期: 年  月 日      
                  签约地点:
 
  使用说明:
  1、《房屋租赁合同》、《房屋承租居间合同》推荐文本为中国消费者协会拟定,为建议使用。
  2、凡承诺使用《房屋租赁合同》、《房屋承租居间合同》推荐文本的经营者,有义务应消费者的要求使用。
  3、选择 “争议解决”方式中提请仲裁方式时,应填写所选择仲裁机构的法定名称。
  4、《房屋租赁合同》、《房屋承租居间合同》推荐文本中相关条款,在符合国家法律规定的前提下,考虑消费者与经营者双方的合法权益,结合实际需要可能做出修改。届时,请选用新的版本。

2004年12月06日

抠门”

  尽管思科总部的办公楼、实验楼有好几十座,而公司领导却只占据其中一隅。从总裁钱伯斯,到所有高层都只有一间背阴的小办公室,外带一间能放几把椅子的小会议室;来自世界各国的行业、金融分析师们来到思科参观,而午餐却只是盒饭——计有三明治两片、苹果一个、巧克力和点心各一块;为了控制支出,包括钱伯斯在内的思科所有员工,出差住宿都要遵循统一标准,超标部分,电脑会自动从工资中扣除;虽然思科年销售额将近200亿美元,即使受IT行业整体不景气的影响,上财年赢利仍有19亿美元,而在员工休息室里,却赫然张贴着这样的告示:每人每天少喝一瓶饮料,公司一年便可节约240万美元;

  2003年,思科通过各种手段降低的开支高达19.4亿美元。思科三万多名员工,个个都有公司股份,公司“抠”出效益,大家都受益。思科也有不“死抠”的时候:在行业不景气的情况下,公司2003财年仍将33亿美元资金投入研发;思科员工会将没喝完的矿泉水装入背包以防浪费,会将饮料和雪糕用来热情待客。公司会投入上百万美元进行员工培训,以在行业好转的时候迅速拉开和竞争对手的差距。

  思科“抠门”应作如是观:当花则花,能省必省,一切为企业发展。

  平等

  思科办公室,无论员工级别高低,面积相差无几,且级别高的要坐在中间地带,把临窗向阳的地方让给普通员工;思科公司总部,不设高级管理层专用车位,即使是约翰·钱伯斯也一样得自己到处找停车位;思科所有员工出差,一律坐经济舱。若有人要享受商务舱的舒适,需自己补足两者差价,就连钱伯斯的专用商务机也是自己掏腰包买的,思科只为他提供相同里程的经济舱机票费作补助。

  在思科曾收购的企业中,很多高层都留在了思科,而没有另立门户。谈及个中缘由时,有人说:“约翰与我们完全平等,假如他把我们看成下属的话,我们可能早就离去了。”

  贯穿其中的是“平等”精神。思科在企业中能够始终弘扬平等精神,对于企业的发展来说既关键且珍贵。

  空间

  在思科,从秘书的职位做到高层经理,这不是一个童话。公司会最大程度地给予员工发展的空间,只要敢于发挥你的才能,并让公司注意到,每个员工的成材之路都有章可循。员工可以在公司部门之间频繁转换岗位,直到找到最适合自己的岗位为止。然而,在“灰姑娘”成为“公主”之前,你也不会感到任何不平等:与高层领导享用同样大小的办公空间,出差坐同样等级的舱位,世界各地每个员工的股票与在美国的员工一样多,即使是一名新到公司的员工,都会收到总裁钱伯斯从美国寄来的签名欢迎信,新员工到公司的周年纪念日还会收到纪念品。

  小卡片

  思科员工喜欢用一条小链子将一张印有思科公司介绍的卡片与公司证件系在一起。有些员工还将所有在思科工作期间积累的卡片拴在一起,其中有参加公司各类培训的证明,本地区发展的战略规划等。卡片越多,标志这名员工的工作经历及参与公司的活动越多。

  这张塑料卡片只有名片大小,一面是公司的远景规划及使命:互联网正在改变我们的工作、生活、娱乐和学习方式;通过开创全新的价值和机遇,为我们的客户、员工、投资者以及生态系统合作伙伴塑造互联网的未来。另一面讲述公司企业文化,诸如团队精神、品质第一、推动变革、开放交流等。这张小卡片被员工们随身携带着。它时刻提醒员工们,“工作着是快乐的”,为了实现这个目标,思科公司也出台了各种措施来帮助员工解除后顾之忧。

  思科高层说

  “思科对员工的高度信任和充分授权,使员工能够面临更多的挑战,而不是一成不变的工作。思科的激励机制也努力调动员工的积极性。在思科,没有员工会懈怠,也没有人能坐享其成。有人说,全世界工作最繁忙的是思科人,但思科人也是全世界最自由的,他们不必在框架的约束下工作,而是自己给自己安排日程表。这种充满热情、进取的企业文化,也是思科能够不断取得成功的原因。此外,作为一家网络解决方案供应商,我们利用网络变革了公司的工作流程、管理方式及企业文化,令我们变得更有效率和竞争力。”

  思科员工说

  “说到高效率,思科的三件事是无人不知的。一是voice mail,规定员工8小时内一定要听、要回。老板有什么新指令,基本都通过这个来传发,因为它既快又能带上老板的语气;二是email,我们一收到,就随时check和回复;三是meeting maker。思科所有人都把自己的时间表放上去,细至每15分钟一个时间段。任何事情通过网络都会非常快,譬如出差。经理们一般不会介入到出差或报销的流程中去。我们可以通过网络迅速搞定出差行程,任意选择航班、汽车和酒店。出差回来后,通过一个报销自动程序,每个人将报销单输入电脑,不需任何人监督,公司马上会自动将报销费给你。”

  作为思科商业管理文化的一部分,其成功的收购策略,填补了自主研发未来产品的一些空白,把整个硅谷作为自己实验室的一部分。

2004年12月04日

 

主要几个眼球问题的对比,可能有所出入,欢迎指正:


1 企业文化 中兴 = 华为
中兴:以人为本,人治社会
华为:<基本法>, 法制社会


2 企业管理 华为?中兴
员工个人:工作舒适度
中兴
公司电脑=个人家庭电脑,可随意上网,可游戏,可聊天,
公司=家庭:可随意穿着,匿名论坛是百无禁忌,
华为
公司电脑=中情局保密箱,安全机箱,实时安全监控软件,不能上网,秘书定期检查电脑,配
有安全部门,类似国安局
每年都有十数人因为此类问题被开除!
公司=五星级酒店:衣着整齐,庄重,女生不得穿无袖,凉拖,超短,否则门卫不让入内


华为公司管理:严谨
中兴公司管理:随意
出差补助:华为>中兴
以前远远大于,现在持平,但住宿方面还有差距


3 研发规范 华为>中心
业界的普遍观点


4 公司规模 华为>中兴
公司人数: 华为>中兴
公司基础建设: 华为>中兴
华为基地园区有员工医院,宿舍,活动中心,餐厅,小买部(连汽油票都有卖的,还打折)
中兴一切面向社会
销售额:华为>中兴


5 员工薪水 华为=中兴
虽然近年里新进员工的工资华为要低于中兴,
但华为的隐形收入比中兴多,平均后相差不多,


6 员工福利 华为>中兴
补助:华为>中兴
华为包括,补助1000(公车+餐补)
班车最贵的票10元左右,晚上加班车免费,
中兴:补助350(餐补+其它)
班车免费,但不坐班车的部分员工需自付BUS票


华为有公司基金1000左右
员工离职不能带走,可统一购买公司MBO股等,好像也是公司养老金,除非你在华为退休)
华为以前据说有房补,但现在不知是否还有,具体数目请大家提供


中兴有住房奖金,在中兴工作六年给六万,但需排队等候,
华为每个员工都有MBO股,每年参与分红.离职后按当前价值退还股票,一般员工2-3万股,
PM级有10万股左右,今年股价3.17元,去年股价2.67
中兴每年有奖励股票,但获得人数较少,额度不是很大,具体数目请大家提供
华为员工宿舍百草园
单人,设施齐全包括游泳池,羽毛球馆等活动和休闲中心
房租 **
舒适度 *****
安全 *****
自由 **


中兴员工宿舍中兴花园,高薪公寓
合租
房租 **
舒适度 ***
安全 ***
自由 *****


食堂:
华为一餐人均消费10元
华为:供餐公司数十家,华为人记全,吃全的人也不是很多
吃饭若发现杂物(小动物,人类附属物等),菜变质等,赔偿此菜价的十倍,另任选一款此供
餐公司的菜
吃坏肚子:供餐公司负责人提水果花篮登门道歉,赔款(保密)


中兴:中兴人都知道
中兴一餐人均消费6元,华为的菜价要贵1-3元
吃饭若发现杂物(小动物,人类附属物等),奖励酸奶一杯
菜变质:先去化验确定是否变质,确定后奖励酸奶一杯
吃坏肚子:体质太差,缺少抵抗力!


7 加班和休假:华为>中兴


华为弹性工作日
早上10点前来不算迟到,每天工作时间不得少于8个小时!
晚上加班无加班费,无需申请,自由加班,属于惯性加班
以前开发人员普遍加班,现在根据市场压力,选择加班,加班一般多为培训,周例会,产品沟
通会,干部与员工沟通交流
其它则为自学和工作,一般是一 ,二 四加班
法定休息日加班需向上申请,同意后才可加班,同时安排加班后勤保障,并有加班费=工资
总数/30
PM以上级干部无加班费,避免腐败!
每个月的最后一周的周六为法定加班日,无加班费,但可补作年假,一年将多12天年假
年假不休,可折钱(以前),现在好像也是必休


中兴:
CDMA有特权,上下班时间与其它部门不同,加班有加班工资,平时一小时大概3元,周六大概
5元


加班也多为会议和培训,其它则为自学,工作或者上网,游戏,聊天等娱乐活动
其它部门加班好像无加班工资,也无后勤保障,包括班车,食堂
一般好像也是一 ,二 四加班
年假不休,可折钱(以前),现在好像也是必休


8 离职和辞退
华为
无论你的和约是否约满,离职都无需向公司赔偿任何违约金,股票全额现金退还(指的是一
百万以下的,超过这个数可能要打折,也可实物相抵)
年终奖或多或少会给你留着,相反说不定会获得意象不到的小小惊喜,因为华为的一些隐
形收入也许你到了离职这天才知道(一些老员工)!
辞退开除:发两到三个月的工资,但华为人一般会选择主动辞职!面子问题


中兴
据说实习生毕业了不来中兴也要交赔偿金,更不要说你的合约不满,年终奖一毛都没有,在
中兴离职是一件痛苦的事!
辞退:有补偿吗?具体数目请大家提供


9 2004年销售额


华为
据华为内部人员透露到9月止,华为销售额已达到去年全年销售额300个亿,海外收入已愈
15亿美元,预计全年销售额400亿左右.
海外收入20亿美元左右,占50%-60%
中兴
中兴半年年报上半年销售额110亿左右,去年同期50亿,而去年下半年通过冲刺则高达200
亿,今年中兴9月已经开始启动卓有成效的百日冲刺活动,因此可预计全年销售额450亿左右
,将可能首次超过华为,成为中国第一通讯设备厂商!

2004年12月03日

从Cisco看华为3com,再看存储设备市场!

各位前辈:

Pipilu小弟闲来无事,研究对比了一下新生的华为3com公司和Cisco公司,作出一个判断:

华为3COM公司在2004年底,最迟不超过2005年中,将发布以SAN交换机、iSCSI网关为代表的一系列光存储产品!理由如下:

1、市场暴利驱动
使用于存储系统的光通道交换机等设备的市场价格目前为同等成本应用于局域网的以太网光纤交换机的2-3倍!利润之高可想而知!

2、踩着Cisco的脚印走
Cisco已推出了一系列的光存储设备,Cisco肯定是觉得有利可图才会进入一个新领域的,华为跟着走肯定没错!

3、技术相关性

3.1.存储即将进入IP时代
以iSCSI为代表的一系列新存储技术日益实用,将存储系统设备和以太网数据交换设备紧密联系起来,二网合一是迟早的事情,而且是很快的事情。

3.2.SAN设备与传输设备的关联性
随着SAN架构的普及,高端存储系统越来越普及,基于SAN架构的存储容灾系统及异地存储象雨后春笋般建设,存储对电信级传输系统的依赖越来越明显,殊不知Cisco已将传输设备同时作为光存储设备进行销售了。

4.对市场的一点建议
华为在推出存储设备之初,在国内市场必然会寻找国内的系统集成商低价推销存储设备,由远见的集成商们,可以考虑提前向华为3COM攀攀亲。华为的存储交换机一经推出,国外存储大厂博科、Vixel、Mcdata,还有新进入的Cisco等公司就有好受的了。

存储市场方兴未艾,捎带一点神秘感,感觉就像以太网刚进中国时一样,会做一个小局域网就是很牛×的事情。刚刚毕业或即将毕业的学子们,可以在关注CCNA一类证书的同时,关注一下存储方面的考证,目前进入国内的主要有博科公司的证书,拿一个,保证比CCNA、MCSE证书好用。Pipilu同志顷情推荐。

祝华为3COM一路好走!

2004年10月20日

   Line disciplines
     A terminal file is used like any other file in the system in that it can
     be opened, read, and written to using standard system calls.  For each
     existing terminal file, there is a software processing module called a
     line discipline is associated with it.  The line discipline essentially
     glues the low level device driver code with the high level generic inter-
     face routines (such as read(2) and write(2)), and is responsible for
     implementing the semantics associated with the device.  When a terminal
     file is first opened by a program, the default line discipline called the
     termios line discipline is associated with the file.  This is the primary
     line discipline that is used in most cases and provides the semantics
     that users normally associate with a terminal.  When the termios line
     discipline is in effect, the terminal file behaves and is operated
     according to the rules described in termios(4).  Please refer to that man
     page for a full description of the terminal semantics.  The operations
     described here generally represent features common across all line
     disciplines, however some of these calls may not make sense in conjunc-
     tion with a line discipline other than termios, and some may not be sup-
     ported by the underlying hardware (or lack thereof, as in the case of
     ptys).

/* Initialize UART driver */
int init_uart(char *dev, struct uart_t *u, int send_break)
{
 struct termios ti;
 int  fd, i;

 fd = open(dev, O_RDWR | O_NOCTTY);//打开串口设备,其中标志

//O_RDWR,可以对此设备进行读写操作;

//O_NOCTTY,我不是很理解?

//但是不要以控制 tty 的模式,因为我们并不希望在发送 Ctrl-C
 后结束此进程

 if (fd < 0) {
  perror(“Can’t open serial port”);
  return -1;
 }

 //drop fd’s data;
 tcflush(fd, TCIOFLUSH
);//清空数据线

 if (tcgetattr(fd, &ti) < 0) {
  perror(“Can’t get port settings”);
  return -1;
 }

 cfmakeraw(&ti);

cfmakeraw sets the terminal attributes as follows://此函数设置串口终端的以下这些属性,
termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|INLCR|IGNCR|ICRNL|IXON);
termios_p->c_oflag &= ~OPOST;
termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
termios_p->c_cflag &= ~(CSIZE|PARENB) ;
termios_p->c_cflag |=CS8;

 ti.c_cflag |= CLOCAL;//本地连接,无调制解调器控制
 if (u->flags & FLOW_CTL)
  ti.c_cflag |= CRTSCTS
;//输出硬件流控(只能在具完整线路的缆线下工作,参

//考 Serial-HOWTO 第七节)
 else
  ti.c_cflag &= ~CRTSCTS;

 if (tcsetattr(fd, TCSANOW, &ti) < 0) {//启动新的串口设置
  perror(“Can’t set port settings”);
  return -1;
 }

 /* Set initial baudrate */
 if (set_speed(fd, &ti, u->init_speed) < 0) {/
/设置串口的传输速率bps, 也可以使

//用 cfsetispeed 和 cfsetospeed 来设置

  perror(“Can’t set initial baud rate”);
  return -1;
 }

 tcflush(fd, TCIOFLUSH);//清空数据线

 if (send_break)
  tcsendbreak(fd, 0);

//int tcsendbreak ( int fd, int duration );Sends a break for
//the given time.在串口线上发送0值,至少维持0.25秒。

//If duration is 0, it transmits zero-valued bits for at least 0.25 seconds, and

//not more than 0.5seconds.

 //where place register u’s init function;
 if (u->init && u->init(fd, u, &ti) < 0)

//所有bluez支持的蓝牙串口设备类型构成了一个uart结构数组,通过

//查找对应的uart类型,这个uart的init成员显示了它的init调用方法;

struct uart_t uart[] = {
 { “any”,      0×0000, 0×0000, HCI_UART_H4,   115200, 115200, FLOW_CTL, NULL },
 { “ericsson”, 0×0000, 0×0000, HCI_UART_H4,   57600,  115200, FLOW_CTL, ericsson },
 { “digi”,     0×0000, 0×0000, HCI_UART_H4,   9600,   115200, FLOW_CTL, digi },
 { “texas”,    0×0000, 0×0000, HCI_UART_H4,   115200, 115200, FLOW_CTL, texas},

 { “bcsp”,     0×0000, 0×0000, HCI_UART_BCSP, 115200, 115200, 0,        bcsp },//bcsp的init函数名为bcsp,定义在本文件中**;

  return -1;

 tcflush(fd, TCIOFLUSH);//清空数据线

 /* Set actual baudrate */
 if (set_speed(fd, &ti, u->speed) < 0) {
  perror(“Can’t set baud rate”);
  return -1;
 }

 /* Set TTY to N_HCI line discipline */
 i = N_HCI;
 if (ioctl(fd, TIOCSETD, &i) < 0) {//

TIOCSETD int *ldisc//改变到 i 行规,即hci行规
Change to the new line discipline pointed to by ldisc. The available line disciplines are listed in 

/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */

/* line disciplines */
#define N_TTY  0

……

#define N_HCI  15  /* Bluetooth HCI UART */

  perror(“Can’t set line discipline”);
  return -1;
 }

 if (ioctl(fd, HCIUARTSETPROTO, u->proto) < 0) {

//设置hci设备的proto操作函数集为hci_uart操作集;
  perror(“Can’t set device”);
  return -1;
 }

 return fd;
}

Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍。


Linux下串口编程入门


Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍。

串口简介
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是”数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个 25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。传输距离在码元畸变小于 4% 的情况下,传输电缆长度应为 50 英尺。

Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍,如果要非常深入了解,建议看看本文所参考的《Serial Programming Guide for POSIX Operating Systems》

计算机串口的引脚说明

<><>   
序号 信号名称 符号 流向 功能
2 发送数据 TXD DTE→DCE DTE发送串行数据
3 接收数据 RXD DTE←DCE DTE 接收串行数据
4 请求发送 RTS DTE→DCE DTE 请求 DCE 将线路切换到发送方式
5 允许发送 CTS DTE←DCE DCE 告诉 DTE 线路已接通可以发送数据
6 数据设备准备好 DSR DTE←DCE DCE 准备好
7 信号地         信号公共地
8 载波检测 DCD DTE←DCE 表示 DCE 接收到远程载波
20 数据终端准备好 DTR DTE→DCE DTE 准备好
22 振铃指示 RI DTE←DCE 表示 DCE 与线路接通,出现振铃

串口操作
串口操作需要的头文件

 #include  /*标准输入输出定义*/ #include  /*标准函数库定义*/ #include  /*Unix 标准函数定义*/ #include  #include  #include  /*文件控制定义*/ #include  /*PPSIX 终端控制定义*/ #include  /*错误号定义*/ 

打开串口
在 Linux 下串口文件是位于 /dev 下的

串口一 为 /dev/ttyS0

串口二 为 /dev/ttyS1

打开串口是通过使用标准的文件打开函数操作:

 int fd; /*以读写方式打开串口*/ fd = open( "/dev/ttyS0", O_RDWR); if (-1 == fd){ /* 不能打开串口一*/ perror(" 提示错误!"); } 

设置串口
最基本的设置串口包括波特率设置,效验位和停止位设置。

串口的设置主要是设置 struct termios 结构体的各成员值。

 struct termio { unsigned short c_iflag; /* 输入模式标志 */ unsigned short c_oflag; /* 输出模式标志 */ unsigned short c_cflag; /* 控制模式标志*/ unsigned short c_lflag; /* local mode flags */ unsigned char c_line; /* line discipline */ unsigned char c_cc[NCC]; /* control characters */ }; 

设置这个结构体很复杂,我这里就只说说常见的一些设置:

波特率设置

下面是修改波特率的代码:

 struct termios Opt; tcgetattr(fd, &Opt); cfsetispeed(&Opt,B19200); /*设置为19200Bps*/ cfsetospeed(&Opt,B19200); tcsetattr(fd,TCANOW,&Opt); 

设置波特率的例子函数:

 /** *@brief 设置串口通信速率 *@param fd 类型 int 打开串口的文件句柄 *@param speed 类型 int 串口速度 *@return void */ int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600, B4800, B2400, B1200, B300, }; int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, }; void set_speed(int fd, int speed){ int i; int status; struct termios Opt; tcgetattr(fd, &Opt); for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { if (speed == name_arr[i]) { tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arr[i]); cfsetospeed(&Opt, speed_arr[i]); status = tcsetattr(fd1, TCSANOW, &Opt); if (status != 0) { perror("tcsetattr fd1"); return; } tcflush(fd,TCIOFLUSH); } } } 

效验位和停止位的设置:

无效验 8位 Option.c_cflag &= ~PARENB;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS8;
奇效验(Odd) 7位 Option.c_cflag |= ~PARENB;
Option.c_cflag &= ~PARODD;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS7;
偶效验(Even) 7位 Option.c_cflag &= ~PARENB;
Option.c_cflag |= ~PARODD;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS7;
Space效验 7位 Option.c_cflag &= ~PARENB;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= &~CSIZE;
Option.c_cflag |= CS8;

设置效验的函数:

 /** *@brief 设置串口数据位,停止位和效验位 *@param fd 类型 int 打开的串口文件句柄 *@param databits 类型 int 数据位 取值 为 7 或者8 *@param stopbits 类型 int 停止位 取值为 1 或者2 *@param parity 类型 int 效验类型 取值为N,E,O,,S */ int set_Parity(int fd,int databits,int stopbits,int parity) { struct termios options; if ( tcgetattr( fd,&options) != 0) { perror("SetupSerial 1"); return(FALSE); } options.c_cflag &= ~CSIZE; switch (databits) /*设置数据位数*/ { case 7: options.c_cflag |= CS7; break; case 8: options.c_cflag |= CS8; break; default: fprintf(stderr,"Unsupported data size "); return (FALSE); } switch (parity) { case 'n': case 'N': options.c_cflag &= ~PARENB; /* Clear parity enable */ options.c_iflag &= ~INPCK; /* Enable parity checking */ break; case 'o': case 'O': options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/ options.c_iflag |= INPCK; /* Disnable parity checking */ break; case 'e': case 'E': options.c_cflag |= PARENB; /* Enable parity */ options.c_cflag &= ~PARODD; /* 转换为偶效验*/ options.c_iflag |= INPCK; /* Disnable parity checking */ break; case 'S': case 's': /*as no parity*/ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB;break; default: fprintf(stderr,"Unsupported parity "); return (FALSE); } /* 设置停止位*/ switch (stopbits) { case 1: options.c_cflag &= ~CSTOPB; break; case 2: options.c_cflag |= CSTOPB; break; default: fprintf(stderr,"Unsupported stop bits "); return (FALSE); } /* Set input parity option */ if (parity != 'n') options.c_iflag |= INPCK; tcflush(fd,TCIFLUSH); options.c_cc[VTIME] = 150; /* 设置超时15 seconds*/ options.c_cc[VMIN] = 0; /* Update the options and do it NOW */ if (tcsetattr(fd,TCSANOW,&options) != 0) { perror("SetupSerial 3"); return (FALSE); } return (TRUE); } 

需要注意的是:

如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯,设置方式如下:

 options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/ options.c_oflag &= ~OPOST; /*Output*/ 

读写串口
设置好串口之后,读写串口就很容易了,把串口当作文件读写就是。

  • 发送数据
     char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length) 
  • 读取串口数据

    使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。

    可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。

     char buff[1024];int Len;int readByte = read(fd,buff,Len); 

关闭串口
关闭串口就是关闭文件。

 close(fd); 

例子
下面是一个简单的读取串口数据的例子,使用了上面定义的一些函数和头文件

 /**********************************************************************代码说明:使用串口二测试的,发送的数据是字符, 但是没有发送字符串结束符号,所以接收到后,后面加上了结束符号。我测试使用的是单片机发送数据到第二个串口,测试通过。 **********************************************************************/ #define FALSE -1 #define TRUE 0 /*********************************************************************/ int OpenDev(char *Dev) { int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAY if (-1 == fd) { perror("Can't Open Serial Port"); return -1; } else return fd; } int main(int argc, char **argv){ int fd; int nread; char buff[512]; char *dev = "/dev/ttyS1"; //串口二 fd = OpenDev(dev); set_speed(fd,19200); if (set_Parity(fd,8,1,'N') == FALSE) { printf("Set Parity Error "); exit (0); } while (1) //循环读取数据 { while((nread = read(fd, buff, 512))>0) { printf(" Len %d ",nread); buff[nread+1] = ''; printf( " %s", buff); } } //close(fd); // exit (0); } 

参考资料

2004年10月19日

hciattach.c->main.c中:

 /* 5 seconds should be enough for initialization */
 alarm(to);
 
 n = init_uart(dev, u, send_break);
 if (n < 0) {
  perror(“Can’t initialize device”);
  exit(1);
 }

 alarm(0);

这段程序的目的:如果5秒内不能完成初始化串口的任务,我们将受到alarm信号触发的信息,一般是一条出错信息;

如果5秒内完成,则解除尽该信号;

while (1) sleep(999999999);

这个程序为什么不直接结束?

 

 

hciattach

——————————————————————————–

 

SYNOPSIS
       hciattach < tty > < type | id > [ speed ] [ flow ]

 

DESCRIPTION
       Hciattach is used to attach a serial UART to the Bluetooth stack as HCI
       transport interface.

       hciattach程序用来附着一个串口UART设备作为蓝牙协议栈的hci层传输接口。

OPTIONS
       <tty>  This specifies the serial device to attach. A leading  /dev  can
              be omitted. Examples: /dev/ttyS1 ttyS2
               定义使用哪一个串口设备。
       <type | id>
              The  type  or id of the Bluetooth device that is to be attached,
              i.e. vendor or other device specific identifier. Currently  sup-
              ported types are
               定义蓝牙通过串口连接的蓝牙设备的类型或者厂家ID。目前支持的类型有
              type   description

              any    Unspecified   HCI_UART   interface,  no  vendor  specific
                     options

              ericsson
                     Ericsson based modules

              digi   Digianswer based cards

              xircom Xircom PCMCIA cards: Credit Card Adapter  and  Real  Port
                     Adapter

              csr    CSR  Casira  serial  adapter  or BrainBoxes serial dongle
                     (BL642)

              bboxes BrainBoxes PCMCIA card (BL620)

              swave  Silicon Wave kits

              bcsp   Serial adapters using CSR chips with BCSP serial protocol
                     使用CSR蓝牙核,串口传输协议使用BCSP的串口蓝牙适配器。

       Supported IDs are (manufacturer id, product id)

              0×0105, 0×080a
                     Xircom  PCMCIA  cards:  Credit Card Adapter and Real Port
                     Adapter

              0×0160, 0×0002
                     BrainBoxes PCMCIA card (BL620)

       <speed>
              The speed specifies the UART speed to use. Baudrates higher than
              115.200bps  require vendor specific initializations that are not
              implemented for all types of devices. In general  the  following

       Written by Maxim Krasnyansky <maxk@qualcomm.com>

       man page by Nils Faerber <nils@kernelconcepts.de>

BlueZ                             Jan 22 2002                     HCIATTACH(8

2004年10月18日

sdp服务记录:

sdp服务器上有一个sdp服务记录数据库,

每一条服务记录由

服务句柄

服务属性1 //对于任意一个sdp服务记录,ServiceClassIDList
attribute是最重要的,它的属性值就是UUID

服务属性1的属性值

服务属性2

……