|
OPENAT GPRS, connect |
|
|
|
Jul 2 2009, 06:59
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Помогите разобраться с подключением к серверу через GPRS с помощию OPENAT приложения. Вобщем я с помощью АТ команд(WIP) настроил один модем для прослушивания определённого порта. Это будет сервер. Дальше попытался сделать элементарное приложение в OPENAT на основе WIP tcp_client. Просто поменял там адрес сервера на то что у меня и GPRS_APN, login, pass. Только чтоб он постучался к серверу. Залил приложение. Запускаю AT+WOPEN=1. Вываливаются строки: [GPRS]: initialized. [GSM]: initialized. [UART1]: initialized. [UART2]: initialized. []: initialized. И всё что дальше? На сервере ничего не происходит, он не определяет никакого коннекта к нему. Я пока только начинаю разбираться, наверно что-то простое упустил?
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 44)
|
Jul 2 2009, 08:43
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Это отработала функция wip_netInitOpts. Далее надо wip_bearerOpen();wip_bearerSetOpts() по вкусу;wip_bearerStart(). Только не забудь проверить готовность сим карты.
upd : невнимательно прочитал нельзя менять GPRS_APN, логин и пароль иначе ты не выйдешь в инет через жпрс и не сможешь приконнектится
Сообщение отредактировал bronepoezd - Jul 2 2009, 08:53
|
|
|
|
|
Jul 2 2009, 09:09
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Это нужно в OPENAT прописывать? Или как из терминала уже запускать при этом приложении? Мне бы хотелось чтоб при включении питания модем автоматически стучался в порт на сервере.
Как не менять APN пароль и логин там же по умолчанию: #define GPRS_APN "websfr" #define GPRS_USER "a2b" #define GPRS_PASSWORD "access" #define GPRS_PINCODE "0000"
А мне надо "internet.mts.ru", "mts", "mts". Или и с этим каракулями запустится?
|
|
|
|
|
Jul 2 2009, 09:18
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
да, надо именно #define GPRS_APN "internet.mts.ru" и т.д. А как ты обращаешься к "серверу"? IP на каждой сессии меняется) Если ты хочешь сразу после включения стучаться-поймай сначала событие об полной инициализации сим карты
Сообщение отредактировал bronepoezd - Jul 2 2009, 09:19
|
|
|
|
|
Jul 2 2009, 09:25
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Ну сервер я не трогаю пока, запустил там "AT+WIPBR=4,6,0" и "AT+WIPCREATE=3,1,2000,5,8" и всё, узнал IP "AT+WIPBR=3,6,15" и ждет слушает. А в OPENAT сделал приложение на основе WIP client изменил там IP адрес на полученный от сервера и порт поставил, APN поменял. Запустил наивно думал что приконектится, а нет. Для чего же это приложение пример, что оно делает кроме вывода этих строк?
Сообщение отредактировал ArtemTom - Jul 2 2009, 09:26
|
|
|
|
|
Jul 2 2009, 09:29
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Да блин, я не понял, ты что , вместо internet.mts.ru адрес сервера в GPRS_APN поставил?=) Сокету присвается ненулевое значение?
|
|
|
|
|
Jul 2 2009, 09:32
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Нет конечно, там при создании на основе примера создается 7 файлов в cfg_gprs.c я исправил #define GPRS_APN "websfr" #define GPRS_USER "a2b" #define GPRS_PASSWORD "access" #define GPRS_PINCODE "0000"
А в entry_point.c #define PEER_STRADDR "192.168.1.5" #define PEER_PORT 2000 #define RCV_BUFFER_SIZE 10240 На нужные мне.
|
|
|
|
|
Jul 2 2009, 09:42
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Ну тут уже судить тяжело попробуй получить для начала данные с какого -нить ya.ru . Поставь трейсы в процедурах чтоб понять где отваливается). Лучше всего на мой взгяд написать свое приложение на основе примеров, как хоть понять можно как и что рабоает).
|
|
|
|
|
Jul 2 2009, 09:55
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
А если тариф такой что у модемов только локальная сеть и они инет не видят? Ну что никто не делал на основе этого примера WIP tcp_client. Он должен только эти строки чтоль выводить или конектится сразу? Может после них нужно набрать что? Лучше всего на мой взгяд написать свое приложение на основе примеров. Да, но для этого надо наверно понять что в примерах, я пока начинаю разбираться и фразы Только не забудь проверить готовность сим карты поймай сначала событие об полной инициализации сим карты Мне не совсем понятно как реализовывать. Может кто делал что подобное дайте мне примеры, чтоб быстрей пошло.
|
|
|
|
|
Jul 2 2009, 10:03
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
>Мне не совсем понятно как реализовывать.
adl_tmrHandler_t Check_SIM() { adl_simState_e SIM_event; SIM_event = adl_simGetState (); TRACE((1,"SIM state: %d",SIM_event)); switch (SIM_event) { case ADL_SIM_STATE_INIT: TRACE((1,"Service init state (PIN state not known yet)")); break; case ADL_SIM_STATE_REMOVED: TRACE((1,"SIM removed")); break; case ADL_SIM_STATE_INSERTED: TRACE((1,"SIM inserted (PIN state not known yet)")); break; case ADL_SIM_STATE_FULL_INIT: TRACE((1,"SIM Full Init done")); //sim готова к работе break; case ADL_SIM_STATE_PIN_ERROR: TRACE((1,"SIM error state")); break; case ADL_SIM_STATE_PIN_OK: TRACE((1,"PIN code OK, waiting for full init")); break; case ADL_SIM_STATE_PIN_WAIT: TRACE((1,"SIM inserted, PIN code not entered yet")); break; case ADL_SIM_STATE_PUK_WAIT: TRACE((1,"PIN is locked, PUK code is required")); break; case ADL_SIM_STATE_PUK_ERROR: TRACE((1,"Wrong PUK input")); break; case ADL_SIM_STATE_FAILURE: TRACE((1,"PUK is locked, SIM is unavailable")); break; }; }
void adl_main ( adl_InitType_e InitType ) { My_tmr = (adl_tmr_t *)adl_tmrSubscribe ( TRUE, 10, ADL_TMR_TYPE_100MS, (adl_tmrHandler_t)Check_SIM ); }
|
|
|
|
|
Jul 2 2009, 10:29
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
bronepoezd Спасибо будем пробовать. А может есть исходничком уже что-то работающее? А то куда вставлять и сработало или нет непонятно.
И ещё вопрос чем отличаются файлы при компиляции? gcc_Client.dwl gcc_Client.wpb.dwl У меня в некоторых случаях заливается только один в некоторых другой.
Сообщение отредактировал ArtemTom - Jul 2 2009, 10:15
|
|
|
|
|
Jul 2 2009, 10:36
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Сжатый /несжатый я лью обычно несжатый) Мой исходник на 1500 строк точно будет еще менее понятен) http://www.compeljournal.ru/enews/2007/19/9 почитай вот это и встраивай в adl' евский пример hello world=) я так разбирался)
|
|
|
|
|
Jul 2 2009, 10:45
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Спасибо будем разбиратся. А не бывало что при заливке сразу еррор и пишется передача прервана удаленной системой? У тебя весь код одним файлом? И при какой скорости заливаешь?
Да и самое главное забыл, можно как тестить без заливки в модем? Что каждые 5 мин не перезаливать. Target monitoring tool вроде для этого?
Сообщение отредактировал ArtemTom - Jul 2 2009, 10:51
|
|
|
|
|
Jul 2 2009, 11:12
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
1) Да бывает=) 2) все одним файлом 3) я так и не смог настроить эмулятор) так что забил и тестю на модеме) тока надо поаккуратнее)я долго его реанимировал после fault 004=)
|
|
|
|
|
Jul 2 2009, 12:06
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
bronepoezdТут есть вроде как работающие приложение, там и проверка как у тебя sim карты идет, и по коду вроде всё должно работать, а когда заливаю в модем он мне выдает все те же 5 строк и всё. Как там дальше что запускать, по коду он мне должен строки выдавать по процессом ну или хотябы ошибки какие, а тут эти 5 строк и всё. Посмотри, может скажешь что. Вобщем эти строки после WOPEN=1 выскакивают и что дальше? Автоматом все должно быть или мне что делать?
Прикрепленные файлы
src.rar ( 19.34 килобайт )
Кол-во скачиваний: 34
|
|
|
|
|
Jul 2 2009, 12:24
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Мое на основе этого сделано) должно все нормально работать) Еще раз ) пихай везде где можно TRACE((1,"my_text")); чтобы понять где отваливается. Пин код на симке надеюсь отключен?
|
|
|
|
|
Jul 2 2009, 12:38
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Да пин код отключен. Щас попихаю тогда. Там даже перед этой функцией - wip_netInitOpts, которая и выводит: Код [GPRS]: initialized. [GSM]: initialized. [UART1]: initialized. [UART2]: initialized. []: initialized. Стоит TRACE (( 1, "Start" )); Значит как минимум должно быть: Код Start [GPRS]: initialized. [GSM]: initialized. [UART1]: initialized. [UART2]: initialized. []: initialized. А у меня просто эти строки. У тебя они появляются вобще при запуске?
|
|
|
|
|
Jul 2 2009, 12:48
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
В чем ты их смотришь? если m2m там есть настройки в трейсах. поставь галочки на всех каналах
|
|
|
|
|
Jul 2 2009, 12:51
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Ни в чём, компилю в Eclipse и в модем заливаю, а в Гипертерминале это и выдает.
|
|
|
|
|
Jul 2 2009, 12:52
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
если надо в гипер терминале - adl_atSendResponse(ADL_AT_RSP,"my_text"); вообще для отладки юзай m2m studio
|
|
|
|
|
Jul 2 2009, 12:54
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Ок щас и m2m поставлю буду пробовать.
|
|
|
|
|
Jul 3 2009, 04:57
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
В TRACE((2,"SIM state: %d",SIM_event)); есть %d, SIM_event. А как мне в adl_atSendResponse(ADL_AT_RSP,"SIM state:"); это вставить, в мануалах для этой функции нет %d, как мне сделать аналог TRACE? Эта функция только строку может выводить или как в TRACE можно сделать.
|
|
|
|
|
Jul 3 2009, 05:41
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Ну например так char* temp=adl_memGet(10); int k=0; adl_atSendResponse(ADL_AT_RSP,wm_itoa(k, temp));
Сообщение отредактировал bronepoezd - Jul 3 2009, 05:42
|
|
|
|
|
Jul 3 2009, 05:53
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Ну а для примера выше это как будет выглядеть?
|
|
|
|
|
Jul 3 2009, 05:58
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Блин чувак, почитай мануалы там все есть .Заюзай функцию wm_strcat()
|
|
|
|
|
Jul 3 2009, 06:09
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Ладно, это и не особо обязательно. Вобщем у меня эта функция не проходит: Код static bool poll_creg_call(adl_atResponse_t *Rsp) { ascii *rsp; ascii regStateString[3]; s32 regStateInt; TRACE (( 1, "(poll_creg_call) Enter." )); rsp = (ascii *)adl_memGet(Rsp->StrLength); wm_strRemoveCRLF(rsp, Rsp->StrData, Rsp->StrLength); wm_strGetParameterString(regStateString, Rsp->StrData, 2); regStateInt = wm_atoi(regStateString); if ( 1 == regStateInt || 5 ==regStateInt) { TRACE (( 1, "(poll_creg_callback) Registered on GPRS network." )); step=4; } else { TRACE (( 1, "not ready %d",regStateInt)); /* Not ready yet, we'll check again later. Set a one-off timer. */ My_tmr_2=adl_tmrSubscribe( FALSE, CREG_POLLING_PERIOD, ADL_TMR_TYPE_100MS, poll_creg); } return FALSE; } Выдает: (poll_creg_call) Enter. not ready %d (poll_creg_call) Enter. not ready %d И так по кругу. В чём может быть проблема?
|
|
|
|
|
Jul 3 2009, 06:18
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
что выдает команда "AT+CREG?" ?
|
|
|
|
|
Jul 3 2009, 06:21
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Не понятно лог такой: AT+CREG? (poll_creg_call) Enter. not ready %d Если в ручную то: AT+CGREG? +CGREG: 0,1
|
|
|
|
|
Jul 3 2009, 06:37
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
После regStateInt = wm_atoi(regStateString); добавь TRACE((1,"regStateInt %d",regStateInt));
Что выдает?
|
|
|
|
|
Jul 3 2009, 07:04
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Выдаст regStateInt %d  . Я пока не разобрался как выводить переменную в терминал, а m2m у меня не ставится что-то. bronepoezdПросматриваю мануалы, там у adl_atSendResponse только вывод строки везде, то что ты описал совсем найти не могу. Может как ещё взможно вывести в терминал значение переменной?
|
|
|
|
|
Jul 3 2009, 07:32
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
itoa- стандартаная функция перевода инта в строку wm_itoa- она и есть. Описание есть в Basic_Development_Guide.pdf. adl_atSendResponse выводит строку. Ну так и переведи все что надо вывести в строку, какие пробелмы?
|
|
|
|
|
Jul 3 2009, 07:48
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Проблемы в том что всё её описание это её упоминание с принемаемыми параметрами, ни примеров как использовать ничего нет. Для меня непонятно как перевести это Код char* temp=adl_memGet(10); int k=0; adl_atSendResponse(ADL_AT_RSP,wm_itoa(k, temp)); в это TRACE((1,"regStateInt %d",regStateInt)); В часности вот это непонятно Код char* temp=adl_memGet(10); int k=0; как относится к regStateInt?
Сообщение отредактировал ArtemTom - Jul 3 2009, 07:49
|
|
|
|
|
Jul 3 2009, 07:51
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Еще раз) почитай как устроена itoa) где искать я тебе сказал) мануал идет вместе с SDK. k для примера- на экране у тебя выведется значение k то есть 0
Сообщение отредактировал bronepoezd - Jul 3 2009, 07:52
|
|
|
|
|
Jul 3 2009, 08:24
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Может тебе поможет понять что я в С не особо, и указатели всякие уже подзабыл. И читать одну строку устройства функции не долго. Я нашёл что ты говорил там же 1 строка про неё. И мне ещё не понятно почему если тут всего 2-3 строки надо написать, тебе это тудно?
Так чтоль просто? Будет работать? adl_atSendResponse(ADL_AT_RSP, wm_itoa(regStateInt,temp));
Работает выдает 0 вобщем, понятно всё. А как теперь это исправить? Почему 0 то?
Да, насколько я понимаю он проверяет сдесь "AT+CGREG?"? Так почему он будет не 0, если регистрация в GPRS вроде как должна идти только следующим щагом по коду? "AT+CGREG?" как раз и проверяет статус регистрации в снти GPRS.
|
|
|
|
|
Jul 3 2009, 09:00
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
По идее должно выдавать 1,так как когда ты вводил вручную- выдавалось 0,1 и должно было вывести 2й параметр. Кароч) по идее процедура в данном случае нафиг не нужно, имхо=) так как в сети ты регистрируешься . попробуй обойти ее) Забей на if и сразу пиши step=4. Это как я понимаю идет просто проверка есть сеть или нет. опять же это есть в описании к ат командам. <stat>(второе значение) 0 :не зарегистрировано, мобильное оборудование не проводит поиск нового оператора 1 :зарегистрировано, домашний оператор 2 :не зарегистрировано, мобильное оборудование проводит поиск нового оператора для регистрации 3 :регистрация отклонена 4 :неизвестно 5 :зарегистрировано, роуминг
Проблема в том что все хотят чтобы им все написали а мануалы никто читать не хочет)я просто сам столкнулся с этим когда разбирался пару месяуев назад) Посто надо повнимательнее почитать манулы и все) я тож не особо силен в сях , однако разобраться с этим вполне возможно)
Сообщение отредактировал bronepoezd - Jul 3 2009, 09:03
|
|
|
|
|
Jul 3 2009, 09:07
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
bronepoezd Да я так и сделал просто вместо 1 поставил 0 при проверке. И всё дальше прошло. Теперь разбираюсь с остальным.
|
|
|
|
|
Jul 6 2009, 04:56
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
bronepoezd Можешь подкинуть интересные функции из своей программы, проверки всякие может что ещё есть?
|
|
|
|
|
Jul 6 2009, 05:38
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Ну думаю это будет полезно=) нашел на вейвкомовском форуме правда иногда работает странно) //-------------------------------------------------------------------------------------------------------- s32 GetTime(void) { adl_rtcTime_t time; s32 milliseconds; adl_rtcGetTime(&time); milliseconds = (s32)1000*time.SecondFracPart/32768; milliseconds += (s32)1000*time.Second; milliseconds += (s32)(60*1000)*time.Minute; milliseconds += (s32)(60*60*1000)*time.Hour; milliseconds += (s32)(24*60*60*1000)*time.Day; return milliseconds; } //----------------------------------------------------------------------------------------------------- void OATSleep (u16 msec) { s32 initial_time; u16 diff = 0; initial_time = GetTime(); while (diff<msec) { diff = GetTime() - initial_time; } }
|
|
|
|
|
Jul 6 2009, 05:58
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Как-то не работает у меня, может не туда вписал. Она для чего вообще?
Сообщение отредактировал ArtemTom - Jul 6 2009, 06:03
|
|
|
|
|
Jul 6 2009, 06:34
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 7-04-09
Из: Москва
Пользователь №: 47 296

|
Задержка без передачи управления: OATSleep (20); -задержка 20 мс.
|
|
|
|
|
Jul 6 2009, 07:29
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
А на каком этапе её вызывать? И что может быть полезного, какие возможны лаги без неё? Я тут накопал: Цитата После включения питания загруженное в модем приложение обеспечивает автоматическое подключение к сети GSM/GPRS и установление между двумя модемами прозрачного канала обмена данными (TCP/IP-сокета). В процессе работы контролируются нештатные ситуации (сбои SIM-карты, уровень GSM-сигнала, регистрация в сети GSM/GPRS, сбои в сети оператора связи, передача данных через TCP/IP-сокет, активность на порту данных и т.п.) и обеспечивается максимально быстрое восстановление соединения, в том числе, за счет перезагрузки или перехода на резервный канал. Для настройки режимов работы модема введено расширение AT-команд. Для исключения ситуации ”зависания” модема все этапы установления соединения и передачи данных охвачены контролем времени завершения (более 30 контролируемых тайм- аутов). В том числе, реализованы тайм-аут на отсутствия приема-передачи данных по интерфейсу и тайм-аут на попытку возврата с резервного канала на основной. Вот  . Типа так. Вот такие проверки. Что как тихо, я не порошу всё это). Так просто, какое мнение по поводу этого?
|
|
|
|
|
Jul 6 2009, 07:40
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
sobr Это не надо, там только первый файл работает appli.c, насколько я понимаю. Остальные есть т.к. приложение создано на основе примера из стандартных.
|
|
|
|
|
Jul 14 2009, 08:23
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Вобщем я застопорился на UART. Ситуация такая: Файл adl_fcm.h Цитата // Old constants for compatibility #define ADL_FCM_FLOW_GSM_DATA ADL_PORT_GSM_BASE #define ADL_FCM_FLOW_GPRS ADL_PORT_GPRS_BASE #define ADL_FCM_FLOW_V24_UART1 ADL_PORT_UART1 #define ADL_FCM_FLOW_V24_UART2 ADL_PORT_UART2 #define ADL_FCM_FLOW_V24_USB ADL_PORT_USB
// Flow subscribed as slave only #define ADL_FCM_FLOW_SLAVE 0x8000
// Constants for compatibility #define ADL_FCM_FLOW_V24_MASTER ADL_FCM_FLOW_V24_UART1 #define ADL_FCM_FLOW_V24 ( ADL_FCM_FLOW_V24_UART1 | ADL_FCM_FLOW_SLAVE ) При таком определении UART1_handle=adl_fcmSubscribe ( ADL_FCM_FLOW_V24_MASTER,(adl_fcmCtrlHdlr_f) UART1_ctrl(adl_fcmDataHdlr_f)UART1_data ); У меня зависает, лог такой: Код * My program step 1 * - Wait for step 1 SIM state: 3 - SIM Full Init done * My program step 15 * OPEN UART2 Handle UART2 return value: 0 UART1_ctrl: 0 ----- завис всё Дальше идет перезагрузка и приложение выполняется сначала опять до этого этапа. Т.е. как я понимаю у меня не открывается UART1. Если же поставить UART2, т.е. UART1_handle=adl_fcmSubscribe (ADL_FCM_FLOW_V24_UART2,(adl_fcmCtrlHdlr_f) UART1_ctrl, (adl_fcmDataHdlr_f)UART1_data ); То приложение проходит нормально: Код * My program step 1 * - Wait for step 1 SIM state: 3 - SIM Full Init done * My program step 15 * OPEN UART2 Handle UART2 return value: 0 UART1_ctrl: 0 - ADL_FCM_EVENT_FLOW_OPENNED UART1_ctrl: 2 - ADL_FCM_EVENT_V24_DATA_MODE * My program step 2 * AT+CREG? CGREG - 0 ... Но дальше при отправке через UART2 у меня ничего не выводится в терминал. Если запустить такой код Код wip_debug("\n OPA"); adl_fcmSendData (UART1_handle,"Data",4); То в терминале появится Код OPA UART1_ctrl: 7 - ADL_FCM_EVENT_MEM_RELEASE Data не выводится. При выполнении в функции Цитата void UART1_write(void) { s8 res; wip_debug("\nWrite to UART2"); res=adl_fcmSendData (UART1_handle,"\r\nInstalling application...\r\n", 29); wip_debug("\nwrite to UART2: %i",res); switch (res) { case OK: {wip_debug(" - OK");}; break; case ADL_FCM_EVENT_MEM_RELEASE: {wip_debug(" - ADL_FCM_EVENT_MEM_RELEASE");}; break; case ADL_FCM_RET_OK_WAIT_RESUME: {wip_debug(" - ADL_FCM_RET_OK_WAIT_RESUME");}; break; case ADL_RET_ERR_PARAM: {wip_debug(" - ADL_RET_ERR_PARAM");}; break; case ADL_RET_ERR_UNKNOWN_HDL: {wip_debug(" - ADL_RET_ERR_UNKNOWN_HDL");}; break; case ADL_RET_ERR_BAD_STATE: {wip_debug(" - ADL_RET_ERR_BAD_STATE");}; break; case ADL_FCM_RET_ERR_WAIT_RESUME: {wip_debug(" - ADL_FCM_RET_ERR_WAIT_RESUME");};break; }; }; Лог такой: Код Write to UART2 write to UART2: 0 - OK UART1_ctrl: 7 - ADL_FCM_EVENT_MEM_RELEASE Т.е. пишет что вроде всё нормально, но информация же должна показыватся в терминале? Кто может чем помочь. Почему зависает первый UART и работает второй? Почему не выводится данные в терминал а вместо этого UART1_ctrl: 7 - ADL_FCM_EVENT_MEM_RELEASE? Может с этим надо что делать AT+WMFM=...? И если я что ввожу из терминала то должна по идеи выполнятся функция UART1_data? Она не выполняется совсем.
|
|
|
|
|
Jul 14 2009, 09:32
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523

|
Вопрос пока снимается. Там оказывается не виснет).
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|