from socket import *
import os
import config
import runtime
import utils
import phonesetting
import sdmmc
import status
class BTApp:
def __init__(self):
self.btSock = None
self.run_recv_thread = None
self.bt_list = []
self.dEnd = ''
self.fEnd = '2'
self.bt_i = ''
self.bt_s = -1
self.bt_c = -1
self.bt_o = -1
self.bt_sp = -1
self.bt_p = -1
self.bt_flist = []
def run_btapp(self):
try:
ps_value = os.popen('ps')
ps_str = ps_value.read()
except:
ps_str = 'ipc-pxa270-merge.out'
if ps_str.find('ipc-pxa270-merge.out') != -1:
self.btSock = socket( AF_UNIX, SOCK_STREAM )
self.btSock.setblocking( 1 )
import time, ntptime
time.sleep(1)
try:
self.btSock.connect(config.bt_socket_path)
import evas
self.run_recv_thread=runtime.evas.input_add(self.btSock.fileno(), evas.INPUT_READ, self.recv_message)
except:
print '###### socket connect error.. in bluetoothapp.py ######'
return False
else:
print 'no bluetooth module!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
def send_message(self, msg):
try:
for z in range(200 - len(msg)):
msg += '\0'
msg = (msg,)
self.btSock.send(*msg)
except:
print 'send message error!!!!!!!!!!!!!!!!!!!!!'
def set_default(self):
self.bt_list = []
self.bt_flist = []
self.dEnd = ''
self.fEnd = '2'
#self.bt_r = -1
self.bt_i = ''
self.bt_s = -1
self.bt_c = -1
self.bt_o = -1
self.bt_sp = -1
self.bt_p = -1
def recv_message(self,btSock,type):
recv_msg = ''
try:
recv_msg = self.btSock.recv(200)
except:
print '<<<< bluetooth socket receive error >>>>'
if len( recv_msg ) == 0: # Disconnected from unix socket
if self.run_recv_thread != None:
runtime.evas.input_remove(self.run_recv_thread)
self.run_recv_thread = None
else:
self.parseMessage(recv_msg)
return True
def parseMessage(self, msg):
def set_response(data):
if data == '1':
return 1
else:
return 0
if msg.find('|') == -1:
print 'no | msg = ' + msg
else:
recvData = msg.split('|')
if recvData[1] == 'i':
self.bt_i = 'Inquiry Complete.'
elif recvData[1] == 'd': #device
self.bt_list.append(recvData[2][:recvData[2].index('\n')])
elif recvData[1] == 'c':
self.dEnd = recvData[2][:4]
elif recvData[1] == 'g':
pass
elif recvData[1] == 'a':
stage_name = runtime.manager.stage.get_name()
if stage_name == 'connected' or stage_name == 'directvideocalling' or stage_name == 'incomingcall' or stage_name == 'directaudiocalling' \
or stage_name == 'incomingaudiocall' or stage_name == 'enblock edit' or stage_name == "VideoCallImpossible"\
or stage_name == 'calling' or stage_name == 'offhook' or stage_name == 'AudioCallConnecting' or stage_name == "VideoCallConnecting" \
or stage_name == 'AudioCallConnected' or stage_name == 'AudioCallTerminated' or stage_name == "VideoCallConnected":
runtime.btapp.send_message('20|Y|0')
elif status.phone_status != status.Disconnected \
or status.videocall_mode == status.VideoCallConnected \
or (status.video_mode != status.VideoIdle) \
or (status.first_video_mode != status.VideoIdle and status.second_video_mode != status.VideoIdle) \
or (status.video_mode == status.VideoConnected) \
or (status.first_video_mode == status.VideoConnected or status.second_video_mode == status.VideoConnected)\
or status.update_section:
runtime.btapp.send_message('20|Y|0')
elif runtime.browserapp:
if runtime.browserapp.is_running() == True:
runtime.btapp.send_message('20|Y|0')
else:
if utils.player.amr_record != None or utils.player.videopid_record != None:
runtime.manager.change_stage(sdmmc.AcceptRequestStage(_('Bluetooth requests.')))
else:
runtime.manager.stack_stage(sdmmc.AcceptRequestStage(_('Bluetooth requests.')))
elif recvData[1] == 'r':
stage_name = runtime.manager.stage.get_name()
if stage_name == 'connected' or stage_name == 'directvideocalling' or stage_name == 'incomingcall' or stage_name == 'directaudiocalling' \
or stage_name == 'incomingaudiocall' or stage_name == 'enblock edit' or stage_name == "VideoCallImpossible"\
or stage_name == 'calling' or stage_name == 'offhook' or stage_name == 'AudioCallConnecting' or stage_name == "VideoCallConnecting" \
or stage_name == 'AudioCallConnected' or stage_name == 'AudioCallTerminated' or stage_name == "VideoCallConnected":
runtime.btapp.send_message('20|Y|0')
elif status.phone_status != status.Disconnected \
or status.videocall_mode == status.VideoCallConnected \
or (status.video_mode != status.VideoIdle) \
or (status.first_video_mode != status.VideoIdle and status.second_video_mode != status.VideoIdle) \
or (status.video_mode == status.VideoConnected) \
or (status.first_video_mode == status.VideoConnected or status.second_video_mode == status.VideoConnected)\
or status.update_section:
runtime.btapp.send_message('20|Y|0')
elif runtime.browserapp:
if runtime.browserapp.is_running() == True:
runtime.btapp.send_message('20|Y|0')
else:
if utils.player.amr_record != None or utils.player.videopid_record != None:
runtime.manager.change_stage(phonesetting.BluetoothEnterPassStage('', _('INPUT PINCODE'), _('Input PIN code'), 1))
else:
runtime.manager.stack_stage(phonesetting.BluetoothEnterPassStage('', _('INPUT PINCODE'), _('Input PIN code'), 1))
elif recvData[1] == 's':
self.bt_s = set_response(recvData[2][0])
elif recvData[1] == 'C':
self.bt_c = set_response(recvData[2][0])
elif recvData[1] == 'O':
self.bt_o = set_response(recvData[2][0])
elif recvData[1] == 'P':
self.bt_p = set_response(recvData[2][0])
elif recvData[1] == 'p':
self.bt_sp = set_response(recvData[2][0])
elif recvData[1] == 'S':
stage_name = runtime.manager.stage.get_name()
if stage_name == 'connected' or stage_name == 'directvideocalling' or stage_name == 'incomingcall' or stage_name == 'directaudiocalling' \
or stage_name == 'incomingaudiocall' or stage_name == 'enblock edit' or stage_name == "VideoCallImpossible"\
or stage_name == 'calling' or stage_name == 'offhook' or stage_name == 'AudioCallConnecting' or stage_name == "VideoCallConnecting" \
or stage_name == 'AudioCallConnected' or stage_name == 'AudioCallTerminated' or stage_name == "VideoCallConnected":
runtime.btapp.send_message('20|Y|0')
elif status.phone_status != status.Disconnected \
or status.videocall_mode == status.VideoCallConnected \
or (status.video_mode != status.VideoIdle) \
or (status.first_video_mode != status.VideoIdle and status.second_video_mode != status.VideoIdle) \
or (status.video_mode == status.VideoConnected) \
or (status.first_video_mode == status.VideoConnected or status.second_video_mode == status.VideoConnected)\
or status.update_section:
runtime.btapp.send_message('20|Y|0')
elif runtime.browserapp:
if runtime.browserapp.is_running() == True:
runtime.btapp.send_message('20|Y|0')
else:
if utils.player.amr_record != None or utils.player.videopid_record != None:
runtime.manager.change_stage(sdmmc.AcceptRequestStage(recvData[2][:recvData[2].find('\n')], 1))
else:
runtime.manager.stack_stage(sdmmc.AcceptRequestStage(recvData[2][:recvData[2].find('\n')], 1))
elif recvData[1] == 'F':
if recvData[2][0] == '0':
self.fEnd = recvData[2]
elif recvData[2][0] == '1':
self.fEnd = recvData[2]
else:
self.fEnd = recvData[2][:4]
elif recvData[1] == 'f':
self.bt_flist.append(recvData[2][:recvData[2].index('\n')])