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

📄 iap_s.c

📁 MTK平台绝密核心代码之 外设管理(红外线)
💻 C
📖 第 1 页 / 共 2 页
字号:
				    return_type=iasdata[i].type[j]|(iasdata[i].sel[j]<<8);
				    goto exit_decode_gvbc;
			    }
		   }
	    }
	}
	
exit_decode_gvbc:
	Send_ias_gvbc_response(return_type);
}

/*************************************************************************
* FUNCTION
*	Send_ias_gvbc_response
*
* DESCRIPTION
*	Format and send the GVBC response to the client
*
* PARAMETERS
*  kal_uint16 [msb:sel][lsb:return_type] 
* RETURNS
*	None
*
* GLOBALS AFFECTED
* return_type= type of data to format and return
	       sel = LSAP-SEL of attribute
*************************************************************************/
void Send_ias_gvbc_response(kal_uint16 return_type)
{

kal_uint8 * tmpbuf;
FBUF      * tmpptr;
kal_uint8 * tmpstr;  
kal_uint16 tmpint;

#ifdef IRDA_KAL_TRACE  
      kal_trace(TRACE_FUNC, IRDA_MSG54);  		
#endif   
/* get a frame buffer   */
   tmpptr=(FBUF*)Getbuf();
   tmpbuf=(kal_uint8*)tmpptr+I_TX_PACKET_OFFSET;

/* format the iap ctl byte */
	tmpbuf[2]=LST&NACK|GETVALUEBYCLASS_OP; /* the ctl field (byte 0) of IAP message */

/* format the return data */
	switch (return_type&0x00ff)/* mask out sel */
	{ 
		case UNSUPPORTED_TYP:
			/* unsupported  opcode */
			tmpbuf[3]=0xff; 
			tmpptr->size=2;
			break;
		case NO_CLASS_TYP:
			/* return no such class */
			tmpbuf[3]=1; 
			tmpptr->size=2;
			break;
		case NO_ATTR_TYP:
			/* return no such attribute */
			tmpbuf[3]=2; 
			tmpptr->size=2;
			break;
		case DEV_NAME_TYP:/*P.84 in LMP spec.*/
			Format_IAS_return( 0, (kal_uint8*)tmpbuf, (FBUF*)tmpptr, 3, (kal_uint8*)OUR_DEV_NAM, 0, 0 );  
			break;
		case IrDA_SUP_TYP:
			/* respond with irdasupport */
			tmpbuf[3]=0; /* return code = success */ 
			/* list size = 1, msb first */ 
			tmpint=Swap_int_order((kal_uint16)1);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+4),(kal_uint8*)&tmpint,2);
			/* object id = 1 */ 
			tmpint=Swap_int_order(1);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+6),(kal_uint8*)&tmpint,2);
			/* format the attribute user octet sequence */
			tmpbuf[8] =2; /* type = octet sequence */ 
			/* int length of sequence */ 
			tmpint=Swap_int_order((kal_uint16)3);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+9),(kal_uint8*)&tmpint,2);
/* Irlmp version byte */
			tmpbuf[11]=IAS_LMP_VER; 
/* ias support byte */
			tmpbuf[12]=(IAS_SUP_GET_INFO|IAS_SUP_GET_OBJECTS|IAS_SUP_GET_VALUE|IAS_SUP_GET_OBJ_INFO|IAS_SUP_GET_ATTRIB_NAME);
/* lm-mux support byte*/
			tmpbuf[13]= (IAS_LMMUX_EXCLU|IAS_LMMUX_ROLEEX|IAS_LMMUX_CLESS);
			tmpptr->size=11+1;/*11 for this query, 1 for IAP control field*/
			break;
		case COMM_PAR_TYP:   /*object id=2*/
			Format_IAS_return( 2,(kal_uint8*)tmpbuf, (FBUF*)tmpptr, 2, 0, (kal_uint8*)comm_params,  (kal_uint32)comm_params_size);  
			break;
		case SEL_TYP:       /*object id=3*/
	      if(((return_type>>8)&0x007f)==COMMX_LSAP_SEL)	
			   Format_IAS_return( 2,(kal_uint8*)tmpbuf, (FBUF*)tmpptr, 1, 0, 0,  (kal_uint32) ( (return_type>>8)&0x007f)  );  
			else            
            Format_IAS_return( 3,(kal_uint8*)tmpbuf, (FBUF*)tmpptr, 1, 0, 0,  (kal_uint32) ( (return_type>>8)&0x007f)  );  
			break;
#ifdef PNP_FLAG
/* all type 3 format responses*/
		case PNP_DEVICEID_TYP:
			tmpstr = (kal_uint8 *) PNP_DEVICEID;
			goto format_label;
		case PNP_NAME_TYP:		
			tmpstr = (kal_uint8 *) PNP_NAME;
			goto format_label;
		case PNP_MANUFACTURER_TYP:
			tmpstr = (kal_uint8 *) PNP_MANUFACTURER;
			goto format_label;
		case PNP_CATEGORY_TYP:
			tmpstr = (kal_uint8 *) PNP_CATEGORY;
			goto format_label;				
format_label:              /*object id=4*/
			Format_IAS_return( 4,(kal_uint8*)tmpbuf, (FBUF*)tmpptr, 3, (kal_uint8*)tmpstr, 0, 0 );
			break; 							
		case PNP_COMPCNT_TYP:		      
			Format_IAS_return( 4,(kal_uint8*)tmpbuf, (FBUF*)tmpptr, 1, 0, 0, 1 ); 				
			break;	
		case PNP_COMP01_TYP:		
         tmpstr = (kal_uint8 *) PNP_COMP01;
			Format_IAS_return( 4,(kal_uint8*)tmpbuf, (FBUF*)tmpptr, 3, (kal_uint8*)tmpstr, 0, 0 ); 			   
			break;
		case PNP_VERSION_TYP:
			Format_IAS_return( 4,(kal_uint8*)tmpbuf, (FBUF*)tmpptr, 2, 0, (kal_uint8*)pnp_version,  (kal_uint32)2 );  
			break;
		case PNP_STATUS_TYP:
			Format_IAS_return( 4,(kal_uint8*)tmpbuf, (FBUF*)tmpptr, 1, 0, 0,  (kal_uint32) PNP_STATUS );  
			break;
#endif
		default:
			/* unknown */
			/* return no such class */
			tmpbuf[3]=1; 
			tmpptr->size=2;
			break;
	}                  

/* send the data */
	/*@@@@MSG_ID_LMP_DATA_REQUEST*/
   irda_lmp_flag=MSG_ID_LMP_DATA_REQUEST;
   irda_data_buffer=tmpptr;
   local_lsap_sel=IAS_SERVER_LSAP_SEL;
   remote_lsap_sel=remote_ias_client_sel;

}
/*************************************************************************
* FUNCTION
*	Format_IAS_return
*
* DESCRIPTION
*	Format the IAS return  based on the type code 
*
* PARAMETERS
* 
* RETURNS
*	None
*
* GLOBALS AFFECTED

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

void Format_IAS_return(
            kal_uint16  object_id,
            kal_uint8 * tmpbuf, 
				FBUF * tmpptr,
				kal_uint8  type_code,
				kal_uint8 * ustring, 
				kal_uint8 * uarray, 
				kal_uint32 uintv ) 
{

kal_uint16 tmpint;
kal_uint32 tmplong;

	switch ( type_code ) 
	{

		case 1: /* type = 1, 32 bit int, internet order */ 

			/* respond with selector */
			tmpbuf[3]=0; /* return code = success */ 

			/* list size = 1, msb first */ 
			tmpint=Swap_int_order((kal_uint16)1);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+4),(kal_uint8*)&tmpint,2);

			/* object id = 0 */ 
			tmpint=Swap_int_order(object_id);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+6),(kal_uint8*)&tmpint,2);

			/* format the attribute user octet sequence */
			tmpbuf[8]=1; 	/* type = 1, 32 bit int, internet order */ 

			/* convert lmp selector */
			tmplong=Swap_long_order(uintv);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+9),(kal_uint8*)&tmplong,4);

			tmpptr->size=10+1;
			break;

		case 2: /* type = octet sequence */ 

			/* respond with irdasupport */
			tmpbuf[3]=0; /* return code = success */ 

			/* list size = 1, msb first */ 
			tmpint=Swap_int_order((kal_uint16)1);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+4),(kal_uint8*)&tmpint,2);

			/* object id = 0 */ 
			tmpint=Swap_int_order(object_id);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+6),(kal_uint8*)&tmpint,2);

			/* format the attribute user octet sequence */
			tmpbuf[8] =2; /* type = octet sequence */ 

			/* int length of sequence */ 
			tmpint=Swap_int_order((kal_uint16)uintv);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+9),(kal_uint8*)&tmpint,2);

			/* add the comm parameters */
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+11),(kal_uint8*)uarray,(kal_uint16)uintv);

			tmpptr->size=8+1+uintv;

			break;

		case 3: /* type = user string */ 

			tmpbuf[3]=0; /* return code = success */ 

			/* list size = 1, msb first */ 
			tmpint=Swap_int_order((kal_uint16)1);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+4),(kal_uint8*)&tmpint,2);

			/* object id = 0 */ 
			tmpint=Swap_int_order(object_id);
			xmemcpy((kal_uint8*)((kal_uint8*)tmpbuf+6),(kal_uint8*)&tmpint,2);

			/* format the attribute user string type */
			tmpbuf[8]=3; 	/* type = user string */ 

			/* respond with char set code */
			tmpbuf[9]=0; 

			/* respond with dev name */
			tmpbuf[10]=xstrlen((kal_char *)ustring);//+1; /* length of string */ 
			xmemcpy((kal_uint8*)&tmpbuf[11],(kal_uint8*)ustring,tmpbuf[10]);
			tmpptr->size=8+tmpbuf[10]+1;//+1
			break;

		default:
			break;
	}

}

⌨️ 快捷键说明

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