Estoy haciendo un pequeño programa para PyS60 1.9.7 que corre en mi nokia 5800. Lo que hago es enviar una serie de datos por BT a través de un adaptador BT a RS232 (Bluesmirf) y muestro el resultado en el móvil. Los datos se envían en ráfagas de 16 bytes cada 2 segundos más o menos.
Tengo la siguiente función para leer datos por Bluetooth (nota: lo hago con un timer porque quiero usar la función principal para dibujar la pantalla, y traté de hacerlo con un thread pero en cuanto meto algo de BT dentro del thread se queda como sin hacer nada)
Código Python:
Ver original
# Para leer datos por BT def lee_bt(): global BT if BT: appuifw.e32.reset_inactivity() try: data = bt_receive_data() data = data.encode("hex") print("Data = 0x%x" % int(data,16)) except: pass my_timer.after(0.1,lee_bt) my_timer = e32.Ao_timer() my_timer.after(0.1,lee_bt) bt_connect() BT = True
La función bt_receive_data()
Código Python:
Ver original
def bt_receive_data(): ########################################################################### # Variables globales global sock buffer = [] try: buffer = sock.recv(16) except: pass return buffer ###########################################################################
El problema: si en el buffer del adaptador BT a RS232 hay 16 o más bytes, los lee sin problemas y los va mostrando, el problema está cuando hay menos de 16 bytes. Por ejemplo, si hay 10 bytes, muestra los 10 bytes, pero ya no recibe nunca más, aunque sé que debería haber datos porque los estoy enviando.
Sin embargo, si cambio el tamaño del buffer a 1 en vez de 16, funciona bien, es decir, si no hay datos se queda en "espera", y cuando vuelve a haber datos los muestra. El problema es que me gustaría leer de 16 en 16 y no de 1 en 1.
Llevo programando en python sólo un par de semanas, así que puedo estar cometiendo cualquier burrada...
Gracias por la ayuda