реклама на сайте
подробности

 
 
> OpenAT
kban
сообщение Feb 20 2008, 07:37
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



Привет всем. Всем кто работал с данным зверем - просьба отписаться. Интересует следующее - как создавать НОВЫЕ проекты? С помощью Open AT Project Wizard - выбираем New Project и т.д.? Но тут начинаются проблемы - я создаю проект, Associated IDE выбираю c++. Потом в с++ проекте добавляю созданные мной файлы (уже откомпиленные в с++ т.е. ошибок нет). После чего сохраняю проект и делаю wmmake. Тут начинается что-то непонятное. То он ругается на .h - файлы, путь к которым в коде указывается явно, тем более с++ на них не ругается и видит их. То просто пишет no rule to make target "appli.c". Кстати, после того как он поругается на .h файлы при послед. попытке создать проект выдаёт эту же ошибку что нет правила.
Пытался просто создать проект типа hello-world и заменить там с++ файлы на свои - рез-т тот же.
Аналогично для примера pingGPRS.
Помогите разобраться плиз.
Go to the top of the page
 
+Quote Post
4 страниц V  < 1 2 3 4 >  
Start new topic
Ответов (15 - 29)
kban
сообщение Apr 8 2008, 05:35
Сообщение #16


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



Цитата(de__ @ Apr 4 2008, 17:32) *
Как я понимаю здесь 2 пути: либо имея статичные IP адреса осуществить передачу через GPRS. Либо дозвоном на номер телефона в DATA режиме. Чтобы передавать данные с COM-порта - просто переключить его в DATA режим.

Насчёт режимов передачи данных - это понятно. Непонятно только то, как происходит обмен? Всмысле - как от одного модема другому передать информацию - ясно, а как в 1 модеме настроить передачу СОМ->Модем->GPRS или voice call вот это не понятно... Для работы с СОМ портом внутри модема нужно ли использовать FCM, как записать принятое в буфер и т.д.?
Go to the top of the page
 
+Quote Post
de__
сообщение Apr 8 2008, 09:04
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 19-03-08
Пользователь №: 36 045



Хм. На вопрос "а мне все здесь непонятно, расскажите мне всё, как это работает" не хочется и отвечать. Так и хочется сказать RTFM!

"Для работы с СОМ портом внутри модема нужно ли использовать FCM, как записать принятое в буфер и т.д.?"
Смысл в том что нужно объявить подписку на нужный порт. (FCM) И при подписке в одном из параметров - указатель на вашу функцию обработчик. По событиям - обрабатываем...
Грабли - передающий буфер ограничен. (смотреть документацию для каждого случая) Если нужно послать больше - рвать на куски
Go to the top of the page
 
+Quote Post
kban
сообщение Apr 11 2008, 07:38
Сообщение #18


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



Прошу прощения, мож я чё не так написал...
Вопрос сформулмрую точнее... Если передавать данные по GSM, то делаем функцию Call_Handler(u16 Event, u32 Call_ID) где по событию Event делаем обработку... например ADL_CALL_EVENT_RING_DATA где отвечаем на звонок adl_callAnswer(), а затем по событию ADL_CALL_EVENT_ANSWER_OK подписываем
V24Handle = adl_fcmSubscribe ( USED_FLOW, V24CtrlHandler, V24DataHandler );
Интересует аналог для COM порта. Вместо adl_fcmSubscribe уже использовать adl_portSubscribe?

вопрос снимается... и правда протупил.. ещё оаз прошу прощения=)
Go to the top of the page
 
+Quote Post
kban
сообщение Apr 15 2008, 04:48
Сообщение #19


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



В интернете нашёл хорошую ссылочку - http://www.compeljournal.ru/enews/2007/19/9
Полезная, на мой взгляд)
Go to the top of the page
 
+Quote Post
kban
сообщение Apr 25 2008, 04:27
Сообщение #20


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



И снова здравствуйте. Сделал приложение, которое по подаче команды at+start начинает считывать данные, введённые с клавиатуры в буфер, пока не будет послан символ "a". Но есть один касяк - программа работает только 1 раз - после повторного введения команды at+start в функцию - обработчик этой команды программа приходит, но ничего не делает. В функции, обрабатывающей это событие стоит
V24Handle=adl_fcmSubscribe (ADL_PORT_UART1, (adl_fcmCtrlHdlr_f)V24CtrlHandler, (adl_fcmDataHdlr_f)V24DataHandler);
где в V24CtrlHandler я меняю командный режим на режим передачи данных, а затем в V24DataHandler после обработки данных меняю его обратно на командный режим... По-моему касяк в том, что в V24CtrlHandler программа попадает только 1 раз.... Может я не понял суть этой функции? Программа должна заходить в неё по событиям?
Код функции
bool V24CtrlHandler ( u8 Event )
{
bool bReturn = TRUE;
s32 sReturn;
TRACE (( 1, "V24 event %d", Event ));
adl_atSendResponse (ADL_AT_RSP, "\r\n Prishli v V24Ctrl handler!\r\n");

// Switch on event
switch ( Event )
{
case ADL_FCM_EVENT_FLOW_OPENNED :
sReturn = adl_fcmSwitchV24State ( V24Handle, ADL_FCM_V24_STATE_DATA );
TRACE (( 1, "Switch to data : %d", sReturn ));
bFCMIsReady = TRUE;
break;

case ADL_FCM_EVENT_RESUME :
bFCMIsReady = TRUE ;
TRACE (( 1, "Resume Data Flow"));
break;

case ADL_FCM_EVENT_MEM_RELEASE :
bFCMIsReady = TRUE ;
TRACE (( 1, "Data are sent"));
break;
}

return bReturn;
}


И ещё - может дело в adl_fcmSubscribe (ADL_PORT_UART1, (adl_fcmCtrlHdlr_f)V24CtrlHandler, (adl_fcmDataHdlr_f)V24DataHandler) и adl_fcmUnsubscribe(V24Handle); ? Куда правильно нужно ставить adl_fcmUnsubscribe(V24Handle);? Если сразу же после adl_fcmSubscribe - то просто зависает в режиме передачи данных...
Go to the top of the page
 
+Quote Post
kban
сообщение Apr 25 2008, 06:04
Сообщение #21


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



И ещё - в V24CtrlHandler на событие ADL_FCM_EVENT_FLOW_CLOSED ( как я понял из мануалов оно происходит во время adl_fcmUnsubscribe) вообще не реагирует...
Go to the top of the page
 
+Quote Post
sobr
сообщение Apr 25 2008, 06:41
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



По этому кусочку кода понять что то сложно, покажи весь сишный файл, если не комерческая тайна.
Go to the top of the page
 
+Quote Post
kban
сообщение Apr 25 2008, 07:20
Сообщение #23


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



#include "adl_global.h"

/***************************************************************************/
/* Mandatory variables */
/*-------------------------------------------------------------------------*/
/* wm_apmCustomStack */
/* wm_apmCustomStackSize */
/*-------------------------------------------------------------------------*/
/***************************************************************************/
const u16 wm_apmCustomStackSize = 1024;


/***************************************************************************/
/* Local variables */
/***************************************************************************/

/* String To Send List */
wm_lst_t StringList;

/* Flag for FCM State */
bool bFCMIsReady = TRUE;
bool flag = FALSE;

/* AT command buffer */
ascii ATCommand[ 512 ];
/* Used flow */
#define USED_FLOW ADL_PORT_UART1

static s8 V24Handle,UARTHandle;



/***************************************************************************/
/* Function : V24CtrlHandler */
/*-------------------------------------------------------------------------*/
/* Objet : FCM Control Events Handler */
/* */
/* Return : return value is not relevant */
/* */
/*-------------------------------------------------------------------------*/
/* Variable Name |IN |OUT|GLB| Utilisation */
/*--------------------+---+---+---+----------------------------------------*/
/* Event | | | | Event from GPRS Service */
/*--------------------+---+---+---+----------------------------------------*/
/***************************************************************************/
bool V24CtrlHandler ( u8 Event )
{
bool bReturn = TRUE;
s32 sReturn;
flag = FALSE;
TRACE (( 1, "V24 event %d", Event ));
adl_atSendResponse (ADL_AT_RSP, "\r\n Prishli v V24Ctrl handler\r\n");
// sReturn = adl_fcmSwitchV24State ( V24Handle, ADL_FCM_V24_STATE_DATA );
// Switch on event
switch ( Event )
{
case ADL_FCM_EVENT_FLOW_OPENNED :
adl_atSendResponse (ADL_AT_RSP, "\r\n Open \r\n");
sReturn = adl_fcmSwitchV24State ( V24Handle, ADL_FCM_V24_STATE_DATA );
adl_atSendResponse (ADL_AT_RSP, "\r\n Switch to data\r\n");
TRACE (( 1, "Switch to data : %d", sReturn ));
bFCMIsReady = TRUE;
break;

case ADL_FCM_EVENT_RESUME :
adl_atSendResponse (ADL_AT_RSP, "\r\n Resume \r\n");
sReturn = adl_fcmSwitchV24State ( V24Handle, ADL_FCM_V24_STATE_DATA );
adl_atSendResponse (ADL_AT_RSP, "\r\n Switch to data\r\n");
bFCMIsReady = TRUE ;
TRACE (( 1, "Resume Data Flow"));

break;

case ADL_FCM_EVENT_MEM_RELEASE :
bFCMIsReady = TRUE ;
TRACE (( 1, "Data are sent"));
break;
case ADL_FCM_EVENT_FLOW_CLOSED :

adl_atSendResponse (ADL_AT_RSP, "\r\n Flow closed\r\n");
sReturn = adl_fcmSwitchV24State ( V24Handle, ADL_FCM_V24_STATE_AT );\
bFCMIsReady = TRUE ;
TRACE (( 1, "Data are sent"));
break;
}

return bReturn;
}



void MyTimeout (u8 id)

{

adl_atSendResponse (ADL_AT_RSP, "\r\n Timer works!\r\n");
}

bool V24DataHandler ( u16 Length, u8 * Data )
{
adl_atSendResponse (ADL_AT_RSP, "\r\n Prishli v V24DATA handler!\r\n");
/* Scan received string */
u16 i,j,ATLastLength = wm_strlen ( ATCommand );

ascii * RecString = adl_memGet ( ( u16 ) ( Length ) );

TRACE (( 1, "V24DataHandler begin"));
wm_memcpy ( ( ascii * ) RecString, ( ascii * ) Data, Length );
adl_atSendResponse (ADL_AT_RSP, "\r\n Receive complete!\r\n");

for ( i = 0 ; i < Length ; i++ )
{
/* If string is empty, search for 'a' */
if ( ( wm_strlen ( ATCommand ) == 0 )
&& ( ( RecString [ i ] == 'a' )
|| ( RecString [ i ] == 'A' ) ) )
{
adl_fcmSwitchV24State ( V24Handle, ADL_FCM_V24_STATE_AT );
flag = TRUE;
// adl_fcmUnsubscribe(V24Handle);
// return TRUE;
// continue;
}


}
adl_fcmSendData (V24Handle, RecString, wm_strlen (RecString));
ATLastLength = 0;

adl_memRelease ( RecString );
// release credit
return TRUE;

}



void AtStartHandler (adl_atCmdPreParser_t *p)

{
adl_atSendResponse (ADL_AT_RSP, "\r\nHello, world!\r\n");
V24Handle=adl_fcmSubscribe (ADL_PORT_UART1, (adl_fcmCtrlHdlr_f)V24CtrlHandler, (adl_fcmDataHdlr_f)V24DataHandler);
if(flag==TRUE)
{
adl_atSendResponse (ADL_AT_RSP, "\r\n flag==TRUE\r\n");
adl_fcmUnsubscribe(V24Handle);
}
};

void AtSwitchHandler (adl_atCmdPreParser_t *p)

{
adl_atSendResponse (ADL_AT_RSP, "\r\nSwitch\r\n");
adl_fcmSwitchV24State ( V24Handle, ADL_FCM_V24_STATE_DATA );

};

void adl_main ( adl_InitType_e InitType )
{
adl_atSendResponse (ADL_AT_RSP, "\r\n Hi user, let's start our transfere!\r\n");
ascii * RecString1 = adl_memGet ( ( u16 ) ( 256) );
/* Initialize String To Send list */
StringList = wm_lstCreate ( WM_LIST_NONE, NULL );



/* Init AT command string */
ATCommand[ 0 ] = 0;
/* Subscribe to call events */

adl_atCmdSubscribe ("at+start", (adl_atCmdHandler_t)AtStartHandler, ADL_CMD_TYPE_ACT);
adl_atCmdSubscribe ("at+switch", (adl_atCmdHandler_t)AtSwitchHandler, ADL_CMD_TYPE_ACT);


}
Вот весь файл...
Go to the top of the page
 
+Quote Post
sobr
сообщение Apr 25 2008, 09:18
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Попробуйте так...
Код
void AtStartHandler (adl_atCmdPreParser_t *p)

{
       adl_atSendResponse (ADL_AT_RSP, "\r\nHello, world!\r\n");
      
       if(flag==TRUE)
       {
             adl_atSendResponse (ADL_AT_RSP, "\r\n flag==TRUE\r\n");
             adl_fcmUnsubscribe(V24Handle);
             flag=FALSE;
       }
       else
       {
            V24Handle=adl_fcmSubscribe (ADL_PORT_UART1, (adl_fcmCtrlHdlr_f)V24CtrlHandler,    
       (adl_fcmDataHdlr_f)V24DataHandler);
       }
};
Go to the top of the page
 
+Quote Post
de__
сообщение Apr 25 2008, 10:07
Сообщение #25


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 19-03-08
Пользователь №: 36 045



Не понятно зачем вы переходите в ДАТА режим для отправки данных?

разве не достаточно просто послать
adl_atSendResponse(ADL_PORT_UART1,bufUart1);
или для текущего порта
adl_atSendResponse(ADL_AT_RSP,bufUart1);
или для вашего случая adl_atSendResponsePort(ADL_AT_RSP, p->Port, x)

Я как то написал универсальную функцию и забыл... Возможно кривовато
#define MAX_LEN_BUF_UART1 512 //максимальная длина посылки за один раз
unsigned char bufUart1[MAX_LEN_BUF_UART1+1]; //Буфер глобальный. Возможно так быстрее
unsigned int SendUart1(unsigned char *str)
{
unsigned char *pBuf;
unsigned int len, bufLen;

bufLen = len = (unsigned int)strlen(str);

if(!len) //Нулевую длину не обрабатываем
return 0;

if(len<=MAX_LEN_BUF_UART1)
{//Для буфера меньше допустимо возможного просто отправляем данные и выходим
adl_atSendResponse(ADL_PORT_UART1,str);
}
else
{ //Массив большой - пошлём кусками
pBuf = str;
do{
memset(bufUart1, 0, MAX_LEN_BUF_UART1+1);
strncpy(bufUart1, pBuf, MAX_LEN_BUF_UART1); //копируем кусок для отправки

adl_atSendResponse(ADL_PORT_UART1,bufUart1);

len = (unsigned int)strlen(pBuf);

if(len<=MAX_LEN_BUF_UART1)
break;
else
pBuf+=MAX_LEN_BUF_UART1;
}while(1);
}
return bufLen; //Возвращаем количество посланных байт
}
Go to the top of the page
 
+Quote Post
kban
сообщение Apr 28 2008, 05:36
Сообщение #26


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



Спасибо большое за ответы! Буду работать дальше!

Ещё вопрос - как вывести буфер на экран?
Какие параметры должны быть у wm_sprintf(ascii buf, ascii fmt, ...)?
Какой буфер тут имеется ввиду - тот который выводим? И fmt - Это формат? Если так - то при попытке вывода буфера, модем почемуто перезагружается....
Go to the top of the page
 
+Quote Post
sobr
сообщение Apr 28 2008, 06:41
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Цитата(kban @ Apr 28 2008, 12:36) *
Ещё вопрос - как вывести буфер на экран?

adl_atSendResponse(ADL_AT_RSP, buf);
Go to the top of the page
 
+Quote Post
kban
сообщение Apr 30 2008, 06:04
Сообщение #28


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



И снова здравствуйте, уважаемые форумчане. Вопрос следующий - почемуто при работе с TCP сервер срабатывает на WIP_CEV_READ только 1 раз. В процессе обработки этого события вконце он отрубает клиента... Но когда этот же клиент конектится к этому серверу - он выдаёт, что коннект произошёл, а в WIP_CEV_READ не попадает, хотя клиент сообщает, что всё отослал успешно. В чём может быть касяк?
код:
case WIP_CEV_READ: {
int nread;
int i;
wip_debug ("[SAMPLE] Some data arrived\n");
adl_atSendResponse (ADL_AT_RSP, "\r\n Some data arrived\r\n");
nread = wip_read( ev->channel, rcv_buffer + rcv_offset,
sizeof( rcv_buffer) - rcv_offset);
if( nread < 0) { wip_debug( "[SAMPLE] read error %i\n", nread);
adl_atSendResponse (ADL_AT_RSP, "\r\n read error\r\n");
return; }
rcv_offset += nread;
if( rcv_offset == sizeof( rcv_buffer)) {
wip_debug( "[SAMPLE] Reception capacity exceeded, won't read more\n");
adl_atSendResponse (ADL_AT_RSP, "\r\n Reception capacity exceeded, won't read more\r\n");
} else {
wip_debug( "[SAMPLE] Wrote %i bytes of data from network to rcv_buffer. "
"%i bytes remain available in rcv_buffer\n",
nread, sizeof( rcv_buffer) - rcv_offset);

adl_atSendResponse(ADL_AT_RSP, "\n\r");

adl_atSendResponse(ADL_AT_RSP, rcv_buffer);

}
adl_atSendResponse(ADL_AT_RSP, "\n\r Povtor bufera \n\r");

adl_atSendResponse(ADL_AT_RSP, rcv_buffer);
adl_atSendResponse(ADL_AT_RSP, "\n\r");
for (i=0;i<sizeof( rcv_buffer);i++)
{
rcv_buffer[i]=0;
}
wip_close( ev->channel);
clients_count--;
break;
}
Go to the top of the page
 
+Quote Post
kban
сообщение May 8 2008, 04:41
Сообщение #29


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 29-10-07
Пользователь №: 31 837



И снова здраствуйте. Подскажите пожалуйста команду, которая перезагружает модем (всмысле реализацию её на OAT).
Go to the top of the page
 
+Quote Post
sobr
сообщение May 8 2008, 05:17
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Цитата(kban @ May 8 2008, 11:41) *
И снова здраствуйте. Подскажите пожалуйста команду, которая перезагружает модем (всмысле реализацию её на OAT).

Код
adl_atCmdSend ( "at+cfun=1",NULL,NULL,NULL);
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016