⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atbwapaci.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 3 页
字号:
		memcpy((void *)copy->Formatstring, (void *)parameter->Text, parameter->formatstring_length*sizeof(USHORT));
	}
	
	Element->data = (void *)copy;

	return;
}


/*******************************************************************************

 $Function:    	M_WAP_MMI_SEND_IMAGE_IND

 $Description:	An image is to be displayed.
 
 $Returns:		None.

 $Arguments:	parameter - data block
 
*******************************************************************************/

void M_WAP_MMI_SEND_IMAGE_IND(T_WAP_MMI_SEND_IMAGE_IND *parameter)
{
	T_WAP_VIEW					*View;
	T_WAP_ELEMENT				*Element;
	T_WAP_MMI_SEND_IMAGE_IND	*copy;
	
#ifdef TRACE_ATBWAPACI
	TRACE_FUNCTION("M_WAP_MMI_SEND_IMAGE_IND");
	TRACE_EVENT_P1("MMI object ID: %d",parameter->object_id);
#endif

	if (!(View = ATB_wap_get_view(parameter->object_id)))
		return;

	/* Check if we're shutting down */

	if (ATB_wap_status_get(View, ATB_WAP_SHUTTING_DOWN))
	{
		TRACE_EVENT("*** SHUTTING DOWN ***");
		return;
	}
	
	/* If an update is forbidden, ignore this event */

	if (!View->acceptUpdate)
		return;

	Element = ATB_wap_buffer_add_element(View, WAP_IMAGE);
 
	copy = (T_WAP_MMI_SEND_IMAGE_IND *)AUI_wap_memory_alloc(sizeof(T_WAP_MMI_SEND_IMAGE_IND));
	memcpy((void *)copy, (void *)parameter, sizeof(T_WAP_MMI_SEND_IMAGE_IND));

	if (parameter->image_length != 0)
	{
		copy->Image = (UBYTE *)AUI_wap_memory_alloc(parameter->image_length*sizeof(UBYTE));
		memcpy((void *)copy->Image, (void *)parameter->Image, parameter->image_length*sizeof(UBYTE));
	}
	
	Element->data = (void *)copy;
	
	return;
}


/*******************************************************************************


 $Function:    	M_WAP_MMI_SEND_TABLE_IND

 $Description:	A table/fieldset is to be displayed.
 
 $Returns:		None.

 $Arguments:	parameter - data block
 
*******************************************************************************/

void M_WAP_MMI_SEND_TABLE_IND(T_WAP_MMI_SEND_TABLE_IND *parameter)
{
	T_WAP_VIEW					*View;
	T_WAP_ELEMENT				*Element;
	T_WAP_MMI_SEND_TABLE_IND	*copy;
	
#ifdef TRACE_ATBWAPACI
	TRACE_FUNCTION("M_WAP_MMI_SEND_TABLE_IND");
	TRACE_EVENT_P1("object ID: %d",parameter->object_id);
	TRACE_EVENT_P2("Columns: %d, Rows: %d",parameter->cols_length, parameter->rows_length);
	TRACE_EVENT_P4("pX: %d, pY: %d, pWidth: %d, pHeight: %d",parameter->pX, parameter->pY, parameter->pWidth, parameter->pHeight);
	ATB_trace_ushort_string(parameter->Title, parameter->title_length);
#endif

	if (!(View = ATB_wap_get_view(parameter->object_id)))
		return;

	/* Check if we're shutting down */

	if (ATB_wap_status_get(View, ATB_WAP_SHUTTING_DOWN))
	{
		TRACE_EVENT("*** SHUTTING DOWN ***");
		return;
	}
	
	/* If an update is forbidden, ignore this event */

	if (!View->acceptUpdate)
		return;
	
	/* Allocate memory and copy the data */
	
 	Element = ATB_wap_buffer_add_element(View, WAP_TABLE);
 
	copy = (T_WAP_MMI_SEND_TABLE_IND *)AUI_wap_memory_alloc(sizeof(T_WAP_MMI_SEND_TABLE_IND));
	memcpy((void *)copy, (void *)parameter, sizeof(T_WAP_MMI_SEND_TABLE_IND));

	if (parameter->title_length != 0)
	{
		copy->Title = (USHORT *)AUI_wap_memory_alloc(parameter->title_length*sizeof(USHORT));
		memcpy((void *)copy->Title, (void *)parameter->Title, parameter->title_length*sizeof(USHORT));
	}
	if (parameter->cols_length != 0)
	{
		copy->ColWidth = (SHORT *)AUI_wap_memory_alloc(parameter->cols_length*sizeof(SHORT));
		memcpy((void *)copy->ColWidth, (void *)parameter->ColWidth, parameter->cols_length*sizeof(SHORT));
	}
	if (parameter->rows_length != 0)
	{
		copy->RowHeight = (SHORT *)AUI_wap_memory_alloc(parameter->rows_length*sizeof(SHORT));
		memcpy((void *)copy->RowHeight, (void *)parameter->RowHeight, parameter->rows_length*sizeof(SHORT));
	}
	Element->data = (void *)copy;

	return;
}


/*******************************************************************************


 $Function:    	M_WAP_MMI_CARD_DRAW_COMPLETED_IND
 
 $Description:	Card drawing is completed, card may be displayed.
 
 $Returns:		None.

 $Arguments:	parameter - data block
 
*******************************************************************************/

void M_WAP_MMI_CARD_DRAW_COMPLETED_IND(T_WAP_MMI_CARD_DRAW_COMPLETED_IND *parameter)
{
	T_WAP_VIEW *View;
	UBYTE temp;

	if (!(View = ATB_wap_get_view(parameter->object_id)))
		return;

	/* Check if we're shutting down */

	if (ATB_wap_status_get(View, ATB_WAP_SHUTTING_DOWN))
	{
		TRACE_EVENT("*** SHUTTING DOWN ***");
		return;
	}
	
	temp = dspl_Enable(0);

#ifdef TRACE_ATBWAPACI
	TRACE_FUNCTION("M_WAP_MMI_CARD_DRAW_COMPLETED_IND");
	TRACE_EVENT_P1("MMI object ID: %d",parameter->object_id);
#endif

	/* If an update is forbidden, ignore this event */

	if (!View->acceptUpdate)
	{
		dspl_Enable(temp);
		return;
	}
	
	/* Destroy the current card, and make the new buffered card the current card */
	
	ATB_wap_buffer_clear(View);
	View->ElementHeader = View->NewElementHeader;
	View->NewElementHeader = NULL;
		
	AUI_wap_card_show_req(View);
	dspl_Enable(temp);
	
	return;
}


/*******************************************************************************


 $Function:    	M_WAP_MMI_CONNECT_REQ
 
 $Description:	The connection (GSM or GPRS) can now be made.
 				The GSM connection occurs in this function.
 				The GPRS attachment is made in this function.  Once GPRS is
 				attached, the connection proceeds in function connect_gprs() below.
 
 $Returns:		None.

 $Arguments:	parameter - data block
 
*******************************************************************************/

void M_WAP_MMI_CONNECT_REQ(T_WAP_MMI_CONNECT_REQ *parameter)
{
	T_WAP_VIEW *View;
	char temp[NUMBER_MAX_LEN+1];
	T_ACI_BS_SPEED speed;
	
#ifdef TRACE_ATBWAPACI
	TRACE_FUNCTION("M_WAP_MMI_CONNECT_REQ");
	TRACE_EVENT_P1("MMI object ID: %d",parameter->object_id);
#endif

	if (!(View = ATB_wap_get_view(parameter->object_id)))
		return;
	
	/* Check if we're shutting down */

	if (ATB_wap_status_get(View, ATB_WAP_SHUTTING_DOWN))
	{
		TRACE_EVENT("*** SHUTTING DOWN ***");
		return;
	}

	switch (View->Profile->AccessType)
	{
		case WAP_CS_DATA:
			/* CSD call - connect straight away */
			
			sAT_PercentPPP(0,1,View->Profile->Username, View->Profile->Password, USE_NO_PPP_FOR_AAA);
			sAT_PercentWAP(0,0);
			sAT_PercentWAP(0,1);

			/* Set the connection speed */
			
			switch(View->Profile->ConnectionSpeed)
			{
				case WAP_ANALOGUE:
					speed = BS_SPEED_AUTO;
					break;
				case WAP_ISDN9600:
					speed = BS_SPEED_9600_V110;
					break;
				case WAP_ISDN14400:
					speed = BS_SPEED_14400_V110;
					break;
				default:
					speed = BS_SPEED_9600_V34;
					break;
			}
			
			sAT_PlusCBST(CMD_SRC_ATI_1, speed, CBST_NAM_Asynch, CBST_CE_NonTransparent);

			/* Make the call */
			
			sprintf(temp, "=%s", View->Profile->DialupNumber);
			atD(temp,CMD_SRC_ATI_1);	
			break;
	
#ifdef GPRS 
		case WAP_GPRS_DATA:
		{
			/* GPRS call - attach now.  If attached, connect.
			 * If not, wait until attach succeeds */
			 
			T_CGATT_STATE regstate; 	

			/* Check to see if attached */

			qAT_PlusCGATT ( CMD_SRC_LCL, &regstate );
#ifdef TRACE_ATBWAPACI
	  		TRACE_EVENT_P1("Reg state: %d", regstate);
#endif

			/* If we're not attached, attempt to do so */
			
	  		if (regstate!=CGATT_STATE_ATTACHED)
	  		{
	  			/* Display status "attaching" */
				ATB_wap_status_change(View, ATB_WAP_ATTACHING);
				/* Attempt to attach */
	  			sAT_PlusCGATT ( CMD_SRC_LCL, CGATT_STATE_ATTACHED );	
	  		}
			/* Otherwise, go straight to GPRS connection */
	  		else
	  		{
	  			connect_gprs(parameter->object_id);
			}
		}
#endif
	}

	return;
}


#ifdef GPRS
/*******************************************************************************


 $Function:    	connect_gprs
 
 $Description:	GPRS is attached; now activate PDP context
 
 $Returns:		None.

 $Arguments:	object_id - the current session
 
*******************************************************************************/

void connect_gprs(UBYTE object_id)
{
	SHORT cids[MAX_CID_PLUS_EINS];
	BOOL states[MAX_CID_PLUS_EINS];
	T_GPRS_CONT_REC context;
	T_ACI_RETURN ret;
	UBYTE minsize;
	T_WAP_VIEW *View;

	TRACE_FUNCTION("connect_gprs()");
	
	if (!(View = ATB_wap_get_view(object_id)))
		return;
	
	/* Check to see if context already active */
	
	qAT_PlusCGACT ( CMD_SRC_LCL, states, cids );

#ifdef TRACE_ATBWAPACI
	TRACE_EVENT_P1("Context 0: %d", cids[0]);
#endif

	/* If context doesn't exist, define it */

    if ( cids[0] == INVALID_CID)
	{
#ifdef TRACE_ATBWAPACI
        TRACE_EVENT("Defining new context.");
#endif

        minsize = (MAX_APN_LEN<(URL_MAX_LEN+1))?MAX_APN_LEN:(URL_MAX_LEN+1);
		memset(&context.apn,'\0',MAX_APN_LEN);
		memcpy(&context.apn,&View->Profile->APN,minsize);
		strcpy((char*)context.pdp_type,"IP");
		minsize = (MAX_PDP_ADDR_LEN<(IPADDRESS_MAX_LEN+1))?MAX_PDP_ADDR_LEN:(IPADDRESS_MAX_LEN+1);
		memset(&context.pdp_addr,'\0',MAX_PDP_ADDR_LEN);
		context.d_comp = CGDCONT_D_COMP_OMITTED;
		context.h_comp = CGDCONT_H_COMP_OMITTED;
		memset(&context.qos,0,sizeof(T_QOS));
		memset(&context.min_qos,0,sizeof(T_QOS));
		
		ret = sAT_PlusCGDCONT(CMD_SRC_LCL,GPRS_CID_1,&context);

#ifdef TRACE_ATBWAPACI
		TRACE_EVENT_P1("CGDCONT Return = %d",ret);
#endif

		if (ret==AT_FAIL)
		{
			AUI_error_dialog(View, ERROR_GPRS_NOT_SUPPORTED);
			return;
		}
	}

	/* Removed duplicate call to qAT_PlusCGACT.
	 * If context isn't activated, call CGPCO */

	if (states[0])
	{
#ifdef TRACE_ATBWAPACI
		TRACE_EVENT("Context is activated.");
#endif
	}
	else
	{
#ifdef TRACE_ATBWAPACI
		TRACE_EVENT("Context not activated.");
#endif

		ret = sAT_PercentCGPCO (
			CMD_SRC_LCL,
			GPRS_CID_1,
			ACI_PCO_AUTH_PROT_PAP,
			(CHAR *)View->Profile->Username,
			(CHAR *)View->Profile->Password,
			NULL,
			NULL
			);

#ifdef TRACE_ATBWAPACI
		TRACE_EVENT_P1("CGPCO Return = %d", ret);
#endif

		if (ret==AT_FAIL)
		{
			AUI_error_dialog(View, ERROR_GPRS_NOT_SUPPORTED);
			return;
		}
	}
	
	//ret = sAT_Dn(CMD_SRC_LCL,"*98**1*1#",D_CLIR_OVRD_Default,D_CUG_CTRL_NotPresent,D_TOC_Data);
	ret = sAT_Dn(CMD_SRC_LCL,"*98*1#",D_CLIR_OVRD_Default,D_CUG_CTRL_NotPresent,D_TOC_Data);

	switch (ret)
	{
	    case (AT_CMPL):   /*operation completed*/
	    case (AT_EXCT):
	    	break;
	    	
	    default:
	  		AUI_error_dialog(View, ERROR_CALL_DISCONNECTED);
#ifdef TRACE_ATBWAPACI
	    	TRACE_EVENT("Error occurred in connection.");
#endif
	    	return;
			break;
	}

	return;
}
#endif

/*******************************************************************************


 $Function:    	M_WAP_MMI_DISCONNECTED_IND
 
 $Description:	A disconnection has occurred.
 
 $Returns:		None

 $Arguments:	parameter - data block
 
*******************************************************************************/

void M_WAP_MMI_DISCONNECTED_IND(T_WAP_MMI_DISCONNECTED_IND *parameter)
{
	T_WAP_VIEW *View;
	
#ifdef TRACE_ATBWAPACI
	TRACE_FUNCTION("M_WAP_MMI_DISCONNECTED_IND");
	TRACE_EVENT_P1("MMI object ID: %d",parameter->object_id);
#endif

	if (!(View = ATB_wap_get_view(parameter->object_id)))
		return;

	/* Check if we're shutting down */

	if (ATB_wap_status_get(View, ATB_WAP_SHUTTING_DOWN))
	{
		TRACE_EVENT("*** SHUTTING DOWN ***");
		return;
	}
	
	/* Change MMI status */
	
	ATB_wap_status_change(View,ATB_WAP_ONLINE_CONNECTION_CLOSED);

	return;
}


/*******************************************************************************


 $Function:    	M_WAP_MMI_READY_CNF
 
 $Description:	Confirm that WAP has completed the operation.
 
 $Returns:		None.

 $Arguments:	parameter - data block
 
*******************************************************************************/

void M_WAP_MMI_READY_CNF(T_WAP_MMI_READY_CNF *parameter)
{
#ifdef TRACE_ATBWAPACI
	TRACE_FUNCTION("M_WAP_MMI_READY_CNF");
	TRACE_EVENT_P1("Event id = %d", parameter->event_id);
#endif

	switch (parameter->event_id)
	{
		case WAP_START_IND_ID:
			ATB_wap_start_done();
			break;
		case WAP_NEW_VIEW_IND_ID:
			ATB_wap_new_view_done();
			break;
		case WAP_CLOSE_VIEW_IND_ID:
			ATB_wap_close_view_done();
			break;
		case WAP_TERMINATE_IND_ID:
			ATB_wap_terminate_done();
			break;
		case WAP_CACHE_PREPARE_IND_ID:
			ATB_wap_cache_prepare_done();
			break;
	}
	return;
}


/*******************************************************************************

 $Function:    	disconnect_wap_call
 
 $Description:	Disconnect GPRS WAP call in progress.

 $Returns:		TRUE if connection is disconnected, FALSE if disconnection in progress

 $Arguments:	access_type - WAP_GPRS_DATA or WAP_CS_DATA
 
*******************************************************************************/

UBYTE disconnect_wap_call(UBYTE access_type)
{
	UBYTE disconnected;
	T_ACI_RETURN ret;
#ifdef GPRS
	SHORT cids[MAX_CID_PLUS_EINS] = {GPRS_CID_1, INVALID_CID}; 
#endif /* GPRS */
	TRACE_FUNCTION("disconnect_wap_call()");
	
	disconnected = TRUE;
	
#ifdef GPRS
	if (access_type==WAP_GPRS_DATA)
	{
		/* Update data counter */

		sAT_PercentSNCNT(CMD_SRC_LCL, TRUE);

		/* Disconnect */
		
		ret = sAT_PlusCGACT(CMD_SRC_LCL, CGACT_STATE_DEACTIVATED, cids);

#ifdef TRACE_ATBWAPACI
		TRACE_EVENT_P1("Result of sAT_PlusCGACT = %d", ret);
#endif

		/* If detaching will take a little time, show a please wait dialog */

		if (ret==AT_EXCT)
		{
			disconnected = FALSE;
		}
	}
#endif /* GPRS */
	return disconnected;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -