且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Texas Instruments matrix-gui-2.0 hacking -- index.php

更新时间:2022-08-12 20:59:31

<?php
/*
 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ 
 * 
 * 
 *  Redistribution and use in source and binary forms, with or without 
 *  modification, are permitted provided that the following conditions 
 *  are met:
 *
 *    Redistributions of source code must retain the above copyright 
 *    notice, this list of conditions and the following disclaimer.
 *
 *    Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the 
 *    documentation and/or other materials provided with the   
 *    distribution.
 *
 *    Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
*/
?>

<?php
    # Check if json.txt file needs to be generated
    # 判断json.txt是否存在
    # 这个文件定义了一些数据,如app的名字、图标存放的路径、
    # shell脚本执行的位置及参数等等内容
    if(!file_exists("json.txt"))
    {
        //Generate the json.txt file
        # 为什么这里可以用php?,主要是没看到哪里配置了环境变量
        # 答案好像是因为lighttpd配置文件里配置了php的位置
        # 另外generate.php能够生成json.txt文件
        system("php generate.php");
        //Remove the cache since it is based on the previous json.txt file
        # 删除缓冲文件
        system("rm -rf cache/*");
    }

    if(!file_exists("cache"))
    {
        mkdir("cache",6666);        # 缓冲文件不存在,那么就创建它,并给出相应的权限
    }

    $supportedResolutions = null;
    

    # 这个是保存了屏幕分辨率,以及一屏中有多少行、多少列图标
    if(file_exists("supported_resolutions.txt")==true)
    {
        # 将文件读入一个数组中
        $supportedResolutions = file ("supported_resolutions.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    }

    # count: 计算数组中的单元数目或对象中的属性个数,对于数组,返回其元素个数
    if($supportedResolutions == null || count($supportedResolutions) == 0)
    {
        echo "supported_resolutions.txt doesn't exist or is empty";
        exit; 
    }

    # SERVER_NAME: 当前运行脚本所在服务器主机的名称
    # REMOTE_ADDR: 正在浏览当前页面用户的IP地址
    $client_is_host = $_SERVER['SERVER_NAME']==$_SERVER['REMOTE_ADDR']||$_SERVER['SERVER_NAME'] == "localhost";
?>

<html>
<head>
<title>Matrix Application Launcher</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />                         <!-- 添加元信息   -->

<link rel="stylesheet" type="text/css" href="css/fonts-min.css">                <!-- 加载样式     -->
<script type="text/javascript" src="/javascript/jquery-latest.js"></script>     <!-- 加载jquery库 -->
<link rel='stylesheet' type='text/css' href='css/global.css'>                   <!-- 加载样式     -->

</head>


<body class="unselectable" style = "-webkit-user-select: none;-moz-user-select: none;">
<div id = "complete_container"></div>

<script>
var has_graphics = true;
var link_history = ["submenu.php?submenu=main_menu&page=0"];    // 创建历史记录数组
var uri = "submenu.php?submenu=main_menu&page=0";               // 当前需要加载的URI地址
var previous_clicked = uri;                                     // 第一次之前URI的就是现在的

<?php
if($client_is_host == true)
    echo "var client_is_host = true;";          # 自动生成js变量
else
    echo "var client_is_host = false;";
?>

$(document).ready(function()                    // 文档加载完毕时运行该函数 
{
    var supportedResolutions=new Array();       // 创建数组

    <?php
        # 从这里可以知道,$supportedResolutions是前面的PHP里的变量,不是这里js中的
        # supportedResolutions变量,这个一定要分清楚,要不然很难理解
        for($x = 0;$x<count($supportedResolutions);$x++)
        {
            # PHP字符串连接的方式很简单,只需要一个(.)就能实现
            echo "supportedResolutions[".$x."]=\"".$supportedResolutions[$x]."\";";    
        }
    ?>

    var screenWidth = 0;                    // 屏幕宽 
    var screenHeight = 0;                   // 屏幕高
    var iconGridCol = 0;                    // 图标格点列数
    var iconGridRow = 0;                    // 图标格点行数

    // 这里大致意思是取一个合适的尺寸来分配桌面
    for(var i=0; i<supportedResolutions.length; i++) 
    {
        // 是用字符串x字符将字符串切分,x在字符串里的含义是乘,如800x600x4x3
        var value = supportedResolutions[i].split('x');    

        screenWidth = value[0];
        screenHeight = value[1];
        iconGridCol = value[2];
        iconGridRow = value[3];

        if(screen.width >= screenWidth && screen.height >= screenHeight)
            break;
    }

    document.cookie="iconGridCol="+iconGridCol;         // 通过js创建cookie
    document.cookie="iconGridRow="+iconGridRow;
    
    // 加载对应尺寸的css样式,这样使得显示更合理
    $('head').append('<link rel="stylesheet" type="text/css" href="css/'+screenWidth+'x'+screenHeight+'.css" />'); 
    //alert("screenHeight:"+screenWidth+"\n"+"screenWidth:"+screenHeight);

    // 本地的Qt程序是无法进行远程传输的,所以会有这个判断
    if(client_is_host==false)
    {
        var r=confirm("Does your target system have an attached display device?\nClick Ok and Remote Matrix will assume that a proper display device is attached to your target system.\nClick Cancel and Remote Matrix will assume that you do not have a display device attached to your target system.");
        if (r==true)
            has_graphics = true;
        else
            has_graphics = false;
    }

    // var uri = "submenu.php?submenu=main_menu&page=0";
    // var link_history = ["submenu.php?submenu=main_menu&page=0"];
    // 加载显示的html文件,放在complete_container div中
    $.get(uri, function(data) 
    {
        $('#complete_container').html(data);
        //其实这里的-2没搞清楚,不知道为什么要用这么写
        $("#back_link").attr("href",link_history[link_history.length-2]);
    });


});

// delegate()方法为指定的元素添加一个或多个事件处理程序, // 并规定当这些事件发生时运行的函数
$("#complete_container").delegate("img", "mousedown", function(e)
{
    // preventDefault()方法阻止元素发生默认的行为
    // 例如: 当点击提交按钮时阻止表单的提交
    e.preventDefault();
});

// 制定complete_container中的a标签的click事件的运行方式
$("#complete_container").delegate("a", "click", function(e)
{
    e.preventDefault();
    // 防止事件冒泡到DOM树上,也就是不触发任何前辈元素上的事件处理函数
    e.stopPropagation();
    var className = $(this).attr('class');      // 获取对应的属性
    var idName = $(this).attr('id');
    var link =  $(this).attr('href');

    //Sometimes if a request is taking a long time you might try clicking a link more then once thinking that
    //your click request was not accepted. This causes multiple request for the same page to be sent which in turn
    //sometimes results in every link you click causing 2+ request to go through. This code checks to make sure
    //your requesting a new pageand not the same page twice
    if(link==previous_clicked)                  // 防止连续点击两次,也就是避免同一个应用连续运行2次
        return false;

    previous_clicked = link;                    // 将当前连接看作是上一次的链接

    if(idName=="back_link")                     // 返回上一次链接
    {
        link_history.pop();                     // 从堆栈中弹出最后的一次链接
    }
    else if(idName=="main_menu_link")           // 转到主页
    {
        link_history = ["submenu.php?submenu=main_menu&page=0"];
    }
    else
        link_history.push(link);                // 将当前的链接加入堆栈

    //Adds a random string to the end of the $_GET Query String for page accessed.
    //This prevents IE from caching the Ajax request.
    link = link + "&rand="+Math.round((Math.random()*2356))+Math.round((Math.random()*4321))+Math.round((Math.random()*3961));
    $.get(link, function(data) 
    {
        $('#complete_container').html(data);            // 往div里添加另一个网页内容
        $("#back_link").attr("href",link_history[link_history.length-2]);
    });        
});

</script>

    </body>
</html>