Advertisement
Guest User

Demo of remote controlling Apple TV running tvOS 9.2

a guest
May 4th, 2016
3,293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. import requests
  2. import struct
  3. import time
  4.  
  5. appleTVAddress = '10.0.69.3'
  6. pairingGuid = '0x4AC01DBB5395C5E8'
  7.  
  8. cmdBufferMap = {
  9. 'up': [
  10. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchDown&time=0&point=20,275",
  11. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=1&point=20,270",
  12. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=2&point=20,265",
  13. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=3&point=20,260",
  14. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=4&point=20,255",
  15. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=5&point=20,250",
  16. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1BtouchUp&time=6&point=20,250"
  17. ],
  18. 'down': [
  19. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchDown&time=0&point=20,250",
  20. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=1&point=20,255",
  21. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=2&point=20,260",
  22. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=3&point=20,265",
  23. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=4&point=20,270",
  24. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=5&point=20,275",
  25. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1BtouchUp&time=6&point=20,275"
  26. ],
  27. 'left': [
  28. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1EtouchDown&time=0&point=75,100",
  29. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=1&point=70,100",
  30. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=3&point=65,100",
  31. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=4&point=60,100",
  32. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=5&point=55,100",
  33. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=6&point=50,100",
  34. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1BtouchUp&time=7&point=50,100"
  35. ],
  36. 'right': [
  37. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchDown&time=0&point=50,100",
  38. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=1&point=55,100",
  39. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=3&point=60,100",
  40. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=4&point=65,100",
  41. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=5&point=70,100",
  42. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1DtouchMove&time=6&point=75,100",
  43. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x1BtouchUp&time=7&point=75,100"
  44. ],
  45. 'menu': [
  46. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x04menu"
  47. ],
  48. 'select': [
  49. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x06select"
  50. ],
  51. 'home': [
  52. "cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x07topmenu"
  53. ]
  54. }
  55.  
  56. def login():
  57. """Returns a session id on success"""
  58. r = requests.get('http://%s:3689/login?pairing-guid=%s&hasFP=1' % (appleTVAddress, pairingGuid),
  59. timeout=1)
  60. return struct.unpack('>i', r.content[-4:])[0]
  61.  
  62. def logout(sessionId):
  63. print "Logging out session:", sessionId
  64. r = requests.get('http://%s:3689/logout?session-id=%d' % (appleTVAddress, sessionId))
  65.  
  66. def issueCommand(sessionId, name):
  67. for buffer in cmdBufferMap[name]:
  68. r = requests.post('http://%s:3689/ctrl-int/1/controlpromptentry?prompt-id=114&session-id=%d' % (appleTVAddress, sessionId),
  69. data=buffer)
  70. time.sleep(0.002)
  71.  
  72. sessionId = login()
  73. print "after login, session id:", sessionId
  74.  
  75. try:
  76. issueCommand(sessionId, "down")
  77.  
  78. finally:
  79. logout(sessionId)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement