rootfs_enc1v2_hi3520d_20230531
This commit is contained in:
		
							parent
							
								
									07336a7379
								
							
						
					
					
						commit
						877317826b
					
				| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1f01",  RUN+="/etc/udev/usb4g.sh"
 | 
					ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1f01",  RUN+="/etc/udev/usb4g.sh"
 | 
				
			||||||
ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="1a2b",  RUN+="/etc/udev/usbWiFi.sh"
 | 
					ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="1a2b",  RUN+="/etc/udev/usbWiFi.sh"
 | 
				
			||||||
SUBSYSTEM=="net", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14db", KERNEL=="eth*",  RUN+="/etc/udev/usbUp.sh %k"
 | 
					SUBSYSTEM=="net", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14db", KERNEL=="eth*",  RUN+="/etc/udev/usbUp.sh %k"
 | 
				
			||||||
 | 
					SUBSYSTEM=="net", KERNEL=="usb*",  RUN+="/etc/udev/usbUp.sh %k"
 | 
				
			||||||
ACTION=="add", KERNEL=="sd*", SUBSYSTEM=="block", RUN+="/link/shell/mountUsb.sh"
 | 
					ACTION=="add", KERNEL=="sd*", SUBSYSTEM=="block", RUN+="/link/shell/mountUsb.sh"
 | 
				
			||||||
ACTION=="remove",KERNEL=="sd*", SUBSYSTEM=="block", RUN+="/etc/udev/autounmount.sh"
 | 
					ACTION=="remove",KERNEL=="sd*", SUBSYSTEM=="block", RUN+="/etc/udev/autounmount.sh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1,314 @@
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "id": 1,
 | 
				
			||||||
 | 
					    "nameCH": "方案 1",
 | 
				
			||||||
 | 
					    "nameEN": "project 1",
 | 
				
			||||||
 | 
					    "used": true,
 | 
				
			||||||
 | 
					    "btns": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-power-off",
 | 
				
			||||||
 | 
					        "code": 3944021760,
 | 
				
			||||||
 | 
					        "tapCH": "关闭 Hdmi/Vga",
 | 
				
			||||||
 | 
					        "tapEN": "Close Hdmi/Vga",
 | 
				
			||||||
 | 
					        "pressCH": "开启 Hdmi/Vga",
 | 
				
			||||||
 | 
					        "pressEN": "Open Hdmi/Vga"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-bars",
 | 
				
			||||||
 | 
					        "code": 3960733440,
 | 
				
			||||||
 | 
					        "tapCH": "开启 Hdmi/Vga",
 | 
				
			||||||
 | 
					        "tapEN": "Open Hdmi/Vga",
 | 
				
			||||||
 | 
					        "pressCH": "关闭 Hdmi/Vga",
 | 
				
			||||||
 | 
					        "pressEN": "Close Hdmi/Vga"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-up",
 | 
				
			||||||
 | 
					        "code": 4228120320,
 | 
				
			||||||
 | 
					        "tapCH": "开启全平台推流",
 | 
				
			||||||
 | 
					        "tapEN": "Stop Platform Push",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-down",
 | 
				
			||||||
 | 
					        "code": 4244832000,
 | 
				
			||||||
 | 
					        "tapCH": "关闭全平台推流",
 | 
				
			||||||
 | 
					        "tapEN": "Stop Platform Push",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-left",
 | 
				
			||||||
 | 
					        "code": 4044291840,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-right",
 | 
				
			||||||
 | 
					        "code": 3843751680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "my-ok",
 | 
				
			||||||
 | 
					        "code": 4161273600,
 | 
				
			||||||
 | 
					        "tapCH": "开启录制",
 | 
				
			||||||
 | 
					        "tapEN": "Start Record",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-down",
 | 
				
			||||||
 | 
					        "code": 2807627520,
 | 
				
			||||||
 | 
					        "tapCH": "开启 Dhcp",
 | 
				
			||||||
 | 
					        "tapEN": "Open Dhcp",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-clone",
 | 
				
			||||||
 | 
					        "code": 2740780800,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-up",
 | 
				
			||||||
 | 
					        "code": 4094426880,
 | 
				
			||||||
 | 
					        "tapCH": "关闭 Dhcp",
 | 
				
			||||||
 | 
					        "tapEN": "Close Dhcp",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-reply",
 | 
				
			||||||
 | 
					        "code": 4261543680,
 | 
				
			||||||
 | 
					        "tapCH": "关闭录制",
 | 
				
			||||||
 | 
					        "tapEN": "Stop Record",
 | 
				
			||||||
 | 
					        "pressCH": "重启机器",
 | 
				
			||||||
 | 
					        "pressEN": "Restart"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-home",
 | 
				
			||||||
 | 
					        "code": 3075014400,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "恢复出厂设置",
 | 
				
			||||||
 | 
					        "pressEN": "Factory Data Reset"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "id": 2,
 | 
				
			||||||
 | 
					    "nameCH": "方案 2",
 | 
				
			||||||
 | 
					    "nameEN": "project 2",
 | 
				
			||||||
 | 
					    "used": false,
 | 
				
			||||||
 | 
					    "btns": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-power-off",
 | 
				
			||||||
 | 
					        "code": 3944021760,
 | 
				
			||||||
 | 
					        "tapCH": "开启Mix直播",
 | 
				
			||||||
 | 
					        "tapEN": "Start Mix Live",
 | 
				
			||||||
 | 
					        "pressCH": "关闭Mix直播",
 | 
				
			||||||
 | 
					        "pressEN": "Stop Mix Live"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-bars",
 | 
				
			||||||
 | 
					        "code": 3960733440,
 | 
				
			||||||
 | 
					        "tapCH": "关闭全平台推流",
 | 
				
			||||||
 | 
					        "tapEN": "Stop Platform Push",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-up",
 | 
				
			||||||
 | 
					        "code": 4228120320,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-down",
 | 
				
			||||||
 | 
					        "code": 4244832000,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-left",
 | 
				
			||||||
 | 
					        "code": 4044291840,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-right",
 | 
				
			||||||
 | 
					        "code": 3843751680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "my-ok",
 | 
				
			||||||
 | 
					        "code": 4161273600,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-down",
 | 
				
			||||||
 | 
					        "code": 2807627520,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-clone",
 | 
				
			||||||
 | 
					        "code": 2740780800,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-up",
 | 
				
			||||||
 | 
					        "code": 4094426880,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-reply",
 | 
				
			||||||
 | 
					        "code": 4261543680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-home",
 | 
				
			||||||
 | 
					        "code": 3075014400,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "id": 3,
 | 
				
			||||||
 | 
					    "nameCH": "方案 3",
 | 
				
			||||||
 | 
					    "nameEN": "project 3",
 | 
				
			||||||
 | 
					    "used": false,
 | 
				
			||||||
 | 
					    "btns": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-power-off",
 | 
				
			||||||
 | 
					        "code": 3944021760,
 | 
				
			||||||
 | 
					        "tapCH": "开启Mix直播",
 | 
				
			||||||
 | 
					        "tapEN": "Start Mix Live",
 | 
				
			||||||
 | 
					        "pressCH": "关闭Mix直播",
 | 
				
			||||||
 | 
					        "pressEN": "Stop Mix Live"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-bars",
 | 
				
			||||||
 | 
					        "code": 3960733440,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-up",
 | 
				
			||||||
 | 
					        "code": 4228120320,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-down",
 | 
				
			||||||
 | 
					        "code": 4244832000,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-left",
 | 
				
			||||||
 | 
					        "code": 4044291840,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-right",
 | 
				
			||||||
 | 
					        "code": 3843751680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "my-ok",
 | 
				
			||||||
 | 
					        "code": 4161273600,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-down",
 | 
				
			||||||
 | 
					        "code": 2807627520,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-clone",
 | 
				
			||||||
 | 
					        "code": 2740780800,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-up",
 | 
				
			||||||
 | 
					        "code": 4094426880,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-reply",
 | 
				
			||||||
 | 
					        "code": 4261543680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-home",
 | 
				
			||||||
 | 
					        "code": 3075014400,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,92 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						"mods1":[
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"titleCH":"录播模块",
 | 
				
			||||||
 | 
								"titleEN":"Broadcast",
 | 
				
			||||||
 | 
								"func":[
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启Mix直播",
 | 
				
			||||||
 | 
										"en":"Start Mix Live"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭Mix直播",
 | 
				
			||||||
 | 
										"en":"Stop Mix Live"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启Mix推流",
 | 
				
			||||||
 | 
										"en":"Start Mix Push"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭Mix推流",
 | 
				
			||||||
 | 
										"en":"Stop Mix Push"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启录制",
 | 
				
			||||||
 | 
										"en":"Start Record"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭录制",
 | 
				
			||||||
 | 
										"en":"Stop Record"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启全平台推流",
 | 
				
			||||||
 | 
										"en":"Stop Platform Push"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭全平台推流",
 | 
				
			||||||
 | 
										"en":"Stop Platform Push"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
 | 
						"mods2":[
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"titleCH":"系统模块",
 | 
				
			||||||
 | 
								"titleEN":"Network",
 | 
				
			||||||
 | 
								"func":[
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启 Dhcp",
 | 
				
			||||||
 | 
										"en":"Open Dhcp"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭 Dhcp",
 | 
				
			||||||
 | 
										"en":"Close Dhcp"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"重启机器",
 | 
				
			||||||
 | 
										"en":"Restart"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"恢复出厂设置",
 | 
				
			||||||
 | 
										"en":"Factory Data Reset"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"titleCH":"输出模块",
 | 
				
			||||||
 | 
								"titleEN":"Output",
 | 
				
			||||||
 | 
								"func":[
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启 Hdmi/Vga",
 | 
				
			||||||
 | 
										"en":"Open Hdmi/Vga"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭 Hdmi/Vga",
 | 
				
			||||||
 | 
										"en":"Close Hdmi/Vga"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"titleCH":"",
 | 
				
			||||||
 | 
								"titleEN":"",
 | 
				
			||||||
 | 
								"func":[
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"未启用",
 | 
				
			||||||
 | 
										"en":"None"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,86 @@
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 1,
 | 
				
			||||||
 | 
					    "remoteCode": 3944021760,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键1",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button1",
 | 
				
			||||||
 | 
					    "icon": "fa-power-off"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 2,
 | 
				
			||||||
 | 
					    "remoteCode": 3960733440,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 2",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 2",
 | 
				
			||||||
 | 
					    "icon": "fa-bars"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 3,
 | 
				
			||||||
 | 
					    "remoteCode": 4228120320,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 3",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 3",
 | 
				
			||||||
 | 
					    "icon": "fa-caret-up"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 4,
 | 
				
			||||||
 | 
					    "remoteCode": 4244832000,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 4",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 4",
 | 
				
			||||||
 | 
					    "icon": "fa-caret-down"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 5,
 | 
				
			||||||
 | 
					    "remoteCode": 4044291840,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 5",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 5",
 | 
				
			||||||
 | 
					    "icon": "fa-caret-left"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 6,
 | 
				
			||||||
 | 
					    "remoteCode": 3843751680,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 6",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 6",
 | 
				
			||||||
 | 
					    "icon": "fa-caret-right"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 7,
 | 
				
			||||||
 | 
					    "remoteCode": 4161273600,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 7",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 7",
 | 
				
			||||||
 | 
					    "icon": "my-ok"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 8,
 | 
				
			||||||
 | 
					    "remoteCode": 2807627520,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 8",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 8",
 | 
				
			||||||
 | 
					    "icon": "fa-volume-down"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 9,
 | 
				
			||||||
 | 
					    "remoteCode": 2740780800,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 9",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 9",
 | 
				
			||||||
 | 
					    "icon": "fa-clone"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 10,
 | 
				
			||||||
 | 
					    "remoteCode": 4094426880,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 10",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 10",
 | 
				
			||||||
 | 
					    "icon": "fa-volume-up"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 11,
 | 
				
			||||||
 | 
					    "remoteCode": 4261543680,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 11",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 11",
 | 
				
			||||||
 | 
					    "icon": "fa-reply"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 12,
 | 
				
			||||||
 | 
					    "remoteCode": 3075014400,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 12",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 12",
 | 
				
			||||||
 | 
					    "icon": "fa-home"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,18 @@
 | 
				
			||||||
[
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "version": "2.2.0 build 20230531",
 | 
				
			||||||
 | 
					    "logs": [
 | 
				
			||||||
 | 
					      "全平台直播新增定时开启/关闭推流功能",
 | 
				
			||||||
 | 
					      "优化部分机型Onvif PTZ功能",
 | 
				
			||||||
 | 
					      "优化集成通信功能",
 | 
				
			||||||
 | 
					      "优化设备内存占用",
 | 
				
			||||||
 | 
					      "调整首页端口状态显示逻辑",
 | 
				
			||||||
 | 
					      "修正roi设置功能",
 | 
				
			||||||
 | 
					      "修正开启推流后,更改系统时间导致的推流时长显示不准确的问题",
 | 
				
			||||||
 | 
					      "修正ENC1机型按键小概率不触发问题",
 | 
				
			||||||
 | 
					      "支持全新基于互联网的微信小程序,不在依赖局域网,真正做到的随时随地查看"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "version": "2.1.0 build 20230426",
 | 
					    "version": "2.1.0 build 20230426",
 | 
				
			||||||
    "logs": [
 | 
					    "logs": [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    "app": "2.0.0 build 20220512_869",
 | 
					    "app": "2.0.0 build 20220512_869",
 | 
				
			||||||
    "sdk": "2.0.0 build 20220518_20716",
 | 
					    "sdk": "2.0.0 build 20220518_20716",
 | 
				
			||||||
    "sys": "2.1.0 build 20230426"
 | 
					    "sys": "2.2.0 build 20230531"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
						{"name":"GPIO0_0","addr":"12150000","offset": 0,"irq":89},
 | 
				
			||||||
 | 
						{"name":"GPIO0_1","addr":"12150000","offset": 1,"irq":89}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,63 @@
 | 
				
			||||||
 | 
					. /link/shell/util/hardware.sh
 | 
				
			||||||
 | 
					count=0
 | 
				
			||||||
 | 
					type=`jget gpio.type`
 | 
				
			||||||
 | 
					himmGPIO()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gpioName=`jget gpio.name`
 | 
				
			||||||
 | 
					    gpioAddr=`jget gpio.addr`
 | 
				
			||||||
 | 
					    eval "`jget gpio.mux` > /dev/null" 
 | 
				
			||||||
 | 
					    eval "`jget gpio.dir` > /dev/null"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    echo "Init $gpioName($gpioAddr) done."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while [ true ]
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					        ret=`himd.l  $gpioAddr 1 | awk 'NR==4{print $2}'`
 | 
				
			||||||
 | 
					        if [ "$ret" == "00000000" ]; then
 | 
				
			||||||
 | 
					            count=$(($count+1))
 | 
				
			||||||
 | 
					            echo "keyDown $count" 
 | 
				
			||||||
 | 
					            if [ "$count" == "5" ]; then
 | 
				
			||||||
 | 
					                echo "reset default config"
 | 
				
			||||||
 | 
					                /link/shell/reset.sh
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            count=0
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        sleep 1
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sysfsGPIO()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    gpioName=`jget gpio.name`
 | 
				
			||||||
 | 
					    gpioIndex=`jget gpio.index`
 | 
				
			||||||
 | 
					    eval "`jget gpio.mux` > /dev/null"
 | 
				
			||||||
 | 
					    if [ ! -d "/sys/class/gpio/gpio$gpioIndex" ];then
 | 
				
			||||||
 | 
					        echo $gpioIndex > /sys/class/gpio/export
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    echo "in" > /sys/class/gpio/gpio$gpioIndex/direction
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    echo "Init $gpioName($gpioIndex) done."
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    while [ true ]
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					        ret=`cat /sys/class/gpio/gpio$gpioIndex/value`
 | 
				
			||||||
 | 
					        if [ "$ret" == "0" ]; then
 | 
				
			||||||
 | 
					            count=$(($count+1))
 | 
				
			||||||
 | 
					            echo "keyDown $count" 
 | 
				
			||||||
 | 
					            if [ "$count" == "5" ]; then
 | 
				
			||||||
 | 
					                echo "reset default config"
 | 
				
			||||||
 | 
					                /link/shell/reset.sh
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            count=0
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        sleep 1
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$type" == "himm" ]; then
 | 
				
			||||||
 | 
					    himmGPIO
 | 
				
			||||||
 | 
					elif [ "$type" == "sysfs" ]; then 
 | 
				
			||||||
 | 
					    sysfsGPIO
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					while [ true ]
 | 
				
			||||||
 | 
					do
 | 
				
			||||||
 | 
					/link/bin/Monitor
 | 
				
			||||||
 | 
					sleep 1
 | 
				
			||||||
 | 
					done  
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1,314 @@
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "id": 1,
 | 
				
			||||||
 | 
					    "nameCH": "方案 1",
 | 
				
			||||||
 | 
					    "nameEN": "project 1",
 | 
				
			||||||
 | 
					    "used": true,
 | 
				
			||||||
 | 
					    "btns": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-power-off",
 | 
				
			||||||
 | 
					        "code": 3944021760,
 | 
				
			||||||
 | 
					        "tapCH": "关闭 Hdmi/Vga",
 | 
				
			||||||
 | 
					        "tapEN": "Close Hdmi/Vga",
 | 
				
			||||||
 | 
					        "pressCH": "开启 Hdmi/Vga",
 | 
				
			||||||
 | 
					        "pressEN": "Open Hdmi/Vga"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-bars",
 | 
				
			||||||
 | 
					        "code": 3960733440,
 | 
				
			||||||
 | 
					        "tapCH": "开启 Hdmi/Vga",
 | 
				
			||||||
 | 
					        "tapEN": "Open Hdmi/Vga",
 | 
				
			||||||
 | 
					        "pressCH": "关闭 Hdmi/Vga",
 | 
				
			||||||
 | 
					        "pressEN": "Close Hdmi/Vga"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-up",
 | 
				
			||||||
 | 
					        "code": 4228120320,
 | 
				
			||||||
 | 
					        "tapCH": "开启全平台推流",
 | 
				
			||||||
 | 
					        "tapEN": "Stop Platform Push",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-down",
 | 
				
			||||||
 | 
					        "code": 4244832000,
 | 
				
			||||||
 | 
					        "tapCH": "关闭全平台推流",
 | 
				
			||||||
 | 
					        "tapEN": "Stop Platform Push",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-left",
 | 
				
			||||||
 | 
					        "code": 4044291840,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-right",
 | 
				
			||||||
 | 
					        "code": 3843751680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "my-ok",
 | 
				
			||||||
 | 
					        "code": 4161273600,
 | 
				
			||||||
 | 
					        "tapCH": "开启录制",
 | 
				
			||||||
 | 
					        "tapEN": "Start Record",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-down",
 | 
				
			||||||
 | 
					        "code": 2807627520,
 | 
				
			||||||
 | 
					        "tapCH": "开启 Dhcp",
 | 
				
			||||||
 | 
					        "tapEN": "Open Dhcp",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-clone",
 | 
				
			||||||
 | 
					        "code": 2740780800,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-up",
 | 
				
			||||||
 | 
					        "code": 4094426880,
 | 
				
			||||||
 | 
					        "tapCH": "关闭 Dhcp",
 | 
				
			||||||
 | 
					        "tapEN": "Close Dhcp",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-reply",
 | 
				
			||||||
 | 
					        "code": 4261543680,
 | 
				
			||||||
 | 
					        "tapCH": "关闭录制",
 | 
				
			||||||
 | 
					        "tapEN": "Stop Record",
 | 
				
			||||||
 | 
					        "pressCH": "重启机器",
 | 
				
			||||||
 | 
					        "pressEN": "Restart"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-home",
 | 
				
			||||||
 | 
					        "code": 3075014400,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "恢复出厂设置",
 | 
				
			||||||
 | 
					        "pressEN": "Factory Data Reset"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "id": 2,
 | 
				
			||||||
 | 
					    "nameCH": "方案 2",
 | 
				
			||||||
 | 
					    "nameEN": "project 2",
 | 
				
			||||||
 | 
					    "used": false,
 | 
				
			||||||
 | 
					    "btns": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-power-off",
 | 
				
			||||||
 | 
					        "code": 3944021760,
 | 
				
			||||||
 | 
					        "tapCH": "开启Mix直播",
 | 
				
			||||||
 | 
					        "tapEN": "Start Mix Live",
 | 
				
			||||||
 | 
					        "pressCH": "关闭Mix直播",
 | 
				
			||||||
 | 
					        "pressEN": "Stop Mix Live"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-bars",
 | 
				
			||||||
 | 
					        "code": 3960733440,
 | 
				
			||||||
 | 
					        "tapCH": "关闭全平台推流",
 | 
				
			||||||
 | 
					        "tapEN": "Stop Platform Push",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-up",
 | 
				
			||||||
 | 
					        "code": 4228120320,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-down",
 | 
				
			||||||
 | 
					        "code": 4244832000,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-left",
 | 
				
			||||||
 | 
					        "code": 4044291840,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-right",
 | 
				
			||||||
 | 
					        "code": 3843751680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "my-ok",
 | 
				
			||||||
 | 
					        "code": 4161273600,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-down",
 | 
				
			||||||
 | 
					        "code": 2807627520,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-clone",
 | 
				
			||||||
 | 
					        "code": 2740780800,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-up",
 | 
				
			||||||
 | 
					        "code": 4094426880,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-reply",
 | 
				
			||||||
 | 
					        "code": 4261543680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-home",
 | 
				
			||||||
 | 
					        "code": 3075014400,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "id": 3,
 | 
				
			||||||
 | 
					    "nameCH": "方案 3",
 | 
				
			||||||
 | 
					    "nameEN": "project 3",
 | 
				
			||||||
 | 
					    "used": false,
 | 
				
			||||||
 | 
					    "btns": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-power-off",
 | 
				
			||||||
 | 
					        "code": 3944021760,
 | 
				
			||||||
 | 
					        "tapCH": "开启Mix直播",
 | 
				
			||||||
 | 
					        "tapEN": "Start Mix Live",
 | 
				
			||||||
 | 
					        "pressCH": "关闭Mix直播",
 | 
				
			||||||
 | 
					        "pressEN": "Stop Mix Live"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-bars",
 | 
				
			||||||
 | 
					        "code": 3960733440,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-up",
 | 
				
			||||||
 | 
					        "code": 4228120320,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-down",
 | 
				
			||||||
 | 
					        "code": 4244832000,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-left",
 | 
				
			||||||
 | 
					        "code": 4044291840,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-caret-right",
 | 
				
			||||||
 | 
					        "code": 3843751680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "my-ok",
 | 
				
			||||||
 | 
					        "code": 4161273600,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-down",
 | 
				
			||||||
 | 
					        "code": 2807627520,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-clone",
 | 
				
			||||||
 | 
					        "code": 2740780800,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-volume-up",
 | 
				
			||||||
 | 
					        "code": 4094426880,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-reply",
 | 
				
			||||||
 | 
					        "code": 4261543680,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "icon": "fa-home",
 | 
				
			||||||
 | 
					        "code": 3075014400,
 | 
				
			||||||
 | 
					        "tapCH": "未启用",
 | 
				
			||||||
 | 
					        "tapEN": "None",
 | 
				
			||||||
 | 
					        "pressCH": "未启用",
 | 
				
			||||||
 | 
					        "pressEN": "None"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,92 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						"mods1":[
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"titleCH":"录播模块",
 | 
				
			||||||
 | 
								"titleEN":"Broadcast",
 | 
				
			||||||
 | 
								"func":[
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启Mix直播",
 | 
				
			||||||
 | 
										"en":"Start Mix Live"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭Mix直播",
 | 
				
			||||||
 | 
										"en":"Stop Mix Live"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启Mix推流",
 | 
				
			||||||
 | 
										"en":"Start Mix Push"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭Mix推流",
 | 
				
			||||||
 | 
										"en":"Stop Mix Push"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启录制",
 | 
				
			||||||
 | 
										"en":"Start Record"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭录制",
 | 
				
			||||||
 | 
										"en":"Stop Record"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启全平台推流",
 | 
				
			||||||
 | 
										"en":"Stop Platform Push"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭全平台推流",
 | 
				
			||||||
 | 
										"en":"Stop Platform Push"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
 | 
						"mods2":[
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"titleCH":"系统模块",
 | 
				
			||||||
 | 
								"titleEN":"Network",
 | 
				
			||||||
 | 
								"func":[
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启 Dhcp",
 | 
				
			||||||
 | 
										"en":"Open Dhcp"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭 Dhcp",
 | 
				
			||||||
 | 
										"en":"Close Dhcp"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"重启机器",
 | 
				
			||||||
 | 
										"en":"Restart"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"恢复出厂设置",
 | 
				
			||||||
 | 
										"en":"Factory Data Reset"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"titleCH":"输出模块",
 | 
				
			||||||
 | 
								"titleEN":"Output",
 | 
				
			||||||
 | 
								"func":[
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"开启 Hdmi/Vga",
 | 
				
			||||||
 | 
										"en":"Open Hdmi/Vga"
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"关闭 Hdmi/Vga",
 | 
				
			||||||
 | 
										"en":"Close Hdmi/Vga"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"titleCH":"",
 | 
				
			||||||
 | 
								"titleEN":"",
 | 
				
			||||||
 | 
								"func":[
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"ch":"未启用",
 | 
				
			||||||
 | 
										"en":"None"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,86 @@
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 1,
 | 
				
			||||||
 | 
					    "remoteCode": 3944021760,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键1",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button1",
 | 
				
			||||||
 | 
					    "icon": "fa-power-off"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 2,
 | 
				
			||||||
 | 
					    "remoteCode": 3960733440,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 2",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 2",
 | 
				
			||||||
 | 
					    "icon": "fa-bars"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 3,
 | 
				
			||||||
 | 
					    "remoteCode": 4228120320,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 3",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 3",
 | 
				
			||||||
 | 
					    "icon": "fa-caret-up"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 4,
 | 
				
			||||||
 | 
					    "remoteCode": 4244832000,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 4",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 4",
 | 
				
			||||||
 | 
					    "icon": "fa-caret-down"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 5,
 | 
				
			||||||
 | 
					    "remoteCode": 4044291840,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 5",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 5",
 | 
				
			||||||
 | 
					    "icon": "fa-caret-left"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 6,
 | 
				
			||||||
 | 
					    "remoteCode": 3843751680,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 6",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 6",
 | 
				
			||||||
 | 
					    "icon": "fa-caret-right"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 7,
 | 
				
			||||||
 | 
					    "remoteCode": 4161273600,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 7",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 7",
 | 
				
			||||||
 | 
					    "icon": "my-ok"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 8,
 | 
				
			||||||
 | 
					    "remoteCode": 2807627520,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 8",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 8",
 | 
				
			||||||
 | 
					    "icon": "fa-volume-down"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 9,
 | 
				
			||||||
 | 
					    "remoteCode": 2740780800,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 9",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 9",
 | 
				
			||||||
 | 
					    "icon": "fa-clone"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 10,
 | 
				
			||||||
 | 
					    "remoteCode": 4094426880,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 10",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 10",
 | 
				
			||||||
 | 
					    "icon": "fa-volume-up"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 11,
 | 
				
			||||||
 | 
					    "remoteCode": 4261543680,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 11",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 11",
 | 
				
			||||||
 | 
					    "icon": "fa-reply"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    "btnId": 12,
 | 
				
			||||||
 | 
					    "remoteCode": 3075014400,
 | 
				
			||||||
 | 
					    "btnNameCN": "按键 12",
 | 
				
			||||||
 | 
					    "btnNameEN": "Button 12",
 | 
				
			||||||
 | 
					    "icon": "fa-home"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					while [ true ]
 | 
				
			||||||
 | 
					do
 | 
				
			||||||
 | 
					/link/bin/Monitor
 | 
				
			||||||
 | 
					sleep 1
 | 
				
			||||||
 | 
					done  
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -9,3 +9,10 @@ if [ -f /link/shell/ptz.sh ] ;then
 | 
				
			||||||
/link/shell/ptz.sh &
 | 
					/link/shell/ptz.sh &
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f /link/bin/mqtt ] ;then
 | 
				
			||||||
 | 
					/link/bin/mqtt &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f /link/bin/Monitor ];then
 | 
				
			||||||
 | 
					/link/shell/monitor.sh &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
/link/shell/trans.sh &
 | 
					/link/shell/trans.sh &
 | 
				
			||||||
while [ true ]
 | 
					while [ true ]
 | 
				
			||||||
do
 | 
					do
 | 
				
			||||||
pkill OLED
 | 
					pkill Monitor
 | 
				
			||||||
/link/bin/Encoder
 | 
					/link/bin/Encoder
 | 
				
			||||||
sleep 2
 | 
					sleep 2
 | 
				
			||||||
done  
 | 
					done  
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,9 +16,15 @@ umount_usb(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
umount_usb
 | 
					umount_usb
 | 
				
			||||||
if [ $1 == "ext4" ];then
 | 
					if [ $1 == "ext4" ];then
 | 
				
			||||||
 | 
					    if [ -b /dev/sda1 ];then
 | 
				
			||||||
    	echo -e "\ny" | mkfs.ext4 -T largefile /dev/sda1
 | 
					    	echo -e "\ny" | mkfs.ext4 -T largefile /dev/sda1
 | 
				
			||||||
	sleep 1
 | 
						sleep 1
 | 
				
			||||||
	mount -t ext4 /dev/sda1 /root/usb
 | 
						mount -t ext4 /dev/sda1 /root/usb
 | 
				
			||||||
 | 
					    elif [ -b /dev/mmcblk0p6 ];then
 | 
				
			||||||
 | 
						echo -e "\ny" | mkfs.ext4 -T largefile /dev/mmcblk0p6
 | 
				
			||||||
 | 
						sleep 1
 | 
				
			||||||
 | 
						mount -o rw,sync,barrier=0 /dev/mmcblk0p6 /root/usb
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
    mkfs.vfat -F 32 /dev/sda1
 | 
					    mkfs.vfat -F 32 /dev/sda1
 | 
				
			||||||
    sleep 1
 | 
					    sleep 1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,17 @@ if [ -b /dev/mmcblk0p5 ]; then
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -b /dev/mmcblk0p6 ]; then
 | 
					if [ -b /dev/mmcblk0p6 ]; then
 | 
				
			||||||
/bin/mount -o rw,sync,barrier=0 /dev/mmcblk0p6 /root/usb
 | 
					    /bin/mount -o rw,sync,barrier=0 /dev/mmcblk0p6 /root/usb
 | 
				
			||||||
 | 
					    mnt=`df -h | grep /dev/mmcblk0p6 | wc -l`
 | 
				
			||||||
 | 
					    if [ "$mnt" == "1" ] && [ ! -d /root/usb/lost+found ];then
 | 
				
			||||||
 | 
						umount -f /root/usb/
 | 
				
			||||||
 | 
						mnt=`df -h | grep /dev/mmcblk0p6 | wc -l`
 | 
				
			||||||
 | 
						if [ "$mnt" == "0" ];then
 | 
				
			||||||
 | 
						    echo -e "\ny" | mkfs.ext4 -T largefile /dev/mmcblk0p6
 | 
				
			||||||
 | 
						    if [ ! -b /dev/sda1 ];then
 | 
				
			||||||
 | 
						        /bin/mount -o rw,sync,barrier=0 /dev/mmcblk0p6 /root/usb
 | 
				
			||||||
 | 
					    	    fi
 | 
				
			||||||
 | 
					 	fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,13 @@ if [ `jget nginx` == "true" ]; then
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ `jget crond` == "true" ]; then
 | 
					if [ `jget crond` == "true" ]; then
 | 
				
			||||||
 | 
					if [ ! -f /var/spool/cron/crontabs/root ];then
 | 
				
			||||||
 | 
					    touch /var/spool/cron/crontabs/root
 | 
				
			||||||
 | 
					    echo "" >> /var/spool/cron/crontabs/root
 | 
				
			||||||
 | 
					    echo "" >> /var/spool/cron/crontabs/root
 | 
				
			||||||
 | 
					    echo "" >> /var/spool/cron/crontabs/root
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					chown -R root:root /var/spool
 | 
				
			||||||
/usr/sbin/crond -d 8
 | 
					/usr/sbin/crond -d 8
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					while [ true ]
 | 
				
			||||||
 | 
					do
 | 
				
			||||||
 | 
					/link/bin/Monitor
 | 
				
			||||||
 | 
					sleep 1
 | 
				
			||||||
 | 
					done  
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
if [ ! -z "$(ls -A /link/update)" ]; then
 | 
					if [ ! -z "$(ls -A /link/update)" ]; then
 | 
				
			||||||
    mv /link/update/* /link/update/update.tar
 | 
					    mv /link/update/* /link/update/update.tar
 | 
				
			||||||
    tar -xf /link/update/update.tar -C /
 | 
					    tar -xof /link/update/update.tar -C /
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    sleep 1
 | 
					    sleep 1
 | 
				
			||||||
    if [ -c "/dev/mtd1" ]; then
 | 
					    if [ -c "/dev/mtd1" ]; then
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -303,9 +303,6 @@ include("head.php");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            function update() {
 | 
					            function update() {
 | 
				
			||||||
                rpc( "enc.getSysState", null, function ( data ) {
 | 
					                rpc( "enc.getSysState", null, function ( data ) {
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
| 
						 | 
					@ -356,10 +353,6 @@ include("head.php");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    for( var i = hdmi.length; i < $( ".hdmi" ).length; i++ ){
 | 
					 | 
				
			||||||
                        $( ".hdmi" ).eq( i ).hide();
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    for ( var i = 0; i < sdi.length; i++ ) {
 | 
					                    for ( var i = 0; i < sdi.length; i++ ) {
 | 
				
			||||||
                        if ( sdi[ i ].avalible ) {
 | 
					                        if ( sdi[ i ].avalible ) {
 | 
				
			||||||
                            $( ".sdi" ).eq( i ).removeClass( "disable" );
 | 
					                            $( ".sdi" ).eq( i ).removeClass( "disable" );
 | 
				
			||||||
| 
						 | 
					@ -371,11 +364,6 @@ include("head.php");
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    for( var i = sdi.length; i < $( ".sdi" ).length; i++ ){
 | 
					 | 
				
			||||||
                        $( ".sdi" ).eq( i ).hide();
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                } );
 | 
					                } );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                setTimeout( update, 3000 );
 | 
					                setTimeout( update, 3000 );
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,19 +116,65 @@ function setCron() {
 | 
				
			||||||
	if ( isset( $_POST[ 'day' ] ) && isset( $_POST[ 'time' ] ) ) {
 | 
						if ( isset( $_POST[ 'day' ] ) && isset( $_POST[ 'time' ] ) ) {
 | 
				
			||||||
		if ( $_POST[ 'day' ] == "x" )
 | 
							if ( $_POST[ 'day' ] == "x" )
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			exec( 'echo "" | crontab -u root -' );
 | 
								exec("sed -i '1s/.*/ /' /var/spool/cron/crontabs/root");
 | 
				
			||||||
 | 
								exec("cp -a /var/spool/cron/crontabs/root /link/config/auto/root.cron");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			exec( 'echo "0 ' . $_POST[ 'time' ] . ' * * ' . $_POST[ 'day' ] . ' /link/shell/reboot.sh" | crontab -u root -' );
 | 
								$cron = '0 ' . $_POST[ 'time' ] . ' * * ' . $_POST[ 'day' ];
 | 
				
			||||||
 | 
								exec("sed -i '1s/.*/".$cron." \/link\/shell\/reboot.sh/' /var/spool/cron/crontabs/root");
 | 
				
			||||||
			exec("cp -a /var/spool/cron/crontabs/root /link/config/auto/root.cron");
 | 
								exec("cp -a /var/spool/cron/crontabs/root /link/config/auto/root.cron");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$result->result = "OK";
 | 
							$result->result = "OK";
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		$result->result = shell_exec( 'crontab -u root -l' );
 | 
							$result->result = shell_exec( 'crontab -u root -l | grep /link/shell/reboot.sh' );
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function setPushCron() {
 | 
				
			||||||
 | 
						global $result;
 | 
				
			||||||
 | 
						$start = $_POST['start'];
 | 
				
			||||||
 | 
						if ( isset( $start[ 'day' ] ) && isset( $start[ 'time' ] ) ) {
 | 
				
			||||||
 | 
							if ( $start[ 'day' ] == "x" )
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								exec("sed -i '2s/.*/ /' /var/spool/cron/crontabs/root");
 | 
				
			||||||
 | 
								exec("cp -a /var/spool/cron/crontabs/root /link/config/auto/root.cron");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								$tm = explode(":", $start[ 'time' ]);
 | 
				
			||||||
 | 
								$cron = intval($tm[1]).' ' . intval($tm[0]) . ' * * ' . $start[ 'day' ];
 | 
				
			||||||
 | 
								exec("sed -i '2s/.*/".$cron." \/usr\/php\/bin\/php \/link\/web\/link\/timer\/autoPush.php start/' /var/spool/cron/crontabs/root");
 | 
				
			||||||
 | 
								exec("cp -a /var/spool/cron/crontabs/root /link/config/auto/root.cron");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$stop = $_POST['stop'];
 | 
				
			||||||
 | 
						if ( isset( $stop[ 'day' ] ) && isset( $stop[ 'time' ] ) ) {
 | 
				
			||||||
 | 
							if ( $stop[ 'day' ] == "x" )
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								exec("sed -i '3s/.*/ /' /var/spool/cron/crontabs/root");
 | 
				
			||||||
 | 
								exec("cp -a /var/spool/cron/crontabs/root /link/config/auto/root.cron");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								$tm = explode(":", $stop[ 'time' ]);
 | 
				
			||||||
 | 
								$cron = intval($tm[1]).' ' . intval($tm[0]) . ' * * ' . $stop[ 'day' ];
 | 
				
			||||||
 | 
								exec("sed -i '3s/.*/".$cron." \/usr\/php\/bin\/php \/link\/web\/link\/timer\/autoPush.php stop/' /var/spool/cron/crontabs/root");
 | 
				
			||||||
 | 
								exec("cp -a /var/spool/cron/crontabs/root /link/config/auto/root.cron");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						$result->result = "OK";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getPushCron() {
 | 
				
			||||||
 | 
						global $result;
 | 
				
			||||||
 | 
						exec( "crontab -u root -l | grep '/link/web/link/timer/autoPush.php start'",$output1);
 | 
				
			||||||
 | 
						exec( "crontab -u root -l | grep '/link/web/link/timer/autoPush.php stop'",$output2);
 | 
				
			||||||
 | 
						$result->result = [
 | 
				
			||||||
 | 
							'start'=>$output1[0],
 | 
				
			||||||
 | 
							'stop'=>$output2[0]
 | 
				
			||||||
 | 
						];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function startHelp() {
 | 
					function startHelp() {
 | 
				
			||||||
	global $result;
 | 
						global $result;
 | 
				
			||||||
	global $hardware;
 | 
						global $hardware;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,14 +84,22 @@ include("headhead.php");
 | 
				
			||||||
                <cn>H5 播放器</cn>
 | 
					                <cn>H5 播放器</cn>
 | 
				
			||||||
                <en>H5 Player</en>
 | 
					                <en>H5 Player</en>
 | 
				
			||||||
              </a></li>
 | 
					              </a></li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <?php
 | 
				
			||||||
 | 
					            if ($hardware["function"]["intercom"]) {
 | 
				
			||||||
 | 
					            ?>
 | 
				
			||||||
              <li><a href="intercom.php"><i class="fa fa-headphones"></i>
 | 
					              <li><a href="intercom.php"><i class="fa fa-headphones"></i>
 | 
				
			||||||
                      <cn>集成通信</cn>
 | 
					                      <cn>集成通信</cn>
 | 
				
			||||||
                      <en>Intercom</en>
 | 
					                      <en>Intercom</en>
 | 
				
			||||||
                  </a></li>
 | 
					                  </a></li>
 | 
				
			||||||
 | 
					            <?php
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            ?>
 | 
				
			||||||
            <li><a href="explorer.php"><i class="fa fa-folder-open-o"></i>
 | 
					            <li><a href="explorer.php"><i class="fa fa-folder-open-o"></i>
 | 
				
			||||||
                <cn>U盘助手</cn>
 | 
					                <cn>U盘助手</cn>
 | 
				
			||||||
                <en>Usb Disk</en>
 | 
					                <en>Usb Disk</en>
 | 
				
			||||||
              </a></li>
 | 
					              </a></li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <?php
 | 
					            <?php
 | 
				
			||||||
            if ($hardware["function"]["serialport"]) {
 | 
					            if ($hardware["function"]["serialport"]) {
 | 
				
			||||||
            ?>
 | 
					            ?>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -433,7 +433,7 @@ include( "head.php" );
 | 
				
			||||||
				var intercom=res.intercom;
 | 
									var intercom=res.intercom;
 | 
				
			||||||
				var tally=res.tally;
 | 
									var tally=res.tally;
 | 
				
			||||||
				var ids=[];
 | 
									var ids=[];
 | 
				
			||||||
				ids.push(myid);
 | 
									ids.push(Number(myid));
 | 
				
			||||||
				$("#did"+myid).addClass("alive");
 | 
									$("#did"+myid).addClass("alive");
 | 
				
			||||||
				$("#did"+myid).parent().parent().find("h3").text(myname);
 | 
									$("#did"+myid).parent().parent().find("h3").text(myname);
 | 
				
			||||||
				if(res.talking)
 | 
									if(res.talking)
 | 
				
			||||||
| 
						 | 
					@ -444,7 +444,7 @@ include( "head.php" );
 | 
				
			||||||
				for(var i=0;i<intercom.length;i++)
 | 
									for(var i=0;i<intercom.length;i++)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					var chn=intercom[i];
 | 
										var chn=intercom[i];
 | 
				
			||||||
					ids.push(chn.id);
 | 
										ids.push(Number(chn.id));
 | 
				
			||||||
					$("#did"+chn.id).parent().parent().find("h3").text(chn.name);
 | 
										$("#did"+chn.id).parent().parent().find("h3").text(chn.name);
 | 
				
			||||||
					$("#did"+chn.id).addClass("alive");
 | 
										$("#did"+chn.id).addClass("alive");
 | 
				
			||||||
					if(chn.talking)
 | 
										if(chn.talking)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,6 +90,11 @@ function rpc5(func, params, callbak, usrdata) {
 | 
				
			||||||
	rpcc(func, params, callbak, usrdata, jsonrpc);
 | 
						rpcc(func, params, callbak, usrdata, jsonrpc);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function rpc6(func, params, callbak, usrdata) {
 | 
				
			||||||
 | 
						var jsonrpc = new $.JsonRpcClient({ ajaxUrl: 'RPC6' });
 | 
				
			||||||
 | 
						rpcc(func, params, callbak, usrdata, jsonrpc);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function func(func, data, callbak)
 | 
					function func(func, data, callbak)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	$.post("func.php?func="+func,data,callbak,"json");
 | 
						$.post("func.php?func="+func,data,callbak,"json");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,614 @@
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @fileoverview
 | 
				
			||||||
 | 
					 * - Using the 'QRCode for Javascript library'
 | 
				
			||||||
 | 
					 * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.
 | 
				
			||||||
 | 
					 * - this library has no dependencies.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author davidshimjs
 | 
				
			||||||
 | 
					 * @see <a href="http://www.d-project.com/" target="_blank">http://www.d-project.com/</a>
 | 
				
			||||||
 | 
					 * @see <a href="http://jeromeetienne.github.com/jquery-qrcode/" target="_blank">http://jeromeetienne.github.com/jquery-qrcode/</a>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					var QRCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(function () {
 | 
				
			||||||
 | 
						//---------------------------------------------------------------------
 | 
				
			||||||
 | 
						// QRCode for JavaScript
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Copyright (c) 2009 Kazuhiko Arase
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// URL: http://www.d-project.com/
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Licensed under the MIT license:
 | 
				
			||||||
 | 
						//   http://www.opensource.org/licenses/mit-license.php
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// The word "QR Code" is registered trademark of 
 | 
				
			||||||
 | 
						// DENSO WAVE INCORPORATED
 | 
				
			||||||
 | 
						//   http://www.denso-wave.com/qrcode/faqpatent-e.html
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						//---------------------------------------------------------------------
 | 
				
			||||||
 | 
						function QR8bitByte(data) {
 | 
				
			||||||
 | 
							this.mode = QRMode.MODE_8BIT_BYTE;
 | 
				
			||||||
 | 
							this.data = data;
 | 
				
			||||||
 | 
							this.parsedData = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Added to support UTF-8 Characters
 | 
				
			||||||
 | 
							for (var i = 0, l = this.data.length; i < l; i++) {
 | 
				
			||||||
 | 
								var byteArray = [];
 | 
				
			||||||
 | 
								var code = this.data.charCodeAt(i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (code > 0x10000) {
 | 
				
			||||||
 | 
									byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
 | 
				
			||||||
 | 
									byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
 | 
				
			||||||
 | 
									byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
 | 
				
			||||||
 | 
									byteArray[3] = 0x80 | (code & 0x3F);
 | 
				
			||||||
 | 
								} else if (code > 0x800) {
 | 
				
			||||||
 | 
									byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
 | 
				
			||||||
 | 
									byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
 | 
				
			||||||
 | 
									byteArray[2] = 0x80 | (code & 0x3F);
 | 
				
			||||||
 | 
								} else if (code > 0x80) {
 | 
				
			||||||
 | 
									byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
 | 
				
			||||||
 | 
									byteArray[1] = 0x80 | (code & 0x3F);
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									byteArray[0] = code;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this.parsedData.push(byteArray);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							this.parsedData = Array.prototype.concat.apply([], this.parsedData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (this.parsedData.length != this.data.length) {
 | 
				
			||||||
 | 
								this.parsedData.unshift(191);
 | 
				
			||||||
 | 
								this.parsedData.unshift(187);
 | 
				
			||||||
 | 
								this.parsedData.unshift(239);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						QR8bitByte.prototype = {
 | 
				
			||||||
 | 
							getLength: function (buffer) {
 | 
				
			||||||
 | 
								return this.parsedData.length;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							write: function (buffer) {
 | 
				
			||||||
 | 
								for (var i = 0, l = this.parsedData.length; i < l; i++) {
 | 
				
			||||||
 | 
									buffer.put(this.parsedData[i], 8);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function QRCodeModel(typeNumber, errorCorrectLevel) {
 | 
				
			||||||
 | 
							this.typeNumber = typeNumber;
 | 
				
			||||||
 | 
							this.errorCorrectLevel = errorCorrectLevel;
 | 
				
			||||||
 | 
							this.modules = null;
 | 
				
			||||||
 | 
							this.moduleCount = 0;
 | 
				
			||||||
 | 
							this.dataCache = null;
 | 
				
			||||||
 | 
							this.dataList = [];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);}
 | 
				
			||||||
 | 
						return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row<this.moduleCount;row++){this.modules[row]=new Array(this.moduleCount);for(var col=0;col<this.moduleCount;col++){this.modules[row][col]=null;}}
 | 
				
			||||||
 | 
						this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(test,maskPattern);if(this.typeNumber>=7){this.setupTypeNumber(test);}
 | 
				
			||||||
 | 
						if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}
 | 
				
			||||||
 | 
						this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}
 | 
				
			||||||
 | 
						return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row<this.modules.length;row++){var y=row*cs;for(var col=0;col<this.modules[row].length;col++){var x=col*cs;var dark=this.modules[row][col];if(dark){qr_mc.beginFill(0,100);qr_mc.moveTo(x,y);qr_mc.lineTo(x+cs,y);qr_mc.lineTo(x+cs,y+cs);qr_mc.lineTo(x,y+cs);qr_mc.endFill();}}}
 | 
				
			||||||
 | 
						return qr_mc;},setupTimingPattern:function(){for(var r=8;r<this.moduleCount-8;r++){if(this.modules[r][6]!=null){continue;}
 | 
				
			||||||
 | 
						this.modules[r][6]=(r%2==0);}
 | 
				
			||||||
 | 
						for(var c=8;c<this.moduleCount-8;c++){if(this.modules[6][c]!=null){continue;}
 | 
				
			||||||
 | 
						this.modules[6][c]=(c%2==0);}},setupPositionAdjustPattern:function(){var pos=QRUtil.getPatternPosition(this.typeNumber);for(var i=0;i<pos.length;i++){for(var j=0;j<pos.length;j++){var row=pos[i];var col=pos[j];if(this.modules[row][col]!=null){continue;}
 | 
				
			||||||
 | 
						for(var r=-2;r<=2;r++){for(var c=-2;c<=2;c++){if(r==-2||r==2||c==-2||c==2||(r==0&&c==0)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}}}},setupTypeNumber:function(test){var bits=QRUtil.getBCHTypeNumber(this.typeNumber);for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}
 | 
				
			||||||
 | 
						for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}
 | 
				
			||||||
 | 
						for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}
 | 
				
			||||||
 | 
						this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex<data.length){dark=(((data[byteIndex]>>>bitIndex)&1)==1);}
 | 
				
			||||||
 | 
						var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}
 | 
				
			||||||
 | 
						this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}
 | 
				
			||||||
 | 
						row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;i<dataList.length;i++){var data=dataList[i];buffer.put(data.mode,4);buffer.put(data.getLength(),QRUtil.getLengthInBits(data.mode,typeNumber));data.write(buffer);}
 | 
				
			||||||
 | 
						var totalDataCount=0;for(var i=0;i<rsBlocks.length;i++){totalDataCount+=rsBlocks[i].dataCount;}
 | 
				
			||||||
 | 
						if(buffer.getLengthInBits()>totalDataCount*8){throw new Error("code length overflow. ("
 | 
				
			||||||
 | 
						+buffer.getLengthInBits()
 | 
				
			||||||
 | 
						+">"
 | 
				
			||||||
 | 
						+totalDataCount*8
 | 
				
			||||||
 | 
						+")");}
 | 
				
			||||||
 | 
						if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}
 | 
				
			||||||
 | 
						while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}
 | 
				
			||||||
 | 
						while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}
 | 
				
			||||||
 | 
						buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}
 | 
				
			||||||
 | 
						buffer.put(QRCodeModel.PAD1,8);}
 | 
				
			||||||
 | 
						return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r<rsBlocks.length;r++){var dcCount=rsBlocks[r].dataCount;var ecCount=rsBlocks[r].totalCount-dcCount;maxDcCount=Math.max(maxDcCount,dcCount);maxEcCount=Math.max(maxEcCount,ecCount);dcdata[r]=new Array(dcCount);for(var i=0;i<dcdata[r].length;i++){dcdata[r][i]=0xff&buffer.buffer[i+offset];}
 | 
				
			||||||
 | 
						offset+=dcCount;var rsPoly=QRUtil.getErrorCorrectPolynomial(ecCount);var rawPoly=new QRPolynomial(dcdata[r],rsPoly.getLength()-1);var modPoly=rawPoly.mod(rsPoly);ecdata[r]=new Array(rsPoly.getLength()-1);for(var i=0;i<ecdata[r].length;i++){var modIndex=i+modPoly.getLength()-ecdata[r].length;ecdata[r][i]=(modIndex>=0)?modPoly.get(modIndex):0;}}
 | 
				
			||||||
 | 
						var totalCodeCount=0;for(var i=0;i<rsBlocks.length;i++){totalCodeCount+=rsBlocks[i].totalCount;}
 | 
				
			||||||
 | 
						var data=new Array(totalCodeCount);var index=0;for(var i=0;i<maxDcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<dcdata[r].length){data[index++]=dcdata[r][i];}}}
 | 
				
			||||||
 | 
						for(var i=0;i<maxEcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<ecdata[r].length){data[index++]=ecdata[r][i];}}}
 | 
				
			||||||
 | 
						return data;};var QRMode={MODE_NUMBER:1<<0,MODE_ALPHA_NUM:1<<1,MODE_8BIT_BYTE:1<<2,MODE_KANJI:1<<3};var QRErrorCorrectLevel={L:1,M:0,Q:3,H:2};var QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var QRUtil={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:(1<<10)|(1<<8)|(1<<5)|(1<<4)|(1<<2)|(1<<1)|(1<<0),G18:(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<5)|(1<<2)|(1<<0),G15_MASK:(1<<14)|(1<<12)|(1<<10)|(1<<4)|(1<<1),getBCHTypeInfo:function(data){var d=data<<10;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)>=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}
 | 
				
			||||||
 | 
						return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}
 | 
				
			||||||
 | 
						return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}
 | 
				
			||||||
 | 
						return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i<errorCorrectLength;i++){a=a.multiply(new QRPolynomial([1,QRMath.gexp(i)],0));}
 | 
				
			||||||
 | 
						return a;},getLengthInBits:function(mode,type){if(1<=type&&type<10){switch(mode){case QRMode.MODE_NUMBER:return 10;case QRMode.MODE_ALPHA_NUM:return 9;case QRMode.MODE_8BIT_BYTE:return 8;case QRMode.MODE_KANJI:return 8;default:throw new Error("mode:"+mode);}}else if(type<27){switch(mode){case QRMode.MODE_NUMBER:return 12;case QRMode.MODE_ALPHA_NUM:return 11;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 10;default:throw new Error("mode:"+mode);}}else if(type<41){switch(mode){case QRMode.MODE_NUMBER:return 14;case QRMode.MODE_ALPHA_NUM:return 13;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 12;default:throw new Error("mode:"+mode);}}else{throw new Error("type:"+type);}},getLostPoint:function(qrCode){var moduleCount=qrCode.getModuleCount();var lostPoint=0;for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount;col++){var sameCount=0;var dark=qrCode.isDark(row,col);for(var r=-1;r<=1;r++){if(row+r<0||moduleCount<=row+r){continue;}
 | 
				
			||||||
 | 
						for(var c=-1;c<=1;c++){if(col+c<0||moduleCount<=col+c){continue;}
 | 
				
			||||||
 | 
						if(r==0&&c==0){continue;}
 | 
				
			||||||
 | 
						if(dark==qrCode.isDark(row+r,col+c)){sameCount++;}}}
 | 
				
			||||||
 | 
						if(sameCount>5){lostPoint+=(3+sameCount-5);}}}
 | 
				
			||||||
 | 
						for(var row=0;row<moduleCount-1;row++){for(var col=0;col<moduleCount-1;col++){var count=0;if(qrCode.isDark(row,col))count++;if(qrCode.isDark(row+1,col))count++;if(qrCode.isDark(row,col+1))count++;if(qrCode.isDark(row+1,col+1))count++;if(count==0||count==4){lostPoint+=3;}}}
 | 
				
			||||||
 | 
						for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount-6;col++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row,col+1)&&qrCode.isDark(row,col+2)&&qrCode.isDark(row,col+3)&&qrCode.isDark(row,col+4)&&!qrCode.isDark(row,col+5)&&qrCode.isDark(row,col+6)){lostPoint+=40;}}}
 | 
				
			||||||
 | 
						for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount-6;row++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row+1,col)&&qrCode.isDark(row+2,col)&&qrCode.isDark(row+3,col)&&qrCode.isDark(row+4,col)&&!qrCode.isDark(row+5,col)&&qrCode.isDark(row+6,col)){lostPoint+=40;}}}
 | 
				
			||||||
 | 
						var darkCount=0;for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount;row++){if(qrCode.isDark(row,col)){darkCount++;}}}
 | 
				
			||||||
 | 
						var ratio=Math.abs(100*darkCount/moduleCount/moduleCount-50)/5;lostPoint+=ratio*10;return lostPoint;}};var QRMath={glog:function(n){if(n<1){throw new Error("glog("+n+")");}
 | 
				
			||||||
 | 
						return QRMath.LOG_TABLE[n];},gexp:function(n){while(n<0){n+=255;}
 | 
				
			||||||
 | 
						while(n>=256){n-=255;}
 | 
				
			||||||
 | 
						return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<<i;}
 | 
				
			||||||
 | 
						for(var i=8;i<256;i++){QRMath.EXP_TABLE[i]=QRMath.EXP_TABLE[i-4]^QRMath.EXP_TABLE[i-5]^QRMath.EXP_TABLE[i-6]^QRMath.EXP_TABLE[i-8];}
 | 
				
			||||||
 | 
						for(var i=0;i<255;i++){QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]]=i;}
 | 
				
			||||||
 | 
						function QRPolynomial(num,shift){if(num.length==undefined){throw new Error(num.length+"/"+shift);}
 | 
				
			||||||
 | 
						var offset=0;while(offset<num.length&&num[offset]==0){offset++;}
 | 
				
			||||||
 | 
						this.num=new Array(num.length-offset+shift);for(var i=0;i<num.length-offset;i++){this.num[i]=num[i+offset];}}
 | 
				
			||||||
 | 
						QRPolynomial.prototype={get:function(index){return this.num[index];},getLength:function(){return this.num.length;},multiply:function(e){var num=new Array(this.getLength()+e.getLength()-1);for(var i=0;i<this.getLength();i++){for(var j=0;j<e.getLength();j++){num[i+j]^=QRMath.gexp(QRMath.glog(this.get(i))+QRMath.glog(e.get(j)));}}
 | 
				
			||||||
 | 
						return new QRPolynomial(num,0);},mod:function(e){if(this.getLength()-e.getLength()<0){return this;}
 | 
				
			||||||
 | 
						var ratio=QRMath.glog(this.get(0))-QRMath.glog(e.get(0));var num=new Array(this.getLength());for(var i=0;i<this.getLength();i++){num[i]=this.get(i);}
 | 
				
			||||||
 | 
						for(var i=0;i<e.getLength();i++){num[i]^=QRMath.gexp(QRMath.glog(e.get(i))+ratio);}
 | 
				
			||||||
 | 
						return new QRPolynomial(num,0).mod(e);}};function QRRSBlock(totalCount,dataCount){this.totalCount=totalCount;this.dataCount=dataCount;}
 | 
				
			||||||
 | 
						QRRSBlock.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];QRRSBlock.getRSBlocks=function(typeNumber,errorCorrectLevel){var rsBlock=QRRSBlock.getRsBlockTable(typeNumber,errorCorrectLevel);if(rsBlock==undefined){throw new Error("bad rs block @ typeNumber:"+typeNumber+"/errorCorrectLevel:"+errorCorrectLevel);}
 | 
				
			||||||
 | 
						var length=rsBlock.length/3;var list=[];for(var i=0;i<length;i++){var count=rsBlock[i*3+0];var totalCount=rsBlock[i*3+1];var dataCount=rsBlock[i*3+2];for(var j=0;j<count;j++){list.push(new QRRSBlock(totalCount,dataCount));}}
 | 
				
			||||||
 | 
						return list;};QRRSBlock.getRsBlockTable=function(typeNumber,errorCorrectLevel){switch(errorCorrectLevel){case QRErrorCorrectLevel.L:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+0];case QRErrorCorrectLevel.M:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+1];case QRErrorCorrectLevel.Q:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+2];case QRErrorCorrectLevel.H:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+3];default:return undefined;}};function QRBitBuffer(){this.buffer=[];this.length=0;}
 | 
				
			||||||
 | 
						QRBitBuffer.prototype={get:function(index){var bufIndex=Math.floor(index/8);return((this.buffer[bufIndex]>>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i<length;i++){this.putBit(((num>>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}
 | 
				
			||||||
 | 
						if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}
 | 
				
			||||||
 | 
						this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						function _isSupportCanvas() {
 | 
				
			||||||
 | 
							return typeof CanvasRenderingContext2D != "undefined";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// android 2.x doesn't support Data-URI spec
 | 
				
			||||||
 | 
						function _getAndroid() {
 | 
				
			||||||
 | 
							var android = false;
 | 
				
			||||||
 | 
							var sAgent = navigator.userAgent;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (/android/i.test(sAgent)) { // android
 | 
				
			||||||
 | 
								android = true;
 | 
				
			||||||
 | 
								var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (aMat && aMat[1]) {
 | 
				
			||||||
 | 
									android = parseFloat(aMat[1]);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return android;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						var svgDrawer = (function() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var Drawing = function (el, htOption) {
 | 
				
			||||||
 | 
								this._el = el;
 | 
				
			||||||
 | 
								this._htOption = htOption;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Drawing.prototype.draw = function (oQRCode) {
 | 
				
			||||||
 | 
								var _htOption = this._htOption;
 | 
				
			||||||
 | 
								var _el = this._el;
 | 
				
			||||||
 | 
								var nCount = oQRCode.getModuleCount();
 | 
				
			||||||
 | 
								var nWidth = Math.floor(_htOption.width / nCount);
 | 
				
			||||||
 | 
								var nHeight = Math.floor(_htOption.height / nCount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this.clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								function makeSVG(tag, attrs) {
 | 
				
			||||||
 | 
									var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
 | 
				
			||||||
 | 
									for (var k in attrs)
 | 
				
			||||||
 | 
										if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);
 | 
				
			||||||
 | 
									return el;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});
 | 
				
			||||||
 | 
								svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink");
 | 
				
			||||||
 | 
								_el.appendChild(svg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"}));
 | 
				
			||||||
 | 
								svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"}));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								for (var row = 0; row < nCount; row++) {
 | 
				
			||||||
 | 
									for (var col = 0; col < nCount; col++) {
 | 
				
			||||||
 | 
										if (oQRCode.isDark(row, col)) {
 | 
				
			||||||
 | 
											var child = makeSVG("use", {"x": String(col), "y": String(row)});
 | 
				
			||||||
 | 
											child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template")
 | 
				
			||||||
 | 
											svg.appendChild(child);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							Drawing.prototype.clear = function () {
 | 
				
			||||||
 | 
								while (this._el.hasChildNodes())
 | 
				
			||||||
 | 
									this._el.removeChild(this._el.lastChild);
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							return Drawing;
 | 
				
			||||||
 | 
						})();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var useSVG = document.documentElement.tagName.toLowerCase() === "svg";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Drawing in DOM by using Table tag
 | 
				
			||||||
 | 
						var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {
 | 
				
			||||||
 | 
							var Drawing = function (el, htOption) {
 | 
				
			||||||
 | 
								this._el = el;
 | 
				
			||||||
 | 
								this._htOption = htOption;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Draw the QRCode
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @param {QRCode} oQRCode
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.draw = function (oQRCode) {
 | 
				
			||||||
 | 
					            var _htOption = this._htOption;
 | 
				
			||||||
 | 
					            var _el = this._el;
 | 
				
			||||||
 | 
								var nCount = oQRCode.getModuleCount();
 | 
				
			||||||
 | 
								var nWidth = Math.floor(_htOption.width / nCount);
 | 
				
			||||||
 | 
								var nHeight = Math.floor(_htOption.height / nCount);
 | 
				
			||||||
 | 
								var aHTML = ['<table style="border:0;border-collapse:collapse;">'];
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								for (var row = 0; row < nCount; row++) {
 | 
				
			||||||
 | 
									aHTML.push('<tr>');
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									for (var col = 0; col < nCount; col++) {
 | 
				
			||||||
 | 
										aHTML.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:' + nWidth + 'px;height:' + nHeight + 'px;background-color:' + (oQRCode.isDark(row, col) ? _htOption.colorDark : _htOption.colorLight) + ';"></td>');
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									aHTML.push('</tr>');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								aHTML.push('</table>');
 | 
				
			||||||
 | 
								_el.innerHTML = aHTML.join('');
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// Fix the margin values as real size.
 | 
				
			||||||
 | 
								var elTable = _el.childNodes[0];
 | 
				
			||||||
 | 
								var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;
 | 
				
			||||||
 | 
								var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (nLeftMarginTable > 0 && nTopMarginTable > 0) {
 | 
				
			||||||
 | 
									elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px";	
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Clear the QRCode
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.clear = function () {
 | 
				
			||||||
 | 
								this._el.innerHTML = '';
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return Drawing;
 | 
				
			||||||
 | 
						})() : (function () { // Drawing in Canvas
 | 
				
			||||||
 | 
							function _onMakeImage() {
 | 
				
			||||||
 | 
								this._elImage.src = this._elCanvas.toDataURL("image/png");
 | 
				
			||||||
 | 
								this._elImage.style.display = "inline-block";
 | 
				
			||||||
 | 
								this._elCanvas.style.display = "none";			
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// Android 2.1 bug workaround
 | 
				
			||||||
 | 
							// http://code.google.com/p/android/issues/detail?id=5141
 | 
				
			||||||
 | 
							if (this._android && this._android <= 2.1) {
 | 
				
			||||||
 | 
						    	var factor = 1 / window.devicePixelRatio;
 | 
				
			||||||
 | 
						        var drawImage = CanvasRenderingContext2D.prototype.drawImage; 
 | 
				
			||||||
 | 
						    	CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {
 | 
				
			||||||
 | 
						    		if (("nodeName" in image) && /img/i.test(image.nodeName)) {
 | 
				
			||||||
 | 
							        	for (var i = arguments.length - 1; i >= 1; i--) {
 | 
				
			||||||
 | 
							            	arguments[i] = arguments[i] * factor;
 | 
				
			||||||
 | 
							        	}
 | 
				
			||||||
 | 
						    		} else if (typeof dw == "undefined") {
 | 
				
			||||||
 | 
						    			arguments[1] *= factor;
 | 
				
			||||||
 | 
						    			arguments[2] *= factor;
 | 
				
			||||||
 | 
						    			arguments[3] *= factor;
 | 
				
			||||||
 | 
						    			arguments[4] *= factor;
 | 
				
			||||||
 | 
						    		}
 | 
				
			||||||
 | 
						    		
 | 
				
			||||||
 | 
						        	drawImage.apply(this, arguments); 
 | 
				
			||||||
 | 
						    	};
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Check whether the user's browser supports Data URI or not
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @private
 | 
				
			||||||
 | 
							 * @param {Function} fSuccess Occurs if it supports Data URI
 | 
				
			||||||
 | 
							 * @param {Function} fFail Occurs if it doesn't support Data URI
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							function _safeSetDataURI(fSuccess, fFail) {
 | 
				
			||||||
 | 
					            var self = this;
 | 
				
			||||||
 | 
					            self._fFail = fFail;
 | 
				
			||||||
 | 
					            self._fSuccess = fSuccess;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Check it just once
 | 
				
			||||||
 | 
					            if (self._bSupportDataURI === null) {
 | 
				
			||||||
 | 
					                var el = document.createElement("img");
 | 
				
			||||||
 | 
					                var fOnError = function() {
 | 
				
			||||||
 | 
					                    self._bSupportDataURI = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (self._fFail) {
 | 
				
			||||||
 | 
					                        self._fFail.call(self);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					                var fOnSuccess = function() {
 | 
				
			||||||
 | 
					                    self._bSupportDataURI = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (self._fSuccess) {
 | 
				
			||||||
 | 
					                        self._fSuccess.call(self);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                el.onabort = fOnError;
 | 
				
			||||||
 | 
					                el.onerror = fOnError;
 | 
				
			||||||
 | 
					                el.onload = fOnSuccess;
 | 
				
			||||||
 | 
					                el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data.
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            } else if (self._bSupportDataURI === true && self._fSuccess) {
 | 
				
			||||||
 | 
					                self._fSuccess.call(self);
 | 
				
			||||||
 | 
					            } else if (self._bSupportDataURI === false && self._fFail) {
 | 
				
			||||||
 | 
					                self._fFail.call(self);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Drawing QRCode by using canvas
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @constructor
 | 
				
			||||||
 | 
							 * @param {HTMLElement} el
 | 
				
			||||||
 | 
							 * @param {Object} htOption QRCode Options 
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							var Drawing = function (el, htOption) {
 | 
				
			||||||
 | 
					    		this._bIsPainted = false;
 | 
				
			||||||
 | 
					    		this._android = _getAndroid();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
								this._htOption = htOption;
 | 
				
			||||||
 | 
								this._elCanvas = document.createElement("canvas");
 | 
				
			||||||
 | 
								this._elCanvas.width = htOption.width;
 | 
				
			||||||
 | 
								this._elCanvas.height = htOption.height;
 | 
				
			||||||
 | 
								el.appendChild(this._elCanvas);
 | 
				
			||||||
 | 
								this._el = el;
 | 
				
			||||||
 | 
								this._oContext = this._elCanvas.getContext("2d");
 | 
				
			||||||
 | 
								this._bIsPainted = false;
 | 
				
			||||||
 | 
								this._elImage = document.createElement("img");
 | 
				
			||||||
 | 
								this._elImage.alt = "Scan me!";
 | 
				
			||||||
 | 
								this._elImage.style.display = "none";
 | 
				
			||||||
 | 
								this._el.appendChild(this._elImage);
 | 
				
			||||||
 | 
								this._bSupportDataURI = null;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Draw the QRCode
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @param {QRCode} oQRCode 
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.draw = function (oQRCode) {
 | 
				
			||||||
 | 
					            var _elImage = this._elImage;
 | 
				
			||||||
 | 
					            var _oContext = this._oContext;
 | 
				
			||||||
 | 
					            var _htOption = this._htOption;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
								var nCount = oQRCode.getModuleCount();
 | 
				
			||||||
 | 
								var nWidth = _htOption.width / nCount;
 | 
				
			||||||
 | 
								var nHeight = _htOption.height / nCount;
 | 
				
			||||||
 | 
								var nRoundedWidth = Math.round(nWidth);
 | 
				
			||||||
 | 
								var nRoundedHeight = Math.round(nHeight);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								_elImage.style.display = "none";
 | 
				
			||||||
 | 
								this.clear();
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								for (var row = 0; row < nCount; row++) {
 | 
				
			||||||
 | 
									for (var col = 0; col < nCount; col++) {
 | 
				
			||||||
 | 
										var bIsDark = oQRCode.isDark(row, col);
 | 
				
			||||||
 | 
										var nLeft = col * nWidth;
 | 
				
			||||||
 | 
										var nTop = row * nHeight;
 | 
				
			||||||
 | 
										_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;
 | 
				
			||||||
 | 
										_oContext.lineWidth = 1;
 | 
				
			||||||
 | 
										_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;					
 | 
				
			||||||
 | 
										_oContext.fillRect(nLeft, nTop, nWidth, nHeight);
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										// 안티 앨리어싱 방지 처리
 | 
				
			||||||
 | 
										_oContext.strokeRect(
 | 
				
			||||||
 | 
											Math.floor(nLeft) + 0.5,
 | 
				
			||||||
 | 
											Math.floor(nTop) + 0.5,
 | 
				
			||||||
 | 
											nRoundedWidth,
 | 
				
			||||||
 | 
											nRoundedHeight
 | 
				
			||||||
 | 
										);
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										_oContext.strokeRect(
 | 
				
			||||||
 | 
											Math.ceil(nLeft) - 0.5,
 | 
				
			||||||
 | 
											Math.ceil(nTop) - 0.5,
 | 
				
			||||||
 | 
											nRoundedWidth,
 | 
				
			||||||
 | 
											nRoundedHeight
 | 
				
			||||||
 | 
										);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								this._bIsPainted = true;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Make the image from Canvas if the browser supports Data URI.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.makeImage = function () {
 | 
				
			||||||
 | 
								if (this._bIsPainted) {
 | 
				
			||||||
 | 
									_safeSetDataURI.call(this, _onMakeImage);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Return whether the QRCode is painted or not
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @return {Boolean}
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.isPainted = function () {
 | 
				
			||||||
 | 
								return this._bIsPainted;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Clear the QRCode
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.clear = function () {
 | 
				
			||||||
 | 
								this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);
 | 
				
			||||||
 | 
								this._bIsPainted = false;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * @private
 | 
				
			||||||
 | 
							 * @param {Number} nNumber
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.round = function (nNumber) {
 | 
				
			||||||
 | 
								if (!nNumber) {
 | 
				
			||||||
 | 
									return nNumber;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								return Math.floor(nNumber * 1000) / 1000;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return Drawing;
 | 
				
			||||||
 | 
						})();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get the type by string length
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @private
 | 
				
			||||||
 | 
						 * @param {String} sText
 | 
				
			||||||
 | 
						 * @param {Number} nCorrectLevel
 | 
				
			||||||
 | 
						 * @return {Number} type
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						function _getTypeNumber(sText, nCorrectLevel) {			
 | 
				
			||||||
 | 
							var nType = 1;
 | 
				
			||||||
 | 
							var length = _getUTF8Length(sText);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
 | 
				
			||||||
 | 
								var nLimit = 0;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								switch (nCorrectLevel) {
 | 
				
			||||||
 | 
									case QRErrorCorrectLevel.L :
 | 
				
			||||||
 | 
										nLimit = QRCodeLimitLength[i][0];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case QRErrorCorrectLevel.M :
 | 
				
			||||||
 | 
										nLimit = QRCodeLimitLength[i][1];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case QRErrorCorrectLevel.Q :
 | 
				
			||||||
 | 
										nLimit = QRCodeLimitLength[i][2];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case QRErrorCorrectLevel.H :
 | 
				
			||||||
 | 
										nLimit = QRCodeLimitLength[i][3];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (length <= nLimit) {
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									nType++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (nType > QRCodeLimitLength.length) {
 | 
				
			||||||
 | 
								throw new Error("Too long data");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return nType;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function _getUTF8Length(sText) {
 | 
				
			||||||
 | 
							var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
 | 
				
			||||||
 | 
							return replacedText.length + (replacedText.length != sText ? 3 : 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @class QRCode
 | 
				
			||||||
 | 
						 * @constructor
 | 
				
			||||||
 | 
						 * @example 
 | 
				
			||||||
 | 
						 * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie");
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @example
 | 
				
			||||||
 | 
						 * var oQRCode = new QRCode("test", {
 | 
				
			||||||
 | 
						 *    text : "http://naver.com",
 | 
				
			||||||
 | 
						 *    width : 128,
 | 
				
			||||||
 | 
						 *    height : 128
 | 
				
			||||||
 | 
						 * });
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * oQRCode.clear(); // Clear the QRCode.
 | 
				
			||||||
 | 
						 * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param {HTMLElement|String} el target element or 'id' attribute of element.
 | 
				
			||||||
 | 
						 * @param {Object|String} vOption
 | 
				
			||||||
 | 
						 * @param {String} vOption.text QRCode link data
 | 
				
			||||||
 | 
						 * @param {Number} [vOption.width=256]
 | 
				
			||||||
 | 
						 * @param {Number} [vOption.height=256]
 | 
				
			||||||
 | 
						 * @param {String} [vOption.colorDark="#000000"]
 | 
				
			||||||
 | 
						 * @param {String} [vOption.colorLight="#ffffff"]
 | 
				
			||||||
 | 
						 * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] 
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode = function (el, vOption) {
 | 
				
			||||||
 | 
							this._htOption = {
 | 
				
			||||||
 | 
								width : 256, 
 | 
				
			||||||
 | 
								height : 256,
 | 
				
			||||||
 | 
								typeNumber : 4,
 | 
				
			||||||
 | 
								colorDark : "#000000",
 | 
				
			||||||
 | 
								colorLight : "#ffffff",
 | 
				
			||||||
 | 
								correctLevel : QRErrorCorrectLevel.H
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (typeof vOption === 'string') {
 | 
				
			||||||
 | 
								vOption	= {
 | 
				
			||||||
 | 
									text : vOption
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// Overwrites options
 | 
				
			||||||
 | 
							if (vOption) {
 | 
				
			||||||
 | 
								for (var i in vOption) {
 | 
				
			||||||
 | 
									this._htOption[i] = vOption[i];
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (typeof el == "string") {
 | 
				
			||||||
 | 
								el = document.getElementById(el);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (this._htOption.useSVG) {
 | 
				
			||||||
 | 
								Drawing = svgDrawer;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							this._android = _getAndroid();
 | 
				
			||||||
 | 
							this._el = el;
 | 
				
			||||||
 | 
							this._oQRCode = null;
 | 
				
			||||||
 | 
							this._oDrawing = new Drawing(this._el, this._htOption);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (this._htOption.text) {
 | 
				
			||||||
 | 
								this.makeCode(this._htOption.text);	
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Make the QRCode
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {String} sText link data
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode.prototype.makeCode = function (sText) {
 | 
				
			||||||
 | 
							this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);
 | 
				
			||||||
 | 
							this._oQRCode.addData(sText);
 | 
				
			||||||
 | 
							this._oQRCode.make();
 | 
				
			||||||
 | 
							this._el.title = sText;
 | 
				
			||||||
 | 
							this._oDrawing.draw(this._oQRCode);			
 | 
				
			||||||
 | 
							this.makeImage();
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Make the Image from Canvas element
 | 
				
			||||||
 | 
						 * - It occurs automatically
 | 
				
			||||||
 | 
						 * - Android below 3 doesn't support Data-URI spec.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @private
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode.prototype.makeImage = function () {
 | 
				
			||||||
 | 
							if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) {
 | 
				
			||||||
 | 
								this._oDrawing.makeImage();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Clear the QRCode
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode.prototype.clear = function () {
 | 
				
			||||||
 | 
							this._oDrawing.clear();
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @name QRCode.CorrectLevel
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode.CorrectLevel = QRErrorCorrectLevel;
 | 
				
			||||||
 | 
					})();
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Link\Api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Link\Rpc\RpcClient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Push extends Verify
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function start_push(): string
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $client = new RpcClient();
 | 
				
			||||||
 | 
					        $client->start_push();
 | 
				
			||||||
 | 
					        return $this->handleRet('','success','推流开启成功','start push successful');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function stop_push(): string
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $client = new RpcClient();
 | 
				
			||||||
 | 
					        $client->stop_push();
 | 
				
			||||||
 | 
					        return $this->handleRet('','success','推流停止成功','stop push successful');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -165,7 +165,7 @@ class Client
 | 
				
			||||||
     * Returns the object handle (so you can chain method calls if you're into
 | 
					     * Returns the object handle (so you can chain method calls if you're into
 | 
				
			||||||
     * that kinky stuff)
 | 
					     * that kinky stuff)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function query($method, $arguments, &$response)
 | 
					    public function query($method, $arguments, &$response = null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $id = count($this->responses);
 | 
					        $id = count($this->responses);
 | 
				
			||||||
        $this->responses[$id] = &$response;
 | 
					        $this->responses[$id] = &$response;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$type = $argv[1];
 | 
				
			||||||
 | 
					if(empty($type))
 | 
				
			||||||
 | 
					    exit();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if($type == "start")
 | 
				
			||||||
 | 
					    $url = "http://127.0.0.1/link/push/start_push";
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    $url = "http://127.0.0.1/link/push/stop_push";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$opts = [
 | 
				
			||||||
 | 
					    'http'=>[
 | 
				
			||||||
 | 
					        'method'=>"POST"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					$context = stream_context_create($opts);
 | 
				
			||||||
 | 
					$json = file_get_contents($url, false, $context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,28 @@
 | 
				
			||||||
<?php
 | 
					<?php
 | 
				
			||||||
include( "head.php" );
 | 
					include( "head.php" );
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 | 
					<link href="vendor/timepicker/css/bootstrap-timepicker.min.css" rel="stylesheet">
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					    .hr-container {
 | 
				
			||||||
 | 
					        position: relative;
 | 
				
			||||||
 | 
					        display: inline-block;
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .hr-container .hr-text {
 | 
				
			||||||
 | 
					        position: absolute;
 | 
				
			||||||
 | 
					        top: 1px;
 | 
				
			||||||
 | 
					        left: 50%;
 | 
				
			||||||
 | 
					        transform: translateX(-50%);
 | 
				
			||||||
 | 
					        background-color: #fff;
 | 
				
			||||||
 | 
					        padding: 0 10px;
 | 
				
			||||||
 | 
					        color: grey;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
<div id="alert"></div>
 | 
					<div id="alert"></div>
 | 
				
			||||||
<div class="row">
 | 
					<div class="row">
 | 
				
			||||||
	<div class="col-md-6">
 | 
						<div class="col-md-6">
 | 
				
			||||||
		<div class="panel panel-default">
 | 
							<div class="panel panel-default" style="margin-bottom: 15px;">
 | 
				
			||||||
			<div class="title">
 | 
								<div class="title">
 | 
				
			||||||
				<h3 class="panel-title">
 | 
									<h3 class="panel-title">
 | 
				
			||||||
					<cn>视频预览</cn>
 | 
										<cn>视频预览</cn>
 | 
				
			||||||
| 
						 | 
					@ -12,10 +30,30 @@ include( "head.php" );
 | 
				
			||||||
					<small><cn>推流后可见</cn><en>visible when pushing</en></small>
 | 
										<small><cn>推流后可见</cn><en>visible when pushing</en></small>
 | 
				
			||||||
				</h3>
 | 
									</h3>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<div class="panel-body">
 | 
								<div class="panel-body" style="padding: 20px 15px">
 | 
				
			||||||
				<video id="player" controls muted style="width:100%;height: 294px; background: #555;"></video>
 | 
									<video id="player" controls muted style="width:100%;height: 294px; background: #555;"></video>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
 | 
					        <div id="recBar">
 | 
				
			||||||
 | 
					            <div class="row">
 | 
				
			||||||
 | 
					                <div class="col-sm-4 text-right" style="line-height: 34px;">
 | 
				
			||||||
 | 
					                    <strong id="time">[--:--]</strong>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="col-sm-4 text-center">
 | 
				
			||||||
 | 
					                    <button type="button" id="start" class="btn btn-warning">
 | 
				
			||||||
 | 
					                        <i class="fa fa-video-camera"></i>
 | 
				
			||||||
 | 
					                        <cn>推流</cn>
 | 
				
			||||||
 | 
					                        <en>Push</en>
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <button type="button" id="stop" class="btn btn-default disabled ">
 | 
				
			||||||
 | 
					                        <i class="fa fa-stop"></i>
 | 
				
			||||||
 | 
					                        <cn>停止</cn>
 | 
				
			||||||
 | 
					                        <en>Stop</en>
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<div class="col-md-6">
 | 
						<div class="col-md-6">
 | 
				
			||||||
		<div class="panel panel-default" style="margin-bottom: 16px;">
 | 
							<div class="panel panel-default" style="margin-bottom: 16px;">
 | 
				
			||||||
| 
						 | 
					@ -50,12 +88,81 @@ include( "head.php" );
 | 
				
			||||||
                            </select>
 | 
					                            </select>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <hr style="margin-top:10px; margin-bottom: 10px;"/>
 | 
				
			||||||
                    <div class="form-group">
 | 
					                    <div class="form-group">
 | 
				
			||||||
						<label class="col-md-3 col-sm-4 control-label"><cn>自动运行</cn><en>Autorun</en></label>
 | 
					                        <label class="col-sm-3 control-label">
 | 
				
			||||||
						<div class="col-md-6 col-sm-8">
 | 
					                            <cn>定时开启</cn>
 | 
				
			||||||
							<input zcfg="autorun" type="checkbox" class="switch form-control">
 | 
					                            <en>start time</en>
 | 
				
			||||||
 | 
					                        </label>
 | 
				
			||||||
 | 
					                        <div class="col-sm-3">
 | 
				
			||||||
 | 
					                            <select id="start_push_day" class="selectpicker form-control">
 | 
				
			||||||
 | 
					                                <option cn="从不" en="never" value="x"></option>
 | 
				
			||||||
 | 
					                                <option cn="每天" en="everyday" value="*"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周一" en="monday" value="1"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周二" en="tuesday" value="2"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周三" en="wednesday" value="3"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周四" en="thursday" value="4"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周五" en="friday" value="5"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周六" en="saturday" value="6"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周日" en="sunday" value="0"></option>
 | 
				
			||||||
 | 
					                            </select>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="col-sm-3">
 | 
				
			||||||
 | 
					                            <div class="input-group bootstrap-timepicker timepicker">
 | 
				
			||||||
 | 
					                                <input id="start_push_time" type="text" class="form-control input-small">
 | 
				
			||||||
 | 
					                                <span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="form-group">
 | 
				
			||||||
 | 
					                        <label class="col-sm-3 control-label">
 | 
				
			||||||
 | 
					                            <cn>定时结束</cn>
 | 
				
			||||||
 | 
					                            <en>start time</en>
 | 
				
			||||||
 | 
					                        </label>
 | 
				
			||||||
 | 
					                        <div class="col-sm-3">
 | 
				
			||||||
 | 
					                            <select id="stop_push_day" class="selectpicker form-control">
 | 
				
			||||||
 | 
					                                <option cn="从不" en="never" value="x"></option>
 | 
				
			||||||
 | 
					                                <option cn="每天" en="everyday" value="*"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周一" en="monday" value="1"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周二" en="tuesday" value="2"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周三" en="wednesday" value="3"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周四" en="thursday" value="4"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周五" en="friday" value="5"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周六" en="saturday" value="6"></option>
 | 
				
			||||||
 | 
					                                <option cn="每周日" en="sunday" value="0"></option>
 | 
				
			||||||
 | 
					                            </select>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="col-sm-3">
 | 
				
			||||||
 | 
					                            <div class="input-group bootstrap-timepicker timepicker">
 | 
				
			||||||
 | 
					                                <input id="stop_push_time" type="text" class="form-control input-small">
 | 
				
			||||||
 | 
					                                <span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="hr-container">
 | 
				
			||||||
 | 
					                        <hr style="margin-top:10px; margin-bottom: 15px;">
 | 
				
			||||||
 | 
					                        <span class="hr-text">OR</span>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="form-group">
 | 
				
			||||||
 | 
					                        <label class="col-sm-3 control-label">
 | 
				
			||||||
 | 
					                            <cn>开机启动</cn>
 | 
				
			||||||
 | 
					                            <en>auto push</en>
 | 
				
			||||||
 | 
					                        </label>
 | 
				
			||||||
 | 
					                        <div class="col-sm-6">
 | 
				
			||||||
 | 
					                            <select name="day" class="selectpicker form-control" zcfg="autorun">
 | 
				
			||||||
 | 
					                                <option cn="关闭" en="OFF" value="false"></option>
 | 
				
			||||||
 | 
					                                <option cn="开启" en="ON" value="true"></option>
 | 
				
			||||||
 | 
					                            </select>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!--                    <div class="form-group">-->
 | 
				
			||||||
 | 
					<!--                        <label class="col-md-3 col-sm-4 control-label"><cn>自动运行</cn><en>Autorun</en></label>-->
 | 
				
			||||||
 | 
					<!--                        <div class="col-md-6 col-sm-8">-->
 | 
				
			||||||
 | 
					<!--                            <input zcfg="autorun" type="checkbox" class="switch form-control">-->
 | 
				
			||||||
 | 
					<!--                        </div>-->
 | 
				
			||||||
 | 
					<!--                    </div>-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					<hr style="margin-top:10px; margin-bottom: 10px;"/>
 | 
										<hr style="margin-top:10px; margin-bottom: 10px;"/>
 | 
				
			||||||
					<div class="form-group">
 | 
										<div class="form-group">
 | 
				
			||||||
						<div class="text-center">
 | 
											<div class="text-center">
 | 
				
			||||||
| 
						 | 
					@ -68,26 +175,6 @@ include( "head.php" );
 | 
				
			||||||
				</form>
 | 
									</form>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
		<div id="recBar">
 | 
					 | 
				
			||||||
			<div class="row">
 | 
					 | 
				
			||||||
				<div class="col-sm-4 text-right" style="line-height: 34px;">
 | 
					 | 
				
			||||||
					<strong id="time">[--:--]</strong>
 | 
					 | 
				
			||||||
				</div>
 | 
					 | 
				
			||||||
				<div class="col-sm-4 text-center">
 | 
					 | 
				
			||||||
					<button type="button" id="start" class="btn btn-warning">
 | 
					 | 
				
			||||||
						<i class="fa fa-video-camera"></i>
 | 
					 | 
				
			||||||
						<cn>推流</cn>
 | 
					 | 
				
			||||||
						<en>Push</en>
 | 
					 | 
				
			||||||
					</button>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					<button type="button" id="stop" class="btn btn-default disabled ">
 | 
					 | 
				
			||||||
						<i class="fa fa-stop"></i>
 | 
					 | 
				
			||||||
						<cn>停止</cn>
 | 
					 | 
				
			||||||
						<en>Stop</en>
 | 
					 | 
				
			||||||
					</button>
 | 
					 | 
				
			||||||
				</div>
 | 
					 | 
				
			||||||
			</div>
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -187,6 +274,7 @@ include( "head.php" );
 | 
				
			||||||
<script language="javascript" src="js/flv.js" ></script>
 | 
					<script language="javascript" src="js/flv.js" ></script>
 | 
				
			||||||
<script src="js/zcfg.js"></script>
 | 
					<script src="js/zcfg.js"></script>
 | 
				
			||||||
<script src="vendor/switch/bootstrap-switch.js"></script>
 | 
					<script src="vendor/switch/bootstrap-switch.js"></script>
 | 
				
			||||||
 | 
					<script src="vendor/timepicker/js/bootstrap-timepicker.min.js"></script>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$( function () {
 | 
						$( function () {
 | 
				
			||||||
| 
						 | 
					@ -197,6 +285,12 @@ include( "head.php" );
 | 
				
			||||||
		$.fn.bootstrapSwitch.defaults.onColor = 'warning';
 | 
							$.fn.bootstrapSwitch.defaults.onColor = 'warning';
 | 
				
			||||||
		$( "#addEnable" ).bootstrapSwitch();
 | 
							$( "#addEnable" ).bootstrapSwitch();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $("#start_push_time,#stop_push_time").timepicker({
 | 
				
			||||||
 | 
					            minuteStep: 1,
 | 
				
			||||||
 | 
					            defaultTime: "00:00",
 | 
				
			||||||
 | 
					            showMeridian: false
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var player=null;
 | 
							var player=null;
 | 
				
			||||||
		var playerLoad=false;
 | 
							var playerLoad=false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -239,6 +333,7 @@ include( "head.php" );
 | 
				
			||||||
		$.getJSON( "config/config.json", function ( res ) {
 | 
							$.getJSON( "config/config.json", function ( res ) {
 | 
				
			||||||
			cfg = res;
 | 
								cfg = res;
 | 
				
			||||||
			$.getJSON( "config/push.json", function ( result ) {
 | 
								$.getJSON( "config/push.json", function ( result ) {
 | 
				
			||||||
 | 
					                result.autorun += "";
 | 
				
			||||||
				config = result;
 | 
									config = result;
 | 
				
			||||||
                if(!config.hasOwnProperty("srcV_chn"))
 | 
					                if(!config.hasOwnProperty("srcV_chn"))
 | 
				
			||||||
                    config.srcV_chn = "main";
 | 
					                    config.srcV_chn = "main";
 | 
				
			||||||
| 
						 | 
					@ -266,6 +361,34 @@ include( "head.php" );
 | 
				
			||||||
			} );
 | 
								} );
 | 
				
			||||||
		} );
 | 
							} );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        func("getPushCron",[],function (res){
 | 
				
			||||||
 | 
					            var start = res.result.start;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var lst1 = [];
 | 
				
			||||||
 | 
					            if(start != null)
 | 
				
			||||||
 | 
					                lst1 = start.split( " " )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if ( lst1.length != 8 ) {
 | 
				
			||||||
 | 
					                $( '#start_push_time' ).val( '00:00' );
 | 
				
			||||||
 | 
					                $( '#start_push_day' ).val( 'x' );
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                $( '#start_push_time' ).val( lst1[1]+":"+lst1[0]);
 | 
				
			||||||
 | 
					                $( '#start_push_day' ).val( lst1[4] );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var stop = res.result.stop;
 | 
				
			||||||
 | 
					            var lst2 = [];
 | 
				
			||||||
 | 
					            if(stop != null)
 | 
				
			||||||
 | 
					                lst2 = stop.split( " " );
 | 
				
			||||||
 | 
					            if ( lst2.length != 8 ) {
 | 
				
			||||||
 | 
					                $( '#stop_push_time' ).val( '00:00' );
 | 
				
			||||||
 | 
					                $( '#stop_push_day' ).val( 'x' );
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                $( '#stop_push_time' ).val( lst2[1]+":"+lst2[0]);
 | 
				
			||||||
 | 
					                $( '#stop_push_day' ).val( lst2[4] );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $("#srcV").change(function (){
 | 
					        $("#srcV").change(function (){
 | 
				
			||||||
            var chnId = $(this).val();
 | 
					            var chnId = $(this).val();
 | 
				
			||||||
            var lang = $.cookie("lang");
 | 
					            var lang = $.cookie("lang");
 | 
				
			||||||
| 
						 | 
					@ -410,11 +533,30 @@ include( "head.php" );
 | 
				
			||||||
                htmlAlert( "#alert", "danger", "<cn>保存设置失败,辅码流未开启</cn><en>Save config failed, sub stream is not enabled</en>!", "", 2000 );
 | 
					                htmlAlert( "#alert", "danger", "<cn>保存设置失败,辅码流未开启</cn><en>Save config failed, sub stream is not enabled</en>!", "", 2000 );
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			rpc( "push.update", [ JSON.stringify( config, null, 2 ) ], function ( res ) {
 | 
								rpc( "push.update", [ JSON.stringify( config, null, 2 ) ], function ( res ) {
 | 
				
			||||||
				if ( typeof ( res.error ) != "undefined" ) {
 | 
									if ( typeof ( res.error ) != "undefined" ) {
 | 
				
			||||||
					htmlAlert( "#alert", "danger", "<cn>保存设置失败</cn><en>Save config failed</en>!", "", 2000 );
 | 
										htmlAlert( "#alert", "danger", "<cn>保存设置失败</cn><en>Save config failed</en>!", "", 2000 );
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    var data = {
 | 
				
			||||||
 | 
					                        start:{
 | 
				
			||||||
 | 
					                            day:$("#start_push_day").val(),
 | 
				
			||||||
 | 
					                            time:$("#start_push_time").val()
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        stop:{
 | 
				
			||||||
 | 
					                            day:$("#stop_push_day").val(),
 | 
				
			||||||
 | 
					                            time:$("#stop_push_time").val()
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    func("setPushCron",data,function (res){
 | 
				
			||||||
 | 
					                        if ( res.result == "OK" ) {
 | 
				
			||||||
                            htmlAlert( "#alert", "success", "<cn>保存设置成功</cn><en>Save config success</en>!", "", 2000 );
 | 
					                            htmlAlert( "#alert", "success", "<cn>保存设置成功</cn><en>Save config success</en>!", "", 2000 );
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            htmlAlert( "#alert", "danger", "<cn>保存设置失败</cn><en>Save config failed</en>!", "", 2000 );
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			} );
 | 
								} );
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -361,9 +361,9 @@ include( "head.php" );
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                config["used"] = false;
 | 
					                config["used"] = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        func("saveConfigFile",{path: "/config/oled/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
					        func("saveConfigFile",{path: "/config/misc/remote/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
				
			||||||
            if(res["result"] === "OK"){
 | 
					            if(res["result"] === "OK"){
 | 
				
			||||||
                rpc4("remote.updateConfig", [], function (data) {
 | 
					                rpc6("remote.updateConfig", [], function (data) {
 | 
				
			||||||
                    initFeatures();
 | 
					                    initFeatures();
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -381,9 +381,9 @@ include( "head.php" );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $("#saveProject").click(function () {
 | 
					    $("#saveProject").click(function () {
 | 
				
			||||||
        func("saveConfigFile",{path: "/config/oled/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
					        func("saveConfigFile",{path: "/config/misc/remote/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
				
			||||||
            if(res["result"] === "OK"){
 | 
					            if(res["result"] === "OK"){
 | 
				
			||||||
                rpc4("remote.updateConfig", [], function (data) {
 | 
					                rpc6("remote.updateConfig", [], function (data) {
 | 
				
			||||||
                    htmlAlert("#alert", "success", "<cn>保存成功!</cn><en>Save success!</en>", "", 3000);
 | 
					                    htmlAlert("#alert", "success", "<cn>保存成功!</cn><en>Save success!</en>", "", 3000);
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -393,7 +393,7 @@ include( "head.php" );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$( function () {
 | 
						$( function () {
 | 
				
			||||||
		navIndex( 4 );
 | 
							navIndex( 4 );
 | 
				
			||||||
        $.ajax({url:"/config/oled/remods.json",success:function(data){
 | 
					        $.ajax({url:"/config/misc/remote/remods.json",success:function(data){
 | 
				
			||||||
                features = data;
 | 
					                features = data;
 | 
				
			||||||
                var mods3 = new Array();
 | 
					                var mods3 = new Array();
 | 
				
			||||||
                var func = new Array();
 | 
					                var func = new Array();
 | 
				
			||||||
| 
						 | 
					@ -426,7 +426,7 @@ include( "head.php" );
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }})
 | 
					                    }})
 | 
				
			||||||
                $.ajax({url:"/config/oled/remfea.json",success:function(data){
 | 
					                $.ajax({url:"/config/misc/remote/remfea.json",success:function(data){
 | 
				
			||||||
                        feaArray = data;
 | 
					                        feaArray = data;
 | 
				
			||||||
                        initFeatures();
 | 
					                        initFeatures();
 | 
				
			||||||
                        for(var i=0;i<feaArray.length;i++){
 | 
					                        for(var i=0;i<feaArray.length;i++){
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -514,7 +514,7 @@ include( "head.php" );
 | 
				
			||||||
            btnArray[i].btnNameCN = "按键"+(i+1);
 | 
					            btnArray[i].btnNameCN = "按键"+(i+1);
 | 
				
			||||||
            btnArray[i].btnNameEN = "Button"+(i+1);
 | 
					            btnArray[i].btnNameEN = "Button"+(i+1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        func("saveConfigFile",{path: "/config/oled/remote.json",data: JSON.stringify(btnArray,null,2)},function (res) {
 | 
					        func("saveConfigFile",{path: "/config/misc/remote/remote.json",data: JSON.stringify(btnArray,null,2)},function (res) {
 | 
				
			||||||
            if(res["result"] === "OK"){
 | 
					            if(res["result"] === "OK"){
 | 
				
			||||||
                initRemoteBtns();
 | 
					                initRemoteBtns();
 | 
				
			||||||
                $('#infoModal').modal("hide");
 | 
					                $('#infoModal').modal("hide");
 | 
				
			||||||
| 
						 | 
					@ -522,7 +522,7 @@ include( "head.php" );
 | 
				
			||||||
                    var config = feaArray[i];
 | 
					                    var config = feaArray[i];
 | 
				
			||||||
                    config["btns"].splice(index,1);
 | 
					                    config["btns"].splice(index,1);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                func("saveConfigFile",{path: "/config/oled/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
					                func("saveConfigFile",{path: "/config/misc/remote/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
				
			||||||
                    if(res["result"] === "OK")
 | 
					                    if(res["result"] === "OK")
 | 
				
			||||||
                        initFeatures();
 | 
					                        initFeatures();
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
| 
						 | 
					@ -539,7 +539,7 @@ include( "head.php" );
 | 
				
			||||||
            icon:iconSelect,
 | 
					            icon:iconSelect,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        btnArray.push(obj);
 | 
					        btnArray.push(obj);
 | 
				
			||||||
        func("saveConfigFile",{path: "/config/oled/remote.json",data: JSON.stringify(btnArray,null,2)},function (res) {
 | 
					        func("saveConfigFile",{path: "/config/misc/remote/remote.json",data: JSON.stringify(btnArray,null,2)},function (res) {
 | 
				
			||||||
            if(res["result"] === "OK"){
 | 
					            if(res["result"] === "OK"){
 | 
				
			||||||
                initRemoteBtns();
 | 
					                initRemoteBtns();
 | 
				
			||||||
                $('#myModal').modal("hide");
 | 
					                $('#myModal').modal("hide");
 | 
				
			||||||
| 
						 | 
					@ -555,7 +555,7 @@ include( "head.php" );
 | 
				
			||||||
                    var config = feaArray[i];
 | 
					                    var config = feaArray[i];
 | 
				
			||||||
                    config["btns"].push(feaObj);
 | 
					                    config["btns"].push(feaObj);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                func("saveConfigFile",{path: "/config/oled/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
					                func("saveConfigFile",{path: "/config/misc/remote/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
				
			||||||
                    if(res["result"] === "OK")
 | 
					                    if(res["result"] === "OK")
 | 
				
			||||||
                        initFeatures();
 | 
					                        initFeatures();
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
| 
						 | 
					@ -586,9 +586,9 @@ include( "head.php" );
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                config["used"] = false;
 | 
					                config["used"] = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        func("saveConfigFile",{path: "/config/oled/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
					        func("saveConfigFile",{path: "/config/misc/remote/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
				
			||||||
            if(res["result"] === "OK"){
 | 
					            if(res["result"] === "OK"){
 | 
				
			||||||
                rpc4("remote.updateConfig", [], function (data) {
 | 
					                rpc6("remote.updateConfig", [], function (data) {
 | 
				
			||||||
                    initFeatures();
 | 
					                    initFeatures();
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -606,9 +606,9 @@ include( "head.php" );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $("#saveProject").click(function () {
 | 
					    $("#saveProject").click(function () {
 | 
				
			||||||
        func("saveConfigFile",{path: "/config/oled/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
					        func("saveConfigFile",{path: "/config/misc/remote/remfea.json",data: JSON.stringify(feaArray,null,2)},function (res) {
 | 
				
			||||||
            if(res["result"] === "OK"){
 | 
					            if(res["result"] === "OK"){
 | 
				
			||||||
                rpc4("remote.updateConfig", [], function (data) {
 | 
					                rpc6("remote.updateConfig", [], function (data) {
 | 
				
			||||||
                    htmlAlert("#alert", "success", "<cn>保存成功!</cn><en>Save success!</en>", "", 3000);
 | 
					                    htmlAlert("#alert", "success", "<cn>保存成功!</cn><en>Save success!</en>", "", 3000);
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -648,10 +648,10 @@ include( "head.php" );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$( function () {
 | 
						$( function () {
 | 
				
			||||||
		navIndex( 4 );
 | 
							navIndex( 4 );
 | 
				
			||||||
        $.ajax({url:"/config/oled/remote.json",success:function(data){
 | 
					        $.ajax({url:"/config/misc/remote/remote.json",success:function(data){
 | 
				
			||||||
                btnArray = data;
 | 
					                btnArray = data;
 | 
				
			||||||
                initRemoteBtns();
 | 
					                initRemoteBtns();
 | 
				
			||||||
                $.ajax({url:"/config/oled/remods.json",success:function(data){
 | 
					                $.ajax({url:"/config/misc/remote/remods.json",success:function(data){
 | 
				
			||||||
                        features = data;
 | 
					                        features = data;
 | 
				
			||||||
                        var mods3 = new Array();
 | 
					                        var mods3 = new Array();
 | 
				
			||||||
                        var func = new Array();
 | 
					                        var func = new Array();
 | 
				
			||||||
| 
						 | 
					@ -685,7 +685,7 @@ include( "head.php" );
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }})
 | 
					                        }})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        $.ajax({url:"/config/oled/remfea.json",success:function(data){
 | 
					                        $.ajax({url:"/config/misc/remote/remfea.json",success:function(data){
 | 
				
			||||||
                                feaArray = data;
 | 
					                                feaArray = data;
 | 
				
			||||||
                                initFeatures();
 | 
					                                initFeatures();
 | 
				
			||||||
                                for(var i=0;i<feaArray.length;i++){
 | 
					                                for(var i=0;i<feaArray.length;i++){
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
<?php
 | 
					<?php
 | 
				
			||||||
include( "head.php" );
 | 
					include( "head.php" );
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 | 
					<div id="alert"></div>
 | 
				
			||||||
<div class="row" id="effect">
 | 
					<div class="row" id="effect">
 | 
				
			||||||
	<div class="col-md-7">
 | 
						<div class="col-md-7">
 | 
				
			||||||
		<div class="thumbnail" style="position: relative;">
 | 
							<div class="thumbnail" style="position: relative;">
 | 
				
			||||||
| 
						 | 
					@ -231,10 +232,12 @@ include( "head.php" );
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function save() {
 | 
						function save() {
 | 
				
			||||||
		rpc( "enc.update", [ JSON.stringify( config, null, 2 ) ], function ( data ) {
 | 
							rpc( "enc.updateRoi", [ JSON.stringify( roiList, null, 2 ) ], function ( data ) {
 | 
				
			||||||
			if ( typeof ( data.error ) != "undefined" ) {
 | 
								if ( !data ) {
 | 
				
			||||||
				htmlAlert( "#alert", "danger", "<cn>保存设置失败!</cn><en>Save config failed!</en>", "", 2000 );
 | 
									htmlAlert( "#alert", "danger", "<cn>保存设置失败!</cn><en>Save config failed!</en>", "", 2000 );
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					            htmlAlert( "#alert", "success", "<cn>保存设置成功!</cn><en>Save config success!</en>", "", 2000 );
 | 
				
			||||||
		} );
 | 
							} );
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ include( "head.php" );
 | 
				
			||||||
				</h3>
 | 
									</h3>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
			<div class="panel-body">
 | 
								<div class="panel-body">
 | 
				
			||||||
						<form class="form-horizontal" id="trans" role="form">
 | 
											<form class="form-horizontal" id="mqtt" role="form">
 | 
				
			||||||
							<div class="form-group">
 | 
												<div class="form-group">
 | 
				
			||||||
								<label class="col-sm-2 control-label">
 | 
													<label class="col-sm-2 control-label">
 | 
				
			||||||
									<cn>启用</cn>
 | 
														<cn>启用</cn>
 | 
				
			||||||
| 
						 | 
					@ -24,25 +24,27 @@ include( "head.php" );
 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
							<div class="form-group">
 | 
												<div class="form-group">
 | 
				
			||||||
								<label class="col-sm-2 control-label">
 | 
													<label class="col-sm-2 control-label">
 | 
				
			||||||
									<cn>设备名</cn>
 | 
														<cn>连接状态</cn>
 | 
				
			||||||
									<en>Device name</en>
 | 
														<en>Connect</en>
 | 
				
			||||||
								</label>
 | 
													</label>
 | 
				
			||||||
								<div class="col-sm-6">
 | 
													<div class="col-sm-6  control-label" style="text-align: left;" id="connect">
 | 
				
			||||||
									<input zcfg="Name" type="text" class="form-control">
 | 
					 | 
				
			||||||
								</div>
 | 
													</div>
 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
							<div class="form-group">
 | 
												<div class="form-group">
 | 
				
			||||||
								<label class="col-sm-2 control-label">
 | 
													<label class="col-sm-2 control-label">
 | 
				
			||||||
									<cn>绑定码</cn>
 | 
														<cn>设备名</cn>
 | 
				
			||||||
									<en>Bind code</en>
 | 
														<en>Device name</en>
 | 
				
			||||||
								</label>
 | 
													</label>
 | 
				
			||||||
								<div class="col-sm-6">
 | 
													<div class="col-sm-6">
 | 
				
			||||||
									<input zcfg="DevBind" type="text" class="form-control">
 | 
														<input zcfg="name" type="text" class="form-control">
 | 
				
			||||||
								</div>
 | 
													</div>
 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
							<hr>
 | 
												<hr>
 | 
				
			||||||
							<div class="form-group">
 | 
												<div class="text-center">
 | 
				
			||||||
								<button type="button" id="save" class=" save btn btn-warning col-sm-6 col-sm-offset-3">
 | 
													<button type="button" id="bind" class="btn btn-warning " style="margin-right:20px;">
 | 
				
			||||||
 | 
														<cn>扫码绑定</cn><en>Bind</en>
 | 
				
			||||||
 | 
													</button>
 | 
				
			||||||
 | 
													<button type="button" id="save" class=" save btn btn-warning">
 | 
				
			||||||
									<cn>保存</cn><en>Save</en>
 | 
														<cn>保存</cn><en>Save</en>
 | 
				
			||||||
								</button>
 | 
													</button>
 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
| 
						 | 
					@ -135,21 +137,51 @@ include( "head.php" );
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="modal fade" id="bindModal" tabindex="-1" role="dialog">
 | 
				
			||||||
 | 
						<div class="modal-dialog" role="document">
 | 
				
			||||||
 | 
							<div class="modal-content">
 | 
				
			||||||
 | 
								<div class="modal-header">
 | 
				
			||||||
 | 
									<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
 | 
				
			||||||
 | 
									<h4 class="modal-title">
 | 
				
			||||||
 | 
										<cn>扫一扫绑定设备</cn>
 | 
				
			||||||
 | 
										<en>Scan qrcode</en>
 | 
				
			||||||
 | 
									</h4>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
								<div class="modal-body">
 | 
				
			||||||
 | 
									<div id="qrcode" class="text-center"></div>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
								<div class="modal-footer">
 | 
				
			||||||
 | 
									<button type="button" class="btn btn-default" data-dismiss="modal">
 | 
				
			||||||
 | 
										<cn>关闭</cn>
 | 
				
			||||||
 | 
										<en>Close</en>
 | 
				
			||||||
 | 
									</button>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script src="vendor/switch/bootstrap-switch.min.js"></script>
 | 
					<script src="vendor/switch/bootstrap-switch.min.js"></script>
 | 
				
			||||||
<script src="js/zcfg.js"></script>
 | 
					<script src="js/zcfg.js"></script>
 | 
				
			||||||
 | 
					<script src="js/qrcode.js"></script>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
	$( function () {
 | 
						$( function () {
 | 
				
			||||||
		navIndex( 5 );
 | 
							navIndex( 5 );
 | 
				
			||||||
		$.fn.bootstrapSwitch.defaults.onColor = 'warning';
 | 
							$.fn.bootstrapSwitch.defaults.onColor = 'warning';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var transCfg;
 | 
							var mqttCfg;
 | 
				
			||||||
		$.getJSON( "config/trans.json", function ( result ) {
 | 
							function initMqtt(){
 | 
				
			||||||
			transCfg = result;
 | 
								$.getJSON( "config/misc/mqtt.json", function ( result ) {
 | 
				
			||||||
			zcfg( "#trans", transCfg );
 | 
								mqttCfg = result;
 | 
				
			||||||
 | 
								zcfg( "#mqtt", mqttCfg );
 | 
				
			||||||
		} );
 | 
							} );
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							initMqtt();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//$( '#bindModal' ).modal( 'show' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$( "#save" ).click( function ( e ) {
 | 
							$( "#save" ).click( function ( e ) {
 | 
				
			||||||
			rpc( "enc.setTrans", [ JSON.stringify( transCfg, null, 2 ) ], function ( data ) {
 | 
								rpc4( "mqtt.update", [ mqttCfg ], function ( data ) {
 | 
				
			||||||
				if ( typeof ( data.error ) != "undefined" ) {
 | 
									if ( typeof ( data.error ) != "undefined" ) {
 | 
				
			||||||
					htmlAlert( "#alert", "danger", "<cn>保存设置失败!</cn><en>Save config failed!</en>", "", 2000 );
 | 
										htmlAlert( "#alert", "danger", "<cn>保存设置失败!</cn><en>Save config failed!</en>", "", 2000 );
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
| 
						 | 
					@ -158,6 +190,46 @@ include( "head.php" );
 | 
				
			||||||
			} );
 | 
								} );
 | 
				
			||||||
		} );
 | 
							} );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							function getMqttState(){
 | 
				
			||||||
 | 
								rpc4( "mqtt.getMqttState", null, function ( data ) {
 | 
				
			||||||
 | 
									if(data.connected)
 | 
				
			||||||
 | 
										$("#connect").html('<cn>已连接</cn><en>connected</en>');
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										$("#connect").html('<cn>未连接</cn><en>not connected</en>');
 | 
				
			||||||
 | 
								} );
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							getMqttState();
 | 
				
			||||||
 | 
							setInterval(getMqttState,2000);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							function checkBind(){
 | 
				
			||||||
 | 
								rpc4( "mqtt.bindOK", null, function ( data ) {
 | 
				
			||||||
 | 
									if(data)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										$( '#bindModal' ).modal( 'hide' );
 | 
				
			||||||
 | 
										initMqtt();
 | 
				
			||||||
 | 
									}					
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										setTimeout(() => {
 | 
				
			||||||
 | 
											checkBind();
 | 
				
			||||||
 | 
										}, 500);
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							$( "#bind" ).click( function ( e ) {
 | 
				
			||||||
 | 
								rpc4( "mqtt.startBind", null, function ( data ) {
 | 
				
			||||||
 | 
									console.log(data);
 | 
				
			||||||
 | 
									$("#qrcode").html("");
 | 
				
			||||||
 | 
									new QRCode(document.getElementById("qrcode"), data);
 | 
				
			||||||
 | 
									$( '#bindModal' ).modal( 'show' );
 | 
				
			||||||
 | 
									checkBind();
 | 
				
			||||||
 | 
								} );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							} );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*		$.ajax( {
 | 
					/*		$.ajax( {
 | 
				
			||||||
			url: "config/rproxy/ngrok_enable",
 | 
								url: "config/rproxy/ngrok_enable",
 | 
				
			||||||
			success: function ( data ) {
 | 
								success: function ( data ) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -894,7 +894,7 @@ else
 | 
				
			||||||
			else if(list[1]!=list[0])
 | 
								else if(list[1]!=list[0])
 | 
				
			||||||
				return ":"+list[1];
 | 
									return ":"+list[1];
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				return "";
 | 
									return list[0];
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		function transURL(str)
 | 
							function transURL(str)
 | 
				
			||||||
| 
						 | 
					@ -918,19 +918,19 @@ else
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					else{
 | 
										else{
 | 
				
			||||||
						var port=getport(portCfg.http);
 | 
											var port=getport(portCfg.http);
 | 
				
			||||||
						url=url.replace("///","//"+ip+port+"/");	
 | 
											url=url.replace("///","//"+ip+":"+port+"/");
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else if(url.indexOf("rtmp")==0){
 | 
									else if(url.indexOf("rtmp")==0){
 | 
				
			||||||
					var port=getport(portCfg.rtmp);
 | 
										var port=getport(portCfg.rtmp);
 | 
				
			||||||
					url=url.replace("///","//"+ip+port+"/");	
 | 
										url=url.replace("///","//"+ip+":"+port+"/");
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else if(url.indexOf("rtsp")==0){
 | 
									else if(url.indexOf("rtsp")==0){
 | 
				
			||||||
                    var port=getport(portCfg.rtsp);
 | 
					                    var port=getport(portCfg.rtsp);
 | 
				
			||||||
				    if(url.indexOf("@/") > 0)
 | 
									    if(url.indexOf("@/") > 0)
 | 
				
			||||||
                        url=url.replace("@/","@"+ip+port+"/");
 | 
					                        url=url.replace("@/","@"+ip+":"+port+"/");
 | 
				
			||||||
				    else
 | 
									    else
 | 
				
			||||||
                        url=url.replace("///","//"+ip+port+"/");
 | 
					                        url=url.replace("///","//"+ip+":"+port+"/");
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else if(url.indexOf("srt")==0){
 | 
									else if(url.indexOf("srt")==0){
 | 
				
			||||||
					url=url.replace("//:","//"+ip+":");
 | 
										url=url.replace("//:","//"+ip+":");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,7 @@ if(file_exists('theme/theme-'.$theme.'.css')){?>
 | 
				
			||||||
<?php }?>
 | 
					<?php }?>
 | 
				
			||||||
<?php
 | 
					<?php
 | 
				
			||||||
//echo '<pre>';
 | 
					//echo '<pre>';
 | 
				
			||||||
$page = substr($_SERVER['PHP_SELF'],strpos('/')+1);
 | 
					$page = substr($_SERVER['PHP_SELF'],strpos($_SERVER['PHP_SELF'],'/')+1);
 | 
				
			||||||
$page = rtrim($page,'.php');
 | 
					$page = rtrim($page,'.php');
 | 
				
			||||||
//echo $page;
 | 
					//echo $page;
 | 
				
			||||||
switch ($page) {
 | 
					switch ($page) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,7 +158,7 @@ if($hardware["function"]["button"])
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		$( "#saveBtn" ).click( function (){
 | 
							$( "#saveBtn" ).click( function (){
 | 
				
			||||||
			rpc4( "oled.update", [ JSON.stringify( button, null, 2 ) ], function ( res ) {
 | 
								rpc6( "gpio.update", [ JSON.stringify( button, null, 2 ) ], function ( res ) {
 | 
				
			||||||
				if ( typeof ( res.error ) != "undefined" ) {
 | 
									if ( typeof ( res.error ) != "undefined" ) {
 | 
				
			||||||
					htmlAlert( "#alert", "danger", "<cn>保存设置失败</cn><en>Save config failed</en>!", "", 2000 );
 | 
										htmlAlert( "#alert", "danger", "<cn>保存设置失败</cn><en>Save config failed</en>!", "", 2000 );
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,146 @@
 | 
				
			||||||
 | 
					/*!
 | 
				
			||||||
 | 
					 * Timepicker Component for Twitter Bootstrap
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright 2013 Joris de Wit
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * For the full copyright and license information, please view the LICENSE
 | 
				
			||||||
 | 
					 * file that was distributed with this source code.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					.bootstrap-timepicker {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu {
 | 
				
			||||||
 | 
					    left: auto;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before {
 | 
				
			||||||
 | 
					    left: auto;
 | 
				
			||||||
 | 
					    right: 12px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after {
 | 
				
			||||||
 | 
					    left: auto;
 | 
				
			||||||
 | 
					    right: 13px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker .input-group-addon {
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker .input-group-addon i {
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    width: 16px;
 | 
				
			||||||
 | 
					    height: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.dropdown-menu {
 | 
				
			||||||
 | 
					    padding: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.dropdown-menu.open {
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.dropdown-menu:before {
 | 
				
			||||||
 | 
					    border-bottom: 7px solid rgba(0, 0, 0, 0.2);
 | 
				
			||||||
 | 
					    border-left: 7px solid transparent;
 | 
				
			||||||
 | 
					    border-right: 7px solid transparent;
 | 
				
			||||||
 | 
					    content: "";
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.dropdown-menu:after {
 | 
				
			||||||
 | 
					    border-bottom: 6px solid #FFFFFF;
 | 
				
			||||||
 | 
					    border-left: 6px solid transparent;
 | 
				
			||||||
 | 
					    border-right: 6px solid transparent;
 | 
				
			||||||
 | 
					    content: "";
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.timepicker-orient-left:before {
 | 
				
			||||||
 | 
					    left: 6px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.timepicker-orient-left:after {
 | 
				
			||||||
 | 
					    left: 7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.timepicker-orient-right:before {
 | 
				
			||||||
 | 
					    right: 6px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.timepicker-orient-right:after {
 | 
				
			||||||
 | 
					    right: 7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.timepicker-orient-top:before {
 | 
				
			||||||
 | 
					    top: -7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.timepicker-orient-top:after {
 | 
				
			||||||
 | 
					    top: -6px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.timepicker-orient-bottom:before {
 | 
				
			||||||
 | 
					    bottom: -7px;
 | 
				
			||||||
 | 
					    border-bottom: 0;
 | 
				
			||||||
 | 
					    border-top: 7px solid #999;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget.timepicker-orient-bottom:after {
 | 
				
			||||||
 | 
					    bottom: -6px;
 | 
				
			||||||
 | 
					    border-bottom: 0;
 | 
				
			||||||
 | 
					    border-top: 6px solid #ffffff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget a.btn,
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget input {
 | 
				
			||||||
 | 
					    border-radius: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget table {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget table td {
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    height: 30px;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget table td:not(.separator) {
 | 
				
			||||||
 | 
					    min-width: 30px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget table td span {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget table td a {
 | 
				
			||||||
 | 
					    border: 1px transparent solid;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 8px 0;
 | 
				
			||||||
 | 
					    outline: 0;
 | 
				
			||||||
 | 
					    color: #333;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget table td a:hover {
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					    background-color: #eee;
 | 
				
			||||||
 | 
					    -webkit-border-radius: 4px;
 | 
				
			||||||
 | 
					    -moz-border-radius: 4px;
 | 
				
			||||||
 | 
					    border-radius: 4px;
 | 
				
			||||||
 | 
					    border-color: #ddd;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget table td a i {
 | 
				
			||||||
 | 
					    margin-top: 2px;
 | 
				
			||||||
 | 
					    font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget table td input {
 | 
				
			||||||
 | 
					    width: 25px;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bootstrap-timepicker-widget .modal-content {
 | 
				
			||||||
 | 
					    padding: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (min-width: 767px) {
 | 
				
			||||||
 | 
					    .bootstrap-timepicker-widget.modal {
 | 
				
			||||||
 | 
					        width: 200px;
 | 
				
			||||||
 | 
					        margin-left: -100px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media (max-width: 767px) {
 | 
				
			||||||
 | 
					    .bootstrap-timepicker {
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .bootstrap-timepicker .dropdown-menu {
 | 
				
			||||||
 | 
					        width: 100%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
types {
 | 
					types {
 | 
				
			||||||
 | 
					    text/inc				  inc;
 | 
				
			||||||
    text/html                             html htm shtml;
 | 
					    text/html                             html htm shtml;
 | 
				
			||||||
    text/css                              css;
 | 
					    text/css                              css;
 | 
				
			||||||
    text/xml                              xml;
 | 
					    text/xml                              xml;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,6 +111,8 @@ http {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        location / {
 | 
					        location / {
 | 
				
			||||||
            ssi on;
 | 
					            ssi on;
 | 
				
			||||||
 | 
						    ssi_silent_errors on;                                                 
 | 
				
			||||||
 | 
					            ssi_types text/inc;
 | 
				
			||||||
            root   /link/web;
 | 
					            root   /link/web;
 | 
				
			||||||
            index  dashboard.php;
 | 
					            index  dashboard.php;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -144,6 +146,11 @@ http {
 | 
				
			||||||
	    proxy_max_temp_file_size 0m;
 | 
						    proxy_max_temp_file_size 0m;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        location /RPC6 {
 | 
				
			||||||
 | 
					            proxy_pass      http://127.0.0.1:7020/RPC;
 | 
				
			||||||
 | 
					            proxy_max_temp_file_size 0m;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	location ~ /socket.io {   
 | 
						location ~ /socket.io {   
 | 
				
			||||||
	    proxy_pass http://127.0.0.1:7857;
 | 
						    proxy_pass http://127.0.0.1:7857;
 | 
				
			||||||
	    proxy_http_version 1.1;
 | 
						    proxy_http_version 1.1;
 | 
				
			||||||
| 
						 | 
					@ -162,6 +169,10 @@ http {
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        location /hls/ {
 | 
					        location /hls/ {
 | 
				
			||||||
            alias /tmp/hls/;
 | 
					            alias /tmp/hls/;
 | 
				
			||||||
 | 
						    add_header Cache-Control no-store;
 | 
				
			||||||
 | 
					            add_header Access-Control-Allow-Origin *;
 | 
				
			||||||
 | 
					            add_header Access-Control-Allow-Headers X-Requested-With,content-type;
 | 
				
			||||||
 | 
					            add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        location /config/ {
 | 
					        location /config/ {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					libQt5Qmqtt.so.1.0.2
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					libQt5Qmqtt.so.1.0.2
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					libQt5Qmqtt.so.1.0.2
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
		Loading…
	
		Reference in New Issue