Пример #1
0
void set_transceiver_mode(const transceiver_mode_t new_transceiver_mode) {
	baseband_streaming_disable(&sgpio_config);
	
	usb_endpoint_disable(&usb_endpoint_bulk_in);
	usb_endpoint_disable(&usb_endpoint_bulk_out);
	
	_transceiver_mode = new_transceiver_mode;
	
	if( _transceiver_mode == TRANSCEIVER_MODE_RX ) {
		led_off(LED3);
		led_on(LED2);
		usb_endpoint_init(&usb_endpoint_bulk_in);
		rf_path_set_direction(&rf_path, RF_PATH_DIRECTION_RX);
		vector_table.irq[NVIC_SGPIO_IRQ] = sgpio_isr_rx;
	} else if (_transceiver_mode == TRANSCEIVER_MODE_TX) {
		led_off(LED2);
		led_on(LED3);
		usb_endpoint_init(&usb_endpoint_bulk_out);
		rf_path_set_direction(&rf_path, RF_PATH_DIRECTION_TX);
		vector_table.irq[NVIC_SGPIO_IRQ] = sgpio_isr_tx;
	} else {
		led_off(LED2);
		led_off(LED3);
		rf_path_set_direction(&rf_path, RF_PATH_DIRECTION_OFF);
		vector_table.irq[NVIC_SGPIO_IRQ] = sgpio_isr_rx;
	}

	if( _transceiver_mode != TRANSCEIVER_MODE_OFF ) {
		si5351c_activate_best_clock_source(&clock_gen);
		baseband_streaming_enable(&sgpio_config);
	}
}
Пример #2
0
/*
M0 Core Manage USB 
*/
int main(void)
{
  iap_cmd_res_t iap_cmd_res;
  usb_descriptor_serial_number_t serial_number;
  airspy_usb_req_init();

  usb_set_configuration_changed_cb(usb_configuration_changed);
  usb_peripheral_reset();
  
  usb_device_init(0, &usb_device);
  
  usb_queue_init(&usb_endpoint_control_out_queue);
  usb_queue_init(&usb_endpoint_control_in_queue);
  usb_queue_init(&usb_endpoint_bulk_out_queue);
  usb_queue_init(&usb_endpoint_bulk_in_queue);

  usb_endpoint_init(&usb_endpoint_control_out);
  usb_endpoint_init(&usb_endpoint_control_in);

  /* Read IAP Serial Number Identification */
  iap_cmd_res.cmd_param.command_code = IAP_CMD_READ_SERIAL_NO;
  iap_cmd_call(&iap_cmd_res);
  if(iap_cmd_res.status_res.status_ret == CMD_SUCCESS)
  { 
    /* Only retrieve 2 last 32bits for Serial Number */
    serial_number.sn_32b[0] = iap_cmd_res.status_res.iap_result[2];
    serial_number.sn_32b[1] = iap_cmd_res.status_res.iap_result[3];
    usb_descriptor_fill_string_serial_number(serial_number);
  }

  nvic_set_priority(NVIC_USB0_IRQ, 255);
  
  nvic_set_priority(NVIC_M4CORE_IRQ, 1);
  nvic_enable_irq(NVIC_M4CORE_IRQ);

  usb_run(&usb_device);

  while(true)
  {
    signal_wfe();

    if( (get_usb_buffer_offset() >= 16384) && 
        (phase == 1) )
    {
      usb_transfer_schedule_block(&usb_endpoint_bulk_in, &usb_bulk_buffer[0x0000], 0x4000, NULL, NULL);
      phase = 0;
    }

    if( (get_usb_buffer_offset() < 16384) && 
        (phase == 0) )
    {
      usb_transfer_schedule_block(&usb_endpoint_bulk_in, &usb_bulk_buffer[0x4000], 0x4000, NULL, NULL);
      phase = 1;  
    }
  }
}
Пример #3
0
void usb_configuration_changed(
	usb_device_t* const device
) {
        if (device->configuration == 0) {
            usb_endpoint_disable(&usb_endpoint_bulk_cmd_in);
            usb_endpoint_disable(&usb_endpoint_bulk_cmd_out);
            usb_endpoint_disable(&usb_endpoint_bulk_data_in);
        } else {
            usb_endpoint_init(&usb_endpoint_bulk_cmd_out);
            usb_endpoint_init(&usb_endpoint_bulk_cmd_in);
            usb_endpoint_init(&usb_endpoint_bulk_data_in);
            start_command_transfer();
        }
}
Пример #4
0
void usb_init(void)
{
        usb_queue_init(&usb_endpoint_control_in_queue);
        usb_queue_init(&usb_endpoint_control_out_queue);
        usb_queue_init(&usb_endpoint_bulk_cmd_in_queue);
        usb_queue_init(&usb_endpoint_bulk_cmd_out_queue);
        usb_queue_init(&usb_endpoint_bulk_data_in_queue);

        usb_set_configuration_changed_cb(usb_configuration_changed);
        usb_peripheral_reset();
        usb_device_init(0, &usb_device);
        usb_endpoint_init(&usb_endpoint_control_out);
        usb_endpoint_init(&usb_endpoint_control_in);
        nvic_set_priority(NVIC_USB0_IRQ, 255);
        usb_run(&usb_device);
}
Пример #5
0
void set_transceiver_mode(const transceiver_mode_t new_transceiver_mode) {
	baseband_streaming_disable();
	
	transceiver_mode = new_transceiver_mode;
	
	usb_init_buffers_bulk();

	if( transceiver_mode == TRANSCEIVER_MODE_RX ) {
		gpio_clear(PORT_LED1_3, PIN_LED3);
		gpio_set(PORT_LED1_3, PIN_LED2);
		usb_endpoint_init(&usb_endpoint_bulk_in);

		rffc5071_rx(switchctrl);
		//rffc5071_set_frequency(1700, 0); // 2600 MHz IF - 1700 MHz LO = 900 MHz RF
		max2837_start();
		max2837_rx();
	} else if (transceiver_mode == TRANSCEIVER_MODE_TX) {
		gpio_clear(PORT_LED1_3, PIN_LED2);
		gpio_set(PORT_LED1_3, PIN_LED3);
		usb_endpoint_init(&usb_endpoint_bulk_out);

		rffc5071_tx(switchctrl);
		//rffc5071_set_frequency(1700, 0); // 2600 MHz IF - 1700 MHz LO = 900 MHz RF
		max2837_start();
		max2837_tx();
	} else {
		gpio_clear(PORT_LED1_3, PIN_LED2);
		gpio_clear(PORT_LED1_3, PIN_LED3);
		max2837_stop();
		return;
	}

	sgpio_configure(transceiver_mode, true);

	nvic_set_priority(NVIC_SGPIO_IRQ, 0);
	nvic_enable_irq(NVIC_SGPIO_IRQ);
	SGPIO_SET_EN_1 = (1 << SGPIO_SLICE_A);

    sgpio_cpld_stream_enable();
}
Пример #6
0
void set_receiver_mode(const receiver_mode_t new_receiver_mode)
{
  usb_streaming_disable();

  if( new_receiver_mode == RECEIVER_MODE_RX )
  {
    usb_endpoint_init(&usb_endpoint_bulk_in);
    ADCHS_start(sample_rate_conf_no);
  }else
  {
    ADCHS_stop(sample_rate_conf_no);
  }
	receiver_mode = new_receiver_mode;
}
Пример #7
0
usb_request_status_t usb_vendor_request_set_transceiver_mode(
	usb_endpoint_t* const endpoint,
	const usb_transfer_stage_t stage)
{
	if( stage == USB_TRANSFER_STAGE_SETUP ) {
		switch( endpoint->setup.value ) {
		case TRANSCEIVER_MODE_OFF:
		case TRANSCEIVER_MODE_RX:
		case TRANSCEIVER_MODE_TX:
			set_transceiver_mode(endpoint->setup.value);
			usb_transfer_schedule_ack(endpoint->in);
			return USB_REQUEST_STATUS_OK;
		case TRANSCEIVER_MODE_CPLD_UPDATE:
			usb_endpoint_init(&usb_endpoint_bulk_out);
			start_cpld_update = true;
			usb_transfer_schedule_ack(endpoint->in);
			return USB_REQUEST_STATUS_OK;
		default:
			return USB_REQUEST_STATUS_STALL;
		}
	} else {
		return USB_REQUEST_STATUS_OK;
	}
}