Italian Verifica codice

MAX_SV

Active Member
Licensed User
Longtime User
Sono a chiedervi un favore
In una mia app leggo dei tempi tramite seriale da un apparecchiatura e sterna e dopo n. letture (valore scelto dall'utente da 1 a 5) invio un sms con i dati letti.
Ho dei problemi a testare il codice in quanto:
1) il tablet che uso non ha il supporto alla SIM
2) sono all'estero e con i costi di roaming mi mangio tutto.
Se qualche anima buona con più esperienza di me può guardarmi il codice e darmi un parere ...

B4X:
Sub SMSReceptor_MessageReceived (From As String, Body As String)
     ' in questa procedura analizzo l'sms e lo gestisco
     ToastMessageShow(From, True)
     If chk_attiva_sms_in.Checked = False Then Return ' se non è attiva la spunta esce dalla routine
     Dim presente As Boolean
     presente = False
     ' verifico che provenga da un numero abilitato
     If chk_in_1.Checked =True Then
         If txt_in_tel_1.Text.Length >4 Then
            If From = txt_in_tel_1.Text Then presente=True
        End If
     End If
     If chk_in_2.Checked =True Then
         If txt_in_tel_2.Text.Length >4 Then
            If From = txt_in_tel_2.Text Then presente=True
        End If
     End If
     If chk_in_3.Checked =True Then
         If txt_in_tel_3.Text.Length >4 Then
            If From = txt_in_tel_3.Text Then presente=True
        End If
     End If
     If chk_in_4.Checked =True Then
         If txt_in_tel_4.Text.Length >4 Then
            If From = txt_in_tel_4.Text Then presente=True
        End If
     End If
     If chk_in_5.Checked =True Then
         If txt_in_tel_5.Text.Length >4 Then
            If From = txt_in_tel_5.Text Then presente=True
        End If
     End If
     If chk_in_6.Checked =True Then
         If txt_in_tel_6.Text.Length >4 Then
            If From = txt_in_tel_6.Text Then presente=True
        End If
     End If
     If presente=False Then Return ' termina la routine se il mittente non è un tablet
     ' decodifico il messaggio
     '2#123#12#22#15#123#P§ ' messaggio singolo
     '2#123#12#22#15#123#P§2#124#13#22#16#000#P
     ' dove
     '2 id zona
     '123 numero
     ' 12 ore
     ' 22 minuti
     ' 15 secondi
     ' 123 millesimi di secondo
     ' P posizione
     '§ separatore blocco
     '# separatore campo
     Dim messaggi() As String
     Dim parti_sms() As String
     messaggi=Regex.Split ("§",Body)
     If messaggi.Length -1 <0 OR messaggi.Length -1=0 Then Return ' se la coda è vuota esce
     Dim delta As Int
     Dim aggiunta,tempo,stringa,numero, linea,ps As String
     For i=0 To messaggi.Length -1 'esegue il ciclo per ogni messaggio presente nel body
         parti_sms=Regex.Split ("#",messaggi(i))
            If chk_com.Checked =False Then Return    ' se la porta com è chiusa termina la routine
            If lst_protocollo.SelectedItem="Orologio" Then
                ' protocollo master
                If parti_sms(2).Length < 2 Then
                delta=2-parti_sms(2).Length
                For i=1 To delta
                    aggiunta=aggiunta & "0"
                Next
                parti_sms(2)=aggiunta & parti_sms(2)
                End If
                delta=0
                aggiunta=""
                If parti_sms(3).Length < 2 Then
                    delta=2-parti_sms(3).Length
                    For i=1 To delta
                        aggiunta=aggiunta & "0"
                    Next
                    parti_sms(3)=aggiunta & parti_sms(3)
                End If
                delta=0
                aggiunta=""
                If parti_sms(4).Length < 2 Then
                    delta=2-parti_sms(4).Length
                    For i=1 To delta
                        aggiunta=aggiunta & "0"
                    Next
                    parti_sms(4)=aggiunta & parti_sms(4)
                End If
                delta=0
                aggiunta=""
                If parti_sms(5).Length < 3 Then
                    delta=3-parti_sms(5).Length
                    For i=1 To delta
                        aggiunta=aggiunta & "0"
                    Next
                    parti_sms(5)=aggiunta & parti_sms(5)
                End If
                delta=0
                aggiunta=""
                numero= parti_sms(1)
                tempo=parti_sms(2) & parti_sms(3) & parti_sms(4) & parti_sms(5)
                Select Case (parti_sms(6))
                    Case "P"
                        linea="A"
                    Case "I1"
                        linea="B"
                    Case "I2"
                        linea="C"
                    Case "A"
                        linea="C"
                End Select
                stringa="+K"& linea & numero &"=" & tempo
                astreams1.Write(stringa.GetBytes("UTF8"))
                lbl_log_seriale.Text = "Dati Seriale (OUT) <-- " & stringa
                Sleep(250)  
            Else
                ' protocollo radioamatori
                '00200999122211443  P partenza
                '00200999122211443  A arrivo
                '00200999122211443  T tempo
                'pppnnnnnhhmmssdcm__L decodifica
                '2#123#12#22#15#123#P§
                If parti_sms(2).Length < 2 Then
                delta=2-parti_sms(2).Length
                For i=1 To delta
                    aggiunta=aggiunta & "0"
                Next
                parti_sms(2)=aggiunta & parti_sms(2)
                End If
                delta=0
                aggiunta=""
                If parti_sms(3).Length < 2 Then
                    delta=2-parti_sms(3).Length
                    For i=1 To delta
                        aggiunta=aggiunta & "0"
                    Next
                    parti_sms(3)=aggiunta & parti_sms(3)
                End If
                delta=0
                aggiunta=""
                If parti_sms(4).Length < 2 Then
                    delta=2-parti_sms(4).Length
                    For i=1 To delta
                        aggiunta=aggiunta & "0"
                    Next
                    parti_sms(4)=aggiunta & parti_sms(4)
                End If
                delta=0
                aggiunta=""
                If parti_sms(5).Length < 3 Then
                    delta=3-parti_sms(5).Length
                    For i=1 To delta
                        aggiunta=aggiunta & "0"
                    Next
                    parti_sms(5)=aggiunta & parti_sms(5)
                End If
                delta=0
                aggiunta=""
                'decodifica e tabba numero
                If parti_sms(1).Length <5 Then
                    delta=5-parti_sms(1).Length
                    For i=1 To delta
                        aggiunta=aggiunta & "0"
                    Next
                    parti_sms(1)=aggiunta & parti_sms(1)
                End If
                numero= parti_sms(1)
                'decodifica e tabba ps
                If parti_sms(0).Length <3 Then
                    delta=3-parti_sms(0).Length
                    For i=1 To delta
                        aggiunta=aggiunta & "0"
                    Next
                    parti_sms(0)=aggiunta & parti_sms(0)
                End If
                ps= parti_sms(0)
                ' compila stringa out
                tempo=parti_sms(2) & parti_sms(3) & parti_sms(4) & parti_sms(5) 'ok
                Select Case (parti_sms(6))
                    Case ("P")
                        linea="  P"
                    Case ("A")
                        linea="  A"
                End Select
                'pppnnnnnhhmmssdcm__L decodifica
                stringa=ps & numero & tempo & linea
                      
                astreams1.Write(stringa.GetBytes("UTF8"))
                lbl_log_seriale.Text = "Dati Seriale (OUT) <-- " & stringa
                Sleep(250)
            End If
     Next
     End Sub

In pratica in una schermata imposto dei numeri di telefono abilitati alla trasmissione dei dati quindi:
  1. alla ricezione del messaggio verifico che provenga da uno di questi numeri
  2. nel caso il numero sia "valido" e abilitato
    1. decodifico messaggio
    2. invio i dati su web server e/o su porta seriale


Grazie
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
In questo momento non ce la farei proprio a controllare il codice (potrei decapitarmi: il mal di testa passerebbe e... diventerei la "buona anima" per verificare il tuo progetto :p).

Però ho una domanda/consiglio: esistono ancora, come molti anni fa, dei siti che consentono di inviare SMS gratuitamente?
Se sì, potresti sfruttarli per i test.

Se non ricordo male, anche nell'ambiente Eclipse c'è la possibilita di simulare l'invio di SMS.
[P.S. verso un emulatore]
Verifico e ti faccio sapere.
 

MAX_SV

Active Member
Licensed User
Longtime User
Non vorrei mai cambiare il nome dell'app in tua memoria :) il problema non è la trasmissione (l'ho già utilizzata) ma la ricezione e la verifica dei dati ...
 
Top