Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Проблема с приёмом ответов на АТ команды


Автор: Xamilion 22.1.2008, 02:24
Уважаемые форумчане вот в чём проблема smile :
Код

procedure TForm1.Button31Click(Sender: TObject);
var
G:array[0..4095] of char;
s: WideString;
f: TMemoryStream;
begin
InBufLen:=SP.SendCommand('AT$FSRF=4,0,"G:\Music\SLAVJNKA.mid"'#13, 36, @G, 100);
 f := TMemoryStream.Create;
  f.Write(G, SizeOf(G));
  f.SaveToFile('C:\1.txt');
  f.Free;

end;

'AT$FSRF=4,0,"G:\Music\SLAVJNKA.mid"'-АТ команда по пересылки данных из мобилы в комп
36-длина передаваеммых даннных в телефон
G-буфер приёма ответа
100-задержка которая даёться телу на ответ(не уверен)
проблема в следую щем в буфер заноситься ответ только до файла сам файл не заноситься выглядит это так:
AT$FSRF=4,0,"G:\Music\SLAVJNKA.mid"

$FSRF: 4,0,"G:\Music\SLAVJNKA.mid",307
MThd
хотя порт монитор показывает следующее:
Запрос:19.01.2008 17:39:46.49464 (+0.0313 seconds)

Цитата

 41 54 24 46 53 52 46 3D 34 2C 30 2C 22 47 3A 5C   AT$FSRF=4,0,"G:\
 4D 75 73 69 63 5C 53 4C 41 56 4A 4E 4B 41 2E 6D   Music\SLAVJNKA.m
 69 64 22 0D                                       id".            

Ответ:19.01.2008 17:39:46.55664 (+0.0625 seconds)
Цитата

 0D 0A 24 46 53 52 46 3A 20 34 2C 30 2C 22 47 3A   ..$FSRF: 4,0,"G:
 5C 4D 75 73 69 63 5C 53 4C 41 56 4A 4E 4B 41 2E   \Music\SLAVJNKA.
 6D 69 64 22 2C 33 30 37 0D 0A 4D 54 68 64 00 00   mid",307..MThd..
 00 06 00 00 00 01 00 60 4D 54 72 6B 00 00 01 1D   .......`MTrk....
 00 FF 01 61 68 3A 2F 68 6F 6D 65 2F 75 36 38 39   .ÿ.ah:/home/u689
 34 2F 70 6F 6C 69 66 6F 6E 69 61 2E 72 75 2F 63   4/polifonia.ru/c
 67 69 2D 62 69 6E 2F 63 6F 6E 76 65 72 74 6F 72   gi-bin/convertor
 2F 72 74 74 74 6C 5F 6D 69 64 69 2F 63 6F 6E 76   /rtttl_midi/conv
 65 72 74 6F 72 2E 63 67 69 20 61 74 20 57 65 64   ertor.cgi at Wed
 20 4D 61 79 20 20 35 20 32 32 3A 34 39 3A 35 37    May  5 22:49:57
 20 32 30 30 34 00 FF 03 06 6D 65 6C 6F 64 79 00    2004.ÿ..melody.
 C0 00 00 FF 51 03 09 27 C0 00 90 48 7F 30 80 48   À..ÿQ..'À.H0€H
 00 00 90 49 7F 18 80 49 00 00 90 48 7F 30 80 48   ..I.€I..H0€H
 00 18 90 44 7F 30 80 44 00 00 90 43 7F 18 80 43   ..D0€D..C.€C
 00 00 90 41 7F 30 80 41 00 18 90 40 7F 30 80 40   ..A0€A..@0€@
 00 00 90 41 7F 18 80 41 00 00 90 43 7F 30 80 43   ..A.€A..C0€C
 00 48 90 40 7F 18 80 40 00 00 90 3C 7F 30 80 3C   .H@.€@..<0€<
 00 18 90 48 7F 30 80 48 00 00 90 49 7F 18 80 49   ..H0€H..I.€I
 00 00 90 48 7F 30 80 48 00 18 90 47 7F 30 80 47   ..H0€H..G0€G
 00 00 90 48 7F 18 80 48 00 00 90 4F 7F 30 80 4F   ..H.€H..O0€O
 00 18 90 50 7F 30 80 50 00 00 90 4F 7F 18 80 4F   ..P0€P..O.€O
 00 00 90 4D 7F 30 80 4D 00 00 FF 2F 00 0D 0A 4F   ..M0€M..ÿ/...O
 4B 0D 0A                                          K..
что надо сделать чтобы в буфере оказался полный ответ!!!
P.S.Я думаю это из-за того что массив char но может я и не прав!!!
Заранее спасибо от всех форумчан сайта http://www.s88.reklamaufa.ru!!!

Автор: VICTAR 22.1.2008, 03:46
Попробуй
Код

 f.Write(G[0], SizeOf(G));


Добавлено через 2 минуты и 28 секунд
и попробуй заменить 
Код

 G: array[0..4095] of byte;

Автор: Xamilion 22.1.2008, 14:15
VIKTAR Cпасибо помогло smile !!!Плюс заслуженно твой!!(только я не могу его поставить говорит надо 100 постов smile !!!
Возник новый вопрос!
Вот файл который сохраняет прога
AT$FSRF=4,0,"G:\Music\SLAVJNKA.mid"

$FSRF: 4,0,"G:\Music\SLAVJNKA.mid",307
MThd       `MTrk   яah:/home/u6894/polifonia.ru/cgi-bin/convertor/rtttl_midi/convertor.cgi at Wed May  5 22:49:57 2004 яmelody А  яQ    'А ђH0ЂH  ђIЂI  ђH0ЂH ђD0ЂD  ђCЂC  ђA0ЂA ђ@0Ђ@  ђAЂA  ђC0ЂC Hђ@Ђ@  ђ<0Ђ< ђH0ЂH  ђIЂI  ђH0ЂH ђG0ЂG  ђHЂH  ђO0ЂO ђP0ЂP  ђOЂO  ђM0ЂM  я/ 
OK
Как можно сохранить только 3 строчку в файл не перегоняя из формата byte т.к. это и есть выгружаеммый файл?
И вобще как делать поиск по символам в byte?
Как расчитывать время на передачу в конце файла 4 строка приходит ОК можно это использовать а то в файл кроме ответа 5 строкой приходит и другая не нужная информация?

Автор: VICTAR 22.1.2008, 16:06
Тебе надо определить где начинается сам файл. Заканчивается он на "OK".
А далее с помощью Move копируешь в новый массив или куда там тебе еще надо.

Автор: Xamilion 22.1.2008, 16:16
Код

procedure TForm1.Button31Click(Sender: TObject);
var
G: array[0..4095] of byte;
K:array[0..4095] of byte;
s: WideString;
f: TMemoryStream;
f1 : TMemoryStream;
begin
InBufLen:=SP.SendCommand('AT$FSRF=4,0,"G:\Music\SLAVJNKA.mid"'#13, 36, @G, 100);

K=G[3];/////////////////////////////////////В этой строчке выдаёт ошибку
f1 := TMemoryStream.Create;
 f1.Write(K[0], SizeOf(K));
  f1.SaveToFile('C:\1.mid');
  f1.Free;

 f := TMemoryStream.Create;
 f.Write(G[0], SizeOf(G));
  f.SaveToFile('C:\1.txt');
  f.Free;

end;

А как поиск делать в вайле и как отправлять в другой массив только нужные данные(как вырезать)?

Автор: VICTAR 22.1.2008, 16:33
Цитата(Xamilion @  22.1.2008,  16:16 Найти цитируемый пост)
K=G[3];/////////////////////////////////////В этой строчке выдаёт ошибку

Естественно. Ты массиву пытаешься присвоить элемент массива.
В массиве нет такого понятия "строчка".

Найди какую-либо закономерность, где начинается файл.
Код

f1 := TMemoryStream.Create;
 f1.Write(K[начало_файла], размер_копирования);
  f1.SaveToFile('C:\1.mid');
  f1.Free;


PS пользуйся кнопкой код

Автор: Xamilion 22.1.2008, 19:23
Код

procedure TForm1.Button31Click(Sender: TObject);
var
G: array[0..4095] of byte;
K:array[0..4095] of byte;
s: WideString;
f: TMemoryStream;
f1 : TMemoryStream;
begin
InBufLen:=SP.SendCommand('AT$FSRF=4,0,"G:\Music\SLAVJNKA.mid"'#13, 36, @G, 100);
f1 := TMemoryStream.Create;
 f1.Write(K[75],307);
  f1.SaveToFile('C:\1.mid');
  f1.Free;

 f := TMemoryStream.Create;
 f.Write(G[0], SizeOf(G));
  f.SaveToFile('C:\1.txt');
  f.Free;

end;

вытаскивает правильно только файл не работает
мне кажеться это из-за 
 f1.Write(K[75],307);
f1 : TMemoryStream;
эти две строчки наверно вайл в текст пытаються перегнать!!!
Нельзя ли как нибудь byte напрямую сохранить без переделок в другие форматы?

Автор: VICTAR 22.1.2008, 19:30
Цитата(Xamilion @  22.1.2008,  19:23 Найти цитируемый пост)
Нельзя ли как нибудь byte напрямую сохранить без переделок в другие форматы? 

Никаких "переделок" и не происходит. 
Открой в каком-нибудь редакторе исходный файл и то, что получилось у тебя. 
Посмотри в чем отличия.

Автор: Xamilion 29.1.2008, 14:45
Вопрос ращён колько галку я поставить ни как не могу!!!
Тему можно удалять всем спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)