TC35 Telefonbuch

OP (Firma: Privat) #3542060
Lesenswert?

Moin!  Ich versuche derzeit einem Tc35 Handymodul mittels AT Befehlen 
die Telefonbucheinträge zu entlocken. Mit AT+CPBR=1 geht garnix, da 
kommt immer Error zurück. Bei At+Cpbr=2 kommt manchmal die Nummer, aber 
was ja garnicht geht, oft auch nur ein "Ok" zurück! Ich habe testweise 
10 Nummern auf der Sim gespeichert. Kennt jemand dieses Verhalten? PS: 
Sms Versand im Textmodus geht super!
OP (Firma: Privat) #3577205
Lesenswert?

Ich habe nunmal weiter geforscht warum es zu diesem Verhalten kommt. 
Mein bascom Programm kommt offenbar mit den gesendeten Zeichen nicht 
klar. Es kommt immer zum Ende der ausgegebenen Einträge die Bin-Zeichen 
"10" , gefolgt von der "13". Also steht immer ein LF und ein CR 
hintereinander.

Kann man dem Modem in seinen Einstellungen irgendwie beibringen, dass 
nur das CR am Ende des Strings ausgegeben wird?

Bzw., ist jemand bekannt wie ich "Case" dazu nutzen kann das LF 
auszufiltern? Case ist doch eine "Fall"-Verzweigung, welche mir a.G. 
eines angegebenen Zeichen eine Verzweigung ausführt?

Danke für eure Hilfe, vielleicht hat ja einer nen Beispielcode für das 
Lesen des Telefonbucheintrags mittels AT+CPBR=... parat :-)

Danke!
OP (Firma: Privat) #3577746
Lesenswert?

Hier ist der Code. Er soll im Terminalprogramm lediglich anzeigen was 
der Controller empfangen hat:

Dim I As Byte , B As Byte
Dim Sret As String * 66 , Stemp As String * 20
Dim Status As Byte

Config Serialin = Buffered , Size = 17
Enable Interrupts

Print "ATE0"

Waitms 2000
Waitms 2000
Print "AT+CMGF=1"
Sret = ""

Print "at+cpbr=1"
Getline Sret

Print "Inhalt nach SPbr1 ist:"
Waitms 100
Print Sret
Waitms 500

'get line of data from buffer
Sub Getline(s As String)
 S = ""
 Do
 B = Inkey()
 Select Case B
 Case 0
 Case 13
 Case 10 : If S <> "" Then Exit Do
 Case Else
 S = S + Chr(b)

 End Select

 Loop

End Sub
Waitms 500
'flush input buffer
Sub Flushbuf()
 Waitms 100
 Do
 B = Inkey()                                                ' flush 
buffer
 Loop Until B = 0
End Sub

Return
Gast #3577896
Lesenswert?

Vielleicht so? (nicht syntax gecheckt)
1
Sub Getline(s As String)
2
 S = ""
3
 Do
4
  B = Inkey()
5
  Select Case B
6
   Case 0                      'mach nichts wenn inkey eine 0 zurückliefert
7
   Case 13 : S = S + Chr(b)    'CR wird noch an S angehangen
8
             Exit Do           'dann Schleife/Sub verlassen
9
   Case 10                     'mach nichts bei LF
10
   Case Else : S = S + Chr(b)  'alle anderen Zeichen an S anhängen
11
  End Select
12
 Loop
13
End Sub

Kenne das Modem nicht:
Wird am Ende jeden der 10 Telefonbucheinträge ein LF CR ausgegeben?
Oder erst ein LF CR am Ende der kompletten Ausgabe?
Wenn es nicht klappt müßtest du mal genau beschreiben, wie Getline 
arbeiten soll.
Getline läuft bei dir solange in der Schleife, bis die Abbruchbedingung 
kommt (LF). Dafür kannst du auch INPUT nehmen und mit CONFIG INPUT auf 
LF CR als Input komplett konfigurieren.
OP (Firma: Privat) #3577909
Lesenswert?

Dieses doofe Modem spuckt das so aus:
Cpbr1:LF CR, Nummerneintrag, LF CR

Das ist halt doof beim Einlesen da man im Text immer die 
Abbruchbedingungen hat. Das Siemens machts halt so. Ich hab auch Wavecom 
Modems, die spucken nur ein CR am Schluss und fertig. Für das Projekt 
ist aber das Siemens vorgesehen :-(
Gast #3577934
Lesenswert?

Uwe Neubert schrieb:
> Dieses doofe Modem spuckt das so aus:
> Cpbr1:LF CR, Nummerneintrag, LF CR

Was soll Getline mit   LF CR, Nummerneintrag, LF CR   genau machen?

Erstes LF verwerfen
Erstes CR verwerfen
Erstes Komma verwerfen
Nummerneintrag in S schreiben
Zweites Komma verwerfen
.
.

Beschreib genau, was Getline machen soll!!!
Gast #3577981
Lesenswert?

Tilt schrieb:
> Erstes LF verwerfen
> Erstes CR verwerfen
> Erstes Komma verwerfen
> Nummerneintrag in S schreiben
> Zweites Komma verwerfen
> .
> .
>
> Beschreib genau, was Getline machen soll!!!

Falls nur das erste LF und erstes CR stören könnte man einfach noch eine 
Schleife vorne vorsetzen:
1
Sub Getline(s As String)
2

3
 do
4
   b = Inkey()
5
   if b = 13 then exit do      'nach erstem CR Schleife verlassen
6
 loop
7
 
8
 S = ""
9
 Do                            'Zeichen sammeln 
10
  B = Inkey()
11
  Select Case B
12
   Case 0                      'mach nichts wenn inkey eine 0 zurückliefert
13
   Case 13 : S = S + Chr(b)    'CR wird noch an S angehangen
14
             Exit Do           'dann Schleife/Sub verlassen
15
   Case 10                     'mach nichts bei LF
16
   Case Else : S = S + Chr(b)  'alle anderen Zeichen an S anhängen
17
  End Select
18
 Loop
19
End Sub

Insgesamt nicht schön, könnte aber funktionieren?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren