Здравствуйте, Tsnok, Вы писали:
T>Здравствуйте, Mickey_Mouse, Вы писали:
M_M>>Здравствуйте, Tsnok, Вы писали:
T>>>Подключи winsock. T>>>Если закончу свой труд( — надеюсь на это ), скорее всего выложу
M_M>> WinSock я подключил. У меня ругается вот так:
M_M>> [Error] Unit1.pas(24): Undeclared identifier: 'PWINDOWS_DEVICELIST' M_M>> [Error] Unit1.pas(25): Undeclared identifier: 'SOCKADDR_IRDA' M_M>>по-моему, надо подключить что-то типа af_irda.h в Си
T>из ддк бери заголовочный файл, портируй под д, и подключай в проектте ...
Извини если кажусь бронелобым, но не мог бы ты с этого места поподробней немного.
1. Ссылка на заголовочный файл (не могу найди в ддк)
2. Как его отпортировать под делфу?
Здравствуйте, Mickey_Mouse, Вы писали:
M_M>Перевел af_irda.h в делфовый формат (pas) утилкой c2pas32 M_M>но что дальше делать — не знаю. M_M> хелп!
положи в свой проект,( я надеюсь ты её проправил .т.к. эта утилита работает "немного грубо" ) подключи, и начинай писать, создай сокет, и попробуй сделать коннект. В общем смотри посты повыше.
Здравствуйте, Tsnok, Вы писали:
T>Здравствуйте, Mickey_Mouse, Вы писали:
M_M>>Перевел af_irda.h в делфовый формат (pas) утилкой c2pas32 M_M>>но что дальше делать — не знаю. M_M>> хелп!
T>положи в свой проект,( я надеюсь ты её проправил .т.к. эта утилита работает "немного грубо" ) подключи, и начинай писать, создай сокет, и попробуй сделать коннект. В общем смотри посты повыше.
T>Удачи
Блин, чето эта утилка плохо перевела с-шный код в пас. теперь ошибки только в нем. ты бы не мог выложить готовый (исправленный) af_irda.pas?
заранее очень благодарю
Здравствуйте, kiborg, Вы писали:
K>В Buf_s[ 0 ] должно быть число $80.
все дело в том, что раньше не приходилось работать с подобной системой представления и преобразования информации ;(.
поэтому не очень получается.
Buf_s[ 2 ] := $10 ; //version
Buf_s[ 3 ] := $00 ; //flag
Buf_s[ 4 ] := $20 ; //packsize
Buf_s[ 5 ] := $00 ; //packsize
Buf_s[ 6 ] := $46 ; //HI
Buf_s[ 7 ] := $00 ; //data length
Buf_s[ 8 ] := $13 ; //data length
K>А где у тебя uuid сервиса OBEX для которого выполняется операция???
а вот с этим большая проблема, как правильно можно uuid поместить в буфер
Buf_s[ 9 ] := $6B01CB3 ;
Buf_s[ 10 ] := $1410611 ;
Buf_s[ 11 ] := $D49A770 ;
Buf_s[ 12 ] := $050DA3F4 ;
Buf_s[ 13 ] := $71F ;
K>А этого тем более не может быть потому что показано что должно быть 7 байт в пакете, а ты привел 6.
он возвращает семь байт просто там нули 00, и я их не стал писать ...
K>>В Buf_s[ 0 ] должно быть число $80. T>все дело в том, что раньше не приходилось работать с подобной системой представления и преобразования информации ;(. T>поэтому не очень получается.
Хочешь сказать ты только с символами работал?
T>// opcode|length |version|flag|packsize|HI|data length|data(uuid) T>// 80 | 001A |10 |00 |0x2000 |46|0013 |6B01CB31410611D49A770050DA3F471F
T> BUF_S[ 0 ] := $80 ; //$80
T> Buf_s[ 1 ] := $14 ; //длинна пакеты в байтах
Ты надо мной издеваешься?
Длина пакета задаётся ДВУМЯ БАЙТАМИ ВСЕГДА!!!
Если у тебя длина $14 то должно быть в массиве так
Т.е. дальше можно не смотреть уже здесь бага.
Тут ещё не понятно, если ты скопировал мой пример, то почему у тебя
длина $14?? Догда когда она $1A. К чему здесь творческая переработка? Это не литературная проза, в который раз пытаюсь дать понять. Тут всё точно, ло бита.
T> Buf_s[ 2 ] := $10 ; //version T> Buf_s[ 3 ] := $00 ; //flag T> Buf_s[ 4 ] := $20 ; //packsize T> Buf_s[ 5 ] := $00 ; //packsize T> Buf_s[ 6 ] := $46 ; //HI T> Buf_s[ 7 ] := $00 ; //data length T> Buf_s[ 8 ] := $13 ; //data length
K>>А где у тебя uuid сервиса OBEX для которого выполняется операция??? T>а вот с этим большая проблема, как правильно можно uuid поместить в буфер
K>>А этого тем более не может быть потому что показано что должно быть 7 байт в пакете, а ты привел 6. T>он возвращает семь байт просто там нули 00, и я их не стал писать ...
А я должен был додумать? А что нули уже не данные???
Есть большая разница между $1A и $1A00 например.
Здравствуйте, Tsnok, Вы писали:
T>Здравствуйте, Mickey_Mouse, Вы писали:
M_M>>Перевел af_irda.h в делфовый формат (pas) утилкой c2pas32 M_M>>но что дальше делать — не знаю. M_M>> хелп!
T>положи в свой проект,( я надеюсь ты её проправил .т.к. эта утилита работает "немного грубо" ) подключи, и начинай писать, создай сокет, и попробуй сделать коннект. В общем смотри посты повыше.
T>Удачи.
Друг, ну помоги. Хреново перевелся в делфу заголовочный файл. а отладить не получается. все стоит на месте. короче я в ступоре. подгони пожалуйста нормаольный заголовочный делфовый файлик af_irda.
Обчень благодарю!
... M_M>Друг, ну помоги. Хреново перевелся в делфу заголовочный файл. а отладить не получается. все стоит на месте. короче я в ступоре. подгони пожалуйста нормаольный заголовочный делфовый файлик af_irda.
Больше проблем нет?
M_M>Обчень благодарю!
Здравствуйте, Mickey_Mouse, Вы писали:
M_M>Хреново перевелся в делфу заголовочный файл. а отладить не получается. все стоит на месте. короче я в ступоре. подгони пожалуйста нормаольный заголовочный делфовый файлик af_irda. M_M>Обчень благодарю!
Здравствуйте, Tsnok, Вы писали:
T>Здравствуйте, Mickey_Mouse, Вы писали:
M_M>>Хреново перевелся в делфу заголовочный файл. а отладить не получается. все стоит на месте. короче я в ступоре. подгони пожалуйста нормаольный заголовочный делфовый файлик af_irda. M_M>>Обчень благодарю!
T>Давай мыло.
scorp@bvkt.kiev.ua
Заранее огромное данке!
изучил ваши замечания и по попробывал реализовать фомирование пакета с учетом все выше рассмотренного, но все равно в ответ отклик неважнецкий 17 10 04 80
T>изучил ваши замечания и по попробывал реализовать фомирование пакета с учетом все выше рассмотренного, но все равно в ответ отклик неважнецкий 17 10 04 80
Назову вещи своими именами — ЭТО совсем не отклик OBEX!
Такого отклика не может быть в принципе!
Итак, читай ВНИМАТЕЛЬНО:
Первый байт в OBEX пакете всегда кокой-нибудь код. ВСЕГДА понимаещь?
И когда посылаешь и когда принимаешь, всегда первый байт это код.
В данном случае, ты ждешь отклика от устройства, значит должен анализировать коды ответа.
$A0 или $20 — успешно
$90 или $10 — Запрос на продолжение.
и т.д. см. спецификацию
Почему некоторые коды могут иметь два числа одного и того же результата я не знаю. Спецификаторы не договорились наверно.
Но реально зависит от производителя устройства. Может то, а может это посылать. Кто-то тут хотел универсальную прогу для всех устройств?-) Блажен кто верует... Это ещё цветочки.
Ну тык вот.
Далее после первого байта ВСЕГДА идут ДВА байта длины пакета. Понимаешь всегда?
А вот далее уже от обстоятельств.
Тут можно использовать такую стратегию, читай внимательно:
Сначала ВСЕГДА читаешь ТРИ первых байта.
Анализируешь первый. Если не совпадает ни с какими кодами (как в твоём собственно примере вверху), то это мусор. Можешь дальше не мучаться — это не OBEX.
Если совпало с кодом, то в зависимоти от кода во-первых, а во-вторых анализируешь длину пакета в бвух следующих байтах и если она больше 3 то остатки надо принять (длина — 3).
Ну а что там — читай спецификацию.
T>// opcode|length |version|flag|packsize|HI|data length|data(uuid) T>// 80 | 001A |10 |00 |0x2000 |46|0013 |6B 01 CB 31 41 06 11 D4 9A 77 00 50 DA 3F 47 1F
T> BUF_s[ 0 ] := $80;
T> BUF_s[ 1 ] := $00; //length T> BUF_s[ 2 ] := $1A; //length длинна пакета 26 байт T> BUF_s[ 3 ] := $10; //VERSION T> BUF_s[ 4 ] := $00; //FLAG T> BUF_s[ 5 ] := $20; //PACKSIZE T> BUF_s[ 6 ] := $00; //PACKSIZE T> BUF_s[ 7 ] := $46; //HI T> BUF_s[ 8 ] := $00; //DATA LENGTH T> BUF_s[ 9 ] := $13; //DATA LENGTH
Ну у тут... Сколько ты будешь наступать на одни и теже грабли в одном и том же месте. Причем тебе ещё и говорят что тут грабли???
Ты должен послать ровно столько байт, сколько ты сформировал в пакете, а не сколько у тебя буфер размером.
Ты вообще понимаешь, что возвращает sizeof( @BUF_S )???
Вот именно столько будет посылаться байт функцией send. И все эти байты будет пытаться анализировать принимающее устройство.
Те же яйца — вид сбоку.
Ты пытаешься принять с устройства sizeof( @BUF_R ) байт. Функция будет ждать пока ей не прилетит именно столько байт.
А между тем тебе точно известно сколько устройство посылает тебе байт.
Стратегию я описал выше.
T>Благодарю за помощь.
Где тогда мне оценки???
то в этом случае в ответ вываливается мусор, что в полне логично.
Вот.
По поводу длинны
View_BUF_SND.AppendBuffer( @BUF_S, 26 );
,,,,,,,
когда пробую просмотреть свой сформированный пакет вижу запрошенные 26 байт, судя по всему столько же отправляется в телефон,
вот то что отображается в буфере
объясните если несложно, почему струтура пакета отличается от той что была задана, если я определил, что весь пакет заполнен данными а здесь только 6 байт в перемешку с нулями.
if send( Sock, BUF_S, 26 , 0 ) = SOCKET_ERROR then
,,,,,,,
В общем, сделал я нормальную структуры отправки, т.е. 80 00 1А и.т.д, но вот на счет правильности пакета у меня все равно сомнения, отклик получаю какой то не такой уже и пример из доки по обексу пробывал все равно не катит ..... подскажите пожалуйста в чем ошибка, даже не знаю чего делать
T>Если при задании структуры адреса T>указать следующее
T> irADRR.irdaAddressFamily := AF_IRDA; T> irADRR.irdaServiceName := 'OBEX'; T> и т.д.
T>и при этом послать в порт, что угодно получаю следующий отклик A0 00 07 10 00 и т.д.
А это что-то не логично. Как это что угодно? Что если полсать скажем один байт на пример $00,
то всё равно получишь то что ты написал?
И кстати A0 00 07 10 00 и т.д. это ведь успешный отклик. Еслиб ты всё написал можно точно сказать, а так
начало неплохое...
T>но если структуру определить как
T> irADRR.irdaAddressFamily := AF_IRDA; T> irADRR.irdaServiceName := 'IrDA:IrCOMM';
T>то в этом случае в ответ вываливается мусор, что в полне логично.
Вот именно логично.
T>Вот. T>По поводу длинны T> View_BUF_SND.AppendBuffer( @BUF_S, 26 ); T> ,,,,,,, T> когда пробую просмотреть свой сформированный пакет вижу запрошенные 26 байт, судя по всему столько же отправляется в телефон, T> вот то что отображается в буфере
T> 80 00 00 00 00 00 00 00 1A 00 00 00 10 00 00 00 T> 00 00 00 00 20 00 00 00 00 00
T> объясните если несложно, почему струтура пакета отличается от той что была задана, если я определил, что весь пакет заполнен данными а здесь только 6 байт в перемешку с нулями.
Как я это объясню? Я же не стою у тебя за спиной не смотрю что ты там творишь. Откуда ты берёщь эти байты.
T> if send( Sock, BUF_S, 26 , 0 ) = SOCKET_ERROR then T> ,,,,,,,
T> recv( Sock, BUF_R, 26, 0 );
Это по-прежнему не правильнро. Стратегию я описывал раньше. С какого потолка ты получаешь 26 байт?
T> View_BUF_RCV.AppendBuffer( @BUF_R, 26 ); T> ,,,,,,,
T> даже если определить динну пакета в 26 байт то в ответ все равно вываливается 17 04 80 и т.д.
Вот у меня вопросы.
Что за устройство с которым ты работаешь?
Есть ли у тебя программа вообще какая нибудь, которая с ним работает? То есть ты вообще видел сам чтобы с ним ктонибудь работал?
Если да, может ли твоё устройство работать по COM порту? Если да, то можно подглядеть что там работающая программа посылает в порт. Я например, довольно долго этим занимался, потому что все производители вставляюта свои особенности в протокол.
Пробовал ли ты свой код на других устройствах?
Здравствуйте, kiborg,
T>Если при задании структуры адреса T>указать следующее
T> irADRR.irdaAddressFamily := AF_IRDA; T> irADRR.irdaServiceName := 'OBEX'; T> и т.д.
T>и при этом послать в порт, что угодно получаю следующий отклик A0 00 07 10 00 и т.д. >А это что-то не логично. Как это что угодно? Что если полсать скажем один байт на пример $00, >то всё равно получишь то что ты написал? >И кстати A0 00 07 10 00 и т.д. это ведь успешный отклик. Еслиб ты всё написал можно точно сказать, а так >начало неплохое...
\Это действительно так. Если описать имя сервиса ОБЕКС, и послать в порт что угодно хот $00 то в ответ получаетм именно такой отклик. Если интересно то могу скинуть исходные коды, убедитесь сами.
T>> if send( Sock, BUF_S, 26 , 0 ) = SOCKET_ERROR then T>> ,,,,,,,
T>> recv( Sock, BUF_R, 26, 0 ); K>Это по-прежнему не правильнро. Стратегию я описывал раньше. С какого потолка ты получаешь 26 байт?
BUF_s[ 0 ] := $80;
25 плюс нулевой байт в итоге имеем 26 байт. Или все таки что то не так.
T>> View_BUF_RCV.AppendBuffer( @BUF_R, 26 ); T>> ,,,,,,,
K>Вот у меня вопросы. K>[list] K>Что за устройство с которым ты работаешь?
Мобильный телефон — Siemens s35
K>Есть ли у тебя программа вообще какая нибудь, которая с ним работает? То есть ты вообще видел сам чтобы с ним ктонибудь работал?
Обмен между ним и ещё одним мобильником проиходит — обменивался картинками.
K>Если да, может ли твоё устройство работать по COM порту? Если да, то можно подглядеть что там работающая программа посылает в порт. Я например, довольно долго этим занимался, потому что все производители вставляюта
свои особенности в протокол.
если не секрет, не подскажите какими программами можно просматривать, что отправляется в порт.
K>Пробовал ли ты свой код на других устройствах?
Да, результат аналогичный.
Извиняюсь за настойчивость, но неподскажите как можно просмотреть списки какталогов в телефоне, записать файл на телефон, скопировать файл файл с телефона на ПК.
Здравствуйте, Tsnok, Вы писали:
T>>и при этом послать в порт, что угодно получаю следующий отклик A0 00 07 10 00 и т.д. >>А это что-то не логично. Как это что угодно? Что если полсать скажем один байт на пример $00, >>то всё равно получишь то что ты написал? >>И кстати A0 00 07 10 00 и т.д. это ведь успешный отклик. Еслиб ты всё написал можно точно сказать, а так >>начало неплохое... T>\Это действительно так. Если описать имя сервиса ОБЕКС, и послать в порт что угодно хот $00 то в ответ получаетм именно такой отклик. Если интересно то могу скинуть исходные коды, убедитесь сами.
Не ну всякое бывает. Только это не правильно. Тут ничего случайного не должно быть.
T>>> if send( Sock, BUF_S, 26 , 0 ) = SOCKET_ERROR then T>>> ,,,,,,,
T>>> recv( Sock, BUF_R, 26, 0 ); K>>Это по-прежнему не правильнро. Стратегию я описывал раньше. С какого потолка ты получаешь 26 байт? T> BUF_s[ 0 ] := $80;
T> BUF_s[ 1 ] := $00; //length T> BUF_s[ 2 ] := $1A; //length
T> BUF_s[ 3 ] := $10; //VERSION T> BUF_s[ 4 ] := $00; //FLAG T> BUF_s[ 5 ] := $20; //PACKSIZE T> BUF_s[ 6 ] := $00; //PACKSIZE T> BUF_s[ 7 ] := $46; //HI T> BUF_s[ 8 ] := $00; //DATA LENGTH T> BUF_s[ 9 ] := $13; //DATA LENGTH
T> {uuid}
T> BUF_s[ 10 ] := $6B; BUF_s[ 11 ] := $01; BUF_s[ 12 ] := $CB; BUF_s[ 13 ] := $31; T> BUF_s[ 14 ] := $41; BUF_s[ 15 ] := $06; BUF_s[ 16 ] := $11; BUF_s[ 17 ] := $D4; T> BUF_s[ 18 ] := $9A; BUF_s[ 19 ] := $77; BUF_s[ 20 ] := $00; BUF_s[ 21 ] := $50; T> BUF_s[ 22 ] := $DA; BUF_s[ 23 ] := $3F; BUF_s[ 24 ] := $47; BUF_s[ 25 ] := $1F;
T> 25 плюс нулевой байт в итоге имеем 26 байт. Или все таки что то не так.
Я говорю про функцию recv( Sock, BUF_R, 26, 0 );
Откуда здесь 26???
K>>Вот у меня вопросы. K>>[list] K>>Что за устройство с которым ты работаешь? T> Мобильный телефон — Siemens s35
Сименсы самые нормальные в этом отношении телефоны (по-моему). У меня самого S65 (а есть и M45, M50, CF65). И все работают (в смысле OBEX).
K>>Есть ли у тебя программа вообще какая нибудь, которая с ним работает? То есть ты вообще видел сам чтобы с ним ктонибудь работал? T> Обмен между ним и ещё одним мобильником проиходит — обменивался картинками.
При обмене между мобильниками используется OBEX Push! А не OBEX folder-listing. OBEX Push сервер принимает объект и ложит в папку по-умолчанию. Он не выдает список файлов по запросу. Другой вопрос что если поддерживается сервис OBEX Push то и как правило OBEX folder-listing. Но это разные сервисы понимаешь?
K>>Если да, может ли твоё устройство работать по COM порту? Если да, то можно подглядеть что там работающая программа посылает в порт. Я например, довольно долго этим занимался, потому что все производители вставляюта T>свои особенности в протокол. T>если не секрет, не подскажите какими программами можно просматривать, что отправляется в порт.
Здравствуйте, Tsnok, Вы писали:
T>Здравствуйте, kiborg,:
T>Извиняюсь за настойчивость, но неподскажите как можно просмотреть списки какталогов в телефоне, записать файл на телефон, скопировать файл файл с телефона на ПК.
Соответственно программами. Но для разных моделей разные.
Например Sumsung вообще OBEX не поддерживает. Всё через AT комманды. Их ещё узнать надо. И даже родной софт у них к одним подходит, к другим нет.
Вот Сименсы самые нормальные. OBEX поддерживают с самых ранних моделей.
Даже самая старая программа (dataexchangesoftware) называетсяя (опять же повторюсь поиск рулит!) работает со всеми моделями.
Для Сименсов ещё могу SiMoCo посоветовать.
Тут по моему http://www.siemens-club.ru/soft.php
Ну соответственно другие модели другие программы.