Trying to add code…I can’t seem to write the word “W H I L E” in the code so correct the “wile” please. Lots of TRACES and comments are gone because the website doesn’t want to allow “F T P” and a lot of other stuff…
Please type your F T P details in the Constant declarations and use at=dwl to start DOTA
#include "adl_global.h"
#include "math.h"
#include "wip.h"
const u16 wm_apmCustomStackSize = 4096*3;
//#define
#define GPRS_APN "internet"
#define GPRS_LOGIN ""
#define GPRS_PASSWORD ""
const ascii * FTP_TYPE = (ascii*)'I';
const ascii * FTP_STR_HOSTNAME = "YourFtp";
const ascii * FTP_STR_USERNAME = "Username";
const ascii * FTP_STR_PASSWORD = "Password";
const ascii * FTP_FILENAME = "./DOTA.dwl";
#define FTP_PORT 21
#define FTP_MODE_PASSIVE 0
wip_channel_t FtpChannel = (wip_channel_t) NULL;
wip_channel_t FtpFileHandle = (wip_channel_t) NULL;
wip_bearer_t bearerHandle = NULL;
wip_channel_t ftpCnxCh = NULL;
wip_channel_t ftpDataCh = NULL;
//---AnD Variables---//
const u32 CellId = 1;
const u32 AnDSize = ADL_AD_SIZE_UNDEF;
s32 AnDHandle1 = -1;
s32 AnDCellHandle1 = -1;
s32 AnDCellHandle0 = -1;
//---Timer handles---//
adl_tmr_t *BearerTmrHandle;
adl_tmr_t *FtpTmrHandle;
//---Flags---//
bool flag_GpsValid;
bool flag_network;
bool flag_bearer;
bool flag_ftp;
bool flag_server;
bool flag_dwl;
bool flag_upload;
bool flag_LoopTimer;
bool flag_LogonOk;
bool flag_Wtfin;
bool flag_GpsSlow;
bool flag_Startup;
//---Variables---//
s32 s32Ret;
s8 s8Ret;
void Cmd_Dwl_Handler(adl_atCmdPreParser_t *paras);
void DwlNewApp(void);
void AnDEventHandler( adl_adEvent_e Event, u32 Progress );
void BearerConnectTmr(u8 Id, void * Context);
void BearerHandler( wip_bearer_t b, s8 event, void *ctx);
void FtpConnectTmr(u8 Id, void * Context);
void FTPCnxHandler(wip_event_t *ev, void *ctx );
void FTPFileDataHandler( wip_event_t *ev, void *ctx);
void FtpReadFile(void);
void AnDWrite(u32 BufLength, u8 *Buffer);
void DOTA_AnDInit();
void Cmd_Dwl_Handler(adl_atCmdPreParser_t *paras)
{
TRACE((1,"Download Command Handler"));
DwlNewApp();
adl_atSendResponse(ADL_AT_PORT_TYPE ( paras->Port, ADL_AT_RSP ), "\r\nOK\r\n");
}
void DwlNewApp(void)
{
TRACE((1,"Download New Application Function"));
flag_dwl = TRUE;
if(flag_bearer == FALSE)
{
BearerTmrHandle = adl_tmrSubscribe(ADL_TMR_CYCLIC_OPT_ON_RECEIVE, 100, ADL_TMR_TYPE_100MS, BearerConnectTmr);
}
else if(flag_bearer == TRUE)
FtpTmrHandle = adl_tmrSubscribe(ADL_TMR_CYCLIC_OPT_NONE, 1, ADL_TMR_TYPE_100MS, FtpConnectTmr);
}
void AnDEventHandler( adl_adEvent_e Event, u32 Progress )
{
TRACE((1, "AnDEventHandler: Event %d, Progress %d", Event, Progress));
}
void Disconnect(void)
{
TRACE((1,"Disconnect function"));
flag_bearer = FALSE;
if(bearerHandle != NULL)
{
//wip_bearerStop(bearerHandle);
wip_bearerClose(bearerHandle);
bearerHandle = NULL;
}
}
void BearerConnectTmr(u8 Id, void * Context)
{
flag_bearer = FALSE;
s8Ret = wip_bearerOpen ( &bearerHandle, "GPRS", ( wip_bearerHandler_f )
BearerHandler, NULL);
TRACE (( 1, "wip_bearerOpen: ret = %d",s8Ret ));
s8Ret = wip_bearerSetOpts( bearerHandle,
WIP_BOPT_GPRS_APN, GPRS_APN,
WIP_BOPT_LOGIN, GPRS_LOGIN,
WIP_BOPT_PASSWORD, GPRS_PASSWORD,
WIP_BOPT_END);
TRACE (( 1, "wip_bearerSetOpts: ret = %d",s8Ret ));
s8Ret = wip_bearerStart( bearerHandle );
TRACE (( 1, "wip_bearerStart: ret = %d",s8Ret ));
}
void BearerHandler( wip_bearer_t b, s8 event, void *ctx)
{
switch(event)
{
case WIP_BEV_IP_CONNECTED:
TRACE (( 1, "evh_bearer: <WIP_BEV_IP_CONNECTED>"));
flag_bearer = TRUE;
s32Ret = adl_tmrUnSubscribe(BearerTmrHandle, BearerConnectTmr, ADL_TMR_TYPE_100MS );
TRACE((1,"Bearer Timer unsubscribe: %d", s32Ret));
if(flag_dwl == TRUE)
FtpTmrHandle = adl_tmrSubscribe(ADL_TMR_CYCLIC_OPT_NONE, 1, ADL_TMR_TYPE_100MS, FtpConnectTmr);
break;
case WIP_BEV_CONN_FAILED:
TRACE (( 1, "evh_bearer: <WIP_BEV_CONN_FAILED>"));
flag_dwl = FALSE;
Disconnect();
break;
case WIP_BEV_STOPPED:
TRACE (( 1, "evh_bearer: <WIP_BEV_STOPPED>"));
flag_dwl = FALSE;
Disconnect();
break;
default:
TRACE (( 1, "evh_bearer: <Other Events>"));
flag_dwl = FALSE;
Disconnect();
break;
}
}
void FtpConnectTmr(u8 Id, void * Context)
{
if(flag_ftp == TRUE)
{
s32Ret = wip_close(ftpCnxCh);
FtpTmrHandle = adl_tmrSubscribe(ADL_TMR_CYCLIC_OPT_NONE, 100, ADL_TMR_TYPE_100MS, FtpConnectTmr);
flag_ftp = FALSE;
return;
}
else
(flag_ftp = TRUE);
ftpCnxCh = wip_FTPCreateOpts((ascii*)FTP_STR_HOSTNAME, FTPCnxHandler, NULL,
WIP_COPT_USER, FTP_STR_USERNAME,
WIP_COPT_PASSWORD, FTP_STR_PASSWORD,
WIP_COPT_PEER_PORT, FTP_PORT,
WIP_COPT_TYPE, FTP_TYPE,
WIP_COPT_PASSIVE, FTP_MODE_PASSIVE,
WIP_COPT_END);
FtpTmrHandle = adl_tmrSubscribe(ADL_TMR_CYCLIC_OPT_NONE, 100, ADL_TMR_TYPE_100MS, FtpConnectTmr);
}
void FTPCnxHandler(wip_event_t *ev, void *ctx )
{
switch( ev->kind)
{
case WIP_CEV_OPEN:
s32Ret = adl_tmrUnSubscribe(FtpTmrHandle, FtpConnectTmr, ADL_TMR_TYPE_100MS );
AnDCellHandle1 = adl_adSubscribe ( CellId, AnDSize);
TRACE((2,"AnD Subscribe: %d",AnDCellHandle1));
FtpFileHandle = wip_getFile ( ftpCnxCh,(ascii*) FTP_FILENAME, FTPFileDataHandler, NULL );
break;
case WIP_CEV_PEER_CLOSE:
break;
case WIP_CEV_ERROR:
TRACE((1,"ftpCnxHandler: WIP_CEV_ERROR"));
break;
case WIP_CEV_DONE:
TRACE((1,"ftpCnxHandler: WIP_CEV_DONE"));
break;
case WIP_CEV_PING:
TRACE((1,"ftpCnxHandler: WIP_CEV_PING"));
break;
case WIP_CEV_READ:
TRACE((1,"ftpCnxHandler: WIP_CEV_READ"));
break;
case WIP_CEV_WRITE:
TRACE((1,"ftpCnxHandler: WIP_CEV_WRITE"));
break;
}
}
void FTPFileDataHandler( wip_event_t *ev, void *ctx)
{
TRACE (( 1, "DOTA_FTPFileDataHandler Event = %d", ev->kind));
switch( ev->kind)
{
case WIP_CEV_OPEN:
break;
case WIP_CEV_READ:
FtpReadFile();
break;
case WIP_CEV_WRITE:
break;
case WIP_CEV_DONE:
break;
case WIP_CEV_ERROR:
break;
case WIP_CEV_PEER_CLOSE:
wip_close(ftpDataCh);
wip_close(ftpCnxCh);
s32Ret = adl_adFinalise (AnDCellHandle1);
TRACE((2, "adl_adFinalise %d", s32Ret));
s32Ret = adl_adInstall(AnDCellHandle1);
TRACE((2, "adl_adInstall %d", s32Ret));
break;
default:
break;
}
}
void FtpReadFile(void)
{
s32 sLen;
u8 uBuffer[1500];
wile( (sLen = wip_read( FtpFileHandle, uBuffer, sizeof(uBuffer))) > 0)
{
if (AnDCellHandle1 < 0)
{
adl_atSendResponse (ADL_AT_RSP, "\r\nDOTA_AnDWriteData Error\r\n");
break;
}
else
{
AnDWrite(sLen, uBuffer);
}
}
}
void AnDWrite(u32 BufLength, u8 *Buffer)
{
s32Ret = adl_adWrite(AnDCellHandle1, BufLength, Buffer);
TRACE((2,"AnD write: %d",s32Ret));
}
void DOTA_AnDInit()
{
AnDHandle1 = adl_adEventSubscribe ( (adl_adEventHdlr_f) AnDEventHandler );
adl_adFormat(AnDHandle1);
}
void adl_main(adl_InitType_e adlInitType)
{
s8 InitValue = 0;
TRACE((1,"Main function"));
adl_atSendResponse(ADL_AT_UNS, "\r\nStart DOTA Program (Success)\r\n" );
switch (adlInitType)
{
case ADL_INIT_POWER_ON:
InitValue = 1;
break;
case ADL_INIT_REBOOT_FROM_EXCEPTION:
InitValue = 2;
break;
case ADL_INIT_DOWNLOAD_SUCCESS:
InitValue = 3;
break;
case ADL_INIT_DOWNLOAD_ERROR:
InitValue = 4;
break;
case ADL_INIT_RTC:
InitValue = 5;
break;
default:
break;
}
DOTA_AnDInit();
adl_atCmdSubscribe ( "AT+DWL",
Cmd_Dwl_Handler,
ADL_CMD_TYPE_ACT);
wip_netInit();
}