LG MS450H MS400H
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

+3
annubis
Irving
vic1972
7 participantes

Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  vic1972 Vie Sep 17, 2010 9:07 pm

Hello, new versions are available, so all links in the posts and pdf document has been deleted.
please grab latest versions from here:

http://sourceforge.net/projects/lgmenu/files/


updated instructions are:
https://ms450.forosactivos.net/english-ms400h-ms450h-ms408d-ms409d-f7/tutorial-pm-lg-menu-v103-t444.htm



**********************************************************************



Hello,
here it is finally, firmware CUSTOM 3, its identification is: Custom3_0148VK

Main developers has been: Keltek and Victor.
Of course with help and collaboration of many people.

All the information of this new firmware (User guide, installation, etc),
is available in the following documents:

Spanish: http://dl.dropbox.com/u/684543/varios/ms450h/Firmwares/CUSTOM3.0/distribution/PM_LGM_UserGuide_ES.pdf
English: http://dl.dropbox.com/u/684543/varios/ms450h/Firmwares/CUSTOM3.0/distribution/PM_LGM_UserGuide_EN.pdf
French: http://dl.dropbox.com/u/684543/varios/ms450h/Firmwares/CUSTOM3.0/distribution/PM_LGM_UserGuide_FR.pdf


The main functionalities are:

  • PipeManagement: modification of the behaviour of the LG in background and numeric codes.
  • LGMenu: Portal web with many utilities and functionalities; and platform for new developments and ideas.
  • Last version of busybox.



The main functionalities of PipeManagement: (Full description in the documents).

  • After Recording Power Off Management.
  • Subtitles management.
  • Recording Backup.
  • Timer Management.
  • Numeric Codes.
  • Auto Power Off.
  • Custom Scripts.
  • Prompter OK.
  • Prompter Yes.
  • Prompter No.
  • Channel Carousel.
  • Channel List Recovery Internet.
  • Channel List Backup / Restore.
  • Recording Backup / Restore.



The main functionalities of LGMenu are:

  • FTP server from lg boot.
  • Portal web with different options in default web port.
  • Order, edit, delete channels.
  • History of recordings
  • List of recordings with ftp/http links.
  • Minutes are added in recording if added from EPG.
  • List, delete and edit recordings.
  • Backup/ restore of main lg config files.
  • Page to configure services.
  • Show LG seetings.
  • Reboot LG PVR.
  • bit torrent cliente (rTorrent) with web interface (wTorrent)
  • Virtual remote controller.
  • MultiLanguage.
  • Login: username and password to access web portal [optional].



Better if you download the two files together in the following link:
http://dl.dropbox.com/u/684543/varios/ms450h/Firmwares/CUSTOM3.0/distribution/distribution.zip

The files, basically are two files needed:

  • Firmware: http://dl.dropbox.com/u/684543/varios/ms450h/Firmwares/CUSTOM3.0/distribution/MS400_100417_0148.img
  • CustomPackages: http://dl.dropbox.com/u/684543/varios/ms450h/Firmwares/CUSTOM3.0/distribution/Custom-KV-v1.0.tar.gz


Basically you have to put those file in a USB stick,do not change the file names.
switch off lg, connect USB, and switch on lg while pressing round key at the front.
More instructions in the guide.


Basically consist in two installation process: the firmware and packages.
Each of these process generates a reboot when they finish, so do not get worry if the lg reboot.

Then you can access lgmenu putting ip address in your web browser.

We have created a site to put all incidences and ideas:
http://sourceforge.net/tracker/?group_id=348378

Thanks Keltek for great dedication and communication.


Última edición por vic1972 el Dom Oct 03, 2010 10:46 pm, editado 2 veces
vic1972
vic1972

Mensajes : 2260
Fecha de inscripción : 09/12/2009
Edad : 51
Localización : Malaga

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty Re: TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  Irving Vie Sep 17, 2010 9:23 pm

Thanks Keltek and Victor.
Cool

Irving

Mensajes : 9
Fecha de inscripción : 14/06/2010

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty Re: TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  annubis Vie Sep 17, 2010 9:49 pm

Muchas gracias Very Happy Very Happy Very Happy

Thanks a lot Very Happy Very Happy Very Happy

Merci beaucoup Very Happy Very Happy Very Happy

annubis

Mensajes : 78
Fecha de inscripción : 12/08/2010

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty Re: TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  Seb@stien Sáb Sep 18, 2010 10:33 am

Good job to you Wink
I can see you use some tips I found, great Wink

I try to install it next week Wink

Really, good job !

Seb@stien

Seb@stien

Mensajes : 93
Fecha de inscripción : 15/12/2009

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty AU Report

Mensaje  Co0olCat Jue Sep 23, 2010 12:09 pm

Hi,

I got AU version of the devise. Got installed external HDD (1Tb).
Updated to resent unofficial version (v3). Great job. Keep going.

Have noticed several things. Some was able to resolve, with some need help.

Installation: First part was without any problems. Second part with custom routines did not work. Had to copy files to devise and run manually installation script. After that got web interface, ftp and samba. Great job.

Some problems: when watching files through samba some files are taking time to seek. With 2009 version of firmware this was not the case. Would appreciate solution.

On Scheduling page Destination had only two options: HDD and USB. Had to modify two files to add External HDD (HDD+): act_Schedule.inc and lang_eng.inc. Edited files are attached.

Schedule file
Código:

<?php

$message = "";
$editentry = false;

function updTimerRec() {
   $fh = fopen("/tmp/command_sender.txt", "a");
   if ($fh) {
      fwrite($fh, "G\n");
      fflush($fh);
      sleep(2);
      fwrite($fh, ",\n");
      fflush($fh);
      fclose($fh);
   }
}

// Udelej seznam kanalu
$lg_cmd = "/tmp/hdd/root/custom/bin/lgchanedit";
$read_file = "/usr/local/etc/dvdplayer/dtv_channel.txt";
$lg_list = $lg_cmd." -l -f ".$read_file;

$db_file="/usr/local/etc/dvdplayer/schedule_record.db";
$sql = new SQLite3($db_file, SQLITE3_OPEN_READWRITE);

$out = exec($lg_list, $list);
if ($out == "Error reading input file.") {
   $list = array();
} else {
   $c = count($list);
   $chlist = array();
   for ($i = 0; $i<$c; $i++) {
      $chlist[$i] = (list($ch_index, $ch_name, $ch_name2, $ch_type) = explode(":", $list[$i]));
   }
}

// Zajisti zmeny triggeru
$TRIGGER1 = "CREATE TRIGGER update_EPG1 AFTER INSERT ON timer_record_table BEGIN UPDATE timer_record_table SET timestamp_Start = (timestamp_Start - 0) WHERE ID = new.ID AND event_id > 0; UPDATE timer_record_table SET timestamp_Offset = (timestamp_Offset+";
$TRIGGER2 = ") WHERE ID = new.ID AND event_id > 0; UPDATE timer_record_table SET start_minute = max(0, start_minute - 0) WHERE ID = new.ID AND event_id > 0; UPDATE timer_record_table SET length_minute = (length_minute+";
$TRIGGER3 = ") WHERE ID = new.ID AND event_id > 0; END;";
$DROPTRIG = "DROP TRIGGER update_EPG1;";
if (!empty($_POST["deactivate"]) && $_POST["deactivate"] == REC_SHIFTDEACT) {
   // Smaz trigger
   $sql->exec($DROPTRIG);
} else if (!empty($_POST["epgtrig"]) && $_POST["epgtrig"] == REC_SHIFTPERFORM) {
   $epgmin = (!empty($_POST["epg_min"]))?$_POST["epg_min"]:0;
   if (is_numeric($epgmin) && $epgmin > 0) {
      $trig = $TRIGGER1.($epgmin * 60).$TRIGGER2.($epgmin).$TRIGGER3;
      $res = exec("/tmp/hdd/root/custom/bin/sqlite3 ".$db_file." ".schema timer_record_table"");
      if (strpos($res, "update_EPG1") > 0) {
         $sql->exec($DROPTRIG);
      }
      $sql->exec($trig);
   } else if(is_numeric($epgmin) && $epgmin == 0) {
      $res = exec("/tmp/hdd/root/custom/bin/sqlite3 ".$db_file." ".schema timer_record_table"");
      if (strpos($res, "update_EPG1") > 0) {
         $sql->exec($DROPTRIG);
      }
   }
}

// Zjistit, jestli uz mame trigger
$res = exec("/tmp/hdd/root/custom/bin/sqlite3 ".$db_file." ".schema timer_record_table"");
if (strpos($res, "update_EPG1") > 0) {
   // Trigger existuje
   $shiftactive = 1;
   $minlen = substr($res, strpos($res, "length_minute") + 13);
   $minlen = substr($minlen, strpos($minlen, "length_minute") + 13);
   $minlen = substr($minlen, strpos($minlen, "+") + 1);
   $minlen = substr($minlen, 0, strpos($minlen, ")"));
} else {
   $shiftactive = 0;
   $minlen = 0;
}

$dtz = new DateTimeZone(date_default_timezone_get());
$tzoffset = $dtz->getOffset(new DateTime());

// Proved akce
if (!empty($_POST["recaction"])) {
   $recaction = $_POST["recaction"];
   // Pridej zaznam
   if ($recaction == REC_ADD) {
      $recdate = $_POST["recdate"];
      $start_hour = $_POST["rechour"];
      $start_minute = $_POST["recminute"];
      $length_hour = $_POST["reclhour"];
      $length_minute = $_POST["reclminute"];
      $channel = $_POST["recchan"];
      $target = $_POST["recdest"];
      $frequency = $_POST["recfrequency"];

      $now = time() - $tzoffset;
      $plan = strtotime($recdate." ".$start_hour.":".$start_minute);

      if(empty($recdate)) {
         $message = REC_EMPTYDATE;
      } else if ($length_hour == 0 && $length_minute < 10) {
         $message = REC_SHORTLEN;
      } else if ($plan - $now < 0) {
         $message = REC_BADDATE;
      } else {
         $id = 0;
         $datestamp = 0;
         $date = $frequency;
         list($date_day, $date_month, $date_year) = explode(".", $recdate);
         $source = 10;
         $quality = 1;
         $sap = 0;
         $timestamp_start = mktime($start_hour, $start_minute, 0, $date_month, $date_day, $date_year) + $tzoffset;
         $timestamp_offset = ($length_hour * 3600) + ($length_minute * 60);
         $enable = 0;
         $lock = 0;
         $schedule_type = 0;
         $event_id = -1;
         $user_id = 0;
         $user_string = "";

         $sql_insert = "INSERT INTO timer_record_table (datestamp, date, date_year, date_month, date_day, start_hour, start_minute, length_hour, length_minute,".
        " source, channel, quality, target, SAP, timestamp_start , timestamp_offset, enable, lock, schedule_type, event_id , user_id , user_string ) ".
        " VALUES (0, $frequency, $date_year, $date_month, $date_day, $start_hour, $start_minute, $length_hour, $length_minute, $source, $channel,".
        " $quality, $target, $sap, $timestamp_start, $timestamp_offset, $enable, $lock, $schedule_type, $event_id, $user_id, '$user_string');";

         $result = $sql->exec($sql_insert);
         if (!$result) {
            $message = REC_INSERROR;
         } else {
            updTimerRec();
         }
      }
   } else if ($recaction == REC_SAVE) {
      // Uloz zmeny
      $id = $_POST["id"];
      $sdd = $_POST["day"];
      $sdm = $_POST["month"];
      $sdy = $_POST["year"];
      $sth = $_POST["rechour"];
      $stm = $_POST["recminute"];
      $leh = $_POST["reclhour"];
      $lem = $_POST["reclminute"];
      $cha = $_POST["recchan"];
      $rfr = $_POST["recfre"];
      $tar = $_POST["recdest"];
      $timestamp_start = mktime($sth, $stm, 0, $sdm, $sdd, $sdy) + $tzoffset;
      $timestamp_offset = ($leh * 3600) + ($lem * 60);
      $sql_update = "UPDATE timer_record_table SET date = ".$rfr.", start_hour = ".$sth.", start_minute = ".$stm.", length_hour = ".$leh.", length_minute = ".$lem.
      ", channel = ".$cha.", target = ".$tar.", timestamp_start = ".$timestamp_start.", timestamp_offset = ".$timestamp_offset." WHERE ID = ".$id." AND lock = 0";
      $result = $sql->exec($sql_update);
      if (!$result) {
         $message = REC_UPDERROR;
      } else {
         updTimerRec();
      }
   } else if ($recaction == REC_DELETE) {
      // Smaz zaznam
      $id = $_POST["id"];
      $sql_delete = "DELETE FROM timer_record_table WHERE id = ".$id;
      $result = $sql->exec($sql_delete);
      if (!$result) {
         $message = REC_DELETEERROR;
      } else {
         updTimerRec();
      }
   }
}

// Udelej seznam zaznamu
$query = "SELECT * FROM timer_record_table ORDER BY timestamp_start";
$results = $sql->query($query);

$cur_starth = date("H");
$cur_startm = date("i");

$tzcorrection = $tzoffset/3600;

$loctime = localtime(time(),true);
$tm_mday = $loctime["tm_mday"];
$tm_mon = $loctime["tm_mon"];
$tm_year = $loctime["tm_year"];

if ($cur_starth - $tzcorrection < 0) {
   // Cas je posunut do dalsiho dne
   if ($tm_mday - 1 < 1) {
      // Cas je posunut do dalsiho mesice
      if ($tm_mon - 1 < 0) {
         // Cas je posunut do dalsiho roku
         $tm_year--;
      }
      $tm_mon--;
   }
   $tm_mday--;
   $cur_starth -= $tzcorrection;
} else {
   $cur_starth -= $tzcorrection;
}

$cur_date = $tm_mday.".".($tm_mon + 1).".".($tm_year + 1900);

if (!empty($_POST["recentryedit"]) && $_POST["recentryedit"] == REC_BUTEDIT) {
   if ($_POST["lock"] == 0) {
      $id = $_POST["id"];
      $editentry = true;
   } else {
      $message = REC_ENTRYLOCKED;
   }
}

?>
<div id="main_t">
<ul id="tabs">
   <li>
   <div class="tabs"><?=REC_RECORDED?></div>
   </li>
</ul>
</div>
<div id="main_m">
<div id="content" align="center">
<h1><?=REC_ENDSHIFT?></h1>
<form method="post" action=""><?=REC_ENDSHIFTMSG?> <input type="text"
   size="2" name="epg_min" value="<?=$minlen?>" /><?=REC_MIN?> <input
   type="submit" name="epgtrig" value="<?=REC_SHIFTPERFORM?>" /> <input
   type="submit" name="deactivate" value="<?=REC_SHIFTDEACT?>"
   <?=($shiftactive == 0?" disabled="disabled"":"")?> /></form>





<h1><?=REC_ADDENTRY?></h1>
   <?=!empty($message)?"<div style="color: red;">".$message."</div>":""?>
<form name="record" method="post" action="">
<table width="950" border="1" cellspacing="0" cellpadding="0"
   class="download"
   style="border-collapse: collapse; border-color: #eeeeee;">
   <tr>
      <th class="listTorrentsHead"><?=REC_DATE?></th>
      <th class="listTorrentsHead"><?=REC_HOURMINUTE?></th>
      <th class="listTorrentsHead"><?=REC_LEN?></th>
      <th class="listTorrentsHead"><?=REC_CHANNEL?></th>
      <th class="listTorrentsHead"><?=REC_DESTINATION?></th>
      <th class="listTorrentsHead"><?=REC_FREQUENCY?></th>
      <th class="listTorrentsHead"></th>
   </tr>
   <tr class="t_cont">
      <td class="name"><input type="text" name="recdate"
         value="<?=$cur_date?>" size="10" /><a href="#"
         onclick="cal.select(document.forms['record'].recdate, 'anchor1', 'dd.MM.yyyy'); return false;"
         name="anchor1" id="anchor1"><?=REC_SELDATE?></a>
      <div id="testdiv1"
         style="position: absolute; visibility: hidden; background-color: white; layer-background-color: white;"></div>
      </td>
      <td><select name="rechour" size="1">
      <?
      for ($h = 0; $h<24; $h++) {
         print "<option value="$h"".($cur_starth == $h?"selected=" selected"":"").">".($h<10?"0$h":$h)."</option>\n";
      }
      ?>
      </select> : <select name="recminute" size="1">
      <?
      for ($m = 0; $m<60; $m+=5) {
         print "<option value="$m"".(($m >= $cur_startm && $m <= ($cur_startm + 5))?" selected="selected"":"").">".($m<10?"0$m":$m)."</option>\n";
      }
      ?>
      </select></td>
      <td><select name="reclhour" size="1">
      <?
      for ($h = 0; $h<24; $h++) {
         print "<option value="$h">".($h<10?"0$h":$h)."</option>\n";
      }
      ?>
      </select> : <select name="reclminute" size="1">
      <?
      for ($m = 0; $m<60; $m+=5) {
         print "<option value="$m">".($m<10?"0$m":$m)."</option>\n";
      }
      ?>
      </select></td>
      <td><select name="recchan" size="1">
      <?
      for ($i=0; $i < count($chlist); $i++) {
         print("<option value="".$chlist[$i][0]."">".$chlist[$i][0]." ".$chlist[$i][1]."</option>\n");
      }
      ?>
      </select></td>
      <td><select name="recdest" size="1">
         <option value="7"><?=DST_PLS?></option>
         <option value="0"><?=DST_HDD?></option>
         <option value="1"><?=DST_USB?></option>
      </select></td>
      <td><select name="recfrequency" size="1">
         <option value="0"><?=REC_ONCE?></option>
         <option value="1"><?=REC_EVERYDAY?></option>
         <option value="2"><?=REC_MON_FRI?></option>
         <option value="3"><?=REC_MON_SAT?></option>
         <option value="7"><?=REC_WEEK?></option>
      </select></td>
      <td><input type="submit" name="recaction" value="<?=REC_ADD?>" /></td>
   </tr>
</table>
</form>
<i style="font-size: 10px"><?=REC_ADDNOTICE?></i>




<h1><?=REC_RECLIST?></h1>
      <?
      if ($editentry == true) {
         print "<form method="post" action="">\n";
      }
      ?>
<table width="950" border="1" cellspacing="0" cellpadding="0"
   class="download"
   style="border-collapse: collapse; border-color: #eeeeee;">
   <tr>
      <th class="listTorrentsHead"><?=HIST_DATE?></th>
      <th class="listTorrentsHead"><?=HIST_LEN?></th>
      <th class="listTorrentsHead"><?=HIST_SOURCE?></th>
      <th class="listTorrentsHead"><?=HIST_CHANNEL?></th>
      <th class="listTorrentsHead"><?=REC_FREQUENCY?></th>
      <th class="listTorrentsHead"><?=HIST_QUALITY?></th>
      <th class="listTorrentsHead"><?=HIST_DESTINATION?></th>
      <th class="listTorrentsHead"><?=HIST_LOCK?></th>
      <th class="listTorrentsHead"></th>
   </tr>
   <?
   $rowid = 0;
   while ($row = $results -> fetchArray()) {
      if( $rowid % 2 == 0) {
         $rowstyle = ROW_EVEN;
      } else {
         $rowstyle = ROW_ODD;
      }
      $rowid++;
      ?>
   <tr class="t_cont" style="height: 25px; background-color: <?=$rowstyle?>;">
      <td class="name" align="center"><?=$row["date_day"]?>.<?=$row["date_month"]?>.<?=$row["date_year"]?>
      <?
      if ($editentry && $id == $row["ID"]) {
         print "<select name="rechour" size="1">";
         for ($h = 0; $h<24; $h++) {
            print "<option value="$h"".($row["start_hour"] == $h?"selected=" selected"":"").">".($h<10?"0$h":$h)."</option>\n";
         }
         print "</select> : <select name="recminute" size="1">";
         for ($m = 0; $m<60; $m+=5) {
            print "<option value="$m"".($row["start_minute"] == $m?" selected="selected"":"").">".($m<10?"0$m":$m)."</option>\n";
         }
         print "</select>\n";
      } else {
         print $row["start_hour"].":";
         print ($row["start_minute"] > 9) ? $row["start_minute"] : "0".$row["start_minute"];
      }
      print "</td>\n";
      $lh=$row["length_hour"];
      $lm=$row["length_minute"];
      if ($lm > 59) {
         $lh++;
         $lm=$lm - 60;
      }
      if ($editentry && $id == $row["ID"]) {
         print "<td class="name" align="center"><select name="reclhour" size="1">\n";
         for ($h = 0; $h<24; $h++) {
            print "<option value="$h"".($lh == $h?" selected="selected"":"").">".($h<10?"0$h":$h)."</option>\n";
         }
         print "</select> : <select name="reclminute" size="1">\n";
         for ($m = 0; $m<60; $m+=5) {
            print "<option value="$m"".($lm == $m?" selected="selected"":"").">".($m<10?"0$m":$m)."</option>\n";
         }
         print "</select></td>\n";
      } else {
         print "<td class="name" align="center">".$lh.":".($lm>9?$lm:"0".$lm)."</td>\n";
      }
      switch ($row["source"]) {
         case "10":
            $source = SRC_DVBT;
            break;
         default:
            $source = HIST_UNKNOWN_SOURCE."(".$row["source"].")";
      }
      print "<td class="name" align="center">".$source."</td>\n";
      print "<td class="name" align="center">\n";
      if ($editentry && $id == $row["ID"]) {
         print "<select name="recchan" size="1">";
         for ($i=0; $i < count($chlist); $i++) {
            $ch = $chlist[$row["channel"]-1][1];
            print("<option value="".$chlist[$i][0].""".($ch == $chlist[$i][1]?" selected="selected"":"").">".$chlist[$i][0]." ".$chlist[$i][1]."</option>\n");
         }
         print "</select>\n";
      } else {
         print $chlist[$row["channel"]-1][1];
      }
      ?></td>
      <?
      switch ($row["date"]) {
         case 0:
            $frequency = REC_ONCE;
            break;
         case 1:
            $frequency = REC_EVERYDAY;
            break;
         case 2:
            $frequency = REC_MON_FRI;
            break;
         case 3:
            $frequency = REC_MON_SAT;
            break;
         case 7:
            $frequency = REC_WEEK;
            break;
      }
      ?>
      <td class="name" align="center"><?
      if ($editentry && $id == $row["ID"]) {
         ?> <select name="recfre" size="1">
         <option value="0"
         <?=($row["date"] == 0 ? " selected="selected"" : "")?>><?=REC_ONCE?></option>
         <option value="1"
         <?=($row["date"] == 1 ? " selected="selected"" : "")?>><?=REC_EVERYDAY?></option>
         <option value="2"
         <?=($row["date"] == 2 ? " selected="selected"" : "")?>><?=REC_MON_FRI?></option>
         <option value="3"
         <?=($row["date"] == 3 ? " selected="selected"" : "")?>><?=REC_MON_SAT?></option>
         <option value="7"
         <?=($row["date"] == 7 ? " selected="selected"" : "")?>><?=REC_WEEK?></option>
      </select> <?
      } else {
         print $frequency;
      }
      print "</td>\n";
      switch ($row["quality"]) {
         case "1":
            $quality = QUALITY_HIGH;
            break;
         default:
            $source = QUALITY_UNKNOW."(".$row["quality"].")";
      }
      print "<td class="name" align="center">".$quality."</td>\n";
      switch ($row["target"]) {
         case "0":
            $destination = DST_HDD;
            break;
         case "1":
            $destination = DST_USB;
            break;
         case "7":
            $destination = DST_PLS;
            break;
         default:
            $destination = DST_UNKNOWN."(".$row["target"].")";
      }
      print "<td class="name" align="center">";
      if ($editentry && $id == $row["ID"]) {
         ?> <select name="recdest" size="1">
         <option value="0"
         <?=($row["target"] == 0?" selected="selected"":"")?>><?=DST_HDD?></option>
         <option value="1"
         <?=($row["target"] == 1?" selected="selected"":"")?>><?=DST_USB?></option>
         <option value="7"
         <?=($row["target"] == 7?" selected="selected"":"")?>><?=DST_PLS?></option>
      </select> <?
      } else {
         print $destination;
      }
      print "</td>\n";
      switch ($row["lock"]) {
         case "0":
            $lock = LOCK_UNLOCKED;
            break;
         case "1":
            $lock = LOCK_LOCKED;
            break;
         default:
            $lock = LOCK_UNKNOWN."(".$row["lock"].")";
      }
      print "<td class="name" align="center">".$lock."</td>\n";
      print "<td class="name" align="center">\n";
      if ($editentry == false) {
         ?>
      <form action="" method="post"><input type="submit" name="recentryedit"
         value="<?=REC_BUTEDIT?>" /> <input type="hidden" name="id"
         value="<?=$row["ID"]?>" /> <input type="hidden" name="lock"
         value="<?=$row["lock"]?>" /></form>
         <?
      } else {
         if ($row["ID"] == $id) {
            ?> <input type="submit" name="recaction" value="<?=REC_SAVE?>" /> <input
         type="submit" name="recaction" value="<?=REC_DELETE?>" /> <input
         type="submit" name="recaction" value="<?=REC_CANCEL?>" /> <input
         type="hidden" name="id" value="<?=$row["ID"]?>" /> <input
         type="hidden" name="day" value="<?=$row["date_day"]?>" /> <input
         type="hidden" name="month" value="<?=$row["date_month"]?>" /> <input
         type="hidden" name="year" value="<?=$row["date_year"]?>" /> <?
         }
      }
      ?></td>
   </tr>
   <?
   }
   ?>

</table>
   <?=($editentry == true)?"</form>":""?></div>
</div>
<div id="main_b"></div>

Language file:
Código:

<?
// Defines language definition

define("LG_MENU_TITLE", "Control panel for LG MS400H/MS450H");

define("MAIN_WTORRENT", "wTorrent");
define("MAIN_CHEDITOR", "Channels");
define("MAIN_BACKUP", "Backup/Restore");
define("MAIN_RECED", "Scheduling");
define("MAIN_RECORDS", "Records");
define("MAIN_HISTORY", "History");
define("MAIN_SETTINGS", "Settings");
define("MAIN_SERVICES", "Services");
define("MAIN_RESTART", "Restart");
define("MAIN_UPTIME", "Uptime: ");
define("MAIN_LOADAVERAGE", "load: ");
define("MAIN_LANGUAGE", "Language:");
define("MAIN_LOGOUT", "Logout");
define("MAIN_AUTHFAILED", "Authetication failed");
define("MAIN_USERLOGIN", "User login");
define("MAIN_USERNAME", "User name:");
define("MAIN_PASSWORD", "Password:");
define("MAIN_SENDLOGIN", "Login");

// Editor kanalu
define("CHED_CHEDITOR", "Channel editor");
define("CHED_ORDER", "Order");
define("CHED_TYPE", "Type");
define("CHED_NAME", "Name");
define("CHED_A_EDIT", "Edit");
define("CHED_A_SAVE", "Save");
define("CHED_A_CANCEL", "Cancel");
define("CHED_FILENOTEXISTS", "The channel file not exists or is empty.");
define("CHED_BADCHANNEL", "Bad channel number.");

// Zálohování
define("BCK_BACKUP", "Backup and restore");
define("BCK_BCKLIST", "List of backup files");
define("BCK_DATE", "Date and time of backup");
define("BCK_SIZE", "Size");
define("BCK_NAME", "Name");
define("BCK_CONTROL", "");
define("BCK_OP_DELETE", "Delete");
define("BCK_OP_RESTORE", "Restore");
define("BCK_OP_CREATE", "Create backup");
define("BCK_DONE", "Backup succesfully created into file<br/>\$BKPDIR/\$BACKUPNAME_PRE\$ver.tar");
define("BCK_RESTDONE", "File <br/>\$bfile<br/>succesfully restored.");

// Prohlizeni historie
define("HIST_HISTORY", "History viewer");
define("HIST_ID", "ID");
define("HIST_DATE", "Date");
define("HIST_LEN", "Length");
define("HIST_SOURCE", "Source");
define("HIST_FILE", "File");
define("HIST_CHANNEL", "Channel");
define("HIST_QUALITY", "Quality");
define("HIST_DESTINATION", "Destination");
define("HIST_TIMESTAMP", "Timestamp");
define("HIST_OFFSET", "Offset");
define("HIST_RESULT", "Result");
define("HIST_LOCK", "Lock");
define("HIST_TYPE", "Type");
define("HIST_UNKNOWN_SOURCE", "Unknown");
define("HIST_NOTEXISTS", "Deleted");

// Editor záznamů
define("REC_RECORDED", "List and edit scheduled recordings");
define("REC_RECLIST", "List of scheduled recordings");
define("REC_ENDSHIFT", "Change the end of scheduling if added from EPG");
define("REC_ENDSHIFTMSG", "Minutes, which will be added to end of recording:");
define("REC_MIN", "min.");
define("REC_SHIFTPERFORM", "Perform");
define("REC_SHIFTDEACT", "Deaktivate");
define("REC_ADDENTRY", "Add entry");
define("REC_HOURMINUTE", "Begin");
define("REC_DATE", "Date");
define("REC_LEN", "Length");
define("REC_CHANNEL", "Channel");
define("REC_DESTINATION", "Destination");
define("REC_SELDATE", "Select date");
define("REC_ADD", "Add");
define("REC_EMPTYDATE", "Empty date.");
define("REC_SHORTLEN", "Length of recording is too small. Please enter at least 10 min.");
define("REC_INSERROR", "Error while adding scheduled entry into database.");
define("REC_DELETEERROR", "Error while deleting entry.");
define("REC_UPDATEERRROR", "Error while changing entry.");
define("REC_ENTRYLOCKED", "Entry is locked. Probably is recorded now.");
define("REC_BADDATE", "Entry date canot be in past.");
define("REC_ADDNOTICE", "Warning: After adding entry, there will be no added additional minutes.");
define("REC_BUTEDIT", "Edit");
define("REC_CANCEL", "Cancel");
define("REC_DELETE", "Delete");
define("REC_SAVE", "Save");
define("REC_FREQUENCY", "Repeating");
define("REC_ONCE", "Once");
define("REC_EVERYDAY", "Everyday");
define("REC_MON_SAT", "Mon-Sat");
define("REC_MON_FRI", "Mon-Fri");
define("REC_WEEK", "Weekly");

// List of saved schedulings in REC direcotry
define("RCD_RECORDNINGS", "List of files in recording directory");
define("RCD_NOTAVAILABLE", "N/A");
define("RCD_SAVEDATE", "Save date");
define("RCD_FILESIZE", "File size");
define("RCD_FILENAME", "File name");
define("RCD_RENAME", "Rename");

// Editor nastavení
define("SET_SETTINGS", "Settings");
define("SET_ENABLED", "Enabled");
define("SET_DISABLED", "Disabled");
define("SET_ANTENAPOWER", "Antena power:");
define("SET_RECQUALITY", "Record quality:");
define("SET_AUTOCHAPTER", "Automatic chapters:");
define("SET_BRIGHTNESS", "Brightness:");
define("SET_CONTRAST", "Constrast:");
define("SETUP_DOLBY_PROLOGIC_ENABLE", "Enable Dolby ProLogic:");
define("SET_NETWORK", "Settings of wired connection");
define("SET_WLAN", "Settings of wireless connection");
define("SETUP_USE_DHCP", "Use DHCP:");
define("SETUP_NET_ETH0_IPADDR", "IP adress:");
define("SETUP_NET_ETH0_MASK", "Network mask:");
define("SETUP_NET_ETH0_GATEWAY", "Gateway:");
define("SETUP_NET_ETH0_DNS", "DNS:");

// Restart
define("RST_RESTART", "Perform reset");
define("RST_WARN", "Are you sure to perform reset of device?");
define("RST_WARN2", "Please do not perform restart if recording is actie. It will be interrupted!");
define("RST_WARN3", "Are you really suer to restart device?");
define("RST_PERFORMING", "Reset is performaed...");
define("RST_MESSAGE", "About 40 seconds will be the device started and ready.");
define("RST_RSTBUTTON", "Perform restart");
define("RST_RSTBUTTON2", "Yeas, I'm suer. I really wants to restart device...");

define("SRC_DVBT", "DVB-T");

define("DST_HDD", "HDD");
define("DST_USB", "USB");
define("DST_PLS", "HDD+");
define("DST_UNKNOWN", "Unknown");

define("QUALITY_HIGH", "High");
define("QUALITY_UNKNOWN", "Unknown");

define("RECEND_OK", "OK");
define("RECEND_STOPPED", "Stopped by hand");
define("RECEND_SCHEDULED", "Scheduled stop");
define("RECEND_UNKNOWN", "Unknown");

define("LOCK_UNLOCKED", "Unlocked");
define("LOCK_LOCKED", "Locked");
define("LOCK_UNKNOWN", "Unknown");

define("CAL_MONTHS", "'Januray','February','March','April','May','June','July','August','September','October','November','December'");
define("CAL_DAYS", "'Su','Mo','Tu','We','Th','Fr','Sa'");
define("CAL_TODAY", "'today'");

// Remote controll
define("MAIN_REMOTECONTROLL", "Virtual RC");

// Services
define("SVC_SERVICES", "Services");
define("SVC_ACT_STOP", "Stop");
define("SVC_ACT_START", "Start");
define("SVC_ACT_ENABLE", "Enable");
define("SVC_ACT_DISABLE", "Disable");
define("SVC_DESCRIPTION", "Description");
define("SVC_CONTROL", "Control");
define("SVC_STATE", "Service status");
define("SVC_STATE_STARTED", "Started");
define("SVC_STATE_STOPPED", "Stopped");
define("SVC_STATE_ENABLED", "Enabled");
define("SVC_STATE_DISABLED", "Disabled");
define("SVC_STATE_UNKNOWN", "Unknown");

// Remote control
define("RC_NUMBERS", "Numbers");
define("RC_POWEROFF", "Power off");
define("RC_SETTINGS", "Show/hide settings buttons");
define("RC_UP", "Up");
define("RC_HOME", "Home");
define("RC_LEFT", "Left");
define("RC_OK", "Ok");
define("RC_RIGHT", "Right");
define("RC_RETURN", "Return");
define("RC_DOWN", "Down");
define("RC_USB", "USB");
define("RC_PLAY", "Play");
define("RC_PAUSE", "Pause");
define("RC_STOP", "Stop");
define("RC_PLAYSLOW", "Play slow");
define("RC_PREV", "Prev");
define("RC_REWIND", "Rewind");
define("RC_FORWARD", "Forward");
define("RC_NEXT", "Next");
define("RC_VOLUP", "Vol +");
define("RC_MUTE", "Mute");
define("RC_VOLDOWN", "Vol -");
define("RC_SUBTITLES", "Subtitles");
define("RC_SEARCHCHAPTER", "Search chapters");
define("RC_PREVCHAPTER", "Prev chapter");
define("RC_NEXTCHAPTER", "Next chapter");
define("RC_REPEATTITLE", "Repeat title");
define("RC_ZOOMIN", "Zoom +");
define("RC_ZOOMOUT", "Zoom -");
define("RC_REPEATAB", "Repeat A-B");
define("RC_B_SETUP", "Setup");
define("RC_B_MENU", "Menu");
define("RC_B_FILECOPY", "File copy");
define("RC_B_VIDEOSYS", "Video sys");
define("RC_B_AUDIOSYS", "Audio sys");
define("RC_B_YSTMODE", "YST mode");

?>

It looks like that web scheduling uses counter for setting records rather than program number. In AU there are programs spread from 1 to 99. Total number of program is around 40. As a result either devise does not understand when say channel 22 is set to be recorded (there is no program 22, example) or web interfase shows error when program 99 was selected for recording on devise - total count is only 40, so 99 cannot be displayed.

I would kindly appreciate your help.

Thank you.

Kind regards,
TY

Co0olCat

Mensajes : 17
Fecha de inscripción : 31/01/2010

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty Re: TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  Keltek Jue Sep 23, 2010 11:06 pm

Co0olCat escribió:Hi,

I got AU version of the devise. Got installed external HDD (1Tb).
Updated to resent unofficial version (v3). Great job. Keep going.

Have noticed several things. Some was able to resolve, with some need help.

Installation: First part was without any problems. Second part with custom routines did not work. Had to copy files to devise and run manually installation script. After that got web interface, ftp and samba. Great job.
I have found if you use NTFS formated USB, the installation cannot start. So for all of you PLEASE USE FAT32 FORMATED USB DISK. But there are some other problems we need to discover.

Co0olCat escribió:
Some problems: when watching files through samba some files are taking time to seek. With 2009 version of firmware this was not the case. Would appreciate solution.
I don't know the "2009 version firmware". Do you mean using Samba on other Linux machine (connect LG PVR to other PC) or connect PC to LG PVR?

Co0olCat escribió:On Scheduling page Destination had only two options: HDD and USB. Had to modify two files to add External HDD (HDD+): act_Schedule.inc and lang_eng.inc. Edited files are attached.
Thank you for files. I have added your changes, but I can't test it (I don't have the second HDD). For next file sending please use (better) PM or upload as attachment to SourceForge page (best). The files you pasted here are hard to check for differences so the attachment is the best solution. You can file the enhancement ticket with file attachment as anonymous.

Co0olCat escribió:It looks like that web scheduling uses counter for setting records rather than program number. In AU there are programs spread from 1 to 99. Total number of program is around 40. As a result either devise does not understand when say channel 22 is set to be recorded (there is no program 22, example) or web interfase shows error when program 99 was selected for recording on devise - total count is only 40, so 99 cannot be displayed.
I must admit I don't understand this. In scheduling page you chose the name of channel as get from channel description file. If you have a screen-shot please post it.
Many thanks for comments.
Keltek
Keltek

Mensajes : 291
Fecha de inscripción : 10/03/2010
Edad : 46
Localización : Praha - Czech Republic

http://www.fozona.cz/

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty Re: TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  Co0olCat Vie Sep 24, 2010 1:04 pm

Thank you for help.

I have used FAT formatting. The first part of installation was without any problem. As for the second part, I have found in the ...\installation directory corrupted archive. It looks like that devise tried to copy the file, but it was not successful. After I have copied it manually and unpacked I was able to run installation script.

Here are some errors from the schedule which was created through the devise:

Notice: Undefined offset: 71 in /tmp/hdd/root/custom/var/www/lgmenu/act_Schedule.inc on line 386
Notice: Undefined offset: 98 in /tmp/hdd/root/custom/var/www/lgmenu/act_Schedule.inc on line 386

Looks to be the case that LG uses program number.

As for firmware and problem with seeking I was referring to firmware MS400_091211_0118 and samba running on LG.
I am accessing records through local network to play on Windows XP 32, Zoomplayer.

thank you.

Kind regards,
TY

Co0olCat

Mensajes : 17
Fecha de inscripción : 31/01/2010

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty Re: TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  Co0olCat Sáb Sep 25, 2010 2:56 am

Co0olCat escribió:

Some problems: when watching files through samba some files are taking time to seek. With 2009 version of firmware this was not the case. Would appreciate solution.

I went through my old smb configuration. In new configuration there are couple of new settings. After I have replaced (with slight changes) new config with this one (see below) I got my seek functionality back.

smb.conf
Código:

#======================= Global Settings =====================================
[global]
workgroup = Basegroup
netbios name = LGMS408
server string = LGMS408
security = share
encrypt passwords = true
null paswords=yes
guest account=root
directory mask=0755
create mask=0644

interfaces = eth0 wlan0
socket options = IPTOS_LOWDELAY TCP_NODELAY SO_KEEPALIVE

smb passwd file = /tmp/hdd/root/custom/etc/smbpasswd
private dir = /tmp/hdd/root/custom/etc

# Disable everything that concerns printers
printcap name = /dev/null
load printers = no
printcap cache time = 0
disable spoolss = yes
show add printer wizard = no

#============================ Share Definitions ==============================

[hdd]
path = /tmp/hdd/volumes/HDD1
comment = File storage
public = yes
writable = yes
browsable = yes
printable = no

[ExHDD]
path=/mnt/usbmounts/sdb1
comment=External HDD
public = yes
writable = yes
browsable = yes
printable = no

Thank you.

Kind regards,
TY

Co0olCat

Mensajes : 17
Fecha de inscripción : 31/01/2010

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty PipeManagement service 3.1

Mensaje  vic1972 Sáb Sep 25, 2010 9:20 pm

Hello,
just a short notice,
there is a new service available for PipeManagement. (v3.1)
Just enter 999 like a channel number and wait a couple of minutes.
Regards
vic1972
vic1972

Mensajes : 2260
Fecha de inscripción : 09/12/2009
Edad : 51
Localización : Malaga

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty bug with GOTO after firmware

Mensaje  cbadoud Lun Nov 01, 2010 5:54 pm

Hi, after installing the firmware, the GOTO stroke doesn't work well :

  • as I try to type some numbers in the hour field, the cursor immediately wants to go to minutes
  • when I validate the numbers, the video begins to run at a high speed (5-6 triangles) and I have to stop it to get it at normal speed again

cbadoud

Mensajes : 1
Fecha de inscripción : 12/07/2010

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty Re: TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  vic1972 Lun Nov 01, 2010 6:04 pm

Hi,
this firmware is already deprecated.
Please use new firmware: MS Harmony Pack.
regards.
vic1972
vic1972

Mensajes : 2260
Fecha de inscripción : 09/12/2009
Edad : 51
Localización : Malaga

Volver arriba Ir abajo

TUTORIAL: New firmware CUSTOM 3   (Custom3_0148VK Sept-2010) Empty Re: TUTORIAL: New firmware CUSTOM 3 (Custom3_0148VK Sept-2010)

Mensaje  Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.