begin process at 2012 05 30 00:05:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Système

 > 

Noyau

 > 

Linux Embarqué


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Linux Embarqué

jeudi 14 janvier 2010 à 15:36:23 | Linux Embarqué

Makia42

Bonjour,

Je travail en ce moment sur un système embarqué, et dans le cadre d'un projet, je dois faire communiquer par voix deux systèmes embarqués entre eux.

Dans un premier temps je cherchais donc à tester tout simplement le son sur un système, qui contient la version 2.6.24 de linux.

Je me suis inspirer de quelques utilitaires que l'on trouve dans l'architecture Alsa et voici ce que ça donne en codes ces quelques lignes :

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/ioctl.h>
//#include <linux/time.h>
#include <asm/byteorder.h>
#include <sound/asound.h>

main()
{
int i,j,t;
FILE *fp;
int ret;
int f;
int ver;
struct snd_pcm_info info;
struct snd_pcm_channel_info c_info;
struct snd_pcm_status state;
struct snd_pcm_hw_params hwp;
struct snd_pcm_sw_params swp;

int version=0;

memset (&info,0,sizeof(info));
memset (&c_info,0,sizeof(c_info));
memset (&state,0,sizeof(state));
memset (&hwp, 0, sizeof(hwp));
memset (&swp, 0, sizeof(swp));

f=open("/dev/snd/pcmC0D0p", O_RDWR|O_NONBLOCK);
if (f>=0) {
printf("device open with File descriptor f=%d\n", f);
#if 1
ret=ioctl(f, SNDRV_PCM_IOCTL_PVERSION, &version);
if (ret==0)
printf("IOCTL_PVERSION version is %d\n",version);
else
printf ("ioctl ret=%d errno=%d %s\n",ret, errno,strerror(errno));
#endif
#if 1
ret=ioctl(f, SNDRV_PCM_IOCTL_INFO, &info);
if (ret==0)
printf("IOCTL_INFO device is %d subdevice=%d card=%d name=%s\n",info.device,info.subdevice,info.card,info.name);
else
printf ("ioctl ret=%d errno=%d %s\n",ret, errno,strerror(errno));
#endif
#if 0
ret=ioctl(f, SNDRV_PCM_IOCTL_CHANNEL_INFO, &c_info);
if (ret==0)
printf("IOCTL_INFO Channel is %d first=%d step=%d\n",c_info.channel,c_info.first,c_info.step);
else
printf ("ioctl ret=%d errno=%d %s\n",ret, errno,strerror(errno));
#endif
#if 0
ret=ioctl(f, SNDRV_PCM_IOCTL_STATUS, &state);
if (ret==0)
printf("IOCTL_STATUS State is %d\n",state.state);
else
printf ("IOCTL_STATUS ret=%d errno=%d %s\n",ret, errno,strerror(errno));
#endif
#if 1
ret=ioctl(f, SNDRV_PCM_IOCTL_HW_PARAMS, &hwp);
if (ret==0)
printf("IOCTL_HW_PARAMS flags is %d\n",hwp.flags);
else
printf ("IOCTL_HW_PARAMS ret=%d errno=%d %s\n",ret, errno,strerror(errno));

#endif

ret=ioctl(f, SNDRV_PCM_IOCTL_SW_PARAMS, &swp);
if (ret==0)
printf("IOCTL_SW_PARAMS mode is %d\n",swp.tstamp_mode);
else
printf ("IOCTL_SW_PARAMS ret=%d errno=%d %s\n",ret, errno,strerror(errno));


ret=ioctl(f, SNDRV_PCM_IOCTL_START);
if (ret==0)
printf("IOCTL_ Start is OK\n");
else
printf ("IOCTL_START ret=%d errno=%d %s\n",ret, errno,strerror(errno));

for (i=0; i<1;i++) {
for (j=1;j<25;j++) {
t=0;
ret=read(f,&t,1);
// ret=putc(j,fp);
printf("ret=%d t=%d errno=%d",ret,t,errno);
ret=write(f,&j,1);
if (ret==EOF)
printf("ERREUR %d %s ",errno,strerror(errno));
}
}
}
else
printf("ERROR OPENNING FILE\n");


résultat à la compilation :

[root@eseco-ivan bouhara]# ./a.out
device open with File descriptor f=3
IOCTL_PVERSION version is 131080
IOCTL_INFO device is 0 subdevice=0 card=0 name=SiS SI7012
IOCTL_HW_PARAMS ret=-1 errno=22 Invalid argument
IOCTL_SW_PARAMS ret=-1 errno=77 File descriptor in bad state
IOCTL_START ret=-1 errno=77 File descriptor in bad state
ret=-1 t=0 errno=22ERREUR 77 File descriptor in bad state ret=-1 t=0 errno=22ERREUR...


Est-il possible de piloter la carte son sans passer par des interfaces multimédias ?

Peut-on envoyer un son directement sur les speakers(avec un /dev/..par exemple) ?

J'ai tout essayer pour éviter d'avoir à télécherger des packages mais il semble qu'il ne soit pas possible de faire sans pour un simple test son sur un Linux embarqué ...
mardi 26 janvier 2010 à 13:45:44 | Re : Linux Embarqué

Makia42

Bonjour à tous,

Je poste la solution à mon problème concernant donc le test son ur une plateforme embarqué avec pour OS Linux.

On peut utiliser ALSA sans les librairies ni OSS.
C'est possible grâce aux IOCTL

Le projet Source forge Alsasimple donne un exemple:
https://alsasimple.svn.sourceforge.net/ … lsasimple/
_________________
K.Bouhara & I.Lovric
ESECO SYSTEMS
http://www.eseco.fr
Web3.0 and Web4.0 appliances for security and risk protection
Hors ligne

lundi 12 avril 2010 à 11:37:53 | Re : Linux Embarqué

rosaliaa

Bonjour,
Je suis entrain de développer un driver vidéo sous linux embarqué
et mon problème c'est avec les ioctl et write et read (toutes les fonctions driver) retournent une erreur de type 'invalid argument", pourtant j'ai tout vérifier et voilà un exemple de code pour la fonction VID_Write:

int32 VID_Write(uint8 *p_Data, uint32 i_Size)
{
int i_FileId

/* first check parameters */
if( (p_Handle == NULL) || (i_Size == 0) || (p_Data == NULL) )
return(VID_ERROR_PARAM);



i_Ret = write(i_FileId, p_Data, i_Size);
if(i_Ret < 0)
{
TRACE_ERROR("write : %s", strerror(errno));
return(VID_ERROR_WRITE);
}
return(0);
}

Tous les paramètres sont bien vérifiés
(j'ai essayé d'utiliser des drivers usb et insérer les modules nécessaires, le matériel est détecté mais aucun module n'a pa été inséré)

Plz j'ai besoin d'aide si quelq'un pourrait m'indiquer une solution
Merci d'avance
lundi 12 avril 2010 à 11:40:02 | Re : Linux Embarqué

rosaliaa

Désolée le code de la fonction est le suivant:

int32 VID_Write(uint8 *p_Data, uint32 i_Size)
{
int i_FileId
int32 i_Ret;


i_Ret = write(i_FileId, p_Data, i_Size);
if(i_Ret < 0)
{
TRACE_ERROR("write : %s", strerror(errno));
return(VID_ERROR_WRITE);
}
return(0);
}



Cette discussion est classée dans : printf, info, ret, ioctl, errno


Répondre à ce message

Sujets en rapport avec ce message

lecture fichier binaire [ par Mickylord ] Salut !Bon aujourd'hui j'ai un "problème", du moins je pense ...J'essaye tant bien que mal d'ouvrire un .wav en binaire.Le problème arrive lorsque j'e info ioctl [ par Renko ] Bonjour. Je doit pondre un programme qui pilote le port série pour une liaison i2c. J'utilise ioctl et j'aimerais juste savoir si la ligne suivante po sqlite3 en C :: resultat de "select ..." [ par goldziko9 ] Bonjours a tous .      mon probleme et le suivant :             j'ai fait un exe de test pour manipuler une base de donner Sqlite3 et voici le code : aide pour un mini projet [ par IMFM ] salut, dans le cadre de mes etudes j'ai un projet d'une entreprise qui se lance dans la vente des materiels Type 1 : Informatiques Type 2 : Électrique suivi d'un rayon [ par mb89ma ] bonjour à tous, j'ai un exercice informatique sur lequel je bloque. Il faut réaliser le suivi d'un rayon au travers une conduite de 1 cm de large et d Lecture d'info depuis le port COM avec MS-Access [ par yves64 ] Bonjour, J'ai une application Access qui doit recevoir des données d'un chronomètre externe relié au PC par le port COM. Jusqu'ici, j'utilisais le MSc probléme de déplacement d'une case a une autre dans un tableaux de type char* [ par mlikos ] Bonjour, est ce qq1 peut m'aider a résoudre ce problème : #include #include #include struct coordonnees { int x; int y; }; typedef struc exercices à résoudre [ par jomsow ] bonjour je suis débutant en C svp aidez moi à résoudre ces deux exercices : Exercice 1: Modifier le programme suivant de telle sorte qu’il affiche mot se terminant par [ par naltap312 ] Bonjour, tout novice et après moultes rélfexions, apparement pas assez, je n'arrive pas à coder une fonction me retournant si oui ou non un mot se te programme calculette [ par jeanphilippe37 ] [del]Bonjour[/del], Voila, j'ai réalisé une calculette mais je voudrais incorporer une lecteure de fichier qui contient les opérations et les résulta


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales