Hi to all,
here is my problem. I have a Q2686H and i want to get data from a sensor. In order to get the data i have to send to the sensor the command “go” and then enter (ascii 13 or 10).
here is my code.
#define UART2_CLOSED 0
#define UART2_GETTING_STATUS 1
#define UART2_CLOSED_WAITING_OK 2
#define UART2_OPENING_WAITING_OK 3
#define UART2_OPEN_WAITING_OK 4
#define UART2_OPEN 5
#define UART2_CHANGING_SPEED 6
#define UART2_OPENING_FCM 7
#define UART2_READY 8
#include "adl_global.h"
#include "adl_fcm.h"
u32 wm_apmCustomStack [ 256 ];
const u16 wm_apmCustomStackSize = sizeof ( wm_apmCustomStack );
#define SEND_TRACE(x) TRACE(( 1, x )); adl_atSendResponse ( ADL_AT_UNS, x );
#define FLH_HANDLER "FLH_TEST_HDLR"
s8 FCM_UART2_handle;
u8 uart2Status = UART2_CLOSED; // to manage to the starting of UART2
typedef enum
{
UART_MODE_AT,
UART_MODE_DATA
} uartModeType_e;
bool b_canSendDataToUart2 = TRUE;
u8 uart2Mode = UART_MODE_AT;
s8 DataBlock="go\r\n";
void Cmd_flashread_Handler(adl_atCmdPreParser_t *paras);
void getStatus_tmrHandler(u8 Id);
bool FCM_UART2_CtrlHandler (adl_fcmEvent_e Event)
{
s8 resultat;
s8 res;
SEND_TRACE("FCM_UART2_CtrlHandler\r\n" );
switch(Event)
{
case ADL_FCM_EVENT_FLOW_OPENNED:
SEND_TRACE("ADL_FCM_EVENT_FLOW_OPENNED\r\n" );
resultat = adl_fcmSwitchV24State(FCM_UART2_handle, ADL_FCM_V24_STATE_DATA);
break;
case ADL_FCM_EVENT_FLOW_CLOSED:
SEND_TRACE("ADL_FCM_EVENT_FLOW_CLOSED\r\n" );
break;
case ADL_FCM_EVENT_V24_DATA_MODE:
SEND_TRACE("ADL_FCM_EVENT_V24_DATA_MODE\r\n" );
uart2Mode = UART_MODE_DATA;
uart2Status = UART2_READY; // UART2 is now completely initialised
res=adl_fcmSendData (FCM_UART2_handle, "go\r", 3);
//res=adl_fcmSendData (FCM_UART2_handle, "res?\r", 5);
break;
case ADL_FCM_EVENT_V24_DATA_MODE_EXT:
SEND_TRACE("ADL_FCM_EVENT_V24_DATA_MODE_EXT\r\n" );
break;
case ADL_FCM_EVENT_V24_AT_MODE:
SEND_TRACE("ADL_FCM_EVENT_V24_AT_MODE\r\n" );
uart2Mode = UART_MODE_AT;
break;
case ADL_FCM_EVENT_V24_AT_MODE_EXT:
SEND_TRACE("ADL_FCM_EVENT_V24_AT_MODE_EXT\r\n" );
break;
case ADL_FCM_EVENT_RESUME:
SEND_TRACE("ADL_FCM_EVENT_RESUME\r\n" );
break;
case ADL_FCM_EVENT_MEM_RELEASE:
SEND_TRACE("ADL_FCM_EVENT_MEM_RELEASE\r\n" );
break;
case ADL_FCM_EVENT_V24_DATA_MODE_FROM_CALL:
SEND_TRACE("ADL_FCM_EVENT_V24_DATA_MODE_FROM_CALL\r\n" );
break;
case ADL_FCM_EVENT_V24_AT_MODE_FROM_CALL:
SEND_TRACE("ADL_FCM_EVENT_V24_AT_MODE_FROM_CALL\r\n" );
break;
default:
SEND_TRACE("DEFAULT\r\n" );
break;
}
return(FALSE);
}
bool FCM_UART2_DataHandler (u16 DataSize, u8 * Data)
{
u16 i;
u8 * pData = Data;
char * string[100];
// TRACE (( TRACE_LEVEL_FCT, "FCM_UART2_DataHandler" ));
wm_sprintf(string, "Datasize: %d\r\n", DataSize);
SEND_TRACE(string);
//TRACE (( 1, "Datasize: %d", DataSize));
return(TRUE);
}
void tmrHandler_startFcmUart2( u8 ID )
{
char *string[100];
// Subscribe to the FCM for UART2
FCM_UART2_handle = adl_fcmSubscribe ( ADL_FCM_FLOW_V24_UART2, FCM_UART2_CtrlHandler, FCM_UART2_DataHandler );
wm_sprintf(string, "adl_fcmSubscribe UART2 return value: %d\r\n", FCM_UART2_handle);
SEND_TRACE(string);
if(FCM_UART2_handle < 0)
{
SEND_TRACE("adl_fcmSubscribe UART2 failed\r\n");
}
}
bool cmd_RspHandler_IPR(adl_atResponse_t * params)
{
ascii buf[30];
SEND_TRACE("cmd_RspHandler_IPR\r\n");
wm_strRemoveCRLF(buf, params->StrData, params->StrLength);
if ((!wm_strcmp(buf, "OK")) && (uart2Status == UART2_CHANGING_SPEED))
{
uart2Status = UART2_OPENING_FCM;
// Must wait before subscribing to the FCM for UART 2,
// otherwise the UART2 parameters are not set correctly
// and the UART2 is not synchronised to the incomming data.
adl_tmrSubscribe ( FALSE, 1, ADL_TMR_TYPE_100MS, tmrHandler_startFcmUart2 );
}
return (TRUE);
}
bool cmd_RspHandler_WMFM(adl_atResponse_t * params)
{
ascii buf[30];
wm_strRemoveCRLF(buf, params->StrData, params->StrLength);
switch(uart2Status)
{
case UART2_GETTING_STATUS:
if(buf[13] == '0') // "+WMFM: 0,2,x,0" ==> Closed
{
uart2Status = UART2_CLOSED_WAITING_OK;
}
else if(buf[13] == '1') // "+WMFM: 0,2,x,1" ==> Open
{
uart2Status = UART2_OPEN_WAITING_OK;
}
break;
case UART2_CLOSED_WAITING_OK:
if(!wm_strcmp(buf, "OK"))
{
uart2Status = UART2_OPENING_WAITING_OK;
// By default, only UART 1 is open. UART 2 must be explicitly opened
adl_atCmdCreate( "AT+WMFM=0,1,2", FALSE, ( adl_atRspHandler_t ) cmd_RspHandler_WMFM, "*", NULL );
}
break;
case UART2_OPEN_WAITING_OK:
if(!wm_strcmp(buf, "OK"))
{
uart2Status = UART2_CHANGING_SPEED;
adl_atCmdCreate("AT+IFC=0,0", 1, NULL, NULL);
adl_atCmdCreate("AT+ICF=3,4", 1, NULL, NULL);
// Set default speed for UART 2
adl_atCmdCreate("AT+IPR=9600", ADL_AT_PORT_TYPE( ADL_AT_UART2, FALSE ), (adl_atRspHandler_t) cmd_RspHandler_IPR, "*", NULL);
}
break;
case UART2_OPENING_WAITING_OK:
if(!wm_strcmp(buf, "OK"))
{
uart2Status = UART2_GETTING_STATUS;
}
break;
}
return FALSE;
}
void init_uart2()
{
SEND_TRACE("startUart2: get status UART2\r\n" );
uart2Status = UART2_GETTING_STATUS;
adl_atCmdCreate( "AT+WMFM=0,2,2", FALSE, ( adl_atRspHandler_t ) cmd_RspHandler_WMFM, "*", NULL );
}
void adl_main ( adl_InitType_e InitType )
{
SEND_TRACE("Embedded Application : Main\r\n" );
init_uart2();
}
after the “GO” command nothing happens. The sensor doesn’t send anything.
can anyone help me please. it is very urgent
Thanks