Esempio n. 1
0
static OSErr ExtractULTInfo( PPInfoRec *info, Ptr AlienFile)
{
	short		i, maxInstru, tracksNo;
	ULTForm		ULTinfo;
	/********************************/

	/**** Header principal *****/
	BlockMoveData( AlienFile, &ULTinfo, 49);
	
	/*** Signature ***/
	
	info->signature = 'ULT ';
	
	/*** Internal name ***/
	
	ULTinfo.name[ 31] = '\0';
	pStrcpy( (unsigned char*) info->internalFileName, MYC2PStr( ULTinfo.name));
	
	/*** Total Patterns ***/
	
	info->totalPatterns = 0;	//Tdecode16(  &ITinfo.patNum);
	
	/*** Partition Length ***/
	
	info->partitionLength = 0;	//Tdecode16( &ITinfo.orderNum);
	
	/*** Total Instruments ***/
	
	info->totalInstruments = 0;
	
	/*** Tracks ***/
	
	info->totalTracks	 = 0;
	
	strcpy( info->formatDescription, "ULT Plug");

	return noErr;
}
Esempio n. 2
0
int prh_test_rfcomm_pe_connect_port(t_bdaddr remote_bd_addr, prh_t_rfcomm_schan rem_schan, char *pName, prh_t_rfcomm_dlci *dlci, struct prh_rfcomm_pe_port **pe_info_ptr, u_int16 max_frame_size)
{
  struct prh_rfcomm_multi_cb multi_cbs;
  struct prh_rfcomm_dlc_cb dlc_cbs;
  prh_t_rfcomm_dlc_params dlc_params;
  int dbit;
  t_api ret;
  struct prh_rfcomm_l2cap_inst *l2cap_inst;
  void *multi_inst;
  struct prh_rfcomm_pe_port *pe_info;

  /* Allocate memory for pe_info */
  pe_info=(struct prh_rfcomm_pe_port *)pMalloc(sizeof(struct prh_rfcomm_pe_port));
  if (pe_info==pNULL)
    return BT_NORESOURCES;

  pe_info->portname=(char *)pMalloc(pStrlen(pName)+1);
  if (pe_info->portname==pNULL)
    {
      pFree(pe_info);
      return BT_NORESOURCES;
    }

  /* copy in portname */
  pStrcpy(pe_info->portname, pName);
    
  /* Check does a multiplexer to the remote BD Address exist already */
  ret=prh_rfcomm_lookup_l2cap_inst_by_bd_addr(remote_bd_addr, &l2cap_inst);
  if (ret==BT_INVALIDPARAM)
    {
      ret=prh_test_rfcomm_open_multiplexer(remote_bd_addr, &multi_inst);
      if (ret!=BT_NOERROR)
    return ret;
      dbit=1;
    }
  else
    {
      dbit=l2cap_inst->initiating;
      multi_inst=(void *)l2cap_inst;
    }
  
  /* Either Multiplexer is started or we've returned */
  dlc_params.max_frame_size=max_frame_size;
  dlc_params.priority=0;
  
  /* Generate the DLCI from direction and remote server channel */
  pe_info->dlci=*dlci=((!dbit) | (rem_schan<<1));
  pe_info->multi_inst=multi_inst;
  pe_info->flow_sem=pSemCreate(0);
  pe_info->remote_device_addr=remote_bd_addr;
  pe_info->portnum=0;
  pe_info->mode=PRH_PORT_ENT_CLIENT_CONN;
  prh_rfcomm_init_pe_struct(pe_info);
  
  prh_test_rfcomm_dlc_estab(remote_bd_addr, *dlci,multi_inst, &dlc_params);

  pSemLock(test_prh_rfcomm_ms.sem, 0);

  
  pSemFree(test_prh_rfcomm_ms.sem);
  
  if (test_prh_rfcomm_ms.status==PRH_RFCOMM_REFUSE)
    return BT_UNKNOWNERROR;
  else
    {
      prh_rfcomm_pe_add_port_entity(pe_info);
      *pe_info_ptr=pe_info;
      return BT_NOERROR;
    }

}
Esempio n. 3
0
APIDECL1 t_api APIDECL2 PE_SrvRegisterPort(char *port, prh_t_rfcomm_schan *serv_chan, void (*port_callback)(prh_t_rfcomm_schan schan, t_bdaddr bd_addr, u_int8 connection_state))
{
  struct prh_rfcomm_pe_port *pe_info;
  struct prh_rfcomm_dlc_cb dlc_cbs;
  int ret=0;
  int portnum;

  /* three traps, illegal server channel number, 0 server channel number (user requested), 1-30 */
  if (*serv_chan>PRH_RFCOMM_MAX_SCHAN)
    return BT_INVALIDPARAM;
  
  /* Has user requested a server channel */
  if (*serv_chan==0)
    {
      ret=PRH_RFCOMM_UE_Allocate_Server_Channel(serv_chan);
      if (ret!=BT_NOERROR)
	return ret;
    }
  else
    {
      ret=PRH_RFCOMM_UE_Get_Channel_State(*serv_chan);
      if (ret==BT_NOERROR)
	/*Channel Exists already */
	return BT_INVALIDPARAM;
    }
  
  portnum=*serv_chan;  

  /* Add port to list of registered port numbers */
  pe_info=(struct prh_rfcomm_pe_port *)pMalloc(sizeof(struct prh_rfcomm_pe_port));
  if (pe_info==pNULL)
    {
      ret=BT_NORESOURCES;
      goto err_out_dealloc;
    }

  pMemset(pe_info, 0, sizeof(struct prh_rfcomm_pe_port));      
  prh_rfcomm_init_pe_struct(pe_info);
  
  pe_info->portname=(char *)pMalloc(pStrlen(port)+1);
  if (pe_info->portname==pNULL)
    {
      ret=BT_NORESOURCES;
      goto err_out_free_info;
    }
  
  pStrcpy(pe_info->portname, port);
  pe_info->port_cbfunc=port_callback;
  pe_info->portnum=portnum;
  
  dlc_cbs.dlc_estab_ind=port_ent_dlc_estab_ind_cb;
  dlc_cbs.dlc_estab_conf=port_ent_dlc_estab_conf_cb;
  dlc_cbs.dlc_rel_ind=port_ent_dlc_rel_ind_cb;
  dlc_cbs.dlc_data_ind=port_ent_dlc_data_ind_cb;
  dlc_cbs.linestat=port_ent_dlc_linestat_cb;
  dlc_cbs.portneg=port_ent_dlc_portneg_cb;
  dlc_cbs.control=port_ent_dlc_control_cb;
  dlc_cbs.agg_flow_ind=port_ent_dlc_flow_ind_cb;
  dlc_cbs.dlc_paramneg=port_ent_dlc_paramneg_cb;
  dlc_cbs.credit_flow_ind=port_ent_dlc_credit_flow_cb;
  
  ret=prh_rfcomm_pe_add_port_entity(pe_info);
  if (ret==BT_NORESOURCES)
    {
      goto err_out_free_info;
    }
  
  ret=PRH_RFCOMM_UE_Register_Server(*serv_chan, &dlc_cbs);
  if (ret!=BT_NOERROR)
    {
      goto err_out_remove_pe;
    }

  /* Do OS Specific Registering */
  ret=PE_OS_SrvRegisterPort(pe_info);
  if (ret!=BT_NOERROR)
    {
      PRH_RFCOMM_UE_Deregister_Server(*serv_chan);
      goto err_out_remove_pe;
    }
  return BT_NOERROR;
  
  /* handle different error conditions .. make sure to clean up */
 err_out_remove_pe:
  prh_rfcomm_pe_remove_port_entity_by_portnum(&pe_info, *serv_chan);
 err_out_free_info:
  prh_rfcomm_free_pe_struct(pe_info);
 err_out_dealloc:
  PRH_RFCOMM_UE_Deallocate_Server_Channel(*serv_chan);
  return ret;
}