Exemple #1
0
static int wilc_wlan_txq_add_to_head(struct wilc *wilc, struct txq_entry_t *tqe)
{
	unsigned long flags;
	if (wilc_lock_timeout(wilc, &wilc->txq_add_to_head_cs,
				    CFG_PKTS_TIMEOUT))
		return -1;

	spin_lock_irqsave(&wilc->txq_spinlock, flags);

	if (!wilc->txq_head) {
		tqe->next = NULL;
		tqe->prev = NULL;
		wilc->txq_head = tqe;
		wilc->txq_tail = tqe;
	} else {
		tqe->next = wilc->txq_head;
		tqe->prev = NULL;
		wilc->txq_head->prev = tqe;
		wilc->txq_head = tqe;
	}
	wilc->txq_entries += 1;
	PRINT_D(TX_DBG, "Number of entries in TxQ = %d\n", wilc->txq_entries);

	spin_unlock_irqrestore(&wilc->txq_spinlock, flags);
	up(&wilc->txq_add_to_head_cs);
	up(&wilc->txq_event);
	PRINT_D(TX_DBG, "Wake up the txq_handler\n");

	return 0;
}
Exemple #2
0
static void wilc_wlan_txq_add_to_tail(struct net_device *dev,
				      struct txq_entry_t *tqe)
{
	unsigned long flags;
	struct wilc_vif *vif;
	struct wilc *wilc;

	vif = netdev_priv(dev);
	wilc = vif->wilc;

	spin_lock_irqsave(&wilc->txq_spinlock, flags);

	if (!wilc->txq_head) {
		tqe->next = NULL;
		tqe->prev = NULL;
		wilc->txq_head = tqe;
		wilc->txq_tail = tqe;
	} else {
		tqe->next = NULL;
		tqe->prev = wilc->txq_tail;
		wilc->txq_tail->next = tqe;
		wilc->txq_tail = tqe;
	}
	wilc->txq_entries += 1;
	PRINT_D(TX_DBG, "Number of entries in TxQ = %d\n", wilc->txq_entries);

	spin_unlock_irqrestore(&wilc->txq_spinlock, flags);

	PRINT_D(TX_DBG, "Wake the txq_handling\n");

	up(&wilc->txq_event);
}
Exemple #3
0
/**
*  @brief 	ATWILC_WFI_deinit_mon_interface
*  @details 	
*  @param[in]   
*  @return 	int : Return 0 on Success
*  @author	mdaftedar
*  @date	12 JUL 2012	
*  @version	1.0
*/
int ATWILC_WFI_deinit_mon_interface()
{
	bool rollback_lock = false;
		
	if(atwilc_wfi_mon != NULL)
	{
		PRINT_D(HOSTAPD_DBG,"In Deinit monitor interface\n");
		PRINT_D(HOSTAPD_DBG,"RTNL is being locked\n");
		if (rtnl_is_locked()) 
                {
			rtnl_unlock();
			rollback_lock = true;
		}
		PRINT_D(HOSTAPD_DBG,"Unregister netdev\n");
		unregister_netdev(atwilc_wfi_mon);
		//ATL_PRINTF("Free Netdev\n");
		//free_netdev(atwilc_wfi_mon);
		
		if (rollback_lock) 
		{
			rtnl_lock();
			rollback_lock = false;
		}
		atwilc_wfi_mon = NULL;
	}
	return ATL_SUCCESS;
	
}
Exemple #4
0
static int wilc_bus_probe(struct spi_device *spi)
{
	PRINT_D(BUS_DBG, "spiModalias: %s\n", spi->modalias);
	PRINT_D(BUS_DBG, "spiMax-Speed: %d\n", spi->max_speed_hz);
	wilc_spi_dev = spi;

	up(&spi_probe_sync);
	return 0;
}
Exemple #5
0
static void mgmt_tx_complete(void* priv, int status){

	 //struct sk_buff *skb2;
	 //struct atwilc_wfi_radiotap_cb_hdr *cb_hdr;
	
	struct tx_complete_mon_data* pv_data = (struct tx_complete_mon_data*)priv;
	 ATL_Uint8 * buf=  pv_data->buff;


	 
	if(status == 1){
		if(INFO || buf[0] == 0x10 || buf[0] == 0xb0)
		PRINT_D(HOSTAPD_DBG,"Packet sent successfully - Size = %d - Address = %p.\n",pv_data->size,pv_data->buff);
	}else{
			PRINT_D(HOSTAPD_DBG,"Couldn't send packet - Size = %d - Address = %p.\n",pv_data->size,pv_data->buff);
		}
		

/*			//(skb->data[9] == 0x00 || skb->data[9] == 0xb0 || skb->data[9] == 0x40 ||  skb->data[9] == 0xd0 )
	{
		skb2 = dev_alloc_skb(pv_data->size+sizeof(struct atwilc_wfi_radiotap_cb_hdr));

		memcpy(skb_put(skb2,pv_data->size),pv_data->buff, pv_data->size);

		cb_hdr = (struct atwilc_wfi_radiotap_cb_hdr *) skb_push(skb2, sizeof(*cb_hdr));
		memset(cb_hdr, 0, sizeof(struct atwilc_wfi_radiotap_cb_hdr));

		 cb_hdr->hdr.it_version = 0;//PKTHDR_RADIOTAP_VERSION;
        
      	        cb_hdr->hdr.it_len = cpu_to_le16(sizeof(struct atwilc_wfi_radiotap_cb_hdr));

       	 cb_hdr->hdr.it_present = cpu_to_le32(
                                          (1 << IEEE80211_RADIOTAP_RATE) |
                                         (1 << IEEE80211_RADIOTAP_TX_FLAGS));
 
        	cb_hdr->rate = 5;//txrate->bitrate / 5;
        	cb_hdr->tx_flags = 0x0004;
			
		skb2->dev = atwilc_wfi_mon;
	        skb_set_mac_header(skb2, 0);
	        skb2->ip_summed = CHECKSUM_UNNECESSARY;
	        skb2->pkt_type = PACKET_OTHERHOST;
	        skb2->protocol = htons(ETH_P_802_2);
	        memset(skb2->cb, 0, sizeof(skb2->cb));
			
		netif_rx(skb2);
	}*/

	/* incase of fully hosting mode, the freeing will be done in response to the cfg packet */
	#ifndef ATWILC_FULLY_HOSTING_AP
	kfree(pv_data->buff);
	
	kfree(pv_data);
	#endif
}
Exemple #6
0
int linux_spi_write(uint8_t* b, uint32_t len){	

	int ret;

	if(len > 0 && b != NULL) {
		struct spi_message msg;			
		PRINT_D(BUS_DBG,"Request writing %d bytes\n",len);
		struct spi_transfer tr = {
			.tx_buf = b,
			.len = len,							
			.speed_hz = SPEED,
			.delay_usecs = 0,
		};
	
		spi_message_init(&msg);
		spi_message_add_tail(&tr,&msg);
		ret = spi_sync(atwilc_spi_dev,&msg);
		if(ret < 0){
			PRINT_ER( "SPI transaction failed\n");
		}

	} else{
		PRINT_ER("can't write data with the following length: %d\n",len);
		PRINT_ER("FAILED due to NULL buffer or ZERO length check the following length: %d\n",len);
		ret = -1;
	}

	/* change return value to match ATWILC interface */
	(ret<0)? (ret = 0):(ret = 1);


	return ret;
}
Exemple #7
0
void disable_sdio_interrupt(void)
{

#ifndef WILC_SDIO_IRQ_GPIO
	int ret;

	PRINT_D(INIT_DBG, "disable_sdio_interrupt IN\n");

	sdio_claim_host(local_sdio_func);
	ret = sdio_release_irq(local_sdio_func);
	if (ret < 0) {
		PRINT_ER("can't release sdio_irq, err(%d)\n", ret);
	}
	sdio_release_host(local_sdio_func);

	PRINT_D(INIT_DBG, "disable_sdio_interrupt OUT\n");
#endif
}
Exemple #8
0
static int mon_mgmt_tx(struct net_device *dev, const u8 *buf, size_t len)
{
	linux_wlan_t* nic;
	struct tx_complete_mon_data *mgmt_tx =NULL;

	 	if(dev == NULL)
		{
			PRINT_D(HOSTAPD_DBG,"ERROR: dev == NULL\n");
			return ATL_FAIL;
		}
	nic =netdev_priv(dev);
	
	//ATL_PRINTF("--IN mon_mgmt_tx--\n");
	netif_stop_queue(dev);	
	mgmt_tx = (struct tx_complete_mon_data*)kmalloc(sizeof(struct tx_complete_mon_data),GFP_ATOMIC);
	if(mgmt_tx == NULL){
		PRINT_ER("Failed to allocate memory for mgmt_tx structure\n");
	     	return ATL_FAIL;
	}
			
	#ifdef ATWILC_FULLY_HOSTING_AP
	// add space for the pointer to tx_complete_mon_data
	len+=sizeof(struct tx_complete_mon_data*);
	#endif
	
	mgmt_tx->buff= (char*)kmalloc(len,GFP_ATOMIC);
	if(mgmt_tx->buff == NULL)
	{
		PRINT_ER("Failed to allocate memory for mgmt_tx buff\n");
	     	return ATL_FAIL;
	
	}

	mgmt_tx->size=len;
	
	#ifndef ATWILC_FULLY_HOSTING_AP
	memcpy(mgmt_tx->buff,buf,len);
	#else
	//printk("sizeof(struct tx_complete_mon_data*) = %d\n",sizeof(struct tx_complete_mon_data*));
	//printk("len = %d, mgmt_tx=%x\n",len,mgmt_tx);
	memcpy(mgmt_tx->buff,buf,len-sizeof(struct tx_complete_mon_data*));
	memcpy((mgmt_tx->buff)+(len-sizeof(struct tx_complete_mon_data*)),&mgmt_tx,sizeof(struct tx_complete_mon_data*));

	// filter data frames to handle it's PS
	if(filter_monitor_data_frames((mgmt_tx->buff),len)== ATL_TRUE)
	{
		return;
	}
	
	#endif //ATWILC_FULLY_HOSTING_AP

	//printk("--IN mon_mgmt_tx: Sending MGMT Pkt to tx queue--\n");
	g_linux_wlan->oup.wlan_add_mgmt_to_tx_que(mgmt_tx,mgmt_tx->buff,mgmt_tx->size,mgmt_tx_complete);

	netif_wake_queue(dev);
	return 0;
}
Exemple #9
0
static inline int add_tcp_session(u32 src_prt, u32 dst_prt, u32 seq)
{
	ack_session_info[tcp_session].seq_num = seq;
	ack_session_info[tcp_session].bigger_ack_num = 0;
	ack_session_info[tcp_session].src_port = src_prt;
	ack_session_info[tcp_session].dst_port = dst_prt;
	tcp_session++;

	PRINT_D(TCP_ENH, "TCP Session %d to Ack %d\n", tcp_session, seq);
	return 0;
}
Exemple #10
0
static int linux_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id)
{
	struct wilc_sdio *wl_sdio;
	struct wilc *wilc;

	PRINT_D(INIT_DBG, "probe function\n");
	wl_sdio = kzalloc(sizeof(struct wilc_sdio), GFP_KERNEL);
	if (!wl_sdio)
		return -ENOMEM;

	PRINT_D(INIT_DBG, "Initializing netdev\n");
	local_sdio_func = func;
	if (wilc_netdev_init(&wilc)) {
		PRINT_ER("Couldn't initialize netdev\n");
		kfree(wl_sdio);
		return -1;
	}
	wl_sdio->func = func;
	wl_sdio->wilc = wilc;
	sdio_set_drvdata(func, wl_sdio);

	printk("Driver Initializing success\n");
	return 0;
}
Exemple #11
0
static int linux_sdio_set_speed(int speed)
{
#if 1
	struct mmc_ios ios;
	sdio_claim_host(local_sdio_func);
	
	memcpy((void *)&ios,(void *)&local_sdio_func->card->host->ios,sizeof(struct mmc_ios));
	local_sdio_func->card->host->ios.clock = speed;
	ios.clock = speed;
	local_sdio_func->card->host->ops->set_ios(local_sdio_func->card->host,&ios);
	sdio_release_host(local_sdio_func);
	PRINT_D(INIT_DBG,"@@@@@@@@@@@@ change SDIO speed to %d @@@@@@@@@\n", speed);
#endif
	return 1;
}
Exemple #12
0
/**
 *  @brief              sends certain Configuration Packet based on the input WIDs pstrWIDs
 *  using driver config layer
 *
 *  @details
 *  @param[in]  pstrWIDs WIDs to be sent in the configuration packet
 *  @param[in]  u32WIDsCount number of WIDs to be sent in the configuration packet
 *  @param[out]         pu8RxResp The received Packet Response
 *  @param[out]         ps32RxRespLen Length of the received Packet Response
 *  @return     Error code indicating success/failure
 *  @note
 *  @author	mabubakr
 *  @date		1 Mar 2012
 *  @version	1.0
 */
s32 send_config_pkt(u8 mode, struct wid *wids, u32 count, u32 drv)
{
	s32 counter = 0, ret = 0;

	if (mode == GET_CFG) {
		for (counter = 0; counter < count; counter++) {
			PRINT_INFO(CORECONFIG_DBG, "Sending CFG packet [%d][%d]\n", !counter,
				   (counter == count - 1));
			if (!wilc_wlan_cfg_get(!counter,
					       wids[counter].id,
					       (counter == count - 1),
					       drv)) {
				ret = -1;
				printk("[Sendconfigpkt]Get Timed out\n");
				break;
			}
		}
		counter = 0;
		for (counter = 0; counter < count; counter++) {
			wids[counter].size = wilc_wlan_cfg_get_val(
					wids[counter].id,
					wids[counter].val,
					wids[counter].size);

		}
	} else if (mode == SET_CFG) {
		for (counter = 0; counter < count; counter++) {
			PRINT_D(CORECONFIG_DBG, "Sending config SET PACKET WID:%x\n", wids[counter].id);
			if (!wilc_wlan_cfg_set(!counter,
					       wids[counter].id,
					       wids[counter].val,
					       wids[counter].size,
					       (counter == count - 1),
					       drv)) {
				ret = -1;
				printk("[Sendconfigpkt]Set Timed out\n");
				break;
			}
		}
	}

	return ret;
}
Exemple #13
0
int linux_spi_write(uint8_t *b, uint32_t len)
{
	int ret;
	struct spi_message msg;

	if (len > 0 && NULL != b) {
		struct spi_transfer tr = {
			.tx_buf = b,
			.len = len,
			.speed_hz = SPEED,
			.delay_usecs = 0,
		};
		char *r_buffer = kzalloc(len, GFP_KERNEL);

		if (!r_buffer)
			return 0;	/* TODO: it should be return -ENOMEM */

		tr.rx_buf = r_buffer;
		PRINT_D(BUS_DBG, "Request writing %d bytes\n", len);

		spi_message_init(&msg);
		spi_message_add_tail(&tr, &msg);
		ret = spi_sync(wilc_spi_dev, &msg);
		if (ret < 0)
			PRINT_ER("SPI transaction failed\n");

		kfree(r_buffer);
	} else {
		PRINT_ER("can't write data due to NULL buffer or zero length\n");
		ret = -1;
	}

	(ret < 0) ? (ret = 0) : (ret = 1);

	return ret;
}
static void print_gll_lag_fix(int n)
{
  int i;
  DECLARE_1VAR(z);
  if(n>3) {
    printf("static const double gllz_%02d[%2d] = {\n  ",n,n/2-1);
    for(i=1;i<=n/2-1;++i) {
      lobatto_node(z, n,n-1-i);
      if(i!=1) printf(",\n  ");
      gmp_printf("%.*Fg",DIGITS,z);
    }
    puts("\n};\n");
  }
  printf(STATIC "void gll_lag_%02d(double *restrict p, double *restrict data,\n"
           "                       unsigned n, int d, double xh)\n{\n",n);
  printf("  const double *restrict w = data;\n");
  printf("  const double x = xh*2;\n");
  #define PRINT_D(i) do { \
    printf("d%02d=x",i); \
    if(2*i+1==n)    printf("              "); \
    else if(i==0)   printf("+2            "); \
    else if(i==n-1) printf("-2            "); \
    else if(i<n/2)  printf("+2*gllz_%02d[%2d]",n,i-1); \
    else            printf("-2*gllz_%02d[%2d]",n,n-2-i); \
  } while(0)
  printf("%s",                            "  const double ");
  PRINT_LIST(i, 0,3,n, PRINT_D(i),",",",\n               ");
  #undef PRINT_D
  #define PRINT_U0(i) (i==0  ?printf("    1"):printf("u0_%02d",i))
  #define PRINT_V0(i) (i==n-1?printf("    1"):printf("v0_%02d",i))
  #define PRINT_U1(i) (i<=1  ?printf("    %d",i      ):printf("u1_%02d",i))
  #define PRINT_V1(i) (i>=n-2?printf("    %d",n-1-(i)):printf("v1_%02d",i))
  #define PRINT_U2(i) (i<=1  ?printf("    0"): \
                      (i==2  ?printf("    2"):printf("u2_%02d",i)))
  #define PRINT_V2(i) (i>=n-2?printf("    0"): \
                      (i==n-3?printf("    2"):printf("v2_%02d",i)))
  printf("%s",";\n  const double ");
  PRINT_LIST(i, 1,3,n,
    (PRINT_U0(i),putchar('='),PRINT_U0(i-1),printf("*d%02d",i-1)),
    ",",",\n               ");
  printf("%s",";\n  const double ");
  PRINT_LIST(i, 1,3,n,
    (PRINT_V0(n-1-i),putchar('='),printf("d%02d*",n-i),PRINT_V0(n-i)),
    ",",",\n               ");
  printf("%s",";\n  ");
  PRINT_LIST(i, 0,3,n, 
    (printf("p[%2d]=w[%2d]*",i,i),PRINT_U0(i),putchar('*'),
     PRINT_V0(i)),"; ",";\n  ");
  puts(";\n  if(d>0) {");
  if(n>2) {
    printf("%s","    const double ");
    PRINT_LIST(i, 2,2,n,
      (PRINT_U1(i),putchar('='),PRINT_U1(i-1),printf("*d%02d",i-1),
       putchar('+'),PRINT_U0(i-1)),
      ",",",\n                 ");
    printf("%s",";\n    const double ");
    PRINT_LIST(i, 2,2,n,
      (PRINT_V1(n-1-i),putchar('='),printf("d%02d*",n-i),PRINT_V1(n-i),
       putchar('+'),PRINT_V0(n-i)),
      ",",",\n                 ");
    puts(";");
  }
  for(i=0;i<n;++i) {
    printf("    p[%d+%2d]=2*w[%2d]*(",n,i,i);
    if(i==0)        printf("                  "),PRINT_V1(0);
    else if(i==n-1) PRINT_U1(i),printf("                  ");
    else PRINT_U1(i),putchar('*'),PRINT_V0(i),putchar('+'),
         PRINT_U0(i),putchar('*'),PRINT_V1(i);
    puts(");");
  }
  puts("    if(d>1) {");
  if(n>3) {
    printf("%s","      const double ");
    PRINT_LIST(i, 3,2,n,
      (PRINT_U2(i),putchar('='),PRINT_U2(i-1),printf("*d%02d",i-1),
       printf("+2*"),PRINT_U1(i-1)),
      ",",",\n                   ");
    printf("%s",";\n      const double ");
    PRINT_LIST(i, 3,2,n,
      (PRINT_V2(n-1-i),putchar('='),printf("d%02d*",n-i),PRINT_V2(n-i),
       printf("+2*"),PRINT_V1(n-i)),
      ",",",\n                   ");
    puts(";");
  }  
  if(n<3) for(i=0;i<n;++i) printf("      p[2*%d+%2d]=0;\n",n,i);
  else for(i=0;i<n;++i) {
      printf("      p[2*%d+%2d]=4*w[%2d]*(",n,i,i);
      if(i>1)
        PRINT_U2(i),putchar('*'),PRINT_V0(i);
      else printf("           ");
      if(i>0 && i<n-1)
        printf("+2*"),PRINT_U1(i),putchar('*'),PRINT_V1(i);
      else printf("              ");
      if(i<n-2)
        putchar('+'),PRINT_U0(i),putchar('*'),PRINT_V2(i);
      else printf("            ");
      puts(");");
  }
  #undef PRINT_U0
  #undef PRINT_V0
  #undef PRINT_U1
  #undef PRINT_V1
  #undef PRINT_U2
  #undef PRINT_V2
  puts("    }\n  }\n}");
}
Exemple #15
0
/**
 *  @brief                      parses the received 'N' message
 *  @details
 *  @param[in]  pu8MsgBuffer The message to be parsed
 *  @param[out]         ppstrNetworkInfo pointer to pointer to the structure containing the parsed Network Info
 *  @return             Error code indicating success/failure
 *  @note
 *  @author		mabubakr
 *  @date			1 Mar 2012
 *  @version		1.0
 */
s32 parse_network_info(u8 *pu8MsgBuffer, tstrNetworkInfo **ppstrNetworkInfo)
{
	tstrNetworkInfo *pstrNetworkInfo = NULL;
	u8 u8MsgType = 0;
	u8 u8MsgID = 0;
	u16 u16MsgLen = 0;

	u16 u16WidID = (u16)WID_NIL;
	u16 u16WidLen  = 0;
	u8  *pu8WidVal = NULL;

	u8MsgType = pu8MsgBuffer[0];

	/* Check whether the received message type is 'N' */
	if ('N' != u8MsgType) {
		PRINT_ER("Received Message format incorrect.\n");
		return -EFAULT;
	}

	/* Extract message ID */
	u8MsgID = pu8MsgBuffer[1];

	/* Extract message Length */
	u16MsgLen = MAKE_WORD16(pu8MsgBuffer[2], pu8MsgBuffer[3]);

	/* Extract WID ID */
	u16WidID = MAKE_WORD16(pu8MsgBuffer[4], pu8MsgBuffer[5]);

	/* Extract WID Length */
	u16WidLen = MAKE_WORD16(pu8MsgBuffer[6], pu8MsgBuffer[7]);

	/* Assign a pointer to the WID value */
	pu8WidVal  = &pu8MsgBuffer[8];

	/* parse the WID value of the WID "WID_NEWORK_INFO" */
	{
		u8  *pu8msa = NULL;
		u16 u16RxLen = 0;
		u8 *pu8TimElm = NULL;
		u8 *pu8IEs = NULL;
		u16 u16IEsLen = 0;
		u8 u8index = 0;
		u32 u32Tsf_Lo;
		u32 u32Tsf_Hi;

		pstrNetworkInfo = kzalloc(sizeof(tstrNetworkInfo), GFP_KERNEL);
		if (!pstrNetworkInfo)
			return -ENOMEM;

		pstrNetworkInfo->s8rssi = pu8WidVal[0];

		/* Assign a pointer to msa "Mac Header Start Address" */
		pu8msa = &pu8WidVal[1];

		u16RxLen = u16WidLen - 1;

		/* parse msa*/

		/* Get the cap_info */
		pstrNetworkInfo->u16CapInfo = get_cap_info(pu8msa);
		/* Get time-stamp [Low only 32 bit] */
		pstrNetworkInfo->u32Tsf = get_beacon_timestamp_lo(pu8msa);
		PRINT_D(CORECONFIG_DBG, "TSF :%x\n", pstrNetworkInfo->u32Tsf);

		/* Get full time-stamp [Low and High 64 bit] */
		u32Tsf_Lo = get_beacon_timestamp_lo(pu8msa);
		u32Tsf_Hi = get_beacon_timestamp_hi(pu8msa);

		pstrNetworkInfo->u64Tsf = u32Tsf_Lo | ((u64)u32Tsf_Hi << 32);

		/* Get SSID */
		get_ssid(pu8msa, pstrNetworkInfo->au8ssid, &pstrNetworkInfo->u8SsidLen);

		/* Get BSSID */
		get_BSSID(pu8msa, pstrNetworkInfo->au8bssid);

		/*
		 * Extract current channel information from
		 * the beacon/probe response frame
		 */
		pstrNetworkInfo->u8channel = get_current_channel_802_11n(pu8msa,
							u16RxLen + FCS_LEN);

		/* Get beacon period */
		u8index = MAC_HDR_LEN + TIME_STAMP_LEN;

		pstrNetworkInfo->u16BeaconPeriod = get_beacon_period(pu8msa + u8index);

		u8index += BEACON_INTERVAL_LEN + CAP_INFO_LEN;

		/* Get DTIM Period */
		pu8TimElm = get_tim_elm(pu8msa, u16RxLen + FCS_LEN, u8index);
		if (pu8TimElm != NULL)
			pstrNetworkInfo->u8DtimPeriod = pu8TimElm[3];
		pu8IEs = &pu8msa[MAC_HDR_LEN + TIME_STAMP_LEN + BEACON_INTERVAL_LEN + CAP_INFO_LEN];
		u16IEsLen = u16RxLen - (MAC_HDR_LEN + TIME_STAMP_LEN + BEACON_INTERVAL_LEN + CAP_INFO_LEN);

		if (u16IEsLen > 0) {
			pstrNetworkInfo->pu8IEs = kmemdup(pu8IEs, u16IEsLen,
							  GFP_KERNEL);
			if (!pstrNetworkInfo->pu8IEs)
				return -ENOMEM;
		}
		pstrNetworkInfo->u16IEsLen = u16IEsLen;

	}

	*ppstrNetworkInfo = pstrNetworkInfo;

	return 0;
}
Exemple #16
0
int
libapetag_convertID3v2toAPE (const ID3Frame * frame,
                 char **item_, size_t * item_len,
                 char **value_, size_t * value_len,
                 unsigned long *flags)
{
    ID3Field *text;
    ID3Field *desc;
    ID3Field *url;
//      ID3Field *bin;  // will be implemented some day

    char *item = NULL;
    char *value = NULL;
    
    ID3_FrameID frameid = ID3Frame_GetID (frame);
    unsigned int i;
    
    *flags = ITEM_TEXT;
    
    for (i = 0; i < sizeof (convert) / sizeof (struct id3vtwo2ape); i++)
        if (frameid == convert[i].frame)
            break;


    if (convert[i].field_type == ID3FN_TEXT) {
        switch (convert[i].special) {
        case APETAG_TYPE_COMMENT: /* Comments and unsynced lyrics */
            if ((text = ID3Frame_GetField(frame, ID3FN_TEXT)) != NULL) {
                ALOCATE(text, value, *value_len);
                ID3Field_GetASCII(text, value, *value_len);
            }
            ALOCATE_ITEM(item, convert[i].APEName, *item_len);
            strncpy(item, convert[i].APEName, *item_len);
            item[*item_len]='\0';
            //break;
            if ((text = ID3Frame_GetField (frame, ID3FN_DESCRIPTION)) != NULL) {
                char *value_ds=NULL;
                int value_len2;
                if (ID3Field_Size(text) != 0) {
                    ALOCATE(text, value_ds, value_len2);
                    ID3Field_GetASCII(text, value_ds, value_len2);
                    if ( strcmp(value_ds, STR_V1_COMMENT_DESC) == 0 ) {
                        value_len2 = 0;
                        value[0]='\0';
                    } else {
                        item = (char *) realloc( item, (*item_len) + value_len2 + 3);
                        item[(*item_len)++]='-'; item[(*item_len)]='\0';
                        strncpy(item + (*item_len),value_ds ,(value_len2 + 1));
                        (*item_len)+=value_len2;
                    }
                    free(value_ds);
                }
            }
            break;
            
        case APETAG_TYPE_USER:  /* User texts */
            if ((text = ID3Frame_GetField(frame, ID3FN_TEXT)) != NULL) {
                ALOCATE(text, value, *value_len);
                ID3Field_GetASCII(text, value, *value_len);
            }
            if ((desc = ID3Frame_GetField(frame, ID3FN_DESCRIPTION)) != NULL) {
                ALOCATE(desc, item, *item_len);
                ID3Field_GetASCII(desc, item, *item_len);
            }
            break;
            
        case APETAG_TYPE_GENRE: /* genre */ 
            if ((text = ID3Frame_GetField(frame, ID3FN_TEXT)) != NULL) {
                char *p;
                int j;
                ALOCATE(text, value, *value_len);
                ID3Field_GetASCII(text, value, *value_len);
                ALOCATE_ITEM(item, convert[i].APEName, *item_len);
                strncpy(item, convert[i].APEName, *item_len);
                value[*value_len]='\0';
                p = value;
                if (*p == '(') {
                    p++;
                    while (*p && (*p >= '0' && *p <= '9'))
                        p++;
                    if (*p && *p == ')') {
                        p++;
                    } else {
                        p = value;
                    }
                    *value_len -= (p-value); // corect lenght of frame
                    if (*p != '\0') { // copy in place
                        for (j = 0; *p != '\0'; j++) {
                            value[j] = *p;
                            p++;
                        }
                        value[j] = '\0';
                    }
                }
            }
            break;
            
        default:    /* normal text tags */
            if ((text = ID3Frame_GetField(frame, ID3FN_TEXT)) != NULL) {
                ALOCATE(text, value, *value_len);
                ID3Field_GetASCII(text, value, *value_len);
                ALOCATE_ITEM(item, convert[i].APEName, *item_len);
                strncpy(item, convert[i].APEName, *item_len);
            }
            break;
            
        } /* <- switch( convert[i].special ) */
        
        item[*item_len]='\0';
        value[*value_len]='\0';
    } else 
    if (convert[i].field_type == ID3FN_URL) {
        *flags = ITEM_URL;
        /* TODO: set ape_tag_URL in flag */
        /* user url */
        if (convert[i].special == APETAG_TYPE_USER) {
            if ((url = ID3Frame_GetField(frame, ID3FN_URL)) != NULL) {
                ALOCATE(url, value, *value_len);
                ID3Field_GetASCII(url, value, *value_len);
            }
            if ((desc = ID3Frame_GetField(frame, ID3FN_DESCRIPTION)) != NULL) {
                ALOCATE(desc, item, *item_len);
                ID3Field_GetASCII(desc, item, *item_len);
            }
            /* normal url */
        } else {
            if ((url = ID3Frame_GetField (frame, ID3FN_URL)) != NULL) {
                ALOCATE(url, value, *value_len);
                ID3Field_GetASCII(url, value, *value_len);
                ALOCATE_ITEM(item, convert[i].APEName, *item_len);
                strncpy(item, convert[i].APEName, *item_len);
            }
        }
        
        item[*item_len]='\0';
        value[*value_len]='\0';
    } else {        //convert[i].field_type
        item = NULL;
        value = NULL;
        PRINT_D (">id3v2_read>other\n");
    }
    *item_ = item;
    *value_ = value;
    
    if (!(value==NULL || (*value_len)==0) && value[(*value_len)-1]=='\0')
        (*value_len)--;

    return 0;
}
Exemple #17
0
void fprint_table(FILE* stream, rs_sample *s_x[N_EX_VAR], rs_sample *s_q[2],\
                  const mat *res, const fit_param *param, const plot_flag f)
{
    mat **x_err,*q_err;
    const rs_sample *s_q_pt;
    size_t nens,ydim;
    size_t ens_ind;
    
    nens     = param->nens;
    ydim     = (f == SCALE) ? 0   : 1;
    s_q_pt   = s_q[ydim];
    
    x_err = mat_ar_create(N_EX_VAR,nens,1);
    q_err = mat_create(nens,1);
    
    /* computing errors */
    rs_sample_varp(x_err[i_ud],s_x[i_ud]);
    mat_eqsqrt(x_err[i_ud]);
    rs_sample_varp(x_err[i_s],s_x[i_s]);
    mat_eqsqrt(x_err[i_s]);
    rs_sample_varp(x_err[i_a],s_x[i_a]);
    mat_eqsqrt(x_err[i_a]);
    rs_sample_varp(x_err[i_umd],s_x[i_umd]);
    mat_eqsqrt(x_err[i_umd]);
    rs_sample_varp(x_err[i_Linv],s_x[i_Linv]);
    mat_eqsqrt(x_err[i_Linv]);
    rs_sample_varp(q_err,s_q_pt);
    mat_eqsqrt(q_err);
    
    /* display */
    fprintf(stream,"#%49s  ","ensemble");
    PRINT_DLABEL_WERR(param->ud_name);
    PRINT_DLABEL_WERR(param->s_name);
    if (f == Q)
    {
        PRINT_DLABEL_WERR("a");
    }
    if (param->have_umd)
    {
        PRINT_DLABEL_WERR(param->umd_name);
    }
    if (param->have_alpha)
    {
        PRINT_DLABEL("alpha");
    }
    PRINT_DLABEL_WERR("1/L");
    if (f == Q)
    {
        PRINT_DLABEL_WERR(param->q_name);
    }
    else if (f == SCALE)
    {
        PRINT_DLABEL_WERR(param->scale_part);
    }
    PRINT_DLABEL("residuals");
    fprintf(stream,"\n");
    for(ens_ind=0;ens_ind<nens;ens_ind++)
    {
        fprintf(stream,"%50s  ",param->point[ens_ind].dir);
        PRINT_X_WERR(i_ud);
        PRINT_X_WERR(i_s);
        if (f == Q)
        {
            PRINT_X_WERR(i_a);
        }
        if (param->have_umd)
        {
            PRINT_X_WERR(i_umd);
        }
        if (param->have_alpha)
        {
            PRINT_X(i_alpha);
        }
        PRINT_X_WERR(i_Linv);
        PRINT_CV_WERR(s_q_pt,q_err);
        PRINT_D(mat_get(res,ens_ind,0));
        fprintf(stream,"\n");
    }
    fprintf(stream,"\n");

    mat_ar_destroy(x_err,N_EX_VAR);
    mat_destroy(q_err);
}