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.

mbedrpc.py 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. """
  2. mbed SDK
  3. Copyright (c) 2010-2013 ARM Limited
  4. Licensed under the Apache License, Version 2.0 (the "License");
  5. you may not use this file except in compliance with the License.
  6. You may obtain a copy of the License at
  7. http://www.apache.org/licenses/LICENSE-2.0
  8. Unless required by applicable law or agreed to in writing, software
  9. distributed under the License is distributed on an "AS IS" BASIS,
  10. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. See the License for the specific language governing permissions and
  12. limitations under the License.
  13. Example:
  14. > from mbedRPC import*
  15. > mbed = SerialRPC("COM5",9600);
  16. > myled = DigitalOut(mbed, LED1);
  17. > myled.write(1)
  18. >
  19. """
  20. import serial, urllib2, time
  21. class pin():
  22. def __init__(self, id):
  23. self.name = id
  24. LED1 = pin("LED1")
  25. LED2 = pin("LED2")
  26. LED3 = pin("LED3")
  27. LED4 = pin("LED4")
  28. p5 = pin("p5")
  29. p6 = pin("p6")
  30. p7 = pin("p7")
  31. p8 = pin("p8")
  32. p9 = pin("p9")
  33. p10 = pin("p10")
  34. p11 = pin("p11")
  35. p12 = pin("p12")
  36. p13 = pin("p13")
  37. p14 = pin("p14")
  38. p15 = pin("p15")
  39. p16 = pin("p16")
  40. p17 = pin("p17")
  41. p18 = pin("p18")
  42. p19 = pin("p19")
  43. p20 = pin("p20")
  44. p21 = pin("p21")
  45. p22 = pin("p22")
  46. p23 = pin("p23")
  47. p24 = pin("p24")
  48. p25 = pin("p25")
  49. p26 = pin("p26")
  50. p27 = pin("p27")
  51. p28 = pin("p28")
  52. p29 = pin("p29")
  53. p30 = pin("p30")
  54. #mbed super class
  55. class mbed:
  56. def __init__(self):
  57. print("This will work as a demo but no transport mechanism has been selected")
  58. def rpc(self, name, method, args):
  59. print("Superclass method not overridden")
  60. #Transport mechanisms, derived from mbed
  61. class SerialRPC(mbed):
  62. def __init__(self, port, baud=9600, reset=True, debug=False):
  63. self.ser = serial.Serial(port)
  64. self.ser.setBaudrate(baud)
  65. self.ser.flushInput()
  66. self.ser.flushOutput()
  67. self.debug = debug
  68. if reset:
  69. if debug:
  70. print "Reset mbed"
  71. self.ser.sendBreak()
  72. time.sleep(2)
  73. def rpc(self, name, method, args):
  74. request = "/" + name + "/" + method + " " + " ".join(args)
  75. if self.debug:
  76. print "[RPC::TX] %s" % request
  77. self.ser.write(request + "\n")
  78. while True:
  79. response = self.ser.readline().strip()
  80. if self.debug:
  81. print "[RPC::RX] %s" % response
  82. # Ignore comments
  83. if not response.startswith('#'): break
  84. return response
  85. class HTTPRPC(mbed):
  86. def __init__(self, ip):
  87. self.host = "http://" + ip
  88. def rpc(self, name, method, args):
  89. response = urllib2.urlopen(self.host + "/rpc/" + name + "/" + method + "," + ",".join(args))
  90. return response.read().strip()
  91. #mbed Interfaces
  92. class DigitalOut():
  93. def __init__(self, this_mbed , mpin):
  94. self.mbed = this_mbed
  95. if isinstance(mpin, str):
  96. self.name = mpin
  97. elif isinstance(mpin, pin):
  98. self.name = self.mbed.rpc("DigitalOut", "new", [mpin.name])
  99. def __del__(self):
  100. r = self.mbed.rpc(self.name, "delete", [])
  101. def write(self, value):
  102. r = self.mbed.rpc(self.name, "write", [str(value)])
  103. def read(self):
  104. r = self.mbed.rpc(self.name, "read", [])
  105. return int(r)
  106. class AnalogIn():
  107. def __init__(self, this_mbed , mpin):
  108. self.mbed = this_mbed
  109. if isinstance(mpin, str):
  110. self.name = mpin
  111. elif isinstance(mpin, pin):
  112. self.name = self.mbed.rpc("AnalogIn", "new", [mpin.name])
  113. def __del__(self):
  114. r = self.mbed.rpc(self.name, "delete", [])
  115. def read(self):
  116. r = self.mbed.rpc(self.name, "read", [])
  117. return float(r)
  118. def read_u16(self):
  119. r = self.mbed.rpc(self.name, "read_u16", [])
  120. return int(r)
  121. class AnalogOut():
  122. def __init__(self, this_mbed , mpin):
  123. self.mbed = this_mbed
  124. if isinstance(mpin, str):
  125. self.name = mpin
  126. elif isinstance(mpin, pin):
  127. self.name = self.mbed.rpc("AnalogOut", "new", [mpin.name])
  128. def __del__(self):
  129. r = self.mbed.rpc(self.name, "delete", [])
  130. def write(self, value):
  131. r = self.mbed.rpc(self.name, "write", [str(value)])
  132. def write_u16(self, value):
  133. r = self.mbed.rpc(self.name, "write_u16", [str(value)])
  134. def read(self):
  135. r = self.mbed.rpc(self.name, "read", [])
  136. return float(r)
  137. class DigitalIn():
  138. def __init__(self, this_mbed , mpin):
  139. self.mbed = this_mbed
  140. if isinstance(mpin, str):
  141. self.name = mpin
  142. elif isinstance(mpin, pin):
  143. self.name = self.mbed.rpc("DigitalIn", "new", [mpin.name])
  144. def __del__(self):
  145. r = self.mbed.rpc(self.name, "delete", [])
  146. def read(self):
  147. r = self.mbed.rpc(self.name, "read", [])
  148. return int(r)
  149. class PwmOut():
  150. def __init__(self, this_mbed , mpin):
  151. self.mbed = this_mbed
  152. if isinstance(mpin, str):
  153. self.name = mpin
  154. elif isinstance(mpin, pin):
  155. self.name = self.mbed.rpc("PwmOut", "new", [mpin.name])
  156. def __del__(self):
  157. r = self.mbed.rpc(self.name, "delete", [])
  158. def write(self, value):
  159. r = self.mbed.rpc(self.name, "write", [str(value)])
  160. def read(self):
  161. r = self.mbed.rpc(self.name, "read", [])
  162. return float(r)
  163. def period(self, value):
  164. r = self.mbed.rpc(self.name, "period", [str(value)])
  165. def period_ms(self, value):
  166. r = self.mbed.rpc(self.name, "period_ms", [str(value)])
  167. def period_us(self, value):
  168. r = self.mbed.rpc(self.name, "period_us", [str(value)])
  169. def puslewidth(self, value):
  170. r = self.mbed.rpc(self.name, "pulsewidth", [str(value)])
  171. def puslewidth_ms(self, value):
  172. r = self.mbed.rpc(self.name, "pulsewidth_ms", [str(value)])
  173. def puslewidth_us(self, value):
  174. r = self.mbed.rpc(self.name, "pulsewidth_us", [str(value)])
  175. class Serial():
  176. def __init__(self, this_mbed , tx, rx = ""):
  177. self.mbed = this_mbed
  178. if isinstance(tx, str):
  179. self.name = mpin
  180. elif isinstance(mpin, pin):
  181. self.name = self.mbed.rpc("Serial", "new", [tx.name, rx.name])
  182. def __del__(self):
  183. r = self.mbed.rpc(self.name, "delete", [])
  184. def putc(self, value):
  185. r = self.mbed.rpc(self.name, "putc", [str(value)])
  186. def puts(self, value):
  187. r = self.mbed.rpc(self.name, "puts", [ "\"" + str(value) + "\""])
  188. def getc(self):
  189. r = self.mbed.rpc(self.name, "getc", [])
  190. return int(r)
  191. class RPCFunction():
  192. def __init__(self, this_mbed , name):
  193. self.mbed = this_mbed
  194. if isinstance(name, str):
  195. self.name = name
  196. def __del__(self):
  197. r = self.mbed.rpc(self.name, "delete", [])
  198. def read(self):
  199. r = self.mbed.rpc(self.name, "read", [])
  200. return int(r)
  201. def run(self, input):
  202. r = self.mbed.rpc(self.name, "run", [input])
  203. return r
  204. class RPCVariable():
  205. def __init__(self, this_mbed , name):
  206. self.mbed = this_mbed
  207. if isinstance(name, str):
  208. self.name = name
  209. def __del__(self):
  210. r = self.mbed.rpc(self.name, "delete", [])
  211. def write(self, value):
  212. self.mbed.rpc(self.name, "write", [str(value)])
  213. def read(self):
  214. r = self.mbed.rpc(self.name, "read", [])
  215. return r
  216. def wait(s):
  217. time.sleep(s)