import appuifw import socket import e32 from key_codes import * ################################################# ###### ENTER YOUR PC's BLUETOOTH ADDRESS HERE ### ################################################# address = '00:10:60:d0:0f:25' end = '@' noAction = 'noAction' delim = '#' prefixText = 'text' + delim prefixNav = 'nav' + delim cancel = 'cancel' + delim + '\n' # set up the keyboard listener class Keyboard(object): def __init__(self,onevent=lambda:None): self._keyboard_state={} self._downs={} self._onevent=onevent def handle_event(self,event): if event['type'] == appuifw.EEventKeyDown: code=event['scancode'] if not self.is_down(code): self._downs[code]=self._downs.get(code,0)+1 self._keyboard_state[code]=1 elif event['type'] == appuifw.EEventKeyUp: self._keyboard_state[event['scancode']]=0 self._onevent() def is_down(self,scancode): return self._keyboard_state.get(scancode,0) def pressed(self,scancode): if self._downs.get(scancode,0): self._downs[scancode]-=1 return True return False keyboard=Keyboard() def exit_key_handler(): global running running=0 appuifw.app.set_exit() # method that receives data from the application def recv_end(the_socket): total_data=[];data='' while True: data=the_socket.recv(8192) if end in data: total_data.append(data[:data.find(end)]) break total_data.append(data) if len(total_data)>1: #check if end_of_data was split last_pair=total_data[-2]+total_data[-1] if end in last_pair: total_data[-2]=last_pair[:last_pair.find(end)] total_data.pop() break return u''.join(total_data) # the main loop that waits for keypresses and sends # them to the app through the socket def keyboardListener(): global sock sock=socket.socket(socket.AF_BT,socket.SOCK_STREAM) #address,services=socket.bt_discover() #target=(address,services.values()[0]) target = (address, 1) sock.connect(target) # codes correspond to the values for the given actions # in Flash 8 while running: if keyboard.pressed(EScancodeLeftArrow): sock.send(prefixNav + "37\n") if keyboard.pressed(EScancodeRightArrow): sock.send(prefixNav + "39\n") if keyboard.pressed(EScancodeDownArrow): sock.send(prefixNav + "40\n") if keyboard.pressed(EScancodeUpArrow): sock.send(prefixNav + "38\n") if keyboard.pressed(EScancodeSelect): sock.send(prefixNav + "13\n") prompt = recv_end(sock); if prompt != noAction: data = appuifw.query(prompt, "text") if data: sock.send(prefixText + data + '\n') else: sock.send(cancel) e32.ao_yield() running=1 appuifw.app.screen='normal' canvas=appuifw.Canvas(event_callback=keyboard.handle_event, redraw_callback=None) appuifw.app.body=canvas appuifw.app.title = u"Toy Flash To Bluetooth App" appuifw.app.exit_key_handler = exit_key_handler # call the main loop keyboardListener()