2015-02-25 4 views
1

Мы пытаемся отправить большой файл с телефона android на микропроцессор через nfc-p2p, android-beam и snep.Android Beam и SNEP to pn532

Это то, что мы имеем до сих пор. Я могу подключить pn532 (цель) к телефону (инициатору). Мое приложение Android использует setNdefPushMessage для отправки NdefMessage через nfc. Как только я нажмите телефон (Beam-UI) он начинает соединяться с SAP 4 на моем pn532 и после readcommand (tgGetData) я получаю следующее:

00 FF 86 7A D5 87 00 13 20 00 10 02 00 00 03 BD C1 01 00 00 03 B6 54 30 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 31 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 32 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 33 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74 34 68 61 6C 6C 6F 20 64 61 73 20 69 73 74 20 65 69 6E 20 74 65 73 74

Чтобы очистить его: PN532 заголовок: 00 FF 86 7A D5 87 00 нет MI бит набор!
LLCP Заголовок: 13 20 00 I-пакет от SAP 32 до 4
Snep заголовка: 10 02 00 00 03 BD версии 10 запроса PUT LEN заголовок 0x3bd
ЦНКА: C1 01 00 00 03 B6 54 c1: старт + EndMessage
сообщения ... остальное

I сделал соединение в комплекте с MUI 128.

моя проблема: говорит, что пакеты SNEP длинны 0x3BD, но я получил эту короткую часть. Нигде в этом сообщении нет никаких указаний, является ли это разделенным сообщением.

где находится остальная часть моей данных? Я пытался читать больше пакетов с pn532, но их не было.

** Редактировать: После ночи я наконец-то добрался. То, что работало по крайней мере, иногда: (все с точки PN532 зрения)
приема: Подключение
посыла: Подключение полной [MUI = 128]
получить: SYMM
посыла: SYMM
получить: Я первый фрагментированные данные (как показано выше)
отправить: RR
получают: SYMM
отправить: Я Snep: ответ ПРОДОЛЖИТЬ
получают: RR
отправить: Я Snep: запрос CONTINUE
получают: Я второй фрагментированные данные
отправить: RR
получить: RR
посыла: Я Snep: запрос ПРОДОЛЖИТЬ
получить: Я третий данных Фрагмент

Как я сказал, что это работает только несколько раз. большую часть времени мой PN532 просто отвечает с ошибкой Код 0x29 -> Инициатор сбросил соединение. Итак, вопрос: может ли это быть проблемой времени или что еще заставляет соединение удаляться перед отправкой остальной части данных.

+0

Какова остальная часть общения с LLCP? Более конкретно, что MIU выполнил ваш микроконтроллер и устройство Android? Может ли это быть 128 байтов? –

+0

Да, 128 байт. Я также пробовал другие, но он почти всегда производит тот же результат: соединение становится отброшенным (PN532 дает код ошибки 0x29) –

ответ

1

SNEP разработан как простой протокол запроса/отклика, выполняемый поверх соединения передачи данных LLCP (пара исходных и целевых SAP, созданных с помощью CONNECT). Клиент запрашивает операцию, которую должен выполнить сервер, и сервер возвращает ответ. С помощью операции PUT клиент присоединяет данные к запросу. Если затем запрос превышает максимальный размер информационного блока Информационного PDU LLCP, клиент передает запрос в соответствующие фрагменты. Первый фрагмент информирует сервер о количестве октетов, которые он должен подготовить для получения от клиента.Если сервер может получать данные, он отвечает на первый фрагмент с ответом «Продолжить», если размер данных превышает возможности сервера, он может остановить обмен с ответом «Отклонить». После того, как клиент получил ответ «Продолжить», он отправит все оставшиеся фрагменты, не ожидая промежуточных ответов. Сервер, наконец, отправляет ответ «Успех» после получения всех данных запроса, как указано значением длины. Тот же принцип применяется к большим ответам SNEP, но только сообщения Continue или Reject являются запросами (поскольку они отправляются клиентом).

+0

, так что вы говорите, что мои запросы на продолжение неверны? когда я попытался просто отправить symm. вместо. но без запроса клиент (телефон) никогда не продолжал отправлять фрагменты. –

+0

Будучи серверной стороной, вы должны отправить один ответ «Продолжить» после получения первого фрагмента. Затем клиент отправит оставшиеся фрагменты, а после последнего отправит ответ «Успех». –