int main(void) { //! [main_start] uint8_t result = 0; uint16_t i; uint32_t delay; /* Initialize system */ //! [system_init] system_clock_config(CLOCK_RESOURCE_XO_26_MHZ, CLOCK_FREQ_26_MHZ); for (i = 0; i < BUF_LENGTH; i++) { buffer_expect[i] = i; buffer_rx[i] = 0; } //! [system_init] //! [run_config_gpio] configure_gpio(); //! [run_config_gpio] //! [run_config_spi] configure_spi_slave(); //! [run_config_spi] //! [main_start] //! [main_use_case] //! [read] memset(buffer_rx, 0x0, BUF_LENGTH); while(spi_read_buffer_wait(&spi_slave_instance, buffer_rx, BUF_LENGTH, 0x00) != STATUS_OK) { /* Wait for transfer from the master */ } //! [read] //! [compare] for (i = 0; i < BUF_LENGTH; i++) { if(buffer_rx[i] != buffer_expect[i]) { result++; } } //! [compare] //! [inf_loop] while (true) { /* Infinite loop */ if (result) { gpio_pin_toggle_output_level(LED_0_PIN); /* Add a short delay to see LED toggle */ delay = 300000; while(delay--) { } } else { gpio_pin_toggle_output_level(LED_0_PIN); /* Add a short delay to see LED toggle */ delay = 3000000; while(delay--) { } } } //! [inf_loop] //! [main_use_case] }
static void mainboard_final(void *chip_info) { u32 mmio_base; printk(BIOS_INFO, "Mainboard " CONFIG_MAINBOARD_PART_NUMBER " Final.\n"); /* * LED1/D7/GPIO_189 should be 0 * LED2/D6/GPIO_190 should be 1 * LED3/D5/GPIO_191 should be 1 */ mmio_base = find_gpio_base(); configure_gpio(mmio_base, GPIO_189, GPIO_FTN_1, GPIO_OUTPUT | GPIO_DATA_LOW); configure_gpio(mmio_base, GPIO_190, GPIO_FTN_1, GPIO_OUTPUT | GPIO_DATA_HIGH); configure_gpio(mmio_base, GPIO_191, GPIO_FTN_1, GPIO_OUTPUT | GPIO_DATA_HIGH); usb_oc_setup(); }
static void adc_init(void) { int i; /* Configure GPIOs */ configure_gpio(); /* * Temporarily enable the PLL when turning on the clock to the ADC * module, to work around chip errata (10.4). No need to notify * other modules; the PLL isn't enabled long enough to matter. */ clock_enable_pll(1, 0); /* Enable ADC0 module in run and sleep modes. */ clock_enable_peripheral(CGC_OFFSET_ADC, 0x1, CGC_MODE_RUN | CGC_MODE_SLEEP); /* * Use external voltage references (VREFA+, VREFA-) instead of * VDDA and GNDA. */ LM4_ADC_ADCCTL = 0x01; /* Use internal oscillator */ LM4_ADC_ADCCC = 0x1; /* Disable the PLL now that the ADC is using the internal oscillator */ clock_enable_pll(0, 0); /* No tasks waiting yet */ for (i = 0; i < LM4_ADC_SEQ_COUNT; i++) task_waiting_on_ss[i] = TASK_ID_INVALID; /* Enable IRQs */ task_enable_irq(LM4_IRQ_ADC0_SS0); task_enable_irq(LM4_IRQ_ADC0_SS1); task_enable_irq(LM4_IRQ_ADC0_SS2); task_enable_irq(LM4_IRQ_ADC0_SS3); /* 2**6 = 64x oversampling */ LM4_ADC_ADCSAC = 6; /* Initialize ADC sequencer */ for (i = 0; i < ADC_CH_COUNT; ++i) adc_configure(adc_channels + i); /* Disable ADC0 module until it is needed to conserve power. */ clock_disable_peripheral(CGC_OFFSET_ADC, 0x1, CGC_MODE_RUN | CGC_MODE_SLEEP); }
static int reset_cssp(struct cssp_cam_dev *cam) { struct platform_device *pdev = cam->pdev; int err; cam->reset_pin = ((struct cssp_cam_platform_data *)pdev->dev.platform_data)->gpio_reset_pin; err = configure_gpio(cam->reset_pin, 0, "cssp_reset"); if (err) { dev_err(&pdev->dev, "failed to configure cssp reset pin\n"); return -1; } mdelay(1); gpio_direction_output(cam->reset_pin, 1); return err; }
gint init(void* arg) { gint x; gint y; DISCOVERED* d; char *res; char wisdom_directory[1024]; char wisdom_file[1024]; fprintf(stderr,"init\n"); audio_get_cards(0); audio_get_cards(1); cursor_arrow=gdk_cursor_new(GDK_ARROW); cursor_watch=gdk_cursor_new(GDK_WATCH); GdkWindow *gdk_splash_window = gtk_widget_get_window(splash_window); gdk_window_set_cursor(gdk_splash_window,cursor_watch); init_radio(); // check if wisdom file exists res=getcwd(wisdom_directory, sizeof(wisdom_directory)); strcpy(&wisdom_directory[strlen(wisdom_directory)],"/"); strcpy(wisdom_file,wisdom_directory); strcpy(&wisdom_file[strlen(wisdom_file)],"wdspWisdom"); splash_status("Checking FFTW Wisdom file ..."); if(access(wisdom_file,F_OK)<0) { int rc=sem_init(&wisdom_sem, 0, 0); rc=pthread_create(&wisdom_thread_id, NULL, wisdom_thread, (void *)wisdom_directory); while(sem_trywait(&wisdom_sem)<0) { splash_status(wisdom_get_status()); while (gtk_events_pending ()) gtk_main_iteration (); usleep(100000); // 100ms } } while(!start) { gdk_window_set_cursor(gdk_splash_window,cursor_watch); selected_device=0; devices=0; splash_status("Old Protocol ... Discovering Devices"); old_discovery(); splash_status("New Protocol ... Discovering Devices"); new_discovery(); #ifdef LIMESDR splash_status("LimeSDR ... Discovering Devices"); lime_discovery(); #endif splash_status("Discovery"); if(devices==0) { gdk_window_set_cursor(gdk_splash_window,cursor_arrow); fprintf(stderr,"No devices found!\n"); GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT; discovery_dialog = gtk_message_dialog_new (GTK_WINDOW(splash_window), flags, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL, "No devices found! Retry Discovery?"); gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 18")); gint result=gtk_dialog_run (GTK_DIALOG (discovery_dialog)); gtk_widget_destroy(discovery_dialog); if(result==GTK_RESPONSE_CANCEL) { _exit(0); } } else { fprintf(stderr,"%s: found %d devices.\n", (char *)arg, devices); gdk_window_set_cursor(gdk_splash_window,cursor_arrow); GtkDialogFlags flags=GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT; discovery_dialog = gtk_dialog_new_with_buttons ("Discovered", GTK_WINDOW(splash_window), flags, #ifdef GPIO "Configure GPIO", GTK_RESPONSE_YES, #endif "Discover", GTK_RESPONSE_REJECT, "Exit", GTK_RESPONSE_CLOSE, NULL); gtk_widget_override_font(discovery_dialog, pango_font_description_from_string("FreeMono 18")); GtkWidget *content; content=gtk_dialog_get_content_area(GTK_DIALOG(discovery_dialog)); GtkWidget *grid=gtk_grid_new(); gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE); gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE); gtk_grid_set_row_spacing (GTK_GRID(grid),10); int i; char version[16]; char text[128]; for(i=0;i<devices;i++) { d=&discovered[i]; fprintf(stderr,"%p protocol=%d name=%s\n",d,d->protocol,d->name); if(d->protocol==ORIGINAL_PROTOCOL) { sprintf(version,"%d.%d", d->software_version/10, d->software_version%10); } else { sprintf(version,"%d.%d.%d", d->software_version/100, (d->software_version%100)/10, d->software_version%10); } switch(d->protocol) { case ORIGINAL_PROTOCOL: case NEW_PROTOCOL: sprintf(text,"%s (%s %s) %s (%02X:%02X:%02X:%02X:%02X:%02X) on %s\n", d->name, d->protocol==ORIGINAL_PROTOCOL?"old":"new", version, inet_ntoa(d->info.network.address.sin_addr), d->info.network.mac_address[0], d->info.network.mac_address[1], d->info.network.mac_address[2], d->info.network.mac_address[3], d->info.network.mac_address[4], d->info.network.mac_address[5], d->info.network.interface_name); break; #ifdef LIMESDR case LIMESDR_PROTOCOL: /* sprintf(text,"%s (%s %s)\n", d->name, "lime", version); */ sprintf(text,"%s\n", d->name); break; #endif } GtkWidget *label=gtk_label_new(text); gtk_widget_override_font(label, pango_font_description_from_string("FreeMono 12")); gtk_widget_show(label); gtk_grid_attach(GTK_GRID(grid),label,0,i,3,1); GtkWidget *start_button=gtk_button_new_with_label("Start"); gtk_widget_override_font(start_button, pango_font_description_from_string("FreeMono 18")); gtk_widget_show(start_button); gtk_grid_attach(GTK_GRID(grid),start_button,3,i,1,1); g_signal_connect(start_button,"pressed",G_CALLBACK(start_cb),(gpointer)d); // if not available then cannot start it if(d->status!=STATE_AVAILABLE) { gtk_button_set_label(GTK_BUTTON(start_button),"In Use"); gtk_widget_set_sensitive(start_button, FALSE); } // if not on the same subnet then cannot start it if((d->info.network.interface_address.sin_addr.s_addr&d->info.network.interface_netmask.sin_addr.s_addr) != (d->info.network.address.sin_addr.s_addr&d->info.network.interface_netmask.sin_addr.s_addr)) { gtk_button_set_label(GTK_BUTTON(start_button),"Subnet!"); gtk_widget_set_sensitive(start_button, FALSE); } } gtk_container_add (GTK_CONTAINER (content), grid); gtk_widget_show_all(discovery_dialog); gint result=gtk_dialog_run(GTK_DIALOG(discovery_dialog)); if(result==GTK_RESPONSE_CLOSE) { _exit(0); } if(!start) { gtk_widget_destroy(discovery_dialog); } #ifdef GPIO if(result==GTK_RESPONSE_YES) { configure_gpio(splash_window); } #endif } } gdk_window_set_cursor(gdk_splash_window,cursor_watch); splash_status("Initializing wdsp ..."); fprintf(stderr,"selected radio=%p device=%d\n",radio,radio->device); protocol=radio->protocol; device=radio->device; switch(radio->protocol) { case ORIGINAL_PROTOCOL: case NEW_PROTOCOL: sprintf(property_path,"%02X-%02X-%02X-%02X-%02X-%02X.props", radio->info.network.mac_address[0], radio->info.network.mac_address[1], radio->info.network.mac_address[2], radio->info.network.mac_address[3], radio->info.network.mac_address[4], radio->info.network.mac_address[5]); break; #ifdef LIMESDR case LIMESDR_PROTOCOL: sprintf(property_path,"limesdr.props"); break; #endif } radioRestoreState(); fprintf(stderr,"malloc samples\n"); if(radio->protocol==NEW_PROTOCOL) { samples=malloc(display_width*sizeof(float)*2*4); // 192 -> 48 } else { samples=malloc(display_width*sizeof(float)*2); } //splash_status("Initializing wdsp ..."); fprintf(stderr,"wdsp_init\n"); wdsp_init(0,display_width,radio->protocol); switch(radio->protocol) { case ORIGINAL_PROTOCOL: splash_status("Initializing old protocol ..."); fprintf(stderr,"old_protocol_init\n"); old_protocol_init(0,display_width); break; case NEW_PROTOCOL: splash_status("Initializing new protocol ..."); fprintf(stderr,"new_protocol_init\n"); new_protocol_init(0,display_width); break; #ifdef LIMESDR case LIMESDR_PROTOCOL: splash_status("Initializing lime protocol ..."); lime_protocol_init(0,display_width); break; #endif } fprintf(stderr,"gpio_init\n"); splash_status("Initializing GPIO ..."); #ifdef GPIO if(gpio_init()<0) { } #endif window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "pihpsdr"); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER_ALWAYS); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); g_signal_connect (window, "delete-event", G_CALLBACK (main_delete), NULL); fixed=gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window), fixed); y=0; fprintf(stderr,"vfo_height=%d\n",VFO_HEIGHT); vfo = vfo_init(VFO_WIDTH,VFO_HEIGHT,window); gtk_fixed_put(GTK_FIXED(fixed),vfo,0,0); rit_control = rit_init(RIT_WIDTH,MENU_HEIGHT,window); gtk_fixed_put(GTK_FIXED(fixed),rit_control,VFO_WIDTH,y); fprintf(stderr,"menu_height=%d\n",MENU_HEIGHT); //menu = menu_init(MENU_WIDTH,MENU_HEIGHT,window); menu = new_menu_init(MENU_WIDTH-RIT_WIDTH,MENU_HEIGHT,window); gtk_fixed_put(GTK_FIXED(fixed),menu,VFO_WIDTH+((MENU_WIDTH/3)*2),y); fprintf(stderr,"meter_height=%d\n",METER_HEIGHT); meter = meter_init(METER_WIDTH,METER_HEIGHT,window); gtk_fixed_put(GTK_FIXED(fixed),meter,VFO_WIDTH+MENU_WIDTH,y); y+=VFO_HEIGHT; if(display_panadapter) { int height=PANADAPTER_HEIGHT; if(!display_waterfall) { height+=WATERFALL_HEIGHT; if(!display_sliders) { height+=SLIDERS_HEIGHT; } if(!display_toolbar) { height+=TOOLBAR_HEIGHT; } } else { if(!display_sliders) { height+=SLIDERS_HEIGHT/2; } } fprintf(stderr,"panadapter_height=%d\n",height); panadapter = panadapter_init(display_width,height); gtk_fixed_put(GTK_FIXED(fixed),panadapter,0,VFO_HEIGHT); y+=height; } if(display_waterfall) { int height=WATERFALL_HEIGHT; if(!display_panadapter) { height+=PANADAPTER_HEIGHT; } if(!display_sliders) { if(display_panadapter) { height+=SLIDERS_HEIGHT/2; } else { height+=SLIDERS_HEIGHT; } } if(!display_toolbar) { height+=TOOLBAR_HEIGHT; } fprintf(stderr,"waterfall_height=%d\n",height); waterfall = waterfall_init(display_width,height); gtk_fixed_put(GTK_FIXED(fixed),waterfall,0,y); y+=height; } #ifdef PSK int psk_height=PSK_WATERFALL_HEIGHT; if(!display_sliders) { psk_height+=SLIDERS_HEIGHT/2; } if(!display_toolbar) { psk_height+=TOOLBAR_HEIGHT/2; } psk_waterfall = psk_waterfall_init(display_width,psk_height); gtk_fixed_put(GTK_FIXED(fixed),psk_waterfall,0,VFO_HEIGHT); psk = init_psk(); gtk_fixed_put(GTK_FIXED(fixed),psk,0,VFO_HEIGHT+psk_height); #endif if(display_sliders) { fprintf(stderr,"sliders_height=%d\n",SLIDERS_HEIGHT); sliders = sliders_init(display_width,SLIDERS_HEIGHT,window); gtk_fixed_put(GTK_FIXED(fixed),sliders,0,y); y+=SLIDERS_HEIGHT; } if(display_toolbar) { fprintf(stderr,"toolbar_height=%d\n",TOOLBAR_HEIGHT); toolbar = toolbar_init(display_width,TOOLBAR_HEIGHT,window); gtk_fixed_put(GTK_FIXED(fixed),toolbar,0,y); y+=TOOLBAR_HEIGHT; } splash_close(); gtk_widget_show_all (window); if(full_screen) { gtk_window_fullscreen(GTK_WINDOW(window)); } GdkWindow *gdk_window = gtk_widget_get_window(window); gdk_window_set_cursor(gdk_window,cursor_arrow); // start the receiver SetChannelState(CHANNEL_RX0,1,1); //update_timer_id=gdk_threads_add_timeout(1000/updates_per_second, update, NULL); update_timer_id=gdk_threads_add_timeout_full(G_PRIORITY_HIGH_IDLE,1000/updates_per_second, update, NULL, NULL); // save every 30 seconds save_timer_id=gdk_threads_add_timeout(30000, save_cb, NULL); if(protocol!=NEW_PROTOCOL) { setFrequency(getFrequency()); } #ifdef PSK if(mode==modePSK) { show_psk(); } else { show_waterfall(); } #endif g_idle_add(vfo_update,(gpointer)NULL); return 0; }