OSDN Git Service

[SCHEMATIC] Modify SW/MW/LW Preamp, insert galbanic-isolator replace of common-mode...
[openi2cradio/OpenI2CRadio.git] / menu_volume.c
1 /*
2  * OpenI2CRADIO
3  * Menu sub-routines/Volume setrting.
4  * Copyright (C) 2013-09-11 K.Ohta <whatisthis.sowhat ai gmail.com>
5  * License: GPL2+LE
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2,
10  *  or (at your option) any later version.
11  *  This library / program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  *  See the GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this library; see the file COPYING. If not, write to the
18  *  Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
19  *  MA 02110-1301, USA.
20  *
21  *  As a special exception, if you link this(includeed from sdcc) library
22  *  with other files, some of which are compiled with SDCC,
23  *  to produce an executable, this library does not by itself cause
24  *  the resulting executable to be covered by the GNU General Public License.
25  *  This exception does not however invalidate any other reasons why
26  *  the executable file might be covered by the GNU General Public License.
27  */
28
29 #include "menu.h"
30 #include "menu_memoryfreq.h"
31 #include "power.h"
32 #include "commondef.h"
33 #include "backlight.h"
34
35
36
37 void set_volume(void)
38 {
39     unsigned char c;
40     unsigned char d;
41     unsigned char fact;
42     unsigned char dispf = 0xff;
43
44     _CLS();
45     do {
46         if(dispf != 0) {
47             _LOCATE_0_0();
48              d = akc6955_getvolumemode();
49             if(d == 0){
50                  _PUTCHAR('D');
51             } else {
52                  _PUTCHAR('K');
53             }
54             printstr(" Vol:");
55             print_numeric_nosupress(setup.volume, 2);
56             printstr("  F:Exit");
57             _LOCATE_0_1();
58             printstr("Pre:");
59             _PUTCHAR('0' + (setup.prevolume & 3));
60             _LOCATE(16-4, 1);
61             if(setup.lowboost == 0x00){
62                  printstr("   ");
63             } else {
64                  printstr("LOW");
65          }
66             _HOME();
67         }
68      c = pollkey_single_timeout(41, 1); // 943ms
69      backlight_reset(c);
70      dispf = backlight_dec(dispf);
71
72      switch(c) {
73              case charcode_6:
74                  setup.volume++;
75                  if(setup.volume > 63) setup.volume = 63;
76                  akc6955_setvolume(setup.volume);
77                  break;
78              case charcode_4:
79                  setup.volume--;
80                  if(setup.volume < 23) setup.volume = 23;
81                  akc6955_setvolume(setup.volume);
82                  break;
83              case charcode_f:
84                  _CLS();
85                  return;
86              case charcode_a:
87                  fact = 0xff;
88                  if(d != 0){
89                      fact = 0x00;
90                  }
91                  akc6955_setvolumemode(fact);
92                  akc6955_setvolume(setup.volume);
93                  break;
94              case charcode_b:
95                  setup.prevolume++;
96                  if(setup.prevolume > 3) setup.prevolume = 0;
97                  akc6955_set_prevolume(setup.prevolume);
98                  akc6955_setvolume(setup.volume);
99                  break;
100              case charcode_d:
101                  fact = 0x00;
102                  if(setup.lowboost == 0x00){
103                      fact = 0xff;
104                  }
105                  setup.lowboost = fact;
106                  akc6955_set_lowboost(setup.lowboost);
107                  akc6955_setvolume(setup.volume);
108                  break;
109              default:
110                  break;
111          }
112          if(setup.volume < 24){
113              set_examp_mute(1);
114         } else {
115              set_examp_mute(0);
116         }
117         idle_time_ms(9); // Pad.
118     } while(1);
119 }