static int send_device(const u8_t *desc, int connfd) { struct devlist_device dev; fill_device(&dev, desc); if (send(connfd, &dev, sizeof(dev), 0) != sizeof(dev)) { LOG_ERR("send() device failed: %s", strerror(errno)); return errno; } return 0; }
int main(int argc, char * argv[]) { SGF_t mon_SGF; /* ma structure de SGF */ superbloc_t mon_superbloc; /* ma structure de Superbloc */ if ( argc > 1 ) { fprintf(stderr,"Usage: %s\n", argv[0]); exit (EXIT_PARAM); } /* initialisation des structures du SF */ mon_SGF.device_num = create_device(argv[0]); /* numéro du périphérique de mémoire de masse géré */ if (mon_SGF.device_num < 0) /* normalement l'erreur est déjà gérée dans create_device */ exit (EXIT_DEVICE); init_constantes_superbloc (&mon_superbloc); /* initialise le superbloc avec des valeurs contantes par défaut */ mon_SGF.superbloc = &mon_superbloc; /* pointeur vers la structure du superbloc en mémoire */ mon_SGF.table_inoeuds = malloc(mon_SGF.superbloc->nb_max_inoeuds * sizeof(inoeud_t)); if (mon_SGF.table_inoeuds == NULL) /* pointeur vers la table des inoeuds */ { fprintf(stderr,"%s: pb allocation mémoire\n", argv[0]); exit (EXIT_MEM_ALLOC); } init_constantes_table_inoeuds (&mon_SGF); /* initialise la tables des inoeuds avec des valeurs contantes */ fill_device(argv[0], &mon_SGF); /* allocation (par écriture) des blocs sur le périphérique de mémoire de masse */ ajoute_inoeud_racine(argv[0], &mon_SGF); close(mon_SGF.device_num); printf("%s: nb inoeuds: %d, nb blocs %d,", argv[0], mon_SGF.superbloc->nb_max_inoeuds, mon_SGF.superbloc->taille_du_SF ); printf(" taille d'un bloc %d o (taille min: %ld o)\n", mon_SGF.superbloc->taille_bloc, (long int)sizeof(superbloc_t)); printf("%s: terminé \n", argv[0]); exit (0); }
static jack_driver_param_constraint_desc_t * enum_alsa_devices() { snd_ctl_t * handle; snd_ctl_card_info_t * info; snd_pcm_info_t * pcminfo_capture; snd_pcm_info_t * pcminfo_playback; int card_no = -1; char card_id[JACK_DRIVER_PARAM_STRING_MAX + 1]; char device_id[JACK_DRIVER_PARAM_STRING_MAX + 1]; char description[64]; int device_no; bool has_capture; bool has_playback; jack_driver_param_constraint_desc_t * constraint_ptr; uint32_t array_size = 0; snd_ctl_card_info_alloca(&info); snd_pcm_info_alloca(&pcminfo_capture); snd_pcm_info_alloca(&pcminfo_playback); constraint_ptr = NULL; while(snd_card_next(&card_no) >= 0 && card_no >= 0) { snprintf(card_id, sizeof(card_id), "hw:%d", card_no); if (snd_ctl_open(&handle, card_id, 0) >= 0 && snd_ctl_card_info(handle, info) >= 0) { fill_device(&constraint_ptr, &array_size, card_id, snd_ctl_card_info_get_name(info)); device_no = -1; while (snd_ctl_pcm_next_device(handle, &device_no) >= 0 && device_no != -1) { snprintf(device_id, sizeof(device_id), "%s,%d", card_id, device_no); snd_pcm_info_set_device(pcminfo_capture, device_no); snd_pcm_info_set_subdevice(pcminfo_capture, 0); snd_pcm_info_set_stream(pcminfo_capture, SND_PCM_STREAM_CAPTURE); has_capture = snd_ctl_pcm_info(handle, pcminfo_capture) >= 0; snd_pcm_info_set_device(pcminfo_playback, device_no); snd_pcm_info_set_subdevice(pcminfo_playback, 0); snd_pcm_info_set_stream(pcminfo_playback, SND_PCM_STREAM_PLAYBACK); has_playback = snd_ctl_pcm_info(handle, pcminfo_playback) >= 0; if (has_capture && has_playback) { snprintf(description, sizeof(description),"%s (duplex)", snd_pcm_info_get_name(pcminfo_capture)); } else if (has_capture) { snprintf(description, sizeof(description),"%s (capture)", snd_pcm_info_get_name(pcminfo_capture)); } else if (has_playback) { snprintf(description, sizeof(description),"%s (playback)", snd_pcm_info_get_name(pcminfo_playback)); } else { continue; } fill_device(&constraint_ptr, &array_size, device_id, description); } snd_ctl_close(handle); } } return constraint_ptr; }