设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客

构建一个属于软件开发者的键盘

2015-2-5 21:49| 发布者: joejoe0332| 查看: 6769| 评论: 0|原作者: 陈明|来自: DZone

摘要: 作为软件开发者,键盘可以说是我们最亲密的“朋友”之一。频繁的敲击键盘让定制键盘成为急需品,而软件工程师LÁSZLÓ MONDA为我们详细介绍了其制作“终极黑客键盘”的具体过程。 ...


  LED矩阵由两个集成电路(IC)驱动,一个驱动行,一个驱动列,驱动列的源IC是PCA9634 I2C LED驱动:


  驱动行的为TPIC6C595:

  让我们看下相关代码:

  1. uint8_t LedStates[LED_MATRIX_ROWS_NUM];  
  2.   
  3. void LedMatrix_UpdateNextRow(bool IsKeyboardColEnabled)  
  4. {  
  5.     TPIC6C595_Transmit(LedStates[ActiveLedMatrixRow]);  
  6.     PCA9634_Transmit(1 << ActiveLedMatrixRow);  
  7.   
  8.     if (++ActiveLedMatrixRow == LED_MATRIX_ROWS_NUM) {  
  9.           ActiveLedMatrixRow = 0;  
  10.     }  
  11. }  

  LedMatrix_UpdateNextRow()将以每毫秒的速度被调用,更新LED矩阵的一行,LedMatrix数组存储单个LED灯的状态,状态信息源于通过UART的按/释键事件。


整体情况

  到这里我们已经逐步为自己的键盘建立了所有的必需组件。现在需要从全局出发,键盘的内部就像一个微型计算机网络:大量节点相互连接。所不同的是测量节点之间的距离不是米或公里,而是厘米,并且节点不是成熟的计算机,而是微型的集成电路。


  但是到目前为止说的大多都是键盘装置方面的细节,关于UHK代理提的不多。UHK代理是配置器应用,通过键盘来满足用户的自定义需求。可以见于下段代码:

  1. var enumerationModes = {  
  2.     'keyboard'         : 0,  
  3.     'bootloader-right' : 1,  
  4.     'bootloader-left'  : 2  
  5. };  
  6.   
  7. function sendReenumerateCommand(enumerationMode, callback)  
  8. {  
  9.     var AGENT_COMMAND_REENUMERATE = 0;  
  10.     sendAgentCommand(AGENT_COMMAND_REENUMERATE, enumerationMode, callback);  
  11. }  
  12.   
  13. function sendAgentCommand(command, arg, callback)  
  14. {  
  15.     setReport(new Buffer([command, arg]), callback);  
  16. }  
  17.   
  18. function setReport(message, callback)  
  19. {  
  20.     device.controlTransfer(  
  21.         0x21,             // bmRequestType (constant for this control request)  
  22.         0x09,             // bmRequest (constant for this control request)  
  23.         0,                // wValue (MSB is report type, LSB is report number)  
  24.         interfaceNumber,  // wIndex (interface number)  
  25.         message,          // message to be sent  
  26.         callback  
  27.     );  
  28. }  

  每一个命令都有一个8字节标识符和一组command-specific参数。目前,只有re-enumerate命令被实现,sendReenumerateCommand()使设备作为左/右引导装载程序重新装置,以此来升级固件或变为一个键盘设备。


创建原型

  一切制造之前都需要有一个CAD设计:


  3D打印的键盘会是这个样子:



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部