2 Copyright 2004-2005 Chris Tallon
4 This file is part of VOMP.
6 VOMP is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 VOMP 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. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with VOMP; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 Command* Command::instance = NULL;
39 Command* Command::getInstance()
46 if (initted) return 0;
49 logger = Log::getInstance();
50 viewman = ViewMan::getInstance();
51 remote = Remote::getInstance();
53 if (!logger || !viewman || !remote)
62 int Command::shutdown()
64 if (!initted) return 0;
71 VDR::getInstance()->cancelFindingServer();
82 Video* video = Video::getInstance();
84 UCHAR screenSize = video->getFormat();
86 // moved from startup because surface delete doesn't work
90 Led::getInstance()->on();
94 v->setDimensions(video->getScreenHeight(), video->getScreenWidth());
95 v->setBackgroundColour(Colour::VIDEOBLUE);
99 viewman->removeView(v);
102 VWallpaper* w = new VWallpaper();
103 if (screenSize == Video::PAL)
105 logger->log("Command", Log::DEBUG, "PAL wallpaper selected");
106 w->init("/wallpaperPAL.jpg");
110 logger->log("Command", Log::DEBUG, "NTSC wallpaper selected");
111 w->init("/wallpaperNTSC.jpg");
117 VConnect* vconnect = new VConnect();
118 viewman->add(vconnect);
125 button = remote->getButtonPress(2); // FIXME why is this set to 2 and not 0? so it can quit
126 if ((button == Remote::NONE) || (button == Remote::UNKNOWN)) continue;
128 if (button != Remote::SIGNAL) handleCommand(button);
129 processMessageQueue();
133 void Command::postMessage(Message* m)
135 MessageQueue::postMessage(m);
136 kill(mainPid, SIGURG);
139 void Command::processMessage(Message* m)
141 logger->log("Command", Log::DEBUG, "processing message %i", m->message);
145 case Message::STANDBY:
150 case Message::STOP_PLAYBACK:
152 handleCommand(Remote::STOP); // an odd way of doing it, but so simple
155 case Message::VDR_CONNECTED:
157 doJustConnected((VConnect*)m->from);
163 void Command::handleCommand(int button)
165 if (isStandby && (button != Remote::POWER)) return;
167 if (viewman->handleCommand(button)) return;
169 // command was not handled
176 VVolume* v = new VVolume();
177 v->handleCommand(button); // this will draw+show
179 viewman->timedDelete(v, 2, 1);
184 VMute* v = new VMute();
188 viewman->timedDelete(v, 2, 1);
198 Osd::getInstance()->screenShot("/out.jpg");
204 void Command::doStandby()
208 Video::getInstance()->signalOn();
209 Led::getInstance()->on();
213 VConnect* vconnect = new VConnect();
214 viewman->add(vconnect);
219 ViewMan* viewman = ViewMan::getInstance();
221 viewman->removeAll();
222 viewman->redrawAll();
224 VDR::getInstance()->configSave("General", "Last Power State", "Off");
225 VDR::getInstance()->disconnect();
226 Video::getInstance()->signalOff();
227 Led::getInstance()->off();
232 void Command::doReboot()
234 VDR::getInstance()->disconnect();
236 logger->log("Command", Log::NOTICE, "Reboot");
237 reboot(LINUX_REBOOT_CMD_RESTART);
240 void Command::doJustConnected(VConnect* vconnect)
242 VDR* vdr = VDR::getInstance();
243 ViewMan* viewman = ViewMan::getInstance();
244 viewman->removeView(vconnect, 0, 1);
246 // Power off if first boot and config says so
251 char* powerAfterBoot = vdr->configLoad("General", "Power After Boot");
255 if (!strcasecmp(powerAfterBoot, "On"))
257 logger->log("Command", Log::INFO, "Config says Power After Boot = On");
259 else if (!strcasecmp(powerAfterBoot, "Off"))
261 logger->log("Command", Log::INFO, "Config says Power After Boot = Off");
265 else if (!strcasecmp(powerAfterBoot, "Last state"))
267 char* lastPowerState = vdr->configLoad("General", "Last Power State");
270 if (!strcasecmp(lastPowerState, "On"))
272 logger->log("Command", Log::INFO, "Config says Last Power State = On");
274 else if (!strcasecmp(lastPowerState, "Off"))
276 logger->log("Command", Log::INFO, "Config says Last Power State = Off");
282 logger->log("Command", Log::INFO, "Config General/Last Power State not understood");
287 logger->log("Command", Log::INFO, "Config General/Last Power State not found");
292 logger->log("Command", Log::INFO, "Config/Power After Boot not understood");
297 logger->log("Command", Log::INFO, "Config General/Power After Boot not found");
301 // Save power state = on
303 vdr->configSave("General", "Last Power State", "On");
306 // Go S-Video if config says so
308 char* svideo = vdr->configLoad("TV", "S-Video");
312 if (!strcasecmp(svideo, "Yes"))
314 logger->log("Command", Log::INFO, "Switching to S-Video as S-Video=%s", svideo);
315 Video::getInstance()->setConnection(Video::SVIDEO);
319 logger->log("Command", Log::INFO, "Leaving video output as S-Video=%s", svideo);
320 Video::getInstance()->setConnection(Video::COMPOSITERGB);
325 logger->log("Command", Log::INFO, "Config TV/S-Video not found");
330 VWelcome* vw = new VWelcome();
332 viewman->redrawAll();