Keyboard firmwares for Atmel AVR and Cortex-M
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MEMO.txt 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. Roving RN-42
  2. ============
  3. TODO
  4. ----
  5. - Lipo voltage ADC sensing
  6. - Lipo charger configuration: fast charge time: USB charger spec?
  7. - Low voltage alarm: LED indcates voltage of Lipo
  8. - CTS/RTS lines are needed? just connect in loop back if no flow control is needed.
  9. - CTS is needed for waking up from deep sleep?
  10. - Serial API callback when data are available/received(and when send buffer is available)
  11. - Serial API instance several serial ports can be used
  12. - DCDC converter: squeaky inducter with onsemi NCP1402
  13. - Lipo charger MCP73831: needs capacitor 4.7uF *2
  14. - Keymap layer bug: during space is pressed(mousekey) press Fn(HHKB) then release space before Fn, in result HHKB layer is locked(toggled) unintentionally.
  15. DONE:
  16. - USB connection check - 07.01
  17. - BT on/off check: whether RX line is pulled up? - checking RTS 07.01
  18. - USB/BT switching BT is on -> BT, BT is off -> USB - 07.01
  19. - Under voltage lock out UVLO for protection of Lipo - Lipo has discharge protection at 3.100V 07.01
  20. - Power saving: HHKB scan, BT radio control - 9h with 850mAh, this is enough 07.01
  21. - Power selector doesn't work; Q4 MOSFET leaks from Lipo to USB power line. -- use Schottky instead 07/04
  22. Configuration
  23. -------------
  24. Ver 6.15 04/26/2013
  25. (c) Roving Networks
  26. ***Settings***
  27. BTA=0006664B3AE3
  28. BTName=tmkBT-3AE3
  29. Baudrt(SW4)=115K
  30. Mode =Pair
  31. Authen=2
  32. Bonded=1
  33. Rem=001BDC06415B
  34. ***ADVANCED Settings***
  35. SrvName= keyboard/mouse
  36. SrvClass=0000
  37. DevClass=05C0
  38. InqWindw=0100
  39. PagWindw=0100
  40. CfgTimer=255
  41. StatuStr=NULL
  42. HidFlags=3f
  43. DTRtimer=8
  44. KeySwapr=0
  45. ***OTHER Settings***
  46. Profile= HID
  47. CfgChar= $
  48. SniffEna=0
  49. LowPower=0
  50. TX Power=4
  51. IOPorts= 0
  52. IOValues=0
  53. Sleeptmr=0
  54. DebugMod=0
  55. RoleSwch=0
  56. Ver 6.15 04/26/2013
  57. (c) Roving Networks
  58. ***Settings***
  59. BTA=0006664B3AE3
  60. BTName=tmkBT-3AE3
  61. Baudrt(SW4)=115K
  62. Mode =DTR
  63. Authen=2
  64. Bonded=0
  65. Rem=BCF5AC9BCB7E
  66. ***ADVANCED Settings***
  67. SrvName= keyboard/mouse
  68. SrvClass=0000
  69. DevClass=0000
  70. InqWindw=0100
  71. PagWindw=0100
  72. CfgTimer=255
  73. StatuStr=NULL
  74. HidFlags=3f
  75. DTRtimer=8
  76. KeySwapr=0
  77. ***OTHER Settings***
  78. Profile= HID
  79. CfgChar= $
  80. SniffEna=0
  81. LowPower=0
  82. TX Power=ffe8
  83. IOPorts= 0
  84. IOValues=0
  85. Sleeptmr=0
  86. DebugMod=0
  87. RoleSwch=0
  88. command mode
  89. ------------
  90. To enter command mode disconnect the module from host and type '$$$'.(you will see 'CMD')
  91. To exit type '---'.(you will see 'END')
  92. Serial line: 115200bps, 8bit, 1-stopbit, non-parity, no flow control
  93. SSP: 115200bps, 8bit, 1-stopbit, non-parity, no flow control(via Bluetooth)
  94. S-,tmkBT // Device name
  95. SH,0038 // HID register
  96. SC,0000 // COD: 000005C0 (see HID spec/Bluegiga doc)
  97. SD,05C0 // bit 12-8 7 6 5-0
  98. // 00101 1 1 0
  99. // peripheral pointing keybaord joystick, gamepad, ...
  100. S~,6 // HID profile
  101. SS,keyboard/mouse // service name
  102. SM,6 // Pairing mode: auto connect
  103. SM,4 // Master mode: Connection can be controled with GPIO6
  104. SY,FEE8 // lower power -20dbM
  105. HID profile
  106. -----------
  107. S~,6 HID profile
  108. S~,0 SPP profile
  109. R,1 reboot
  110. Apple iOS
  111. ---------
  112. Cannot supported without apple iAP authentication chip.
  113. HID flag register
  114. -----------------
  115. SH,0200
  116. GH
  117. 10 0000 0000(0200) default
  118. 00 0011 1000(0038) Combo
  119. || | | |\_\____ number of paired devices to which the module can reconnect
  120. || | | \_______ send out reports over UART (0xFF <len> <data>)
  121. || \__\_________ descriptor type
  122. |\______________ toggle virtual keyboard on iOS when first connected
  123. \_______________ Force HID mode if GPIO11 is high on power-up
  124. Descriptor type:
  125. 0000: keybaord
  126. 0001: Game Pad
  127. 0010: Mouse
  128. 0011: Combo
  129. 0100: Joystick
  130. 1xxx: reserved
  131. Out report - Indicator
  132. ----------------------
  133. 0xFE 0x02 0x01 <LED_state>
  134. LED Status
  135. ----------
  136. Configuring 10 times per sec
  137. Startup/configuration timer 2 times per sec
  138. Discoverable/Inquiring/Idle once per sec
  139. Connected solid on
  140. Pairing
  141. -------
  142. First, host initiates pairing process and once it is done, auto connect will work thereafter.
  143. SM,3 Master mode
  144. SM,4 Auto Connect DTR Mode uses GPIO6 to make and break connection(Mode =DTR)
  145. confirm: auto connect works and control connection with GPIO6
  146. SM,5 Auto Connect ANY Mode (Mode =ANY)
  147. each time GPIO is set, make inquiry and connect to the first found device
  148. SM,6 automatically reconnect(Mode =Pair)
  149. confirm: auto connect works well but difficult to enter command mode.
  150. Fast data mode
  151. --------------
  152. The module enters fast data mode after 'remote configuration timer' window is passed from power on.
  153. In this mode the module does not accept '$$$' to enter command mode.
  154. Power Management
  155. ----------------
  156. Inquiry and Page window Idle or Active (3.1.1)
  157. Downside: delay in discovery or connection time
  158. SI, // set inquiry scan window(discovery) on/off duty?
  159. SJ, // set page scan window(connection)
  160. This reduces averaege power >20mA to 5mA(3mA in Sniff mode)
  161. Sniff mode Transmit
  162. Sniff mode is disabled by default and radio is active continuously when connected.(25-30mA)
  163. In Sniff mode the radio wakes up intermittently and sleeps in very low power mode.(2mA)
  164. SW,<val> // set interval timer(*0.625ms) 0000-7FFF
  165. Deep sleep Idle (3.1.2)
  166. In this mode the module shuts down completly and only draws about 300uA. To enable this set the most signifant bit(0x8000) of Sniff interaval timer.
  167. SW,8320 // deep sleep enable(interval=0x320*0.625ms)
  168. In normal sleep the firmware is still running in idle mode, and wakes up about 20 times per second to check ports, update LEDs, etc. During deep sleep, the firmware actually stops runnig some tasks and the LEDs only update about once per second.
  169. To wake from deep sleep there are three ways: (in worst case wake up takes 5ms)
  170. *send a charactor to the UART(first charactor will be lost)
  171. *toggle CTS low to high and wait 5ms
  172. *wake automatically every slot time(<val>*0.625ms)
  173. Once the radio is awake it stay active for exactly 1 second of inactivity and then sleeps again.
  174. Downside: latency and data loss
  175. Disable Output driver Idle or Active (3.1.3)
  176. S%,1000 // set all GPIO pins(0-11) to inputs.
  177. Lower Transmit Power Idle or Active (3.1.4)
  178. SY,<hex> // transmit power setting(takes effect after a power cycle and reboot)
  179. Downside: reducing effective range
  180. Optimizig for Latency
  181. ---------------------
  182. By default the firmware is optimized for throughput.
  183. SQ,16 // set latency bit
  184. SQ,0 // unset latency bit
  185. Configuration timer settings
  186. ----------------------------
  187. Remote configuration is used for the module to be configured with various commands over Bluetooth(SPP profile only?).
  188. The module has remote configuration timer to allow remote configuration over Bluetooth after power up in Slave mode. In Master modes the remote configuration timer is set to 0(no remote configuration). (In Trigger Master mode the timer is used as an idle timer to break the connection after time expires with no charactors receive.)
  189. ST,0 // no remote, no local when connected
  190. ST,<1-252> // local and remote with timeout in seconds from power up
  191. ST,253 // local only without timeout
  192. ST,254 // remote only without timeout
  193. ST,255 // local and remote without timeout
  194. Android
  195. -------
  196. 3.7.1.5 Note: To connect with Android phone the modules must wake up 11ms every 2.5seconds.
  197. Commands
  198. --------
  199. SC,
  200. SM,<val>
  201. SD,
  202. SP,<string> Pin code(alpahnumeric)
  203. SQ,<mask> Special configuration(GPIO, discovery mode, low latency, reboot, UART)
  204. SR,<hex> Store remote address
  205. SR,Z Erase all address
  206. SS,<string> Set service name(1-20)**
  207. ST,<val> Remote configuration timer(Master:0, Slave:0-255, Triger:as idle timer)
  208. SU,<val> UART baud rate
  209. SW,<val> low-power sniff mode** deep sleep and wake up every 625us * <val>
  210. SX,<0|1> bonding enable only acceps device that matches the stored address
  211. SY,<hex> power setting**
  212. SZ,<val> non-standard raw baud rate <val>=baud*0.004096
  213. S~,<val> Profile 0:SPP, 5:APL, 6:HID
  214. S-,<string> Device name -15 alphanumeric charactors
  215. S?,<0|1> role switch enable
  216. S$,<char> command mode char
  217. $|,<hex> low-power connect mode deep sleep/active(discoverable and connectable) cycle
  218. D display basic setting
  219. E display extended setting
  220. GB display the device's Bluetooth address
  221. GF display Bluetooth address of connected device
  222. GK show connection status
  223. GR show remote address for reconnecting
  224. G& show GPIO pin
  225. G<char> show stored setting
  226. + toggle local echo on/off
  227. & show GPIO 3,4,6,7(DIP switch)
  228. C connect to stored remote address
  229. C,<address> connect last address
  230. CFI connect and go into fast data mode
  231. CFR connect and go into fast data mode
  232. CT,<address>,<val> connect to the address and disconnect after val?
  233. F,1 fast data mod:
  234. H display help
  235. I,<time>,<cod> inquiry scan with <cod>
  236. IN
  237. IQ scan
  238. IS inquiry scan with 001F00
  239. J hide pin code
  240. K, kill disconnects current connection
  241. L link quality
  242. M show modem signlal status
  243. O display other settings
  244. P,<car> pass through?
  245. Q quiet mode make the module not discoverable
  246. Q,0 discoverable and connectable
  247. Q,1 not discoverable and not connectable
  248. Q,2 not discoverable and connectable
  249. Q,? display current quiet mode
  250. R,1 reboot
  251. T,<0|1> pass received data while in command mode
  252. U,<baud>,<parity> change UART setting tentatively
  253. V display firmware version
  254. W wake from quiet mode enable discovery and connection
  255. Z deep sleep mode(<2mA)