Awneal,
As, You said i managed to write only FCM that sends data back to same uart and code is(‘A’ is terminator):
bool DataHandler(u16 DataLen, u8 * Data){
int i = 0;
u16 var;
dataduzina = DataLen;
for (var = 0; var < dataduzina+1; var++) {
if((*(Data+var))!='A'){
dataniz[var] = *(Data + var);
i = 0;
}
}
rezultatslanja = adl_fcmSendData(FCMHandle, dataniz, dataduzina);
i = 1;
return TRUE;
}
And it works.
Now I have WIP plugin app witch should send data from uart to TCP socket, and I can’t manage that.
App works like this:
First i connect to gprs. Then create socket, when i get WIP_CEV_OPEN subscribe to FCM. ADL_FCM_EVENT_FLOW_OPENED switch to data mode.
and then cannot send data with wip_write to socket from data handler.
Please some guides how to manage this problem. Again thanks
code:
static void tcpevh( wip_event_t *ev, void *ctx) {
switch( ev->kind) {
chnl = ev->channel;
case WIP_CEV_OPEN: {
wip_debug ("[SAMPLE] Connection established successfully\n");
adl_atSendResponse(ADL_AT_RSP,"\r\nOtvorena\r\n");
if ((adl_fcmIsAvailable(ADL_FCM_FLOW_V24_UART1))){
wip_debug("availabale uart1\n");
adl_atSendResponse(ADL_AT_RSP,"\r\nUart1 free\r\n");
FCM_Handle = adl_fcmSubscribe(ADL_FCM_FLOW_V24_UART1, DTM_FCM_Ctrl_Handler, DTM_FCM_Data_Handler);
wip_debug("FCM: %i\n", FCM_Handle);
}
break;
}
case WIP_CEV_READ: {
wip_debug("wip cev read\n");
bprimljeno = wip_read(socket, rcv_buffer, RCV_BUFFER_SIZE);
wip_debug("Bajtova primljeno: %d", bprimljeno);
adl_fcmSendData(FCM_Handle, rcv_buffer, 100);
break;
}
case WIP_CEV_WRITE: {
wip_debug("wip cev write\n");
break;
}
case WIP_CEV_ERROR: {
wip_debug( "[SAMPLE] Error %i on socket. Closing.\n",
ev->content.error.errnum);
wip_close( ev->channel);
break;
}
case WIP_CEV_PEER_CLOSE: {
wip_debug( "[SAMPLE] Connection closed by peer\n");
wip_close( ev->channel);
break;
}
default:
break;
}
}
bool DTM_FCM_Ctrl_Handler(u8 fcmev){
TRACE((1,"Event koji je primljen: %d", fcmev));
switch (fcmev) {
case ADL_FCM_EVENT_FLOW_OPENNED:{
// switching to data mode ...
TRACE((1,"switch to data mode."));
wip_debug("FCMCTRLHDLR: switching to data mode\n");
adl_fcmSwitchV24State(FCM_Handle, ADL_FCM_V24_STATE_DATA);
adl_atSendResponse(ADL_AT_RSP,"\r\nOtvoren FCM \r\n");
wip_debug("datamode\r\n");
break;
}
case ADL_FCM_EVENT_V24_DATA_MODE:{
TRACE((1,"FCMEV: Data mode\r\n"));
wip_debug("FCMCTRLHDLR: switched to datamode, trying to write\r\n");
//bposlato = wip_write(socket, snd_buffer, sizeof(snd_buffer));
//niz = adl_memGet(sizeof(snd_buffer));
//wm_memcpy(niz, snd_buffer, sizeof(niz));
//resp = adl_fcmSendData(FCM_Handle, niz, sizeof(niz));
wip_debug("poslato bajtova: %d\n", bposlato);
//adl_memRelease(niz);
//adl_atSendResponse(ADL_AT_RSP,"\r\nData mode\r\n");
//adl_fcmReleaseCredits(FCM_Handle,5);
break;
}
case ADL_FCM_EVENT_FLOW_CLOSED:{
wip_debug("FCM flow closed\n");
break;
}
case ADL_FCM_EVENT_RESUME:{
wip_debug("FCM event resume\n");
break;
}
case ADL_FCM_EVENT_V24_AT_MODE_EXT: {
wip_debug("Switching to AT mode");
adl_atSendResponse(ADL_AT_RSP,"\r\nSwitching to AT mode\r\n");
adl_fcmSwitchV24State(FCM_Handle, ADL_FCM_V24_STATE_AT);
adl_fcmUnsubscribe(FCM_Handle);
break;
}
case ADL_FCM_EVENT_MEM_RELEASE: {
wip_debug("adl fcm memrealease\n");
adl_atSendResponse(ADL_AT_RSP, "Release\n");
break;
}
}
return TRUE;
}
bool DTM_FCM_Data_Handler(u16 DataLen, u8 * Data){
int i = 0;
u16 var;
dataduzina = DataLen;
for (var = 0; var < dataduzina+1; var++) {
if((*(Data+var))!='A'){
dataniz[var] = *(Data + var);
i = 0;
}
}
//rezultatslanja = adl_fcmSendData(FCMHandle, dataniz, dataduzina);
bposlato = wip_write(socket, dataniz, dataduzina);
i = 1;
return TRUE;
}