audiocontrol.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #ifndef AUDIOCONTROL_H
  2. #define AUDIOCONTROL_H
  3. #include <alsa/asoundlib.h>
  4. //#include "alsadbus.h"
  5. #define DEFAULT "default"
  6. #define LEFT_ID "numid=1,iface=MIXER,name='Left Playback Volume'"
  7. #define RIGHT_ID "numid=2,iface=MIXER,name='Right Playback Volume'"
  8. #define STRAM_ID "numid=3,iface=MIXER,name='Stream Select'"
  9. #define OUTPUT_ID "numid=4,iface=MIXER,name='Output Select'"
  10. #define AMP_ID "numid=5,iface=MIXER,name='AMP Volume'"
  11. #define FM_ID "numid=6,iface=MIXER,name='FM Freq'"
  12. #define IRSTATUS_ID "numid=7,iface=MIXER,name='IR Status'"
  13. #define IRCHANNEL_ID "numid=8,iface=MIXER,name='IR Channel'"
  14. #define PAMUTE_ID "numid=9,iface=MIXER,name='PA Mute'"
  15. #define SOFTMASTER_ID "numid=34,iface=MIXER,name='softmaster'"
  16. typedef enum
  17. {
  18. LEFT_AUDIO = 0x01,
  19. RIGHT_AUDIO,
  20. STRAM_AUDIO,
  21. OUTPUT_AUDIO,
  22. AMP_AUDIO,
  23. FM_AUDIO,
  24. IRSTATUS_AUDIO,
  25. IRCHANNEL_AUDIO,
  26. PAMUTE_AUDIO,
  27. SOFTMASTER_AUDIO,
  28. }TYPE_AUDIO;
  29. typedef struct Packet
  30. {
  31. int count;
  32. int type;
  33. } Packet_t;
  34. typedef struct Data
  35. {
  36. int max;
  37. int min;
  38. int cur;
  39. int step;
  40. }Data_t;
  41. class AudioControl
  42. {
  43. public:
  44. AudioControl();
  45. public:
  46. //get control value
  47. virtual int Get(int Audio_Type ,int *nValue);
  48. //set control value
  49. virtual int Set(int Audio_Type, int nValue);
  50. //get control range
  51. virtual int GetRange(int Audio_Type, int *pMin ,int *pMax);
  52. protected:
  53. //get string from enum's
  54. char* getstring(int type);
  55. //get id from audio's string
  56. int getpid(int audio_type, snd_ctl_elem_id_t **ppid);
  57. //get info from id
  58. int getpinfo(snd_ctl_elem_id_t *pid, snd_ctl_elem_info_t **ppinfo);
  59. //get elem from id
  60. int getpelem(snd_ctl_elem_id_t *pid, snd_hctl_elem_t **ppelem);
  61. //get control from id and info
  62. int getpcontrol(snd_ctl_elem_id_t *pid, snd_ctl_elem_info_t *pinfo ,snd_ctl_elem_value_t **ppcontrol);
  63. //get type
  64. int get_type(snd_ctl_elem_info_t *pinfo, int *ptype);
  65. //get size
  66. int get_size(snd_ctl_elem_info_t *pinfo, int *psize);
  67. //get range from elem and info
  68. int get_range(int type, snd_hctl_elem_t *pelem, snd_ctl_elem_info_t *pinfo, Data *pdata);
  69. //get value
  70. int get_value(int type, int count, snd_ctl_elem_value_t *pcontrol, int *pvalue);
  71. //set value
  72. int set_value(snd_ctl_elem_id_t *pid, snd_ctl_elem_info_t *pinfo, snd_ctl_elem_value_t *pcontrol, int value);
  73. public:
  74. static int ALSAMixerOpen(char* pMode, char* pCtrlname);
  75. static void ALSAMixerClose(void);
  76. static int ArkALSADuckMixerGetVolume(void);
  77. static void ArkALSADuckMixerSetVolume(int inVolume);
  78. };
  79. extern int ALSAMixerOpen(void);
  80. extern void ALSAMixerClose(void);
  81. extern int ArkALSADuckMixerGetVolume(void);
  82. extern void ArkALSADuckMixerSetVolume(int inVolume);
  83. #endif // AUDIOCONTROL_H