int ca_open(phastream_t *as, char *name, int rate, int framesize, ph_audio_cbk cbk) { int errInput, errOutput; ca_dev *cadev = (ca_dev *) calloc(1, sizeof(ca_dev)); DBG_DYNA_AUDIO_DRV("phad_coreaudio: ca_open: Opening device %s with rate: %d, framesize: %d, and callback: %p\n", name, rate, framesize, cbk); cadev->cbk = cbk; as->drvinfo = cadev; parse_device(cadev, name); as->actual_rate = rate; errInput = init_input_device(as, rate, 1, 16); //FIXME: channels and format should be given by phapi errOutput = init_output_device(as, rate, 1, 16); if (errOutput < 0) { DBG_DYNA_AUDIO_DRV("phad_coreaudio: could not init output device"); clean_input_device(as); return -PH_NORESOURCES; } DBG_DYNA_AUDIO_DRV("**CoreAudio: actual_rate: %d, clock_rate: %d\n", as->actual_rate, rate); return 0; }
int main(int argc, char *argv[]) { int fd; GtkWidget *window; GtkWidget *drawing_area; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *button; /* Block SIGALRM in the main thread */ sigset_t sigset; sigemptyset(&sigset); sigaddset(&sigset, SIGALRM); pthread_sigmask(SIG_BLOCK, &sigset, NULL); if (!g_thread_supported()) { g_thread_init(NULL); } gdk_threads_init(); gdk_threads_enter(); gtk_init(&argc, &argv); /* Framebuffer */ /* Open framebuffer */ if (0 > (fd = open("/dev/fb0", O_RDWR))) { printf("Failed to open fb\n"); return -1; } /* Get fixed information */ if(0 > ioctl(fd, FBIOGET_FSCREENINFO, &fi)) { printf("Failed to get fixed info\n"); return -1; } /* Get variable information */ if(0 > ioctl(fd, FBIOGET_VSCREENINFO, &vi)) { printf("Failed to get variable info\n"); return -1; } /* Get raw bits buffer */ if(MAP_FAILED == (bits = mmap(0, fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0))) { printf("Failed to mmap fb\n"); return -1; } printf("Framebuffer resolution: %d x %d\n", vi.xres, vi.yres); /* Calculate useful information */ bpp = vi.bits_per_pixel >> 3; stride = fi.line_length / bpp; /* Do GTK stuff */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title((GtkWindow*)window, "ParallelDroid"); g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show(vbox); drawing_area = gtk_drawing_area_new(); gtk_widget_set_size_request(GTK_WIDGET(drawing_area), vi.xres, vi.yres); gtk_box_pack_start(GTK_BOX(vbox), drawing_area, TRUE, TRUE, 0); gtk_widget_show(drawing_area); init_input_device(); /* Events */ gtk_widget_set_events(drawing_area, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); g_signal_connect(drawing_area, "motion-notify-event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect(drawing_area, "button-press-event", G_CALLBACK(button_press_event), NULL); g_signal_connect(drawing_area, "button-release-event", G_CALLBACK(button_release_event), NULL); g_signal_connect(drawing_area, "expose-event", G_CALLBACK(expose_event), NULL); g_signal_connect(drawing_area, "configure-event", G_CALLBACK(configure_event), NULL); /* Create and add buttons */ hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); gtk_widget_show(hbox); button = gtk_button_new_with_label("Back"); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); g_signal_connect(button, "clicked", G_CALLBACK(back_button_clicked), NULL); gtk_widget_show(button); button = gtk_button_new_with_label("Home"); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); g_signal_connect_swapped(button, "clicked", G_CALLBACK(home_button_clicked), NULL); gtk_widget_show(button); button = gtk_button_new_with_label("Menu"); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); g_signal_connect_swapped(button, "clicked", G_CALLBACK(menu_button_clicked), NULL); gtk_widget_show(button); gtk_widget_show_all(window); pixmap = gdk_pixmap_new(drawing_area->window, IMAGE_WIDTH, IMAGE_HEIGHT, -1); (void)g_timeout_add(33, (GSourceFunc)timer_exe, drawing_area); gtk_main(); gdk_threads_leave(); return 0; }