ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/truck/DashInterface/DashInterface.cpp
(Generate patch)

Comparing DashInterface/DashInterface.cpp (file contents):
Revision 36 by douglas, 2008-03-04T22:24:35-08:00 vs.
Revision 37 by douglas, 2008-03-05T02:29:38-08:00

# Line 11 | Line 11
11   #include <foreach.hpp>
12   #include <hash.hpp>
13   #include <regex.hpp>
14 + #include <timing.hpp>
15  
16   #include <Audacious.hpp>
17   #include <GPS.hpp>
# Line 25 | Line 26
26  
27   bool debug(false);
28  
29 < void Uname(Display &display, time_t now = 0, bool change = false)
29 > void Uname_(Display &display, time_t now = 0, bool change = false)
30   {
31          if (!now || change)
32          {
# Line 93 | Line 94 | void Uname(Display &display, time_t now
94          }
95   }
96  
97 + enum Mode { Uname, Music, English, Metric, Nautical, Menu };
98 +
99 + Mode &operator ++(Mode &mode)
100 + {
101 +        return mode = Mode((mode + 1) % Menu);
102 + }
103 +
104 + Mode &operator --(Mode &mode)
105 + {
106 +        return mode = Mode((Menu + mode - 1) % Menu);
107 + }
108 +
109   int main(int argc, char *argv[])
110   {
111          std::string device;
# Line 145 | Line 158 | usage: std::cout << _B("Usage: ") << arg
158                          display.KeyReporting(mask, mask);
159                  }
160  
161 <                ::Uname(display);
161 >                Uname_(display);
162  
163                  display.Store();
164                  display.Set(Running, Display::Green, 100);
165                  display.Set(Running, Display::Red, 0);
166  
167 <                enum Mode { Uname, Music, English, Metric, Nautical, Last } mode(Uname);
167 >                Mode mode(Uname);
168                  //Audacious::Audacious audacious;
169                  //GPS::GPS gps;
170  
171                  _forever
172                  {
173 <                        time_t now(std::time(NULL));
173 >                        bool change(false);
174 >
175 >                        // XXX: I'm going to refactor this into callback functions, grr
176 >                        while (Display::KeyActivity activity = display.GetKeyActivity())
177 >                                if (mode != Menu)
178 >                                        switch (activity)
179 >                                        {
180 >                                        case Display::UpPress:
181 >                                                ++mode;
182 >
183 >                                                goto change;
184 >                                        case Display::DownPress:
185 >                                                --mode;
186 >
187 >                                                goto change;
188 >                                        case Display::LeftPress:
189 >                                                std::cerr << _B("Previous") << std::endl;
190 >
191 >                                                break;
192 >                                        case Display::RightPress:
193 >                                                std::cerr << _B("Next") << std::endl;
194 >
195 >                                                break;
196 >                                        case Display::EnterPress:
197 >                                                std::cerr << _B("Menu") << std::endl;
198 >
199 >                                                mode = Menu;
200 >
201 >                                                goto change;
202 >                                        case Display::ExitPress:
203 >                                                std::cerr << _B("Play/Pause") << std::endl;
204 >
205 >                                                break;
206 >                                        default:
207 >                                                break;
208 >                                        }
209 >
210 >                        if (false)
211 > change:                 change = true;
212 >
213 >                        Timing::Time now(Timing::GetTimeOfDay());
214  
215 +                        if (mode != Menu)
216                          {
217                                  char when[16];
218  
219 <                                std::strftime(when, sizeof (when), "%l:%M:%S %p %Z", std::localtime(&now));
219 >                                std::strftime(when, sizeof (when), "%l:%M:%S %p %Z", std::localtime(now));
220  
221                                  display.Set(2, 0, when);
222                          }
223  
224                          switch (mode)
225                          {
226 <                        default:
227 <                                ::Uname(display, now);
226 >                        case Uname:
227 >                                Uname_(display, now, change);
228  
229                                  break;
230                          case Music:
231                          case English:
232                          case Metric:
233                          case Nautical:
234 +                        case Menu:
235                                  break;
236                          }
237  
238 <                        ::sleep(1);
238 >                        Timing::NanoSleep(Timing::Time(1) -= Timing::GetTimeOfDay().GetNanoseconds());
239                  }
240          }
241          catch (const std::exception &exception)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines