<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>
<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>
<BR>
Grazie<BR>
<BR>
Luca<BR>
<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> PhoneModel = ""<BR> PhoneBrand = ""<BR>
#Marca<BR> def GetBrand(self):<BR> return "Nokia"<BR>
#Modello<BR> def GetModel(self):<BR> try:<BR> PhoneResp=sysinfo.sw_version()<BR> firmware = PhoneResp.split(' ')[3]<BR> mapping = {<BR> 'RM-51': '3230',<BR> 'RM-38': '3250',<BR> 'NHM-10': '3600',<BR> 'NHM-10X': '3620',<BR> 'NHL-8': '3650',<BR> 'NHL-8X': '3660',<BR> 'RM-25': '6260',<BR> 'RM-29': '6260b',<BR> 'NHL-10': '6600',<BR> 'NHL-12': '6620',<BR> 'NHL-12X': '6620',<BR> 'RM-1': '6630',<BR> 'RH-67': '6670',<BR> 'RH-68': '6670b',<BR> 'RM-36': '6680',<BR> 'RM-57': '6681',<BR> 'RM-58': '6682',<BR> 'RH-51': '7610',<BR> 'RH-52': '7610b',<BR> 'NHL-2NA': '7650',<BR> 'RM-49': 'E60-1',<BR> 'RM-89': 'E61-1',<BR> 'RM-10': 'E70-1',<BR> 'RM-24': 'E70-?',<BR> 'NEM-4': 'N-Gage',<BR> 'RH-29': 'N-Gage QD (asia/europe)',<BR> 'RH-47': 'N-Gage QD (americas)',<BR> 'RM-84': 'N70-1',<BR> 'RM-99': 'N70-5',<BR> 'RM-67': 'N71-1',<BR> 'RM-112': 'N71-5',<BR> 'RM-91': 'N80-3',<BR> 'RM-92': 'N80-1',<BR> 'RM-42': 'N90-1',<BR> 'RM-43': 'N91-1',<BR> 'RM-158': 'N91-5' }<BR> return "Nokia "+mapping[firmware]<BR> except:<BR> return "notfound"<BR>
#Inizializzazione classe telefono<BR>
def InitMe(self):<BR> self.PhoneBrand=self.GetBrand()<BR> self.PhoneModel=self.GetModel()<BR>
<BR>#Avvio del server RFCOMM<BR>def StartServer():<BR> global conn<BR> server = socket.socket(socket.AF_BT, socket.SOCK_STREAM)<BR> channel = socket.bt_rfcomm_get_available_server_channel(server)<BR> server.bind(("", channel))<BR> server.listen(1)<BR> socket.bt_advertise_service(u"JesterPlugIn", server, True, socket.RFCOMM)<BR> socket.set_security(server, socket.AUTH | socket.AUTHOR)<BR> print "- Waiting for clients..."<BR> conn, client_addr = server.accept()<BR> print "- Jester connected with phone"<BR> <BR>#Aggiorna ststo telefono<BR>def GetPhoneInfo():<BR>
RefFlag=0<BR> RefState=0<BR>
RetOper=location.gsm_location()<BR> SignalDisp=sysinfo.signal()<BR> BatteryDisp=sysinfo.battery()<BR> Operator=str(RetOper[0])+str(RetOper[1])<BR>
global LastBattery<BR> global LastSignal<BR> global LastOperator<BR>
if LastBattery != BatteryDisp:<BR> LastBattery=BatteryDisp<BR> RefFlag=1<BR>
if LastSignal != SignalDisp:<BR> LastSignal=SignalDisp<BR> RefFlag=1<BR>
if LastOperator != Operator:<BR> LastOperator=Operator<BR> RefFlag=1<BR>
if RefFlag==1:<BR> print " Signal "+str(LastSignal)<BR> print " Battery "+str(LastBattery)<BR> print " Operator "+str(LastOperator)<BR> <BR> return RefFlag<BR>
def receive_msg(fd):<BR> reply = fd.readline()<BR> print "- FromJester: " + reply<BR>
def send_msg(fd,msg):<BR> print >> fd, msg<BR> print "- ToJester : " + msg<BR>
def talk(msg):<BR> try:<BR> fd = conn.makefile("rw", 0)<BR> send_msg(fd,msg)<BR> except:<BR> appuifw.note(u"Connection lost", "info")<BR> if conn:<BR> conn.close()<BR> print "Bye!"<BR>
def Listen(client):<BR> try:<BR> if client:<BR> print "- Init listen port sevice"<BR> fd = client.makefile("rw", 0)<BR> while True:<BR> receive_msg(fd)<BR> except:<BR> appuifw.note(u"Connection lost", "info")<BR> if client: client.close()<BR> print "Bye!"<BR>
def message_received(msg_id):<BR> box = inbox.Inbox()<BR> talk("New message incoming")<BR>
def Daemon():<BR> global i<BR> while(1):<BR> lockTHR.acquire()<BR> e32.ao_sleep(10)<BR> TmpInfo=GetPhoneInfo()<BR> if TmpInfo==1:<BR> ToSend="StatChn:"+str(LastSignal)+";"+str(LastBattery)+";"+str(LastOperator)<BR> talk(ToSend)<BR> #CheckPhoneStatus()<BR> i+=1<BR> 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>