<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>Buongiorno a tutti<BR>
&nbsp;<BR>
Ho un problema con uno script python per S60 su un nokia 6630. Sto facendo un applicazione che comunica con il pc tramite bluetooth per telefonare e ricevere messaggi tramite il bluetooth del telefono. Ho fatto questo script (postato di seguito e funziona tutto bene. Solo che al primo invio di un messgiio dal telefono al pc questo funziona bene, appena prova a fare il secondo invio rimane bloccato l'interprete python e devo spegnrere il cellulare. Credo sia un problema di comunicazione perché se all'interno dello script sostituisce i comandi di invio al telefono con dei semplici print va tutto a meraviglia.<BR>
&nbsp;<BR>
Grazie<BR>
&nbsp;<BR>
Luca<BR>
&nbsp;<BR>
import socket<BR>import appuifw<BR>import thread<BR>import e32<BR>import inbox<BR>import location<BR>import sysinfo<BR>
#Assegnazione variabili globali<BR>DebugMode=1<BR>conn= None<BR>i = 0<BR>LastBattery=0<BR>LastSignal=0<BR>LastOperator=""<BR>LastPhoneStatus=0<BR>
lock = e32.Ao_lock()<BR>lockTHR = thread.allocate_lock()<BR>
#Definzione Classe telefono<BR>class JesterPhone:<BR>&nbsp;&nbsp;&nbsp; PhoneModel = ""<BR>&nbsp;&nbsp;&nbsp; PhoneBrand = ""<BR>
&nbsp;&nbsp;&nbsp; #Marca<BR>&nbsp;&nbsp;&nbsp; def GetBrand(self):<BR>&nbsp;return "Nokia"<BR>
&nbsp;&nbsp;&nbsp; #Modello<BR>&nbsp;&nbsp;&nbsp; def GetModel(self):<BR>&nbsp;try:<BR>&nbsp;&nbsp;&nbsp;&nbsp; PhoneResp=sysinfo.sw_version()<BR>&nbsp;&nbsp;&nbsp;&nbsp; firmware = PhoneResp.split(' ')[3]<BR>&nbsp;&nbsp;&nbsp;&nbsp; mapping = {<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-51': '3230',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-38': '3250',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NHM-10': '3600',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NHM-10X': '3620',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NHL-8': '3650',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NHL-8X': '3660',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-25': '6260',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-29': '6260b',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NHL-10': '6600',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NHL-12': '6620',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NHL-12X': '6620',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-1': '6630',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RH-67': '6670',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RH-68': '6670b',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-36': '6680',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-57': '6681',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-58': '6682',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RH-51': '7610',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RH-52': '7610b',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NHL-2NA': '7650',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-49': 'E60-1',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-89': 'E61-1',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-10': 'E70-1',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-24': 'E70-?',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'NEM-4': 'N-Gage',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RH-29': 'N-Gage QD (asia/europe)',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RH-47': 'N-Gage QD (americas)',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-84': 'N70-1',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-99': 'N70-5',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-67': 'N71-1',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-112': 'N71-5',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-91': 'N80-3',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-92': 'N80-1',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-42': 'N90-1',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-43': 'N91-1',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 'RM-158': 'N91-5' }<BR>&nbsp;&nbsp;&nbsp;&nbsp; return "Nokia "+mapping[firmware]<BR>&nbsp;except:<BR>&nbsp;&nbsp;&nbsp;&nbsp; return "notfound"<BR>
&nbsp;&nbsp;&nbsp; #Inizializzazione classe telefono<BR>
&nbsp;&nbsp;&nbsp; def InitMe(self):<BR>&nbsp;self.PhoneBrand=self.GetBrand()<BR>&nbsp;self.PhoneModel=self.GetModel()<BR>
<BR>#Avvio del server RFCOMM<BR>def StartServer():<BR>&nbsp;&nbsp;&nbsp; global conn<BR>&nbsp;&nbsp;&nbsp; server = socket.socket(socket.AF_BT, socket.SOCK_STREAM)<BR>&nbsp;&nbsp;&nbsp; channel = socket.bt_rfcomm_get_available_server_channel(server)<BR>&nbsp;&nbsp;&nbsp; server.bind(("", channel))<BR>&nbsp;&nbsp;&nbsp; server.listen(1)<BR>&nbsp;&nbsp;&nbsp; socket.bt_advertise_service(u"JesterPlugIn", server, True, socket.RFCOMM)<BR>&nbsp;&nbsp;&nbsp; socket.set_security(server, socket.AUTH | socket.AUTHOR)<BR>&nbsp;&nbsp;&nbsp; print "- Waiting for clients..."<BR>&nbsp;&nbsp;&nbsp; conn, client_addr = server.accept()<BR>&nbsp;&nbsp;&nbsp; print "- Jester connected with phone"<BR>&nbsp;&nbsp;&nbsp; <BR>#Aggiorna ststo telefono<BR>def GetPhoneInfo():<BR>
&nbsp;&nbsp;&nbsp; RefFlag=0<BR>&nbsp;&nbsp;&nbsp; RefState=0<BR>
&nbsp;&nbsp;&nbsp; RetOper=location.gsm_location()<BR>&nbsp;&nbsp;&nbsp; SignalDisp=sysinfo.signal()<BR>&nbsp;&nbsp;&nbsp; BatteryDisp=sysinfo.battery()<BR>&nbsp;&nbsp;&nbsp; Operator=str(RetOper[0])+str(RetOper[1])<BR>
&nbsp;&nbsp;&nbsp; global LastBattery<BR>&nbsp;&nbsp;&nbsp; global LastSignal<BR>&nbsp;&nbsp;&nbsp; global LastOperator<BR>
&nbsp;&nbsp;&nbsp; if LastBattery != BatteryDisp:<BR>&nbsp;&nbsp;&nbsp; LastBattery=BatteryDisp<BR>&nbsp;&nbsp;&nbsp; RefFlag=1<BR>
&nbsp;&nbsp;&nbsp; if LastSignal != SignalDisp:<BR>&nbsp;&nbsp;&nbsp; LastSignal=SignalDisp<BR>&nbsp;&nbsp;&nbsp; RefFlag=1<BR>
&nbsp;&nbsp;&nbsp; if LastOperator != Operator:<BR>&nbsp;&nbsp;&nbsp; LastOperator=Operator<BR>&nbsp;&nbsp;&nbsp; RefFlag=1<BR>
&nbsp;&nbsp;&nbsp; if RefFlag==1:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "&nbsp; Signal&nbsp;&nbsp; "+str(LastSignal)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "&nbsp; Battery&nbsp; "+str(LastBattery)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "&nbsp; Operator "+str(LastOperator)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; return RefFlag<BR>
def receive_msg(fd):<BR>&nbsp;&nbsp;&nbsp; reply = fd.readline()<BR>&nbsp;&nbsp;&nbsp; print "- FromJester: " + reply<BR>
def send_msg(fd,msg):<BR>&nbsp;&nbsp;&nbsp; print &gt;&gt; fd, msg<BR>&nbsp;&nbsp;&nbsp; print "- ToJester&nbsp; : " + msg<BR>
def talk(msg):<BR>&nbsp;&nbsp;&nbsp; try:<BR>&nbsp;&nbsp;&nbsp; fd = conn.makefile("rw", 0)<BR>&nbsp;&nbsp;&nbsp; send_msg(fd,msg)<BR>&nbsp;&nbsp;&nbsp; except:<BR>&nbsp;&nbsp;&nbsp; appuifw.note(u"Connection lost", "info")<BR>&nbsp;&nbsp;&nbsp; if conn:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.close()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "Bye!"<BR>
def Listen(client):<BR>&nbsp;&nbsp;&nbsp; try:<BR>&nbsp;if client:<BR>&nbsp;&nbsp;&nbsp;&nbsp; print "- Init listen port sevice"<BR>&nbsp;&nbsp;&nbsp;&nbsp; fd = client.makefile("rw", 0)<BR>&nbsp;while True:<BR>&nbsp;&nbsp;&nbsp;&nbsp; receive_msg(fd)<BR>&nbsp;&nbsp;&nbsp; except:<BR>&nbsp;appuifw.note(u"Connection lost", "info")<BR>&nbsp;if client: client.close()<BR>&nbsp;print "Bye!"<BR>
def message_received(msg_id):<BR>&nbsp;&nbsp;&nbsp; box = inbox.Inbox()<BR>&nbsp;&nbsp;&nbsp; talk("New message incoming")<BR>
def Daemon():<BR>&nbsp;&nbsp;&nbsp; global i<BR>&nbsp;&nbsp;&nbsp; while(1):<BR>&nbsp;&nbsp;&nbsp; &nbsp;lockTHR.acquire()<BR>&nbsp;&nbsp;&nbsp; &nbsp;e32.ao_sleep(10)<BR>&nbsp;&nbsp;&nbsp; &nbsp;TmpInfo=GetPhoneInfo()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if TmpInfo==1:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ToSend="StatChn:"+str(LastSignal)+";"+str(LastBattery)+";"+str(LastOperator)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; talk(ToSend)<BR>&nbsp;&nbsp;&nbsp; &nbsp;#CheckPhoneStatus()<BR>&nbsp;&nbsp;&nbsp; &nbsp;i+=1<BR>&nbsp;&nbsp;&nbsp; &nbsp;lockTHR.release()<BR>
#Inizio programma<BR>
MainPhone=JesterPhone()<BR>
StartServer()<BR>
print "- Init SMS Notification service"<BR>box = inbox.Inbox()<BR>box.bind(message_received)<BR>
thread.start_new_thread(Daemon, ())<BR>print "- Init Timer Daemon Class"<BR>
print "- Detect phone properties"<BR>MainPhone.InitMe()<BR>talk("conok:"+MainPhone.PhoneBrand+";"+MainPhone.PhoneModel)<BR>
thread.start_new_thread(Listen(conn), ())<BR>print "- Waiting for events"<BR>
lock.wait()<BR>
print "- Jester GSM Monitor Stop"<BR><BR><br /><hr />Messenger Giochi <a href='http://messengergiochi.it.msn.com/ladybird.aspx' target='_new'>Prenditi una pausa e sfida i tuoi amici a Ladybird su Messenger!</a></body>
</html>