Add [11_m644p_WIZNET_HTTPServer_FLASH_pages] prj
parent
8c5f9de17c
commit
4c8449a175
@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||
<cconfiguration id="de.innot.avreclipse.configuration.app.release.1296246863">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="de.innot.avreclipse.configuration.app.release.1296246863" moduleId="org.eclipse.cdt.core.settings" name="Release">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildArtefactType="de.innot.avreclipse.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=de.innot.avreclipse.buildArtefactType.app,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" description="" id="de.innot.avreclipse.configuration.app.release.1296246863" name="Release" parent="de.innot.avreclipse.configuration.app.release">
|
||||
<folderInfo id="de.innot.avreclipse.configuration.app.release.1296246863." name="/" resourcePath="">
|
||||
<toolChain id="de.innot.avreclipse.toolchain.winavr.app.release.1035343131" name="AVR-GCC Toolchain" superClass="de.innot.avreclipse.toolchain.winavr.app.release">
|
||||
<option id="de.innot.avreclipse.toolchain.options.toolchain.objcopy.flash.app.release.1677804441" name="Generate HEX file for Flash memory" superClass="de.innot.avreclipse.toolchain.options.toolchain.objcopy.flash.app.release"/>
|
||||
<option id="de.innot.avreclipse.toolchain.options.toolchain.objcopy.eeprom.app.release.1592051743" name="Generate HEX file for EEPROM" superClass="de.innot.avreclipse.toolchain.options.toolchain.objcopy.eeprom.app.release"/>
|
||||
<option id="de.innot.avreclipse.toolchain.options.toolchain.objdump.app.release.1122611394" name="Generate Extended Listing (Source + generated Assembler)" superClass="de.innot.avreclipse.toolchain.options.toolchain.objdump.app.release"/>
|
||||
<option id="de.innot.avreclipse.toolchain.options.toolchain.size.app.release.1318978007" name="Print Size" superClass="de.innot.avreclipse.toolchain.options.toolchain.size.app.release"/>
|
||||
<option id="de.innot.avreclipse.toolchain.options.toolchain.avrdude.app.release.330957466" name="AVRDude" superClass="de.innot.avreclipse.toolchain.options.toolchain.avrdude.app.release"/>
|
||||
<targetPlatform id="de.innot.avreclipse.targetplatform.winavr.app.release.1911832209" name="AVR Cross-Target" superClass="de.innot.avreclipse.targetplatform.winavr.app.release"/>
|
||||
<builder buildPath="${workspace_loc:/m1284p_blink}/Release" id="de.innot.avreclipse.target.builder.winavr.app.release.197425084" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="AVR GNU Make Builder" superClass="de.innot.avreclipse.target.builder.winavr.app.release"/>
|
||||
<tool id="de.innot.avreclipse.tool.assembler.winavr.app.release.1044776614" name="AVR Assembler" superClass="de.innot.avreclipse.tool.assembler.winavr.app.release">
|
||||
<option id="de.innot.avreclipse.assembler.option.debug.level.1934306003" name="Generate Debugging Info" superClass="de.innot.avreclipse.assembler.option.debug.level" value="de.innot.avreclipse.assembler.option.debug.level.none" valueType="enumerated"/>
|
||||
<inputType id="de.innot.avreclipse.tool.assembler.input.1445613337" superClass="de.innot.avreclipse.tool.assembler.input"/>
|
||||
</tool>
|
||||
<tool id="de.innot.avreclipse.tool.compiler.winavr.app.release.322918746" name="AVR Compiler" superClass="de.innot.avreclipse.tool.compiler.winavr.app.release">
|
||||
<option id="de.innot.avreclipse.compiler.option.debug.level.1395543931" name="Generate Debugging Info" superClass="de.innot.avreclipse.compiler.option.debug.level" value="de.innot.avreclipse.compiler.option.debug.level.none" valueType="enumerated"/>
|
||||
<option id="de.innot.avreclipse.compiler.option.optimize.553992918" name="Optimization Level" superClass="de.innot.avreclipse.compiler.option.optimize" value="de.innot.avreclipse.compiler.optimize.size" valueType="enumerated"/>
|
||||
<option id="de.innot.avreclipse.compiler.option.incpath.478254702" name="Include Paths (-I)" superClass="de.innot.avreclipse.compiler.option.incpath" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Internet/httpServer_avr}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Ethernet}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Ethernet/W5500}""/>
|
||||
</option>
|
||||
<inputType id="de.innot.avreclipse.compiler.winavr.input.167604838" name="C Source Files" superClass="de.innot.avreclipse.compiler.winavr.input"/>
|
||||
</tool>
|
||||
<tool id="de.innot.avreclipse.tool.cppcompiler.app.release.1282845851" name="AVR C++ Compiler" superClass="de.innot.avreclipse.tool.cppcompiler.app.release">
|
||||
<option id="de.innot.avreclipse.cppcompiler.option.debug.level.590178482" name="Generate Debugging Info" superClass="de.innot.avreclipse.cppcompiler.option.debug.level" value="de.innot.avreclipse.cppcompiler.option.debug.level.none" valueType="enumerated"/>
|
||||
<option id="de.innot.avreclipse.cppcompiler.option.optimize.1730181360" name="Optimization Level" superClass="de.innot.avreclipse.cppcompiler.option.optimize" value="de.innot.avreclipse.cppcompiler.optimize.size" valueType="enumerated"/>
|
||||
<inputType id="de.innot.avreclipse.cppcompiler.input.1110129299" superClass="de.innot.avreclipse.cppcompiler.input"/>
|
||||
</tool>
|
||||
<tool id="de.innot.avreclipse.tool.linker.winavr.app.release.910552277" name="AVR C Linker" superClass="de.innot.avreclipse.tool.linker.winavr.app.release"/>
|
||||
<tool id="de.innot.avreclipse.tool.cpplinker.app.release.704198725" name="AVR C++ Linker" superClass="de.innot.avreclipse.tool.cpplinker.app.release">
|
||||
<inputType id="de.innot.avreclipse.tool.cpplinker.input.1469628063" name="OBJ Files" superClass="de.innot.avreclipse.tool.cpplinker.input">
|
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||
</inputType>
|
||||
</tool>
|
||||
<tool id="de.innot.avreclipse.tool.archiver.winavr.base.249251196" name="AVR Archiver" superClass="de.innot.avreclipse.tool.archiver.winavr.base"/>
|
||||
<tool id="de.innot.avreclipse.tool.objdump.winavr.app.release.701513686" name="AVR Create Extended Listing" superClass="de.innot.avreclipse.tool.objdump.winavr.app.release"/>
|
||||
<tool id="de.innot.avreclipse.tool.objcopy.flash.winavr.app.release.1874041246" name="AVR Create Flash image" superClass="de.innot.avreclipse.tool.objcopy.flash.winavr.app.release"/>
|
||||
<tool id="de.innot.avreclipse.tool.objcopy.eeprom.winavr.app.release.1162490773" name="AVR Create EEPROM image" superClass="de.innot.avreclipse.tool.objcopy.eeprom.winavr.app.release"/>
|
||||
<tool id="de.innot.avreclipse.tool.size.winavr.app.release.1789876684" name="Print Size" superClass="de.innot.avreclipse.tool.size.winavr.app.release"/>
|
||||
<tool id="de.innot.avreclipse.tool.avrdude.app.release.602378631" name="AVRDude" superClass="de.innot.avreclipse.tool.avrdude.app.release"/>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
</cconfiguration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<project id="m1284p_blink.de.innot.avreclipse.project.winavr.elf_2.1.0.95248786" name="AVR Cross Target Application" projectType="de.innot.avreclipse.project.winavr.elf_2.1.0"/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||
<scannerConfigBuildInfo instanceId="de.innot.avreclipse.configuration.app.release.1296246863;de.innot.avreclipse.configuration.app.release.1296246863.;de.innot.avreclipse.tool.cppcompiler.app.release.1282845851;de.innot.avreclipse.cppcompiler.input.1110129299">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="de.innot.avreclipse.core.AVRGCCManagedMakePerProjectProfileCPP"/>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="de.innot.avreclipse.configuration.app.release.1296246863;de.innot.avreclipse.configuration.app.release.1296246863.;de.innot.avreclipse.tool.compiler.winavr.app.release.322918746;de.innot.avreclipse.compiler.winavr.input.167604838">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="de.innot.avreclipse.core.AVRGCCManagedMakePerProjectProfileC"/>
|
||||
</scannerConfigBuildInfo>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||
<storageModule moduleId="refreshScope"/>
|
||||
</cproject>
|
||||
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>11_m644p_WIZNET_HTTPServer_FLASH_pages</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||
<triggers>clean,full,incremental,</triggers>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||
<triggers>full,incremental,</triggers>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||
<nature>de.innot.avreclipse.core.avrnature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@ -0,0 +1,225 @@
|
||||
#include <stdio.h>
|
||||
#include "loopback.h"
|
||||
#include "socket.h"
|
||||
#include "wizchip_conf.h"
|
||||
|
||||
#if LOOPBACK_MODE == LOOPBACK_MAIN_NOBLCOK
|
||||
|
||||
int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port)
|
||||
{
|
||||
int32_t ret;
|
||||
uint16_t size = 0, sentsize=0;
|
||||
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
uint8_t destip[4];
|
||||
uint16_t destport;
|
||||
#endif
|
||||
|
||||
switch(getSn_SR(sn))
|
||||
{
|
||||
case SOCK_ESTABLISHED :
|
||||
if(getSn_IR(sn) & Sn_IR_CON)
|
||||
{
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
getSn_DIPR(sn, destip);
|
||||
destport = getSn_DPORT(sn);
|
||||
|
||||
printf("%d:Connected - %d.%d.%d.%d : %d\r\n",sn, destip[0], destip[1], destip[2], destip[3], destport);
|
||||
#endif
|
||||
setSn_IR(sn,Sn_IR_CON);
|
||||
}
|
||||
if((size = getSn_RX_RSR(sn)) > 0) // Don't need to check SOCKERR_BUSY because it doesn't not occur.
|
||||
{
|
||||
if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
|
||||
ret = recv(sn, buf, size);
|
||||
|
||||
if(ret <= 0) return ret; // check SOCKERR_BUSY & SOCKERR_XXX. For showing the occurrence of SOCKERR_BUSY.
|
||||
size = (uint16_t) ret;
|
||||
sentsize = 0;
|
||||
|
||||
while(size != sentsize)
|
||||
{
|
||||
ret = send(sn, buf+sentsize, size-sentsize);
|
||||
if(ret < 0)
|
||||
{
|
||||
close(sn);
|
||||
return ret;
|
||||
}
|
||||
sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SOCK_CLOSE_WAIT :
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
//printf("%d:CloseWait\r\n",sn);
|
||||
#endif
|
||||
if((ret = disconnect(sn)) != SOCK_OK) return ret;
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
printf("%d:Socket Closed\r\n", sn);
|
||||
#endif
|
||||
break;
|
||||
case SOCK_INIT :
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
printf("%d:Listen, TCP server loopback, port [%d]\r\n", sn, port);
|
||||
#endif
|
||||
if( (ret = listen(sn)) != SOCK_OK) return ret;
|
||||
break;
|
||||
case SOCK_CLOSED:
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
//printf("%d:TCP server loopback start\r\n",sn);
|
||||
#endif
|
||||
if((ret = socket(sn, Sn_MR_TCP, port, 0x00)) != sn) return ret;
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
//printf("%d:Socket opened\r\n",sn);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int32_t loopback_tcpc(uint8_t sn, uint8_t* buf, uint8_t* destip, uint16_t destport)
|
||||
{
|
||||
int32_t ret; // return value for SOCK_ERRORs
|
||||
uint16_t size = 0, sentsize=0;
|
||||
|
||||
// Destination (TCP Server) IP info (will be connected)
|
||||
// >> loopback_tcpc() function parameter
|
||||
// >> Ex)
|
||||
// uint8_t destip[4] = {192, 168, 0, 214};
|
||||
// uint16_t destport = 5000;
|
||||
|
||||
// Port number for TCP client (will be increased)
|
||||
static uint16_t any_port = 50000;
|
||||
|
||||
// Socket Status Transitions
|
||||
// Check the W5500 Socket n status register (Sn_SR, The 'Sn_SR' controlled by Sn_CR command or Packet send/recv status)
|
||||
switch(getSn_SR(sn))
|
||||
{
|
||||
case SOCK_ESTABLISHED :
|
||||
if(getSn_IR(sn) & Sn_IR_CON) // Socket n interrupt register mask; TCP CON interrupt = connection with peer is successful
|
||||
{
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
printf("%d:Connected to - %d.%d.%d.%d : %d\r\n",sn, destip[0], destip[1], destip[2], destip[3], destport);
|
||||
#endif
|
||||
setSn_IR(sn, Sn_IR_CON); // this interrupt should be write the bit cleared to '1'
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Data Transaction Parts; Handle the [data receive and send] process
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if((size = getSn_RX_RSR(sn)) > 0) // Sn_RX_RSR: Socket n Received Size Register, Receiving data length
|
||||
{
|
||||
if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE; // DATA_BUF_SIZE means user defined buffer size (array)
|
||||
ret = recv(sn, buf, size); // Data Receive process (H/W Rx socket buffer -> User's buffer)
|
||||
|
||||
if(ret <= 0) return ret; // If the received data length <= 0, receive failed and process end
|
||||
size = (uint16_t) ret;
|
||||
sentsize = 0;
|
||||
|
||||
// Data sentsize control
|
||||
while(size != sentsize)
|
||||
{
|
||||
ret = send(sn, buf+sentsize, size-sentsize); // Data send process (User's buffer -> Destination through H/W Tx socket buffer)
|
||||
if(ret < 0) // Send Error occurred (sent data length < 0)
|
||||
{
|
||||
close(sn); // socket close
|
||||
return ret;
|
||||
}
|
||||
sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
|
||||
}
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
break;
|
||||
|
||||
case SOCK_CLOSE_WAIT :
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
//printf("%d:CloseWait\r\n",sn);
|
||||
#endif
|
||||
if((ret=disconnect(sn)) != SOCK_OK) return ret;
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
printf("%d:Socket Closed\r\n", sn);
|
||||
#endif
|
||||
break;
|
||||
|
||||
case SOCK_INIT :
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
printf("%d:Try to connect to the %d.%d.%d.%d : %d\r\n", sn, destip[0], destip[1], destip[2], destip[3], destport);
|
||||
#endif
|
||||
if( (ret = connect(sn, destip, destport)) != SOCK_OK) return ret; // Try to TCP connect to the TCP server (destination)
|
||||
break;
|
||||
|
||||
case SOCK_CLOSED:
|
||||
close(sn);
|
||||
if((ret=socket(sn, Sn_MR_TCP, any_port++, 0x00)) != sn){
|
||||
if(any_port == 0xffff) any_port = 50000;
|
||||
return ret; // TCP socket open with 'any_port' port number
|
||||
}
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
//printf("%d:TCP client loopback start\r\n",sn);
|
||||
//printf("%d:Socket opened\r\n",sn);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t port)
|
||||
{
|
||||
int32_t ret;
|
||||
uint16_t size, sentsize;
|
||||
uint8_t destip[4];
|
||||
uint16_t destport;
|
||||
|
||||
switch(getSn_SR(sn))
|
||||
{
|
||||
case SOCK_UDP :
|
||||
if((size = getSn_RX_RSR(sn)) > 0)
|
||||
{
|
||||
if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
|
||||
ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport);
|
||||
if(ret <= 0)
|
||||
{
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
printf("%d: recvfrom error. %ld\r\n",sn,ret);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
size = (uint16_t) ret;
|
||||
sentsize = 0;
|
||||
while(sentsize != size)
|
||||
{
|
||||
ret = sendto(sn, buf+sentsize, size-sentsize, destip, destport);
|
||||
if(ret < 0)
|
||||
{
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
printf("%d: sendto error. %ld\r\n",sn,ret);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SOCK_CLOSED:
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
//printf("%d:UDP loopback start\r\n",sn);
|
||||
#endif
|
||||
if((ret = socket(sn, Sn_MR_UDP, port, 0x00)) != sn)
|
||||
return ret;
|
||||
#ifdef _LOOPBACK_DEBUG_
|
||||
printf("%d:Opened, UDP loopback, port [%d]\r\n", sn, port);
|
||||
#endif
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,38 @@
|
||||
#ifndef _LOOPBACK_H_
|
||||
#define _LOOPBACK_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/* Loopback test debug message printout enable */
|
||||
#define _LOOPBACK_DEBUG_
|
||||
|
||||
/* DATA_BUF_SIZE define for Loopback example */
|
||||
#ifndef DATA_BUF_SIZE
|
||||
#define DATA_BUF_SIZE 2048
|
||||
#endif
|
||||
|
||||
/************************/
|
||||
/* Select LOOPBACK_MODE */
|
||||
/************************/
|
||||
#define LOOPBACK_MAIN_NOBLOCK 0
|
||||
#define LOOPBACK_MODE LOOPBACK_MAIN_NOBLOCK
|
||||
|
||||
|
||||
/* TCP server Loopback test example */
|
||||
int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port);
|
||||
|
||||
/* TCP client Loopback test example */
|
||||
int32_t loopback_tcpc(uint8_t sn, uint8_t* buf, uint8_t* destip, uint16_t destport);
|
||||
|
||||
/* UDP Loopback test example */
|
||||
int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t port);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* webpages.h
|
||||
*
|
||||
* Created on: 05 äåê. 2018 ã.
|
||||
* Author: maxx
|
||||
*/
|
||||
|
||||
#ifndef WEBPAGES_H_
|
||||
#define WEBPAGES_H_
|
||||
|
||||
#define index_page \
|
||||
"<html><style>body { max-width: 480; margin: 0 auto; padding: 0 5px;}h1,h3 { text-align: center;}</style><body><span style=\"color:#0000A0\">\n"\
|
||||
"<h1>W5500 Simple Web Server</h1><hr>\n"\
|
||||
"<h3>AVR Mega1284p and WIZ5500</h3><hr>\n"\
|
||||
"<p><form method=\"POST\">\n"\
|
||||
"<strong>Uptime: <input type=\"text\" size=2 value=\"%lu\"> sec\n"\
|
||||
"<p><input type=\"radio\" name=\"radio\" value=\"0\" %s>LED1 OFF\n"\
|
||||
"<br><input type=\"radio\" name=\"radio\" value=\"1\" %s>LED1 ON\n"\
|
||||
"<p>\n"\
|
||||
"<input type=\"submit\" value=\"Update data\">\n"\
|
||||
"</strong></form></span></body></html>\n"
|
||||
|
||||
#define page_404 \
|
||||
"HTTP/1.0 404 Not Found\r\n"\
|
||||
"Content-Type: text/html\r\n"\
|
||||
"\r\n"\
|
||||
"<!DOCTYPE HTML><html><h2>404 Not Found</h2></html>"
|
||||
|
||||
#endif /* WEBPAGES_H_ */
|
||||
@ -0,0 +1,257 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "webserver_simple.h"
|
||||
#include "socket.h"
|
||||
#include "wizchip_conf.h"
|
||||
|
||||
|
||||
int strindex(char *s,char *t)
|
||||
{
|
||||
uint16_t i,n;
|
||||
|
||||
n=strlen(t);
|
||||
for(i=0; *(s+i); i++)
|
||||
{
|
||||
if (strncmp(s+i,t,n) == 0)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
void SetAutoKeepAlive(sn, time) // time > 0
|
||||
{
|
||||
setSn_KPALVTR(sn, time);
|
||||
printf("Sn:%d - kpalvtime: %u sec\r\n",sn, 5*getSn_KPALVTR(sn));
|
||||
}
|
||||
|
||||
int32_t websrv_simple(uint8_t sn, uint8_t* buf, uint16_t port)
|
||||
{
|
||||
int32_t ret;
|
||||
uint16_t size = 0;
|
||||
int getidx, postidx, getidx_htm, postidx_htm;
|
||||
char radiostat0[10],radiostat1[10],temp[12];
|
||||
|
||||
static uint32_t httpd_active_millis;
|
||||
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
uint8_t destip[4];
|
||||
uint16_t destport;
|
||||
#endif
|
||||
|
||||
switch(getSn_SR(sn))
|
||||
{
|
||||
case SOCK_ESTABLISHED :
|
||||
if(getSn_IR(sn) & Sn_IR_CON)
|
||||
{
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
getSn_DIPR(sn, destip);
|
||||
destport = getSn_DPORT(sn);
|
||||
|
||||
printf("%d:WEB Connected - %d.%d.%d.%d : %u\r\n",sn, destip[0], destip[1], destip[2], destip[3], destport);
|
||||
#endif
|
||||
setSn_IR(sn,Sn_IR_CON);
|
||||
//Get timetick to open socket
|
||||
httpd_active_millis = millis();
|
||||
}
|
||||
if((size = getSn_RX_RSR(sn)) > 0) // Don't need to check SOCKERR_BUSY because it doesn't not occur.
|
||||
{
|
||||
if(size > WEBSRV_DATA_BUF_SIZE) size = WEBSRV_DATA_BUF_SIZE;
|
||||
ret = recv(sn, buf, size);
|
||||
|
||||
if(ret <= 0) return ret; // check SOCKERR_BUSY & SOCKERR_XXX. For showing the occurrence of SOCKERR_BUSY.
|
||||
|
||||
//Get timetick to read data from socket
|
||||
httpd_active_millis = millis();
|
||||
|
||||
size = (uint16_t) ret;
|
||||
buf[size] = 0x0;// insert null-terminate symbol to correct parse data
|
||||
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
PRINTF("\r\n>>HTTP REQUEST %u bytes:\r\n%s\rn\n",size, buf);
|
||||
#endif
|
||||
|
||||
// Check the HTTP Request Header
|
||||
getidx=strindex((char *)buf,"GET / ");
|
||||
getidx_htm=strindex((char *)buf,"GET /index.htm");
|
||||
postidx=strindex((char *)buf,"POST / ");
|
||||
postidx_htm=strindex((char *)buf,"POST /index.htm");
|
||||
|
||||
if (getidx >= 0 || postidx >= 0 || getidx_htm >= 0 || postidx_htm >= 0)
|
||||
{
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
PRINTF(">>Req. ROOT check!\n");
|
||||
#endif
|
||||
// Now check the Radio Button for POST request
|
||||
if (postidx >= 0 || postidx_htm >= 0)
|
||||
{
|
||||
if (strindex((char *)buf,"radio=0") > 0)
|
||||
{
|
||||
//ledmode=0;
|
||||
//PRINTF("++LED=0\r\n");
|
||||
led1_low();
|
||||
}
|
||||
|
||||
if (strindex((char *)buf,"radio=1") > 0)
|
||||
{
|
||||
//ledmode=1;
|
||||
//PRINTF("++LED=1\r\n");
|
||||
led1_high();
|
||||
}
|
||||
|
||||
}
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
PRINTF(">>Req. Send!\n");
|
||||
#endif
|
||||
//Old method with every string fill
|
||||
/*
|
||||
// Create the HTTP Response Header
|
||||
strcpy_P((char *)buf,PSTR("HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n"));
|
||||
strcat_P((char *)buf,PSTR("<html>"\
|
||||
"<style>"\
|
||||
"body {"\
|
||||
" max-width: 480;"\
|
||||
" margin: 0 auto;"\
|
||||
" padding: 0 5px;"\
|
||||
"}"\
|
||||
"h1,h3 {"\
|
||||
" text-align: center;"\
|
||||
"}"\
|
||||
"</style>"\
|
||||
));
|
||||
strcat_P((char *)buf,PSTR("<body><span style=\"color:#0000A0\">\r\n"));
|
||||
strcat_P((char *)buf,PSTR("<h1>W5500 Simple Web Server</h1><hr>\r\n"));
|
||||
strcat_P((char *)buf,PSTR("<h3>AVR Mega1284p and WIZ5500</h3><hr>\r\n"));
|
||||
strcat_P((char *)buf,PSTR("<p><form method=\"POST\">\r\n"));
|
||||
|
||||
// Now Send the HTTP Response
|
||||
if (send(sn,buf,strlen((char *)buf)) <= 0) break;
|
||||
|
||||
// Create the HTTP Temperature Response
|
||||
sprintf((char *)temp,"%lu",(millis()/1000)); // Convert temperature value to string
|
||||
|
||||
strcpy_P((char *)buf,PSTR("<strong>Uptime: <input type=\"text\" size=2 value=\""));
|
||||
strcat((char *)buf,temp);
|
||||
//strcat_P((char *)buf,PSTR("\"> <sup>O</sup>C\r\n")); // for celsius
|
||||
strcat_P((char *)buf,PSTR("\"> sec\r\n")); // for seconds
|
||||
if (led1_read())
|
||||
{
|
||||
strcpy(radiostat0,"");
|
||||
strcpy_P(radiostat1,PSTR("checked"));
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy_P(radiostat0,PSTR("checked"));
|
||||
strcpy(radiostat1,"");
|
||||
}
|
||||
|
||||
// Create the HTTP Radio Button 0 Response
|
||||
strcat_P((char *)buf,PSTR("<p><input type=\"radio\" name=\"radio\" value=\"0\" "));
|
||||
strcat((char *)buf,radiostat0);
|
||||
strcat_P((char *)buf,PSTR(">LED1 OFF\r\n"));
|
||||
strcat_P((char *)buf,PSTR("<br><input type=\"radio\" name=\"radio\" value=\"1\" "));
|
||||
strcat((char *)buf,radiostat1);
|
||||
strcat_P((char *)buf,PSTR(">LED1 ON\r\n"));
|
||||
strcat_P((char *)buf,PSTR("<p>\r\n"));
|
||||
strcat_P((char *)buf,PSTR("<input type=\"submit\" value=\"Update data\">\r\n"));
|
||||
strcat_P((char *)buf,PSTR("</strong></form></span></body></html>\r\n"));
|
||||
*/
|
||||
|
||||
//New method, send page at once, (no more then ~1500 bytes content!!)
|
||||
//Prepare additional data to send
|
||||
if (led1_read())
|
||||
{
|
||||
strcpy(radiostat0,"");
|
||||
strcpy_P(radiostat1,PSTR("checked"));
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy_P(radiostat0,PSTR("checked"));
|
||||
strcpy(radiostat1,"");
|
||||
}
|
||||
|
||||
//copy page to buffer and send to http client, without additional data
|
||||
//strcpy_P((char *)buf,PSTR(index_page));
|
||||
|
||||
//copy page to buffer and send to http client, with additional data
|
||||
sprintf_P((char *)buf,PSTR(index_page), millis()/1000, radiostat0, radiostat1);
|
||||
|
||||
// Now Send the HTTP Remaining Response
|
||||
if (send(sn,buf,strlen((char *)buf)) <= 0) break;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//Page not found
|
||||
/*
|
||||
strcpy_P((char *)buf,PSTR(\
|
||||
"HTTP/1.0 404 Not Found\r\n"
|
||||
"Content-Type: text/html\r\n"
|
||||
"\r\n"
|
||||
//"<meta http-equiv=\"refresh\" content=\"5; url=/\"> " // Redirect ÷åðåç 5 ñåê íà îñíîâíóþ ñòðàíèöó
|
||||
"<!DOCTYPE HTML><html><h2>404 Not Found</h2></html>"\
|
||||
));
|
||||
*/
|
||||
|
||||
//copy page to buffer and send to http client, without additional data
|
||||
strcpy_P((char *)buf,PSTR(page_404));
|
||||
|
||||
// Now Send the HTTP Remaining Response
|
||||
if (send(sn,buf,strlen((char *)buf)) <= 0) break;
|
||||
}
|
||||
// Disconnect the socket
|
||||
disconnect(sn);
|
||||
}
|
||||
else
|
||||
{
|
||||
//here when opened socket connection but no data received
|
||||
if((millis()-httpd_active_millis) > HTTPD_OPEN_TIMEOUT)
|
||||
{
|
||||
//Force close socket, after 3 sec idle (To beat Chrome "persistent connection")
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
PRINTF("!!HTTPD timeout, Force close socket\r\n");
|
||||
#endif
|
||||
close(sn);
|
||||
}
|
||||
}
|
||||
break;
|
||||
/*
|
||||
case SOCK_FIN_WAIT:
|
||||
case SOCK_CLOSING:
|
||||
case SOCK_TIME_WAIT:
|
||||
case SOCK_LAST_ACK:
|
||||
//case SOCK_CLOSE_WAIT:
|
||||
//Force close socket
|
||||
close(sn);
|
||||
*/
|
||||
|
||||
break;
|
||||
case SOCK_CLOSE_WAIT :
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
//printf("%d:CloseWait\r\n",sn);
|
||||
#endif
|
||||
if((ret = disconnect(sn)) != SOCK_OK) return ret;
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
printf("%d:WEB Socket Closed\r\n", sn);
|
||||
#endif
|
||||
break;
|
||||
case SOCK_INIT :
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
printf("%d:Listen, WEB server, port [%d]\r\n", sn, port);
|
||||
#endif
|
||||
if( (ret = listen(sn)) != SOCK_OK) return ret;
|
||||
break;
|
||||
case SOCK_CLOSED:
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
//printf("%d:TCP server loopback start\r\n",sn);
|
||||
#endif
|
||||
if((ret = socket(sn, Sn_MR_TCP, port, 0x00)) != sn) return ret;
|
||||
//This is not helped with Chrome keep-alive sessions
|
||||
//SetAutoKeepAlive(sn, 1); // set Auto keepalive 5sec(1*5) (This is for TCP IP only!)
|
||||
#ifdef _WEBSRV_DEBUG_
|
||||
//printf("%d:Socket opened\r\n",sn);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
#ifndef _WEBSERVER_SIMPLE_H_
|
||||
#define _WEBSERVER_SIMPLE_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include "../../globals.h"
|
||||
#include "webpages.h"
|
||||
|
||||
/* Loopback test debug message printout enable */
|
||||
#define _WEBSRV_DEBUG_
|
||||
|
||||
/* DATA_BUF_SIZE define for Loopback example */
|
||||
#ifndef WEBSRV_DATA_BUF_SIZE
|
||||
#define WEBSRV_DATA_BUF_SIZE 2048
|
||||
#endif
|
||||
|
||||
//Timeout (ms) to close too long opened socket (Help from freeze with work with Chrome browser (keep persistent connection on WIN7 ~ 120 sec))
|
||||
#define HTTPD_OPEN_TIMEOUT 3000
|
||||
|
||||
/* WEB SERVER test example */
|
||||
int32_t websrv_simple(uint8_t sn, uint8_t* buf, uint16_t port);
|
||||
|
||||
int strindex(char *s,char *t);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //_WEBSERVER_SIMPLE_H_
|
||||
@ -0,0 +1,267 @@
|
||||
//*****************************************************************************
|
||||
//
|
||||
//! \file w5500.c
|
||||
//! \brief W5500 HAL Interface.
|
||||
//! \version 1.0.2
|
||||
//! \date 2013/10/21
|
||||
//! \par Revision history
|
||||
//! <2015/02/05> Notice
|
||||
//! The version history is not updated after this point.
|
||||
//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary.
|
||||
//! >> https://github.com/Wiznet/ioLibrary_Driver
|
||||
//! <2014/05/01> V1.0.2
|
||||
//! 1. Implicit type casting -> Explicit type casting. Refer to M20140501
|
||||
//! Fixed the problem on porting into under 32bit MCU
|
||||
//! Issued by Mathias ClauBen, wizwiki forum ID Think01 and bobh
|
||||
//! Thank for your interesting and serious advices.
|
||||
//! <2013/12/20> V1.0.1
|
||||
//! 1. Remove warning
|
||||
//! 2. WIZCHIP_READ_BUF WIZCHIP_WRITE_BUF in case _WIZCHIP_IO_MODE_SPI_FDM_
|
||||
//! for loop optimized(removed). refer to M20131220
|
||||
//! <2013/10/21> 1st Release
|
||||
//! \author MidnightCow
|
||||
//! \copyright
|
||||
//!
|
||||
//! Copyright (c) 2013, WIZnet Co., LTD.
|
||||
//! All rights reserved.
|
||||
//!
|
||||
//! Redistribution and use in source and binary forms, with or without
|
||||
//! modification, are permitted provided that the following conditions
|
||||
//! are met:
|
||||
//!
|
||||
//! * Redistributions of source code must retain the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer.
|
||||
//! * Redistributions in binary form must reproduce the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer in the
|
||||
//! documentation and/or other materials provided with the distribution.
|
||||
//! * Neither the name of the <ORGANIZATION> nor the names of its
|
||||
//! contributors may be used to endorse or promote products derived
|
||||
//! from this software without specific prior written permission.
|
||||
//!
|
||||
//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
//! THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//*****************************************************************************
|
||||
//#include <stdio.h>
|
||||
#include "w5500.h"
|
||||
|
||||
#define _W5500_SPI_VDM_OP_ 0x00
|
||||
#define _W5500_SPI_FDM_OP_LEN1_ 0x01
|
||||
#define _W5500_SPI_FDM_OP_LEN2_ 0x02
|
||||
#define _W5500_SPI_FDM_OP_LEN4_ 0x03
|
||||
|
||||
#if (_WIZCHIP_ == 5500)
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
uint8_t WIZCHIP_READ(uint32_t AddrSel)
|
||||
{
|
||||
uint8_t ret;
|
||||
uint8_t spi_data[3];
|
||||
|
||||
WIZCHIP_CRITICAL_ENTER();
|
||||
WIZCHIP.CS._select();
|
||||
|
||||
AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_);
|
||||
|
||||
if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
|
||||
{
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0);
|
||||
}
|
||||
else // burst operation
|
||||
{
|
||||
spi_data[0] = (AddrSel & 0x00FF0000) >> 16;
|
||||
spi_data[1] = (AddrSel & 0x0000FF00) >> 8;
|
||||
spi_data[2] = (AddrSel & 0x000000FF) >> 0;
|
||||
WIZCHIP.IF.SPI._write_burst(spi_data, 3);
|
||||
}
|
||||
ret = WIZCHIP.IF.SPI._read_byte();
|
||||
|
||||
WIZCHIP.CS._deselect();
|
||||
WIZCHIP_CRITICAL_EXIT();
|
||||
return ret;
|
||||
}
|
||||
|
||||
void WIZCHIP_WRITE(uint32_t AddrSel, uint8_t wb )
|
||||
{
|
||||
uint8_t spi_data[4];
|
||||
|
||||
WIZCHIP_CRITICAL_ENTER();
|
||||
WIZCHIP.CS._select();
|
||||
|
||||
AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_VDM_OP_);
|
||||
|
||||
//if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
|
||||
if(!WIZCHIP.IF.SPI._write_burst) // byte operation
|
||||
{
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0);
|
||||
WIZCHIP.IF.SPI._write_byte(wb);
|
||||
}
|
||||
else // burst operation
|
||||
{
|
||||
spi_data[0] = (AddrSel & 0x00FF0000) >> 16;
|
||||
spi_data[1] = (AddrSel & 0x0000FF00) >> 8;
|
||||
spi_data[2] = (AddrSel & 0x000000FF) >> 0;
|
||||
spi_data[3] = wb;
|
||||
WIZCHIP.IF.SPI._write_burst(spi_data, 4);
|
||||
}
|
||||
|
||||
WIZCHIP.CS._deselect();
|
||||
WIZCHIP_CRITICAL_EXIT();
|
||||
}
|
||||
|
||||
void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len)
|
||||
{
|
||||
uint8_t spi_data[3];
|
||||
uint16_t i;
|
||||
|
||||
WIZCHIP_CRITICAL_ENTER();
|
||||
WIZCHIP.CS._select();
|
||||
|
||||
AddrSel |= (_W5500_SPI_READ_ | _W5500_SPI_VDM_OP_);
|
||||
|
||||
if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
|
||||
{
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0);
|
||||
for(i = 0; i < len; i++)
|
||||
pBuf[i] = WIZCHIP.IF.SPI._read_byte();
|
||||
}
|
||||
else // burst operation
|
||||
{
|
||||
spi_data[0] = (AddrSel & 0x00FF0000) >> 16;
|
||||
spi_data[1] = (AddrSel & 0x0000FF00) >> 8;
|
||||
spi_data[2] = (AddrSel & 0x000000FF) >> 0;
|
||||
WIZCHIP.IF.SPI._write_burst(spi_data, 3);
|
||||
WIZCHIP.IF.SPI._read_burst(pBuf, len);
|
||||
}
|
||||
|
||||
WIZCHIP.CS._deselect();
|
||||
WIZCHIP_CRITICAL_EXIT();
|
||||
}
|
||||
|
||||
void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len)
|
||||
{
|
||||
uint8_t spi_data[3];
|
||||
uint16_t i;
|
||||
|
||||
WIZCHIP_CRITICAL_ENTER();
|
||||
WIZCHIP.CS._select();
|
||||
|
||||
AddrSel |= (_W5500_SPI_WRITE_ | _W5500_SPI_VDM_OP_);
|
||||
|
||||
if(!WIZCHIP.IF.SPI._write_burst) // byte operation
|
||||
{
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
|
||||
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0);
|
||||
for(i = 0; i < len; i++)
|
||||
WIZCHIP.IF.SPI._write_byte(pBuf[i]);
|
||||
}
|
||||
else // burst operation
|
||||
{
|
||||
spi_data[0] = (AddrSel & 0x00FF0000) >> 16;
|
||||
spi_data[1] = (AddrSel & 0x0000FF00) >> 8;
|
||||
spi_data[2] = (AddrSel & 0x000000FF) >> 0;
|
||||
WIZCHIP.IF.SPI._write_burst(spi_data, 3);
|
||||
WIZCHIP.IF.SPI._write_burst(pBuf, len);
|
||||
}
|
||||
|
||||
WIZCHIP.CS._deselect();
|
||||
WIZCHIP_CRITICAL_EXIT();
|
||||
}
|
||||
|
||||
|
||||
uint16_t getSn_TX_FSR(uint8_t sn)
|
||||
{
|
||||
uint16_t val=0,val1=0;
|
||||
|
||||
do
|
||||
{
|
||||
val1 = WIZCHIP_READ(Sn_TX_FSR(sn));
|
||||
val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1));
|
||||
if (val1 != 0)
|
||||
{
|
||||
val = WIZCHIP_READ(Sn_TX_FSR(sn));
|
||||
val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1));
|
||||
}
|
||||
}while (val != val1);
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
uint16_t getSn_RX_RSR(uint8_t sn)
|
||||
{
|
||||
uint16_t val=0,val1=0;
|
||||
|
||||
do
|
||||
{
|
||||
val1 = WIZCHIP_READ(Sn_RX_RSR(sn));
|
||||
val1 = (val1 << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1));
|
||||
if (val1 != 0)
|
||||
{
|
||||
val = WIZCHIP_READ(Sn_RX_RSR(sn));
|
||||
val = (val << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1));
|
||||
}
|
||||
}while (val != val1);
|
||||
return val;
|
||||
}
|
||||
|
||||
void wiz_send_data(uint8_t sn, uint8_t *wizdata, uint16_t len)
|
||||
{
|
||||
uint16_t ptr = 0;
|
||||
uint32_t addrsel = 0;
|
||||
|
||||
if(len == 0) return;
|
||||
ptr = getSn_TX_WR(sn);
|
||||
//M20140501 : implict type casting -> explict type casting
|
||||
//addrsel = (ptr << 8) + (WIZCHIP_TXBUF_BLOCK(sn) << 3);
|
||||
addrsel = ((uint32_t)ptr << 8) + (WIZCHIP_TXBUF_BLOCK(sn) << 3);
|
||||
//
|
||||
WIZCHIP_WRITE_BUF(addrsel,wizdata, len);
|
||||
|
||||
ptr += len;
|
||||
setSn_TX_WR(sn,ptr);
|
||||
}
|
||||
|
||||
void wiz_recv_data(uint8_t sn, uint8_t *wizdata, uint16_t len)
|
||||
{
|
||||
uint16_t ptr = 0;
|
||||
uint32_t addrsel = 0;
|
||||
|
||||
if(len == 0) return;
|
||||
ptr = getSn_RX_RD(sn);
|
||||
//M20140501 : implict type casting -> explict type casting
|
||||
//addrsel = ((ptr << 8) + (WIZCHIP_RXBUF_BLOCK(sn) << 3);
|
||||
addrsel = ((uint32_t)ptr << 8) + (WIZCHIP_RXBUF_BLOCK(sn) << 3);
|
||||
//
|
||||
WIZCHIP_READ_BUF(addrsel, wizdata, len);
|
||||
ptr += len;
|
||||
|
||||
setSn_RX_RD(sn,ptr);
|
||||
}
|
||||
|
||||
|
||||
void wiz_recv_ignore(uint8_t sn, uint16_t len)
|
||||
{
|
||||
uint16_t ptr = 0;
|
||||
|
||||
ptr = getSn_RX_RD(sn);
|
||||
ptr += len;
|
||||
setSn_RX_RD(sn,ptr);
|
||||
}
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,930 @@
|
||||
//*****************************************************************************
|
||||
//
|
||||
//! \file socket.c
|
||||
//! \brief SOCKET APIs Implements file.
|
||||
//! \details SOCKET APIs like as Berkeley Socket APIs.
|
||||
//! \version 1.0.3
|
||||
//! \date 2013/10/21
|
||||
//! \par Revision history
|
||||
//! <2015/02/05> Notice
|
||||
//! The version history is not updated after this point.
|
||||
//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary.
|
||||
//! >> https://github.com/Wiznet/ioLibrary_Driver
|
||||
//! <2014/05/01> V1.0.3. Refer to M20140501
|
||||
//! 1. Implicit type casting -> Explicit type casting.
|
||||
//! 2. replace 0x01 with PACK_REMAINED in recvfrom()
|
||||
//! 3. Validation a destination ip in connect() & sendto():
|
||||
//! It occurs a fatal error on converting unint32 address if uint8* addr parameter is not aligned by 4byte address.
|
||||
//! Copy 4 byte addr value into temporary uint32 variable and then compares it.
|
||||
//! <2013/12/20> V1.0.2 Refer to M20131220
|
||||
//! Remove Warning.
|
||||
//! <2013/11/04> V1.0.1 2nd Release. Refer to "20131104".
|
||||
//! In sendto(), Add to clear timeout interrupt status (Sn_IR_TIMEOUT)
|
||||
//! <2013/10/21> 1st Release
|
||||
//! \author MidnightCow
|
||||
//! \copyright
|
||||
//!
|
||||
//! Copyright (c) 2013, WIZnet Co., LTD.
|
||||
//! All rights reserved.
|
||||
//!
|
||||
//! Redistribution and use in source and binary forms, with or without
|
||||
//! modification, are permitted provided that the following conditions
|
||||
//! are met:
|
||||
//!
|
||||
//! * Redistributions of source code must retain the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer.
|
||||
//! * Redistributions in binary form must reproduce the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer in the
|
||||
//! documentation and/or other materials provided with the distribution.
|
||||
//! * Neither the name of the <ORGANIZATION> nor the names of its
|
||||
//! contributors may be used to endorse or promote products derived
|
||||
//! from this software without specific prior written permission.
|
||||
//!
|
||||
//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
//! THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//*****************************************************************************
|
||||
#include "socket.h"
|
||||
|
||||
//M20150401 : Typing Error
|
||||
//#define SOCK_ANY_PORT_NUM 0xC000;
|
||||
#define SOCK_ANY_PORT_NUM 0xC000
|
||||
|
||||
static uint16_t sock_any_port = SOCK_ANY_PORT_NUM;
|
||||
static uint16_t sock_io_mode = 0;
|
||||
static uint16_t sock_is_sending = 0;
|
||||
|
||||
static uint16_t sock_remained_size[_WIZCHIP_SOCK_NUM_] = {0,0,};
|
||||
|
||||
//M20150601 : For extern decleation
|
||||
//static uint8_t sock_pack_info[_WIZCHIP_SOCK_NUM_] = {0,};
|
||||
uint8_t sock_pack_info[_WIZCHIP_SOCK_NUM_] = {0,};
|
||||
//
|
||||
|
||||
#if _WIZCHIP_ == 5200
|
||||
static uint16_t sock_next_rd[_WIZCHIP_SOCK_NUM_] ={0,};
|
||||
#endif
|
||||
|
||||
//A20150601 : For integrating with W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
uint8_t sock_remained_byte[_WIZCHIP_SOCK_NUM_] = {0,}; // set by wiz_recv_data()
|
||||
#endif
|
||||
|
||||
|
||||
#define CHECK_SOCKNUM() \
|
||||
do{ \
|
||||
if(sn > _WIZCHIP_SOCK_NUM_) return SOCKERR_SOCKNUM; \
|
||||
}while(0); \
|
||||
|
||||
#define CHECK_SOCKMODE(mode) \
|
||||
do{ \
|
||||
if((getSn_MR(sn) & 0x0F) != mode) return SOCKERR_SOCKMODE; \
|
||||
}while(0); \
|
||||
|
||||
#define CHECK_SOCKINIT() \
|
||||
do{ \
|
||||
if((getSn_SR(sn) != SOCK_INIT)) return SOCKERR_SOCKINIT; \
|
||||
}while(0); \
|
||||
|
||||
#define CHECK_SOCKDATA() \
|
||||
do{ \
|
||||
if(len == 0) return SOCKERR_DATALEN; \
|
||||
}while(0); \
|
||||
|
||||
|
||||
|
||||
int8_t socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag)
|
||||
{
|
||||
CHECK_SOCKNUM();
|
||||
switch(protocol)
|
||||
{
|
||||
case Sn_MR_TCP :
|
||||
{
|
||||
//M20150601 : Fixed the warning - taddr will never be NULL
|
||||
/*
|
||||
uint8_t taddr[4];
|
||||
getSIPR(taddr);
|
||||
*/
|
||||
uint32_t taddr;
|
||||
getSIPR((uint8_t*)&taddr);
|
||||
if(taddr == 0) return SOCKERR_SOCKINIT;
|
||||
}
|
||||
case Sn_MR_UDP :
|
||||
case Sn_MR_MACRAW :
|
||||
case Sn_MR_IPRAW :
|
||||
break;
|
||||
#if ( _WIZCHIP_ < 5200 )
|
||||
case Sn_MR_PPPoE :
|
||||
break;
|
||||
#endif
|
||||
default :
|
||||
return SOCKERR_SOCKMODE;
|
||||
}
|
||||
//M20150601 : For SF_TCP_ALIGN & W5300
|
||||
//if((flag & 0x06) != 0) return SOCKERR_SOCKFLAG;
|
||||
if((flag & 0x04) != 0) return SOCKERR_SOCKFLAG;
|
||||
#if _WIZCHIP_ == 5200
|
||||
if(flag & 0x10) return SOCKERR_SOCKFLAG;
|
||||
#endif
|
||||
|
||||
if(flag != 0)
|
||||
{
|
||||
switch(protocol)
|
||||
{
|
||||
case Sn_MR_TCP:
|
||||
//M20150601 : For SF_TCP_ALIGN & W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
if((flag & (SF_TCP_NODELAY|SF_IO_NONBLOCK|SF_TCP_ALIGN))==0) return SOCKERR_SOCKFLAG;
|
||||
#else
|
||||
if((flag & (SF_TCP_NODELAY|SF_IO_NONBLOCK))==0) return SOCKERR_SOCKFLAG;
|
||||
#endif
|
||||
|
||||
break;
|
||||
case Sn_MR_UDP:
|
||||
if(flag & SF_IGMP_VER2)
|
||||
{
|
||||
if((flag & SF_MULTI_ENABLE)==0) return SOCKERR_SOCKFLAG;
|
||||
}
|
||||
#if _WIZCHIP_ == 5500
|
||||
if(flag & SF_UNI_BLOCK)
|
||||
{
|
||||
if((flag & SF_MULTI_ENABLE) == 0) return SOCKERR_SOCKFLAG;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
close(sn);
|
||||
//M20150601
|
||||
#if _WIZCHIP_ == 5300
|
||||
setSn_MR(sn, ((uint16_t)(protocol | (flag & 0xF0))) | (((uint16_t)(flag & 0x02)) << 7) );
|
||||
#else
|
||||
setSn_MR(sn, (protocol | (flag & 0xF0)));
|
||||
#endif
|
||||
if(!port)
|
||||
{
|
||||
port = sock_any_port++;
|
||||
if(sock_any_port == 0xFFF0) sock_any_port = SOCK_ANY_PORT_NUM;
|
||||
}
|
||||
setSn_PORT(sn,port);
|
||||
setSn_CR(sn,Sn_CR_OPEN);
|
||||
while(getSn_CR(sn));
|
||||
//A20150401 : For release the previous sock_io_mode
|
||||
sock_io_mode &= ~(1 <<sn);
|
||||
//
|
||||
sock_io_mode |= ((flag & SF_IO_NONBLOCK) << sn);
|
||||
sock_is_sending &= ~(1<<sn);
|
||||
sock_remained_size[sn] = 0;
|
||||
//M20150601 : repalce 0 with PACK_COMPLETED
|
||||
//sock_pack_info[sn] = 0;
|
||||
sock_pack_info[sn] = PACK_COMPLETED;
|
||||
//
|
||||
while(getSn_SR(sn) == SOCK_CLOSED);
|
||||
return (int8_t)sn;
|
||||
}
|
||||
|
||||
int8_t close(uint8_t sn)
|
||||
{
|
||||
CHECK_SOCKNUM();
|
||||
//A20160426 : Applied the erratum 1 of W5300
|
||||
#if (_WIZCHIP_ == 5300)
|
||||
//M20160503 : Wrong socket parameter. s -> sn
|
||||
//if( ((getSn_MR(s)& 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(s) != getSn_TxMAX(s)) )
|
||||
if( ((getSn_MR(sn)& 0x0F) == Sn_MR_TCP) && (getSn_TX_FSR(sn) != getSn_TxMAX(sn)) )
|
||||
{
|
||||
uint8_t destip[4] = {0, 0, 0, 1};
|
||||
// TODO
|
||||
// You can wait for completing to sending data;
|
||||
// wait about 1 second;
|
||||
// if you have completed to send data, skip the code of erratum 1
|
||||
// ex> wait_1s();
|
||||
// if (getSn_TX_FSR(s) == getSn_TxMAX(s)) continue;
|
||||
//
|
||||
//M20160503 : The socket() of close() calls close() itself again. It occures a infinite loop - close()->socket()->close()->socket()-> ~
|
||||
//socket(s,Sn_MR_UDP,0x3000,0);
|
||||
//sendto(s,destip,1,destip,0x3000); // send the dummy data to an unknown destination(0.0.0.1).
|
||||
setSn_MR(sn,Sn_MR_UDP);
|
||||
setSn_PORTR(sn, 0x3000);
|
||||
setSn_CR(sn,Sn_CR_OPEN);
|
||||
while(getSn_CR(sn) != 0);
|
||||
while(getSn_SR(sn) != SOCK_UDP);
|
||||
sendto(sn,destip,1,destip,0x3000); // send the dummy data to an unknown destination(0.0.0.1).
|
||||
};
|
||||
#endif
|
||||
setSn_CR(sn,Sn_CR_CLOSE);
|
||||
/* wait to process the command... */
|
||||
while( getSn_CR(sn) );
|
||||
/* clear all interrupt of the socket. */
|
||||
setSn_IR(sn, 0xFF);
|
||||
//A20150401 : Release the sock_io_mode of socket n.
|
||||
sock_io_mode &= ~(1<<sn);
|
||||
//
|
||||
sock_is_sending &= ~(1<<sn);
|
||||
sock_remained_size[sn] = 0;
|
||||
sock_pack_info[sn] = 0;
|
||||
while(getSn_SR(sn) != SOCK_CLOSED);
|
||||
return SOCK_OK;
|
||||
}
|
||||
|
||||
int8_t listen(uint8_t sn)
|
||||
{
|
||||
CHECK_SOCKNUM();
|
||||
CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
CHECK_SOCKINIT();
|
||||
setSn_CR(sn,Sn_CR_LISTEN);
|
||||
while(getSn_CR(sn));
|
||||
while(getSn_SR(sn) != SOCK_LISTEN)
|
||||
{
|
||||
close(sn);
|
||||
return SOCKERR_SOCKCLOSED;
|
||||
}
|
||||
return SOCK_OK;
|
||||
}
|
||||
|
||||
|
||||
int8_t connect(uint8_t sn, uint8_t * addr, uint16_t port)
|
||||
{
|
||||
CHECK_SOCKNUM();
|
||||
CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
CHECK_SOCKINIT();
|
||||
//M20140501 : For avoiding fatal error on memory align mismatched
|
||||
//if( *((uint32_t*)addr) == 0xFFFFFFFF || *((uint32_t*)addr) == 0) return SOCKERR_IPINVALID;
|
||||
{
|
||||
uint32_t taddr;
|
||||
taddr = ((uint32_t)addr[0] & 0x000000FF);
|
||||
taddr = (taddr << 8) + ((uint32_t)addr[1] & 0x000000FF);
|
||||
taddr = (taddr << 8) + ((uint32_t)addr[2] & 0x000000FF);
|
||||
taddr = (taddr << 8) + ((uint32_t)addr[3] & 0x000000FF);
|
||||
if( taddr == 0xFFFFFFFF || taddr == 0) return SOCKERR_IPINVALID;
|
||||
}
|
||||
//
|
||||
|
||||
if(port == 0) return SOCKERR_PORTZERO;
|
||||
setSn_DIPR(sn,addr);
|
||||
setSn_DPORT(sn,port);
|
||||
setSn_CR(sn,Sn_CR_CONNECT);
|
||||
while(getSn_CR(sn));
|
||||
if(sock_io_mode & (1<<sn)) return SOCK_BUSY;
|
||||
while(getSn_SR(sn) != SOCK_ESTABLISHED)
|
||||
{
|
||||
if (getSn_IR(sn) & Sn_IR_TIMEOUT)
|
||||
{
|
||||
setSn_IR(sn, Sn_IR_TIMEOUT);
|
||||
return SOCKERR_TIMEOUT;
|
||||
}
|
||||
|
||||
if (getSn_SR(sn) == SOCK_CLOSED)
|
||||
{
|
||||
return SOCKERR_SOCKCLOSED;
|
||||
}
|
||||
}
|
||||
|
||||
return SOCK_OK;
|
||||
}
|
||||
|
||||
int8_t disconnect(uint8_t sn)
|
||||
{
|
||||
CHECK_SOCKNUM();
|
||||
CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
setSn_CR(sn,Sn_CR_DISCON);
|
||||
/* wait to process the command... */
|
||||
while(getSn_CR(sn));
|
||||
sock_is_sending &= ~(1<<sn);
|
||||
if(sock_io_mode & (1<<sn)) return SOCK_BUSY;
|
||||
while(getSn_SR(sn) != SOCK_CLOSED)
|
||||
{
|
||||
if(getSn_IR(sn) & Sn_IR_TIMEOUT)
|
||||
{
|
||||
close(sn);
|
||||
return SOCKERR_TIMEOUT;
|
||||
}
|
||||
}
|
||||
return SOCK_OK;
|
||||
}
|
||||
|
||||
int32_t send(uint8_t sn, uint8_t * buf, uint16_t len)
|
||||
{
|
||||
uint8_t tmp=0;
|
||||
uint16_t freesize=0;
|
||||
|
||||
CHECK_SOCKNUM();
|
||||
CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
CHECK_SOCKDATA();
|
||||
tmp = getSn_SR(sn);
|
||||
if(tmp != SOCK_ESTABLISHED && tmp != SOCK_CLOSE_WAIT) return SOCKERR_SOCKSTATUS;
|
||||
if( sock_is_sending & (1<<sn) )
|
||||
{
|
||||
tmp = getSn_IR(sn);
|
||||
if(tmp & Sn_IR_SENDOK)
|
||||
{
|
||||
setSn_IR(sn, Sn_IR_SENDOK);
|
||||
//M20150401 : Typing Error
|
||||
//#if _WZICHIP_ == 5200
|
||||
#if _WIZCHIP_ == 5200
|
||||
if(getSn_TX_RD(sn) != sock_next_rd[sn])
|
||||
{
|
||||
setSn_CR(sn,Sn_CR_SEND);
|
||||
while(getSn_CR(sn));
|
||||
return SOCK_BUSY;
|
||||
}
|
||||
#endif
|
||||
sock_is_sending &= ~(1<<sn);
|
||||
}
|
||||
else if(tmp & Sn_IR_TIMEOUT)
|
||||
{
|
||||
close(sn);
|
||||
return SOCKERR_TIMEOUT;
|
||||
}
|
||||
else return SOCK_BUSY;
|
||||
}
|
||||
freesize = getSn_TxMAX(sn);
|
||||
if (len > freesize) len = freesize; // check size not to exceed MAX size.
|
||||
while(1)
|
||||
{
|
||||
freesize = getSn_TX_FSR(sn);
|
||||
tmp = getSn_SR(sn);
|
||||
if ((tmp != SOCK_ESTABLISHED) && (tmp != SOCK_CLOSE_WAIT))
|
||||
{
|
||||
close(sn);
|
||||
return SOCKERR_SOCKSTATUS;
|
||||
}
|
||||
if( (sock_io_mode & (1<<sn)) && (len > freesize) ) return SOCK_BUSY;
|
||||
if(len <= freesize) break;
|
||||
}
|
||||
wiz_send_data(sn, buf, len);
|
||||
#if _WIZCHIP_ == 5200
|
||||
sock_next_rd[sn] = getSn_TX_RD(sn) + len;
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ == 5300
|
||||
setSn_TX_WRSR(sn,len);
|
||||
#endif
|
||||
|
||||
setSn_CR(sn,Sn_CR_SEND);
|
||||
/* wait to process the command... */
|
||||
while(getSn_CR(sn));
|
||||
sock_is_sending |= (1 << sn);
|
||||
//M20150409 : Explicit Type Casting
|
||||
//return len;
|
||||
return (int32_t)len;
|
||||
}
|
||||
|
||||
|
||||
int32_t recv(uint8_t sn, uint8_t * buf, uint16_t len)
|
||||
{
|
||||
uint8_t tmp = 0;
|
||||
uint16_t recvsize = 0;
|
||||
//A20150601 : For integarating with W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
uint8_t head[2];
|
||||
uint16_t mr;
|
||||
#endif
|
||||
//
|
||||
CHECK_SOCKNUM();
|
||||
CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
CHECK_SOCKDATA();
|
||||
|
||||
recvsize = getSn_RxMAX(sn);
|
||||
if(recvsize < len) len = recvsize;
|
||||
|
||||
//A20150601 : For Integrating with W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
//sock_pack_info[sn] = PACK_COMPLETED; // for clear
|
||||
if(sock_remained_size[sn] == 0)
|
||||
{
|
||||
#endif
|
||||
//
|
||||
while(1)
|
||||
{
|
||||
recvsize = getSn_RX_RSR(sn);
|
||||
tmp = getSn_SR(sn);
|
||||
if (tmp != SOCK_ESTABLISHED)
|
||||
{
|
||||
if(tmp == SOCK_CLOSE_WAIT)
|
||||
{
|
||||
if(recvsize != 0) break;
|
||||
else if(getSn_TX_FSR(sn) == getSn_TxMAX(sn))
|
||||
{
|
||||
close(sn);
|
||||
return SOCKERR_SOCKSTATUS;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
close(sn);
|
||||
return SOCKERR_SOCKSTATUS;
|
||||
}
|
||||
}
|
||||
if((sock_io_mode & (1<<sn)) && (recvsize == 0)) return SOCK_BUSY;
|
||||
if(recvsize != 0) break;
|
||||
};
|
||||
#if _WIZCHIP_ == 5300
|
||||
}
|
||||
#endif
|
||||
|
||||
//A20150601 : For integrating with W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
if((sock_remained_size[sn] == 0) || (getSn_MR(sn) & Sn_MR_ALIGN))
|
||||
{
|
||||
mr = getMR();
|
||||
if((getSn_MR(sn) & Sn_MR_ALIGN)==0)
|
||||
{
|
||||
wiz_recv_data(sn,head,2);
|
||||
if(mr & MR_FS)
|
||||
recvsize = (((uint16_t)head[1]) << 8) | ((uint16_t)head[0]);
|
||||
else
|
||||
recvsize = (((uint16_t)head[0]) << 8) | ((uint16_t)head[1]);
|
||||
sock_pack_info[sn] = PACK_FIRST;
|
||||
}
|
||||
sock_remained_size[sn] = recvsize;
|
||||
}
|
||||
if(len > sock_remained_size[sn]) len = sock_remained_size[sn];
|
||||
recvsize = len;
|
||||
if(sock_pack_info[sn] & PACK_FIFOBYTE)
|
||||
{
|
||||
*buf = sock_remained_byte[sn];
|
||||
buf++;
|
||||
sock_pack_info[sn] &= ~(PACK_FIFOBYTE);
|
||||
recvsize -= 1;
|
||||
sock_remained_size[sn] -= 1;
|
||||
}
|
||||
if(recvsize != 0)
|
||||
{
|
||||
wiz_recv_data(sn, buf, recvsize);
|
||||
setSn_CR(sn,Sn_CR_RECV);
|
||||
while(getSn_CR(sn));
|
||||
}
|
||||
sock_remained_size[sn] -= recvsize;
|
||||
if(sock_remained_size[sn] != 0)
|
||||
{
|
||||
sock_pack_info[sn] |= PACK_REMAINED;
|
||||
if(recvsize & 0x1) sock_pack_info[sn] |= PACK_FIFOBYTE;
|
||||
}
|
||||
else sock_pack_info[sn] = PACK_COMPLETED;
|
||||
if(getSn_MR(sn) & Sn_MR_ALIGN) sock_remained_size[sn] = 0;
|
||||
//len = recvsize;
|
||||
#else
|
||||
if(recvsize < len) len = recvsize;
|
||||
wiz_recv_data(sn, buf, len);
|
||||
setSn_CR(sn,Sn_CR_RECV);
|
||||
while(getSn_CR(sn));
|
||||
#endif
|
||||
|
||||
//M20150409 : Explicit Type Casting
|
||||
//return len;
|
||||
return (int32_t)len;
|
||||
}
|
||||
|
||||
int32_t sendto(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port)
|
||||
{
|
||||
uint8_t tmp = 0;
|
||||
uint16_t freesize = 0;
|
||||
uint32_t taddr;
|
||||
|
||||
CHECK_SOCKNUM();
|
||||
switch(getSn_MR(sn) & 0x0F)
|
||||
{
|
||||
case Sn_MR_UDP:
|
||||
case Sn_MR_MACRAW:
|
||||
// break;
|
||||
// #if ( _WIZCHIP_ < 5200 )
|
||||
case Sn_MR_IPRAW:
|
||||
break;
|
||||
// #endif
|
||||
default:
|
||||
return SOCKERR_SOCKMODE;
|
||||
}
|
||||
CHECK_SOCKDATA();
|
||||
//M20140501 : For avoiding fatal error on memory align mismatched
|
||||
//if(*((uint32_t*)addr) == 0) return SOCKERR_IPINVALID;
|
||||
//{
|
||||
//uint32_t taddr;
|
||||
taddr = ((uint32_t)addr[0]) & 0x000000FF;
|
||||
taddr = (taddr << 8) + ((uint32_t)addr[1] & 0x000000FF);
|
||||
taddr = (taddr << 8) + ((uint32_t)addr[2] & 0x000000FF);
|
||||
taddr = (taddr << 8) + ((uint32_t)addr[3] & 0x000000FF);
|
||||
//}
|
||||
//
|
||||
//if(*((uint32_t*)addr) == 0) return SOCKERR_IPINVALID;
|
||||
if((taddr == 0) && ((getSn_MR(sn)&Sn_MR_MACRAW) != Sn_MR_MACRAW)) return SOCKERR_IPINVALID;
|
||||
if((port == 0) && ((getSn_MR(sn)&Sn_MR_MACRAW) != Sn_MR_MACRAW)) return SOCKERR_PORTZERO;
|
||||
tmp = getSn_SR(sn);
|
||||
//#if ( _WIZCHIP_ < 5200 )
|
||||
if((tmp != SOCK_MACRAW) && (tmp != SOCK_UDP) && (tmp != SOCK_IPRAW)) return SOCKERR_SOCKSTATUS;
|
||||
//#else
|
||||
// if(tmp != SOCK_MACRAW && tmp != SOCK_UDP) return SOCKERR_SOCKSTATUS;
|
||||
//#endif
|
||||
|
||||
setSn_DIPR(sn,addr);
|
||||
setSn_DPORT(sn,port);
|
||||
freesize = getSn_TxMAX(sn);
|
||||
if (len > freesize) len = freesize; // check size not to exceed MAX size.
|
||||
while(1)
|
||||
{
|
||||
freesize = getSn_TX_FSR(sn);
|
||||
if(getSn_SR(sn) == SOCK_CLOSED) return SOCKERR_SOCKCLOSED;
|
||||
if( (sock_io_mode & (1<<sn)) && (len > freesize) ) return SOCK_BUSY;
|
||||
if(len <= freesize) break;
|
||||
};
|
||||
wiz_send_data(sn, buf, len);
|
||||
|
||||
#if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
|
||||
getSIPR((uint8_t*)&taddr);
|
||||
if(taddr == 0)
|
||||
{
|
||||
getSUBR((uint8_t*)&taddr);
|
||||
setSUBR((uint8_t*)"\x00\x00\x00\x00");
|
||||
}
|
||||
else taddr = 0;
|
||||
#endif
|
||||
|
||||
//A20150601 : For W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
setSn_TX_WRSR(sn, len);
|
||||
#endif
|
||||
//
|
||||
setSn_CR(sn,Sn_CR_SEND);
|
||||
/* wait to process the command... */
|
||||
while(getSn_CR(sn));
|
||||
while(1)
|
||||
{
|
||||
tmp = getSn_IR(sn);
|
||||
if(tmp & Sn_IR_SENDOK)
|
||||
{
|
||||
setSn_IR(sn, Sn_IR_SENDOK);
|
||||
break;
|
||||
}
|
||||
//M:20131104
|
||||
//else if(tmp & Sn_IR_TIMEOUT) return SOCKERR_TIMEOUT;
|
||||
else if(tmp & Sn_IR_TIMEOUT)
|
||||
{
|
||||
setSn_IR(sn, Sn_IR_TIMEOUT);
|
||||
//M20150409 : Fixed the lost of sign bits by type casting.
|
||||
//len = (uint16_t)SOCKERR_TIMEOUT;
|
||||
//break;
|
||||
#if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
|
||||
if(taddr) setSUBR((uint8_t*)&taddr);
|
||||
#endif
|
||||
return SOCKERR_TIMEOUT;
|
||||
}
|
||||
////////////
|
||||
}
|
||||
#if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
|
||||
if(taddr) setSUBR((uint8_t*)&taddr);
|
||||
#endif
|
||||
//M20150409 : Explicit Type Casting
|
||||
//return len;
|
||||
return (int32_t)len;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int32_t recvfrom(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t *port)
|
||||
{
|
||||
//M20150601 : For W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
uint16_t mr;
|
||||
uint16_t mr1;
|
||||
#else
|
||||
uint8_t mr;
|
||||
#endif
|
||||
//
|
||||
uint8_t head[8];
|
||||
uint16_t pack_len=0;
|
||||
|
||||
CHECK_SOCKNUM();
|
||||
//CHECK_SOCKMODE(Sn_MR_UDP);
|
||||
//A20150601
|
||||
#if _WIZCHIP_ == 5300
|
||||
mr1 = getMR();
|
||||
#endif
|
||||
|
||||
switch((mr=getSn_MR(sn)) & 0x0F)
|
||||
{
|
||||
case Sn_MR_UDP:
|
||||
case Sn_MR_IPRAW:
|
||||
case Sn_MR_MACRAW:
|
||||
break;
|
||||
#if ( _WIZCHIP_ < 5200 )
|
||||
case Sn_MR_PPPoE:
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return SOCKERR_SOCKMODE;
|
||||
}
|
||||
CHECK_SOCKDATA();
|
||||
if(sock_remained_size[sn] == 0)
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
pack_len = getSn_RX_RSR(sn);
|
||||
if(getSn_SR(sn) == SOCK_CLOSED) return SOCKERR_SOCKCLOSED;
|
||||
if( (sock_io_mode & (1<<sn)) && (pack_len == 0) ) return SOCK_BUSY;
|
||||
if(pack_len != 0) break;
|
||||
};
|
||||
}
|
||||
//D20150601 : Move it to bottom
|
||||
// sock_pack_info[sn] = PACK_COMPLETED;
|
||||
switch (mr & 0x07)
|
||||
{
|
||||
case Sn_MR_UDP :
|
||||
if(sock_remained_size[sn] == 0)
|
||||
{
|
||||
wiz_recv_data(sn, head, 8);
|
||||
setSn_CR(sn,Sn_CR_RECV);
|
||||
while(getSn_CR(sn));
|
||||
// read peer's IP address, port number & packet length
|
||||
//A20150601 : For W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
if(mr1 & MR_FS)
|
||||
{
|
||||
addr[0] = head[1];
|
||||
addr[1] = head[0];
|
||||
addr[2] = head[3];
|
||||
addr[3] = head[2];
|
||||
*port = head[5];
|
||||
*port = (*port << 8) + head[4];
|
||||
sock_remained_size[sn] = head[7];
|
||||
sock_remained_size[sn] = (sock_remained_size[sn] << 8) + head[6];
|
||||
}
|
||||
else
|
||||
{
|
||||
#endif
|
||||
addr[0] = head[0];
|
||||
addr[1] = head[1];
|
||||
addr[2] = head[2];
|
||||
addr[3] = head[3];
|
||||
*port = head[4];
|
||||
*port = (*port << 8) + head[5];
|
||||
sock_remained_size[sn] = head[6];
|
||||
sock_remained_size[sn] = (sock_remained_size[sn] << 8) + head[7];
|
||||
#if _WIZCHIP_ == 5300
|
||||
}
|
||||
#endif
|
||||
sock_pack_info[sn] = PACK_FIRST;
|
||||
}
|
||||
if(len < sock_remained_size[sn]) pack_len = len;
|
||||
else pack_len = sock_remained_size[sn];
|
||||
//A20150601 : For W5300
|
||||
len = pack_len;
|
||||
#if _WIZCHIP_ == 5300
|
||||
if(sock_pack_info[sn] & PACK_FIFOBYTE)
|
||||
{
|
||||
*buf++ = sock_remained_byte[sn];
|
||||
pack_len -= 1;
|
||||
sock_remained_size[sn] -= 1;
|
||||
sock_pack_info[sn] &= ~PACK_FIFOBYTE;
|
||||
}
|
||||
#endif
|
||||
//
|
||||
// Need to packet length check (default 1472)
|
||||
//
|
||||
wiz_recv_data(sn, buf, pack_len); // data copy.
|
||||
break;
|
||||
case Sn_MR_MACRAW :
|
||||
if(sock_remained_size[sn] == 0)
|
||||
{
|
||||
wiz_recv_data(sn, head, 2);
|
||||
setSn_CR(sn,Sn_CR_RECV);
|
||||
while(getSn_CR(sn));
|
||||
// read peer's IP address, port number & packet length
|
||||
sock_remained_size[sn] = head[0];
|
||||
sock_remained_size[sn] = (sock_remained_size[sn] <<8) + head[1] -2;
|
||||
#if _WIZCHIP_ == W5300
|
||||
if(sock_remained_size[sn] & 0x01)
|
||||
sock_remained_size[sn] = sock_remained_size[sn] + 1 - 4;
|
||||
else
|
||||
sock_remained_size[sn] -= 4;
|
||||
#endif
|
||||
if(sock_remained_size[sn] > 1514)
|
||||
{
|
||||
close(sn);
|
||||
return SOCKFATAL_PACKLEN;
|
||||
}
|
||||
sock_pack_info[sn] = PACK_FIRST;
|
||||
}
|
||||
if(len < sock_remained_size[sn]) pack_len = len;
|
||||
else pack_len = sock_remained_size[sn];
|
||||
wiz_recv_data(sn,buf,pack_len);
|
||||
break;
|
||||
//#if ( _WIZCHIP_ < 5200 )
|
||||
case Sn_MR_IPRAW:
|
||||
if(sock_remained_size[sn] == 0)
|
||||
{
|
||||
wiz_recv_data(sn, head, 6);
|
||||
setSn_CR(sn,Sn_CR_RECV);
|
||||
while(getSn_CR(sn));
|
||||
addr[0] = head[0];
|
||||
addr[1] = head[1];
|
||||
addr[2] = head[2];
|
||||
addr[3] = head[3];
|
||||
sock_remained_size[sn] = head[4];
|
||||
//M20150401 : For Typing Error
|
||||
//sock_remaiend_size[sn] = (sock_remained_size[sn] << 8) + head[5];
|
||||
sock_remained_size[sn] = (sock_remained_size[sn] << 8) + head[5];
|
||||
sock_pack_info[sn] = PACK_FIRST;
|
||||
}
|
||||
//
|
||||
// Need to packet length check
|
||||
//
|
||||
if(len < sock_remained_size[sn]) pack_len = len;
|
||||
else pack_len = sock_remained_size[sn];
|
||||
wiz_recv_data(sn, buf, pack_len); // data copy.
|
||||
break;
|
||||
//#endif
|
||||
default:
|
||||
wiz_recv_ignore(sn, pack_len); // data copy.
|
||||
sock_remained_size[sn] = pack_len;
|
||||
break;
|
||||
}
|
||||
setSn_CR(sn,Sn_CR_RECV);
|
||||
/* wait to process the command... */
|
||||
while(getSn_CR(sn)) ;
|
||||
sock_remained_size[sn] -= pack_len;
|
||||
//M20150601 :
|
||||
//if(sock_remained_size[sn] != 0) sock_pack_info[sn] |= 0x01;
|
||||
if(sock_remained_size[sn] != 0)
|
||||
{
|
||||
sock_pack_info[sn] |= PACK_REMAINED;
|
||||
#if _WIZCHIP_ == 5300
|
||||
if(pack_len & 0x01) sock_pack_info[sn] |= PACK_FIFOBYTE;
|
||||
#endif
|
||||
}
|
||||
else sock_pack_info[sn] = PACK_COMPLETED;
|
||||
#if _WIZCHIP_ == 5300
|
||||
pack_len = len;
|
||||
#endif
|
||||
//
|
||||
//M20150409 : Explicit Type Casting
|
||||
//return pack_len;
|
||||
return (int32_t)pack_len;
|
||||
}
|
||||
|
||||
|
||||
int8_t ctlsocket(uint8_t sn, ctlsock_type cstype, void* arg)
|
||||
{
|
||||
uint8_t tmp = 0;
|
||||
CHECK_SOCKNUM();
|
||||
switch(cstype)
|
||||
{
|
||||
case CS_SET_IOMODE:
|
||||
tmp = *((uint8_t*)arg);
|
||||
if(tmp == SOCK_IO_NONBLOCK) sock_io_mode |= (1<<sn);
|
||||
else if(tmp == SOCK_IO_BLOCK) sock_io_mode &= ~(1<<sn);
|
||||
else return SOCKERR_ARG;
|
||||
break;
|
||||
case CS_GET_IOMODE:
|
||||
//M20140501 : implict type casting -> explict type casting
|
||||
//*((uint8_t*)arg) = (sock_io_mode >> sn) & 0x0001;
|
||||
*((uint8_t*)arg) = (uint8_t)((sock_io_mode >> sn) & 0x0001);
|
||||
//
|
||||
break;
|
||||
case CS_GET_MAXTXBUF:
|
||||
*((uint16_t*)arg) = getSn_TxMAX(sn);
|
||||
break;
|
||||
case CS_GET_MAXRXBUF:
|
||||
*((uint16_t*)arg) = getSn_RxMAX(sn);
|
||||
break;
|
||||
case CS_CLR_INTERRUPT:
|
||||
if( (*(uint8_t*)arg) > SIK_ALL) return SOCKERR_ARG;
|
||||
setSn_IR(sn,*(uint8_t*)arg);
|
||||
break;
|
||||
case CS_GET_INTERRUPT:
|
||||
*((uint8_t*)arg) = getSn_IR(sn);
|
||||
break;
|
||||
#if _WIZCHIP_ != 5100
|
||||
case CS_SET_INTMASK:
|
||||
if( (*(uint8_t*)arg) > SIK_ALL) return SOCKERR_ARG;
|
||||
setSn_IMR(sn,*(uint8_t*)arg);
|
||||
break;
|
||||
case CS_GET_INTMASK:
|
||||
*((uint8_t*)arg) = getSn_IMR(sn);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return SOCKERR_ARG;
|
||||
}
|
||||
return SOCK_OK;
|
||||
}
|
||||
|
||||
int8_t setsockopt(uint8_t sn, sockopt_type sotype, void* arg)
|
||||
{
|
||||
// M20131220 : Remove warning
|
||||
//uint8_t tmp;
|
||||
CHECK_SOCKNUM();
|
||||
switch(sotype)
|
||||
{
|
||||
case SO_TTL:
|
||||
setSn_TTL(sn,*(uint8_t*)arg);
|
||||
break;
|
||||
case SO_TOS:
|
||||
setSn_TOS(sn,*(uint8_t*)arg);
|
||||
break;
|
||||
case SO_MSS:
|
||||
setSn_MSSR(sn,*(uint16_t*)arg);
|
||||
break;
|
||||
case SO_DESTIP:
|
||||
setSn_DIPR(sn, (uint8_t*)arg);
|
||||
break;
|
||||
case SO_DESTPORT:
|
||||
setSn_DPORT(sn, *(uint16_t*)arg);
|
||||
break;
|
||||
#if _WIZCHIP_ != 5100
|
||||
case SO_KEEPALIVESEND:
|
||||
CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
#if _WIZCHIP_ > 5200
|
||||
if(getSn_KPALVTR(sn) != 0) return SOCKERR_SOCKOPT;
|
||||
#endif
|
||||
setSn_CR(sn,Sn_CR_SEND_KEEP);
|
||||
while(getSn_CR(sn) != 0)
|
||||
{
|
||||
// M20131220
|
||||
//if ((tmp = getSn_IR(sn)) & Sn_IR_TIMEOUT)
|
||||
if (getSn_IR(sn) & Sn_IR_TIMEOUT)
|
||||
{
|
||||
setSn_IR(sn, Sn_IR_TIMEOUT);
|
||||
return SOCKERR_TIMEOUT;
|
||||
}
|
||||
}
|
||||
break;
|
||||
#if _WIZCHIP_ > 5200
|
||||
case SO_KEEPALIVEAUTO:
|
||||
CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
setSn_KPALVTR(sn,*(uint8_t*)arg);
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
default:
|
||||
return SOCKERR_ARG;
|
||||
}
|
||||
return SOCK_OK;
|
||||
}
|
||||
|
||||
int8_t getsockopt(uint8_t sn, sockopt_type sotype, void* arg)
|
||||
{
|
||||
CHECK_SOCKNUM();
|
||||
switch(sotype)
|
||||
{
|
||||
case SO_FLAG:
|
||||
*(uint8_t*)arg = getSn_MR(sn) & 0xF0;
|
||||
break;
|
||||
case SO_TTL:
|
||||
*(uint8_t*) arg = getSn_TTL(sn);
|
||||
break;
|
||||
case SO_TOS:
|
||||
*(uint8_t*) arg = getSn_TOS(sn);
|
||||
break;
|
||||
case SO_MSS:
|
||||
*(uint16_t*) arg = getSn_MSSR(sn);
|
||||
break;
|
||||
case SO_DESTIP:
|
||||
getSn_DIPR(sn, (uint8_t*)arg);
|
||||
break;
|
||||
case SO_DESTPORT:
|
||||
*(uint16_t*) arg = getSn_DPORT(sn);
|
||||
break;
|
||||
#if _WIZCHIP_ > 5200
|
||||
case SO_KEEPALIVEAUTO:
|
||||
CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
*(uint16_t*) arg = getSn_KPALVTR(sn);
|
||||
break;
|
||||
#endif
|
||||
case SO_SENDBUF:
|
||||
*(uint16_t*) arg = getSn_TX_FSR(sn);
|
||||
break;
|
||||
case SO_RECVBUF:
|
||||
*(uint16_t*) arg = getSn_RX_RSR(sn);
|
||||
break;
|
||||
case SO_STATUS:
|
||||
*(uint8_t*) arg = getSn_SR(sn);
|
||||
break;
|
||||
case SO_REMAINSIZE:
|
||||
if(getSn_MR(sn) & Sn_MR_TCP)
|
||||
*(uint16_t*)arg = getSn_RX_RSR(sn);
|
||||
else
|
||||
*(uint16_t*)arg = sock_remained_size[sn];
|
||||
break;
|
||||
case SO_PACKINFO:
|
||||
//CHECK_SOCKMODE(Sn_MR_TCP);
|
||||
#if _WIZCHIP_ != 5300
|
||||
if((getSn_MR(sn) == Sn_MR_TCP))
|
||||
return SOCKERR_SOCKMODE;
|
||||
#endif
|
||||
*(uint8_t*)arg = sock_pack_info[sn];
|
||||
break;
|
||||
default:
|
||||
return SOCKERR_SOCKOPT;
|
||||
}
|
||||
return SOCK_OK;
|
||||
}
|
||||
@ -0,0 +1,489 @@
|
||||
//*****************************************************************************
|
||||
//
|
||||
//! \file socket.h
|
||||
//! \brief SOCKET APIs Header file.
|
||||
//! \details SOCKET APIs like as berkeley socket api.
|
||||
//! \version 1.0.2
|
||||
//! \date 2013/10/21
|
||||
//! \par Revision history
|
||||
//! <2015/02/05> Notice
|
||||
//! The version history is not updated after this point.
|
||||
//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary.
|
||||
//! >> https://github.com/Wiznet/ioLibrary_Driver
|
||||
//! <2014/05/01> V1.0.2. Refer to M20140501
|
||||
//! 1. Modify the comment : SO_REMAINED -> PACK_REMAINED
|
||||
//! 2. Add the comment as zero byte udp data reception in getsockopt().
|
||||
//! <2013/10/21> 1st Release
|
||||
//! \author MidnightCow
|
||||
//! \copyright
|
||||
//!
|
||||
//! Copyright (c) 2013, WIZnet Co., LTD.
|
||||
//! All rights reserved.
|
||||
//!
|
||||
//! Redistribution and use in source and binary forms, with or without
|
||||
//! modification, are permitted provided that the following conditions
|
||||
//! are met:
|
||||
//!
|
||||
//! * Redistributions of source code must retain the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer.
|
||||
//! * Redistributions in binary form must reproduce the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer in the
|
||||
//! documentation and/or other materials provided with the distribution.
|
||||
//! * Neither the name of the <ORGANIZATION> nor the names of its
|
||||
//! contributors may be used to endorse or promote products derived
|
||||
//! from this software without specific prior written permission.
|
||||
//!
|
||||
//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
//! THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//*****************************************************************************
|
||||
/**
|
||||
* @defgroup WIZnet_socket_APIs 1. WIZnet socket APIs
|
||||
* @brief WIZnet socket APIs are based on Berkeley socket APIs, thus it has much similar name and interface.
|
||||
* But there is a little bit of difference.
|
||||
* @details
|
||||
* <b> Comparison between WIZnet and Berkeley SOCKET APIs </b>
|
||||
* <table>
|
||||
* <tr> <td><b>API</b></td> <td><b>WIZnet</b></td> <td><b>Berkeley</b></td> </tr>
|
||||
* <tr> <td>socket()</td> <td>O</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>bind()</b></td> <td>X</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>listen()</b></td> <td>O</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>connect()</b></td> <td>O</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>accept()</b></td> <td>X</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>recv()</b></td> <td>O</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>send()</b></td> <td>O</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>recvfrom()</b></td> <td>O</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>sendto()</b></td> <td>O</td> <td>O</td> </tr>
|
||||
* <tr> <td><b>closesocket()</b></td> <td>O<br>close() & disconnect()</td> <td>O</td> </tr>
|
||||
* </table>
|
||||
* There are @b bind() and @b accept() functions in @b Berkeley SOCKET API but,
|
||||
* not in @b WIZnet SOCKET API. Because socket() of WIZnet is not only creating a SOCKET but also binding a local port number,
|
||||
* and listen() of WIZnet is not only listening to connection request from client but also accepting the connection request. \n
|
||||
* When you program "TCP SERVER" with Berkeley SOCKET API, you can use only one listen port.
|
||||
* When the listen SOCKET accepts a connection request from a client, it keeps listening.
|
||||
* After accepting the connection request, a new SOCKET is created and the new SOCKET is used in communication with the client. \n
|
||||
* Following figure shows network flow diagram by Berkeley SOCKET API.
|
||||
* @image html Berkeley_SOCKET.jpg "<Berkeley SOCKET API>"
|
||||
* But, When you program "TCP SERVER" with WIZnet SOCKET API, you can use as many as 8 listen SOCKET with same port number. \n
|
||||
* Because there's no accept() in WIZnet SOCKET APIs, when the listen SOCKET accepts a connection request from a client,
|
||||
* it is changed in order to communicate with the client.
|
||||
* And the changed SOCKET is not listening any more and is dedicated for communicating with the client. \n
|
||||
* If there're many listen SOCKET with same listen port number and a client requests a connection,
|
||||
* the SOCKET which has the smallest SOCKET number accepts the request and is changed as communication SOCKET. \n
|
||||
* Following figure shows network flow diagram by WIZnet SOCKET API.
|
||||
* @image html WIZnet_SOCKET.jpg "<WIZnet SOCKET API>"
|
||||
*/
|
||||
#ifndef _SOCKET_H_
|
||||
#define _SOCKET_H_
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "wizchip_conf.h"
|
||||
|
||||
#define SOCKET uint8_t ///< SOCKET type define for legacy driver
|
||||
|
||||
#define SOCK_OK 1 ///< Result is OK about socket process.
|
||||
#define SOCK_BUSY 0 ///< Socket is busy on processing the operation. Valid only Non-block IO Mode.
|
||||
#define SOCK_FATAL -1000 ///< Result is fatal error about socket process.
|
||||
|
||||
#define SOCK_ERROR 0
|
||||
#define SOCKERR_SOCKNUM (SOCK_ERROR - 1) ///< Invalid socket number
|
||||
#define SOCKERR_SOCKOPT (SOCK_ERROR - 2) ///< Invalid socket option
|
||||
#define SOCKERR_SOCKINIT (SOCK_ERROR - 3) ///< Socket is not initialized or SIPR is Zero IP address when Sn_MR_TCP
|
||||
#define SOCKERR_SOCKCLOSED (SOCK_ERROR - 4) ///< Socket unexpectedly closed.
|
||||
#define SOCKERR_SOCKMODE (SOCK_ERROR - 5) ///< Invalid socket mode for socket operation.
|
||||
#define SOCKERR_SOCKFLAG (SOCK_ERROR - 6) ///< Invalid socket flag
|
||||
#define SOCKERR_SOCKSTATUS (SOCK_ERROR - 7) ///< Invalid socket status for socket operation.
|
||||
#define SOCKERR_ARG (SOCK_ERROR - 10) ///< Invalid argument.
|
||||
#define SOCKERR_PORTZERO (SOCK_ERROR - 11) ///< Port number is zero
|
||||
#define SOCKERR_IPINVALID (SOCK_ERROR - 12) ///< Invalid IP address
|
||||
#define SOCKERR_TIMEOUT (SOCK_ERROR - 13) ///< Timeout occurred
|
||||
#define SOCKERR_DATALEN (SOCK_ERROR - 14) ///< Data length is zero or greater than buffer max size.
|
||||
#define SOCKERR_BUFFER (SOCK_ERROR - 15) ///< Socket buffer is not enough for data communication.
|
||||
|
||||
#define SOCKFATAL_PACKLEN (SOCK_FATAL - 1) ///< Invalid packet length. Fatal Error.
|
||||
|
||||
/*
|
||||
* SOCKET FLAG
|
||||
*/
|
||||
#define SF_ETHER_OWN (Sn_MR_MFEN) ///< In @ref Sn_MR_MACRAW, Receive only the packet as broadcast, multicast and own packet
|
||||
#define SF_IGMP_VER2 (Sn_MR_MC) ///< In @ref Sn_MR_UDP with \ref SF_MULTI_ENABLE, Select IGMP version 2.
|
||||
#define SF_TCP_NODELAY (Sn_MR_ND) ///< In @ref Sn_MR_TCP, Use to nodelayed ack.
|
||||
#define SF_MULTI_ENABLE (Sn_MR_MULTI) ///< In @ref Sn_MR_UDP, Enable multicast mode.
|
||||
|
||||
#if _WIZCHIP_ == 5500
|
||||
#define SF_BROAD_BLOCK (Sn_MR_BCASTB) ///< In @ref Sn_MR_UDP or @ref Sn_MR_MACRAW, Block broadcast packet. Valid only in W5500
|
||||
#define SF_MULTI_BLOCK (Sn_MR_MMB) ///< In @ref Sn_MR_MACRAW, Block multicast packet. Valid only in W5500
|
||||
#define SF_IPv6_BLOCK (Sn_MR_MIP6B) ///< In @ref Sn_MR_MACRAW, Block IPv6 packet. Valid only in W5500
|
||||
#define SF_UNI_BLOCK (Sn_MR_UCASTB) ///< In @ref Sn_MR_UDP with \ref SF_MULTI_ENABLE. Valid only in W5500
|
||||
#endif
|
||||
|
||||
//A201505 : For W5300
|
||||
#if _WIZCHIP_ == 5300
|
||||
#define SF_TCP_ALIGN 0x02 ///< Valid only \ref Sn_MR_TCP and W5300, refer to \ref Sn_MR_ALIGN
|
||||
#endif
|
||||
|
||||
#define SF_IO_NONBLOCK 0x01 ///< Socket nonblock io mode. It used parameter in \ref socket().
|
||||
|
||||
/*
|
||||
* UDP & MACRAW Packet Infomation
|
||||
*/
|
||||
#define PACK_FIRST 0x80 ///< In Non-TCP packet, It indicates to start receiving a packet. (When W5300, This flag can be applied)
|
||||
#define PACK_REMAINED 0x01 ///< In Non-TCP packet, It indicates to remain a packet to be received. (When W5300, This flag can be applied)
|
||||
#define PACK_COMPLETED 0x00 ///< In Non-TCP packet, It indicates to complete to receive a packet. (When W5300, This flag can be applied)
|
||||
//A20150601 : For Integrating with W5300
|
||||
#define PACK_FIFOBYTE 0x02 ///< Valid only W5300, It indicate to have read already the Sn_RX_FIFOR.
|
||||
//
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Open a socket.
|
||||
* @details Initializes the socket with 'sn' passed as parameter and open.
|
||||
*
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
* @param protocol Protocol type to operate such as TCP, UDP and MACRAW.
|
||||
* @param port Port number to be bined.
|
||||
* @param flag Socket flags as \ref SF_ETHER_OWN, \ref SF_IGMP_VER2, \ref SF_TCP_NODELAY, \ref SF_MULTI_ENABLE, \ref SF_IO_NONBLOCK and so on.\n
|
||||
* Valid flags only in W5500 : @ref SF_BROAD_BLOCK, @ref SF_MULTI_BLOCK, @ref SF_IPv6_BLOCK, and @ref SF_UNI_BLOCK.
|
||||
* @sa Sn_MR
|
||||
*
|
||||
* @return @b Success : The socket number @b 'sn' passed as parameter\n
|
||||
* @b Fail :\n @ref SOCKERR_SOCKNUM - Invalid socket number\n
|
||||
* @ref SOCKERR_SOCKMODE - Not support socket mode as TCP, UDP, and so on. \n
|
||||
* @ref SOCKERR_SOCKFLAG - Invaild socket flag.
|
||||
*/
|
||||
int8_t socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Close a socket.
|
||||
* @details It closes the socket with @b'sn' passed as parameter.
|
||||
*
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
*
|
||||
* @return @b Success : @ref SOCK_OK \n
|
||||
* @b Fail : @ref SOCKERR_SOCKNUM - Invalid socket number
|
||||
*/
|
||||
int8_t close(uint8_t sn);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Listen to a connection request from a client.
|
||||
* @details It is listening to a connection request from a client.
|
||||
* If connection request is accepted successfully, the connection is established. Socket sn is used in passive(server) mode.
|
||||
*
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
* @return @b Success : @ref SOCK_OK \n
|
||||
* @b Fail :\n @ref SOCKERR_SOCKINIT - Socket is not initialized \n
|
||||
* @ref SOCKERR_SOCKCLOSED - Socket closed unexpectedly.
|
||||
*/
|
||||
int8_t listen(uint8_t sn);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Try to connect a server.
|
||||
* @details It requests connection to the server with destination IP address and port number passed as parameter.\n
|
||||
* @note It is valid only in TCP client mode.
|
||||
* In block io mode, it does not return until connection is completed.
|
||||
* In Non-block io mode, it return @ref SOCK_BUSY immediately.
|
||||
*
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
* @param addr Pointer variable of destination IP address. It should be allocated 4 bytes.
|
||||
* @param port Destination port number.
|
||||
*
|
||||
* @return @b Success : @ref SOCK_OK \n
|
||||
* @b Fail :\n @ref SOCKERR_SOCKNUM - Invalid socket number\n
|
||||
* @ref SOCKERR_SOCKMODE - Invalid socket mode\n
|
||||
* @ref SOCKERR_SOCKINIT - Socket is not initialized\n
|
||||
* @ref SOCKERR_IPINVALID - Wrong server IP address\n
|
||||
* @ref SOCKERR_PORTZERO - Server port zero\n
|
||||
* @ref SOCKERR_TIMEOUT - Timeout occurred during request connection\n
|
||||
* @ref SOCK_BUSY - In non-block io mode, it returned immediately\n
|
||||
*/
|
||||
int8_t connect(uint8_t sn, uint8_t * addr, uint16_t port);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Try to disconnect a connection socket.
|
||||
* @details It sends request message to disconnect the TCP socket 'sn' passed as parameter to the server or client.
|
||||
* @note It is valid only in TCP server or client mode. \n
|
||||
* In block io mode, it does not return until disconnection is completed. \n
|
||||
* In Non-block io mode, it return @ref SOCK_BUSY immediately. \n
|
||||
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
* @return @b Success : @ref SOCK_OK \n
|
||||
* @b Fail :\n @ref SOCKERR_SOCKNUM - Invalid socket number \n
|
||||
* @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n
|
||||
* @ref SOCKERR_TIMEOUT - Timeout occurred \n
|
||||
* @ref SOCK_BUSY - Socket is busy.
|
||||
*/
|
||||
int8_t disconnect(uint8_t sn);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Send data to the connected peer in TCP socket.
|
||||
* @details It is used to send outgoing data to the connected socket.
|
||||
* @note It is valid only in TCP server or client mode. It can't send data greater than socket buffer size. \n
|
||||
* In block io mode, It doesn't return until data send is completed - socket buffer size is greater than data. \n
|
||||
* In non-block io mode, It return @ref SOCK_BUSY immediately when socket buffer is not enough. \n
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
* @param buf Pointer buffer containing data to be sent.
|
||||
* @param len The byte length of data in buf.
|
||||
* @return @b Success : The sent data size \n
|
||||
* @b Fail : \n @ref SOCKERR_SOCKSTATUS - Invalid socket status for socket operation \n
|
||||
* @ref SOCKERR_TIMEOUT - Timeout occurred \n
|
||||
* @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n
|
||||
* @ref SOCKERR_SOCKNUM - Invalid socket number \n
|
||||
* @ref SOCKERR_DATALEN - zero data length \n
|
||||
* @ref SOCK_BUSY - Socket is busy.
|
||||
*/
|
||||
int32_t send(uint8_t sn, uint8_t * buf, uint16_t len);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Receive data from the connected peer.
|
||||
* @details It is used to read incoming data from the connected socket.\n
|
||||
* It waits for data as much as the application wants to receive.
|
||||
* @note It is valid only in TCP server or client mode. It can't receive data greater than socket buffer size. \n
|
||||
* In block io mode, it doesn't return until data reception is completed - data is filled as <I>len</I> in socket buffer. \n
|
||||
* In non-block io mode, it return @ref SOCK_BUSY immediately when <I>len</I> is greater than data size in socket buffer. \n
|
||||
*
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
* @param buf Pointer buffer to read incoming data.
|
||||
* @param len The max data length of data in buf.
|
||||
* @return @b Success : The real received data size \n
|
||||
* @b Fail :\n
|
||||
* @ref SOCKERR_SOCKSTATUS - Invalid socket status for socket operation \n
|
||||
* @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n
|
||||
* @ref SOCKERR_SOCKNUM - Invalid socket number \n
|
||||
* @ref SOCKERR_DATALEN - zero data length \n
|
||||
* @ref SOCK_BUSY - Socket is busy.
|
||||
*/
|
||||
int32_t recv(uint8_t sn, uint8_t * buf, uint16_t len);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Sends datagram to the peer with destination IP address and port number passed as parameter.
|
||||
* @details It sends datagram of UDP or MACRAW to the peer with destination IP address and port number passed as parameter.\n
|
||||
* Even if the connectionless socket has been previously connected to a specific address,
|
||||
* the address and port number parameters override the destination address for that particular datagram only.
|
||||
* @note In block io mode, It doesn't return until data send is completed - socket buffer size is greater than <I>len</I>.
|
||||
* In non-block io mode, It return @ref SOCK_BUSY immediately when socket buffer is not enough.
|
||||
*
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
* @param buf Pointer buffer to send outgoing data.
|
||||
* @param len The byte length of data in buf.
|
||||
* @param addr Pointer variable of destination IP address. It should be allocated 4 bytes.
|
||||
* @param port Destination port number.
|
||||
*
|
||||
* @return @b Success : The sent data size \n
|
||||
* @b Fail :\n @ref SOCKERR_SOCKNUM - Invalid socket number \n
|
||||
* @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n
|
||||
* @ref SOCKERR_SOCKSTATUS - Invalid socket status for socket operation \n
|
||||
* @ref SOCKERR_DATALEN - zero data length \n
|
||||
* @ref SOCKERR_IPINVALID - Wrong server IP address\n
|
||||
* @ref SOCKERR_PORTZERO - Server port zero\n
|
||||
* @ref SOCKERR_SOCKCLOSED - Socket unexpectedly closed \n
|
||||
* @ref SOCKERR_TIMEOUT - Timeout occurred \n
|
||||
* @ref SOCK_BUSY - Socket is busy.
|
||||
*/
|
||||
int32_t sendto(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Receive datagram of UDP or MACRAW
|
||||
* @details This function is an application I/F function which is used to receive the data in other then TCP mode. \n
|
||||
* This function is used to receive UDP and MAC_RAW mode, and handle the header as well.
|
||||
* This function can divide to received the packet data.
|
||||
* On the MACRAW SOCKET, the addr and port parameters are ignored.
|
||||
* @note In block io mode, it doesn't return until data reception is completed - data is filled as <I>len</I> in socket buffer
|
||||
* In non-block io mode, it return @ref SOCK_BUSY immediately when <I>len</I> is greater than data size in socket buffer.
|
||||
*
|
||||
* @param sn Socket number. It should be <b>0 ~ @ref \_WIZCHIP_SOCK_NUM_</b>.
|
||||
* @param buf Pointer buffer to read incoming data.
|
||||
* @param len The max data length of data in buf.
|
||||
* When the received packet size <= len, receives data as packet sized.
|
||||
* When others, receives data as len.
|
||||
* @param addr Pointer variable of destination IP address. It should be allocated 4 bytes.
|
||||
* It is valid only when the first call recvfrom for receiving the packet.
|
||||
* When it is valid, @ref packinfo[7] should be set as '1' after call @ref getsockopt(sn, SO_PACKINFO, &packinfo).
|
||||
* @param port Pointer variable of destination port number.
|
||||
* It is valid only when the first call recvform for receiving the packet.
|
||||
* When it is valid, @ref packinfo[7] should be set as '1' after call @ref getsockopt(sn, SO_PACKINFO, &packinfo).
|
||||
*
|
||||
* @return @b Success : This function return real received data size for success.\n
|
||||
* @b Fail : @ref SOCKERR_DATALEN - zero data length \n
|
||||
* @ref SOCKERR_SOCKMODE - Invalid operation in the socket \n
|
||||
* @ref SOCKERR_SOCKNUM - Invalid socket number \n
|
||||
* @ref SOCKBUSY - Socket is busy.
|
||||
*/
|
||||
int32_t recvfrom(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t *port);
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// SOCKET CONTROL & OPTION //
|
||||
/////////////////////////////
|
||||
#define SOCK_IO_BLOCK 0 ///< Socket Block IO Mode in @ref setsockopt().
|
||||
#define SOCK_IO_NONBLOCK 1 ///< Socket Non-block IO Mode in @ref setsockopt().
|
||||
|
||||
/**
|
||||
* @defgroup DATA_TYPE DATA TYPE
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* @brief The kind of Socket Interrupt.
|
||||
* @sa Sn_IR, Sn_IMR, setSn_IR(), getSn_IR(), setSn_IMR(), getSn_IMR()
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
SIK_CONNECTED = (1 << 0), ///< connected
|
||||
SIK_DISCONNECTED = (1 << 1), ///< disconnected
|
||||
SIK_RECEIVED = (1 << 2), ///< data received
|
||||
SIK_TIMEOUT = (1 << 3), ///< timeout occurred
|
||||
SIK_SENT = (1 << 4), ///< send ok
|
||||
//M20150410 : Remove the comma of last member
|
||||
//SIK_ALL = 0x1F, ///< all interrupt
|
||||
SIK_ALL = 0x1F ///< all interrupt
|
||||
}sockint_kind;
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* @brief The type of @ref ctlsocket().
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
CS_SET_IOMODE, ///< set socket IO mode with @ref SOCK_IO_BLOCK or @ref SOCK_IO_NONBLOCK
|
||||
CS_GET_IOMODE, ///< get socket IO mode
|
||||
CS_GET_MAXTXBUF, ///< get the size of socket buffer allocated in TX memory
|
||||
CS_GET_MAXRXBUF, ///< get the size of socket buffer allocated in RX memory
|
||||
CS_CLR_INTERRUPT, ///< clear the interrupt of socket with @ref sockint_kind
|
||||
CS_GET_INTERRUPT, ///< get the socket interrupt. refer to @ref sockint_kind
|
||||
#if _WIZCHIP_ > 5100
|
||||
CS_SET_INTMASK, ///< set the interrupt mask of socket with @ref sockint_kind, Not supported in W5100
|
||||
CS_GET_INTMASK ///< get the masked interrupt of socket. refer to @ref sockint_kind, Not supported in W5100
|
||||
#endif
|
||||
}ctlsock_type;
|
||||
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* @brief The type of socket option in @ref setsockopt() or @ref getsockopt()
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
SO_FLAG, ///< Valid only in getsockopt(), For set flag of socket refer to <I>flag</I> in @ref socket().
|
||||
SO_TTL, ///< Set TTL. @ref Sn_TTL ( @ref setSn_TTL(), @ref getSn_TTL() )
|
||||
SO_TOS, ///< Set TOS. @ref Sn_TOS ( @ref setSn_TOS(), @ref getSn_TOS() )
|
||||
SO_MSS, ///< Set MSS. @ref Sn_MSSR ( @ref setSn_MSSR(), @ref getSn_MSSR() )
|
||||
SO_DESTIP, ///< Set the destination IP address. @ref Sn_DIPR ( @ref setSn_DIPR(), @ref getSn_DIPR() )
|
||||
SO_DESTPORT, ///< Set the destination Port number. @ref Sn_DPORT ( @ref setSn_DPORT(), @ref getSn_DPORT() )
|
||||
#if _WIZCHIP_ != 5100
|
||||
SO_KEEPALIVESEND, ///< Valid only in setsockopt. Manually send keep-alive packet in TCP mode, Not supported in W5100
|
||||
#if _WIZCHIP_ > 5200
|
||||
SO_KEEPALIVEAUTO, ///< Set/Get keep-alive auto transmission timer in TCP mode, Not supported in W5100, W5200
|
||||
#endif
|
||||
#endif
|
||||
SO_SENDBUF, ///< Valid only in getsockopt. Get the free data size of Socekt TX buffer. @ref Sn_TX_FSR, @ref getSn_TX_FSR()
|
||||
SO_RECVBUF, ///< Valid only in getsockopt. Get the received data size in socket RX buffer. @ref Sn_RX_RSR, @ref getSn_RX_RSR()
|
||||
SO_STATUS, ///< Valid only in getsockopt. Get the socket status. @ref Sn_SR, @ref getSn_SR()
|
||||
SO_REMAINSIZE, ///< Valid only in getsockopt. Get the remained packet size in other then TCP mode.
|
||||
SO_PACKINFO ///< Valid only in getsockopt. Get the packet information as @ref PACK_FIRST, @ref PACK_REMAINED, and @ref PACK_COMPLETED in other then TCP mode.
|
||||
}sockopt_type;
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief Control socket.
|
||||
* @details Control IO mode, Interrupt & Mask of socket and get the socket buffer information.
|
||||
* Refer to @ref ctlsock_type.
|
||||
* @param sn socket number
|
||||
* @param cstype type of control socket. refer to @ref ctlsock_type.
|
||||
* @param arg Data type and value is determined according to @ref ctlsock_type. \n
|
||||
* <table>
|
||||
* <tr> <td> @b cstype </td> <td> @b data type</td><td>@b value</td></tr>
|
||||
* <tr> <td> @ref CS_SET_IOMODE \n @ref CS_GET_IOMODE </td> <td> uint8_t </td><td>@ref SOCK_IO_BLOCK @ref SOCK_IO_NONBLOCK</td></tr>
|
||||
* <tr> <td> @ref CS_GET_MAXTXBUF \n @ref CS_GET_MAXRXBUF </td> <td> uint16_t </td><td> 0 ~ 16K </td></tr>
|
||||
* <tr> <td> @ref CS_CLR_INTERRUPT \n @ref CS_GET_INTERRUPT \n @ref CS_SET_INTMASK \n @ref CS_GET_INTMASK </td> <td> @ref sockint_kind </td><td> @ref SIK_CONNECTED, etc. </td></tr>
|
||||
* </table>
|
||||
* @return @b Success @ref SOCK_OK \n
|
||||
* @b fail @ref SOCKERR_ARG - Invalid argument\n
|
||||
*/
|
||||
int8_t ctlsocket(uint8_t sn, ctlsock_type cstype, void* arg);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief set socket options
|
||||
* @details Set socket option like as TTL, MSS, TOS, and so on. Refer to @ref sockopt_type.
|
||||
*
|
||||
* @param sn socket number
|
||||
* @param sotype socket option type. refer to @ref sockopt_type
|
||||
* @param arg Data type and value is determined according to <I>sotype</I>. \n
|
||||
* <table>
|
||||
* <tr> <td> @b sotype </td> <td> @b data type</td><td>@b value</td></tr>
|
||||
* <tr> <td> @ref SO_TTL </td> <td> uint8_t </td><td> 0 ~ 255 </td> </tr>
|
||||
* <tr> <td> @ref SO_TOS </td> <td> uint8_t </td><td> 0 ~ 255 </td> </tr>
|
||||
* <tr> <td> @ref SO_MSS </td> <td> uint16_t </td><td> 0 ~ 65535 </td> </tr>
|
||||
* <tr> <td> @ref SO_DESTIP </td> <td> uint8_t[4] </td><td> </td></tr>
|
||||
* <tr> <td> @ref SO_DESTPORT </td> <td> uint16_t </td><td> 0 ~ 65535 </td></tr>
|
||||
* <tr> <td> @ref SO_KEEPALIVESEND </td> <td> null </td><td> null </td></tr>
|
||||
* <tr> <td> @ref SO_KEEPALIVEAUTO </td> <td> uint8_t </td><td> 0 ~ 255 </td></tr>
|
||||
* </table>
|
||||
* @return
|
||||
* - @b Success : @ref SOCK_OK \n
|
||||
* - @b Fail
|
||||
* - @ref SOCKERR_SOCKNUM - Invalid Socket number \n
|
||||
* - @ref SOCKERR_SOCKMODE - Invalid socket mode \n
|
||||
* - @ref SOCKERR_SOCKOPT - Invalid socket option or its value \n
|
||||
* - @ref SOCKERR_TIMEOUT - Timeout occurred when sending keep-alive packet \n
|
||||
*/
|
||||
int8_t setsockopt(uint8_t sn, sockopt_type sotype, void* arg);
|
||||
|
||||
/**
|
||||
* @ingroup WIZnet_socket_APIs
|
||||
* @brief get socket options
|
||||
* @details Get socket option like as FLAG, TTL, MSS, and so on. Refer to @ref sockopt_type
|
||||
* @param sn socket number
|
||||
* @param sotype socket option type. refer to @ref sockopt_type
|
||||
* @param arg Data type and value is determined according to <I>sotype</I>. \n
|
||||
* <table>
|
||||
* <tr> <td> @b sotype </td> <td>@b data type</td><td>@b value</td></tr>
|
||||
* <tr> <td> @ref SO_FLAG </td> <td> uint8_t </td><td> @ref SF_ETHER_OWN, etc... </td> </tr>
|
||||
* <tr> <td> @ref SO_TOS </td> <td> uint8_t </td><td> 0 ~ 255 </td> </tr>
|
||||
* <tr> <td> @ref SO_MSS </td> <td> uint16_t </td><td> 0 ~ 65535 </td> </tr>
|
||||
* <tr> <td> @ref SO_DESTIP </td> <td> uint8_t[4] </td><td> </td></tr>
|
||||
* <tr> <td> @ref SO_DESTPORT </td> <td> uint16_t </td><td> </td></tr>
|
||||
* <tr> <td> @ref SO_KEEPALIVEAUTO </td> <td> uint8_t </td><td> 0 ~ 255 </td></tr>
|
||||
* <tr> <td> @ref SO_SENDBUF </td> <td> uint16_t </td><td> 0 ~ 65535 </td></tr>
|
||||
* <tr> <td> @ref SO_RECVBUF </td> <td> uint16_t </td><td> 0 ~ 65535 </td></tr>
|
||||
* <tr> <td> @ref SO_STATUS </td> <td> uint8_t </td><td> @ref SOCK_ESTABLISHED, etc.. </td></tr>
|
||||
* <tr> <td> @ref SO_REMAINSIZE </td> <td> uint16_t </td><td> 0~ 65535 </td></tr>
|
||||
* <tr> <td> @ref SO_PACKINFO </td> <td> uint8_t </td><td> @ref PACK_FIRST, etc... </td></tr>
|
||||
* </table>
|
||||
* @return
|
||||
* - @b Success : @ref SOCK_OK \n
|
||||
* - @b Fail
|
||||
* - @ref SOCKERR_SOCKNUM - Invalid Socket number \n
|
||||
* - @ref SOCKERR_SOCKOPT - Invalid socket option or its value \n
|
||||
* - @ref SOCKERR_SOCKMODE - Invalid socket mode \n
|
||||
* @note
|
||||
* The option as PACK_REMAINED and SO_PACKINFO is valid only in NON-TCP mode and after call @ref recvfrom(). \n
|
||||
* When SO_PACKINFO value is PACK_FIRST and the return value of recvfrom() is zero,
|
||||
* This means the zero byte UDP data(UDP Header only) received.
|
||||
*/
|
||||
int8_t getsockopt(uint8_t sn, sockopt_type sotype, void* arg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _SOCKET_H_
|
||||
@ -0,0 +1,903 @@
|
||||
//****************************************************************************/
|
||||
//!
|
||||
//! \file wizchip_conf.c
|
||||
//! \brief WIZCHIP Config Header File.
|
||||
//! \version 1.0.1
|
||||
//! \date 2013/10/21
|
||||
//! \par Revision history
|
||||
//! <2015/02/05> Notice
|
||||
//! The version history is not updated after this point.
|
||||
//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary.
|
||||
//! >> https://github.com/Wiznet/ioLibrary_Driver
|
||||
//! <2014/05/01> V1.0.1 Refer to M20140501
|
||||
//! 1. Explicit type casting in wizchip_bus_readdata() & wizchip_bus_writedata()
|
||||
// Issued by Mathias ClauBen.
|
||||
//! uint32_t type converts into ptrdiff_t first. And then recoverting it into uint8_t*
|
||||
//! For remove the warning when pointer type size is not 32bit.
|
||||
//! If ptrdiff_t doesn't support in your complier, You should must replace ptrdiff_t into your suitable pointer type.
|
||||
//! <2013/10/21> 1st Release
|
||||
//! \author MidnightCow
|
||||
//! \copyright
|
||||
//!
|
||||
//! Copyright (c) 2013, WIZnet Co., LTD.
|
||||
//! All rights reserved.
|
||||
//!
|
||||
//! Redistribution and use in source and binary forms, with or without
|
||||
//! modification, are permitted provided that the following conditions
|
||||
//! are met:
|
||||
//!
|
||||
//! * Redistributions of source code must retain the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer.
|
||||
//! * Redistributions in binary form must reproduce the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer in the
|
||||
//! documentation and/or other materials provided with the distribution.
|
||||
//! * Neither the name of the <ORGANIZATION> nor the names of its
|
||||
//! contributors may be used to endorse or promote products derived
|
||||
//! from this software without specific prior written permission.
|
||||
//!
|
||||
//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
//! THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//*****************************************************************************/
|
||||
//A20140501 : for use the type - ptrdiff_t
|
||||
#include <stddef.h>
|
||||
//
|
||||
|
||||
#include "wizchip_conf.h"
|
||||
|
||||
/////////////
|
||||
//M20150401 : Remove ; in the default callback function such as wizchip_cris_enter(), wizchip_cs_select() and etc.
|
||||
/////////////
|
||||
|
||||
/**
|
||||
* @brief Default function to enable interrupt.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//void wizchip_cris_enter(void) {};
|
||||
void wizchip_cris_enter(void) {}
|
||||
|
||||
/**
|
||||
* @brief Default function to disable interrupt.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//void wizchip_cris_exit(void) {};
|
||||
void wizchip_cris_exit(void) {}
|
||||
|
||||
/**
|
||||
* @brief Default function to select chip.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//void wizchip_cs_select(void) {};
|
||||
void wizchip_cs_select(void) {}
|
||||
|
||||
/**
|
||||
* @brief Default function to deselect chip.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//void wizchip_cs_deselect(void) {};
|
||||
void wizchip_cs_deselect(void) {}
|
||||
|
||||
/**
|
||||
* @brief Default function to read in direct or indirect interface.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//M20150601 : Rename the function for integrating with W5300
|
||||
//uint8_t wizchip_bus_readbyte(uint32_t AddrSel) { return * ((volatile uint8_t *)((ptrdiff_t) AddrSel)); }
|
||||
iodata_t wizchip_bus_readdata(uint32_t AddrSel) { return * ((volatile iodata_t *)((ptrdiff_t) AddrSel)); }
|
||||
|
||||
/**
|
||||
* @brief Default function to write in direct or indirect interface.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//M20150601 : Rename the function for integrating with W5300
|
||||
//void wizchip_bus_writebyte(uint32_t AddrSel, uint8_t wb) { *((volatile uint8_t*)((ptrdiff_t)AddrSel)) = wb; }
|
||||
void wizchip_bus_writedata(uint32_t AddrSel, iodata_t wb) { *((volatile iodata_t*)((ptrdiff_t)AddrSel)) = wb; }
|
||||
|
||||
/**
|
||||
* @brief Default function to read in SPI interface.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//uint8_t wizchip_spi_readbyte(void) {return 0;};
|
||||
uint8_t wizchip_spi_readbyte(void) {return 0;}
|
||||
|
||||
/**
|
||||
* @brief Default function to write in SPI interface.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//void wizchip_spi_writebyte(uint8_t wb) {};
|
||||
void wizchip_spi_writebyte(uint8_t wb) {}
|
||||
|
||||
/**
|
||||
* @brief Default function to burst read in SPI interface.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//void wizchip_spi_readburst(uint8_t* pBuf, uint16_t len) {};
|
||||
void wizchip_spi_readburst(uint8_t* pBuf, uint16_t len) {}
|
||||
|
||||
/**
|
||||
* @brief Default function to burst write in SPI interface.
|
||||
* @note This function help not to access wrong address. If you do not describe this function or register any functions,
|
||||
* null function is called.
|
||||
*/
|
||||
//void wizchip_spi_writeburst(uint8_t* pBuf, uint16_t len) {};
|
||||
void wizchip_spi_writeburst(uint8_t* pBuf, uint16_t len) {}
|
||||
|
||||
/**
|
||||
* @\ref _WIZCHIP instance
|
||||
*/
|
||||
//
|
||||
//M20150401 : For a compiler didnot support a member of structure
|
||||
// Replace the assignment of struct members with the assingment of array
|
||||
//
|
||||
/*
|
||||
_WIZCHIP WIZCHIP =
|
||||
{
|
||||
.id = _WIZCHIP_ID_,
|
||||
.if_mode = _WIZCHIP_IO_MODE_,
|
||||
.CRIS._enter = wizchip_cris_enter,
|
||||
.CRIS._exit = wizchip_cris_exit,
|
||||
.CS._select = wizchip_cs_select,
|
||||
.CS._deselect = wizchip_cs_deselect,
|
||||
.IF.BUS._read_byte = wizchip_bus_readbyte,
|
||||
.IF.BUS._write_byte = wizchip_bus_writebyte
|
||||
// .IF.SPI._read_byte = wizchip_spi_readbyte,
|
||||
// .IF.SPI._write_byte = wizchip_spi_writebyte
|
||||
};
|
||||
*/
|
||||
_WIZCHIP WIZCHIP =
|
||||
{
|
||||
_WIZCHIP_IO_MODE_,
|
||||
_WIZCHIP_ID_ ,
|
||||
{
|
||||
wizchip_cris_enter,
|
||||
wizchip_cris_exit
|
||||
},
|
||||
{
|
||||
wizchip_cs_select,
|
||||
wizchip_cs_deselect
|
||||
},
|
||||
{
|
||||
{
|
||||
//M20150601 : Rename the function
|
||||
//wizchip_bus_readbyte,
|
||||
//wizchip_bus_writebyte
|
||||
wizchip_bus_readdata,
|
||||
wizchip_bus_writedata
|
||||
},
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static uint8_t _DNS_[4]; // DNS server ip address
|
||||
static dhcp_mode _DHCP_; // DHCP mode
|
||||
|
||||
void reg_wizchip_cris_cbfunc(void(*cris_en)(void), void(*cris_ex)(void))
|
||||
{
|
||||
if(!cris_en || !cris_ex)
|
||||
{
|
||||
WIZCHIP.CRIS._enter = wizchip_cris_enter;
|
||||
WIZCHIP.CRIS._exit = wizchip_cris_exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
WIZCHIP.CRIS._enter = cris_en;
|
||||
WIZCHIP.CRIS._exit = cris_ex;
|
||||
}
|
||||
}
|
||||
|
||||
void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void))
|
||||
{
|
||||
if(!cs_sel || !cs_desel)
|
||||
{
|
||||
WIZCHIP.CS._select = wizchip_cs_select;
|
||||
WIZCHIP.CS._deselect = wizchip_cs_deselect;
|
||||
}
|
||||
else
|
||||
{
|
||||
WIZCHIP.CS._select = cs_sel;
|
||||
WIZCHIP.CS._deselect = cs_desel;
|
||||
}
|
||||
}
|
||||
|
||||
//M20150515 : For integrating with W5300
|
||||
//void reg_wizchip_bus_cbfunc(uint8_t(*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, uint8_t wb))
|
||||
void reg_wizchip_bus_cbfunc(iodata_t(*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, iodata_t wb))
|
||||
{
|
||||
while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_BUS_));
|
||||
//M20150601 : Rename call back function for integrating with W5300
|
||||
/*
|
||||
if(!bus_rb || !bus_wb)
|
||||
{
|
||||
WIZCHIP.IF.BUS._read_byte = wizchip_bus_readbyte;
|
||||
WIZCHIP.IF.BUS._write_byte = wizchip_bus_writebyte;
|
||||
}
|
||||
else
|
||||
{
|
||||
WIZCHIP.IF.BUS._read_byte = bus_rb;
|
||||
WIZCHIP.IF.BUS._write_byte = bus_wb;
|
||||
}
|
||||
*/
|
||||
if(!bus_rb || !bus_wb)
|
||||
{
|
||||
WIZCHIP.IF.BUS._read_data = wizchip_bus_readdata;
|
||||
WIZCHIP.IF.BUS._write_data = wizchip_bus_writedata;
|
||||
}
|
||||
else
|
||||
{
|
||||
WIZCHIP.IF.BUS._read_data = bus_rb;
|
||||
WIZCHIP.IF.BUS._write_data = bus_wb;
|
||||
}
|
||||
}
|
||||
|
||||
void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb))
|
||||
{
|
||||
while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_SPI_));
|
||||
|
||||
if(!spi_rb || !spi_wb)
|
||||
{
|
||||
WIZCHIP.IF.SPI._read_byte = wizchip_spi_readbyte;
|
||||
WIZCHIP.IF.SPI._write_byte = wizchip_spi_writebyte;
|
||||
}
|
||||
else
|
||||
{
|
||||
WIZCHIP.IF.SPI._read_byte = spi_rb;
|
||||
WIZCHIP.IF.SPI._write_byte = spi_wb;
|
||||
}
|
||||
}
|
||||
|
||||
// 20140626 Eric Added for SPI burst operations
|
||||
void reg_wizchip_spiburst_cbfunc(void (*spi_rb)(uint8_t* pBuf, uint16_t len), void (*spi_wb)(uint8_t* pBuf, uint16_t len))
|
||||
{
|
||||
while(!(WIZCHIP.if_mode & _WIZCHIP_IO_MODE_SPI_));
|
||||
|
||||
if(!spi_rb || !spi_wb)
|
||||
{
|
||||
WIZCHIP.IF.SPI._read_burst = wizchip_spi_readburst;
|
||||
WIZCHIP.IF.SPI._write_burst = wizchip_spi_writeburst;
|
||||
}
|
||||
else
|
||||
{
|
||||
WIZCHIP.IF.SPI._read_burst = spi_rb;
|
||||
WIZCHIP.IF.SPI._write_burst = spi_wb;
|
||||
}
|
||||
}
|
||||
|
||||
int8_t ctlwizchip(ctlwizchip_type cwtype, void* arg)
|
||||
{
|
||||
#if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5200 || _WIZCHIP_ == W5500
|
||||
uint8_t tmp = 0;
|
||||
#endif
|
||||
uint8_t* ptmp[2] = {0,0};
|
||||
switch(cwtype)
|
||||
{
|
||||
case CW_RESET_WIZCHIP:
|
||||
wizchip_sw_reset();
|
||||
break;
|
||||
case CW_INIT_WIZCHIP:
|
||||
if(arg != 0)
|
||||
{
|
||||
ptmp[0] = (uint8_t*)arg;
|
||||
ptmp[1] = ptmp[0] + _WIZCHIP_SOCK_NUM_;
|
||||
}
|
||||
return wizchip_init(ptmp[0], ptmp[1]);
|
||||
case CW_CLR_INTERRUPT:
|
||||
wizchip_clrinterrupt(*((intr_kind*)arg));
|
||||
break;
|
||||
case CW_GET_INTERRUPT:
|
||||
*((intr_kind*)arg) = wizchip_getinterrupt();
|
||||
break;
|
||||
case CW_SET_INTRMASK:
|
||||
wizchip_setinterruptmask(*((intr_kind*)arg));
|
||||
break;
|
||||
case CW_GET_INTRMASK:
|
||||
*((intr_kind*)arg) = wizchip_getinterruptmask();
|
||||
break;
|
||||
//M20150601 : This can be supported by W5200, W5500
|
||||
//#if _WIZCHIP_ > W5100
|
||||
#if (_WIZCHIP_ == W5200 || _WIZCHIP_ == W5500)
|
||||
case CW_SET_INTRTIME:
|
||||
setINTLEVEL(*(uint16_t*)arg);
|
||||
break;
|
||||
case CW_GET_INTRTIME:
|
||||
*(uint16_t*)arg = getINTLEVEL();
|
||||
break;
|
||||
#endif
|
||||
case CW_GET_ID:
|
||||
((uint8_t*)arg)[0] = WIZCHIP.id[0];
|
||||
((uint8_t*)arg)[1] = WIZCHIP.id[1];
|
||||
((uint8_t*)arg)[2] = WIZCHIP.id[2];
|
||||
((uint8_t*)arg)[3] = WIZCHIP.id[3];
|
||||
((uint8_t*)arg)[4] = WIZCHIP.id[4];
|
||||
((uint8_t*)arg)[5] = 0;
|
||||
break;
|
||||
#if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5500
|
||||
case CW_RESET_PHY:
|
||||
wizphy_reset();
|
||||
break;
|
||||
case CW_SET_PHYCONF:
|
||||
wizphy_setphyconf((wiz_PhyConf*)arg);
|
||||
break;
|
||||
case CW_GET_PHYCONF:
|
||||
wizphy_getphyconf((wiz_PhyConf*)arg);
|
||||
break;
|
||||
case CW_GET_PHYSTATUS:
|
||||
break;
|
||||
case CW_SET_PHYPOWMODE:
|
||||
return wizphy_setphypmode(*(uint8_t*)arg);
|
||||
#endif
|
||||
#if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5200 || _WIZCHIP_ == W5500
|
||||
case CW_GET_PHYPOWMODE:
|
||||
tmp = wizphy_getphypmode();
|
||||
if((int8_t)tmp == -1) return -1;
|
||||
*(uint8_t*)arg = tmp;
|
||||
break;
|
||||
case CW_GET_PHYLINK:
|
||||
tmp = wizphy_getphylink();
|
||||
if((int8_t)tmp == -1) return -1;
|
||||
*(uint8_t*)arg = tmp;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int8_t ctlnetwork(ctlnetwork_type cntype, void* arg)
|
||||
{
|
||||
|
||||
switch(cntype)
|
||||
{
|
||||
case CN_SET_NETINFO:
|
||||
wizchip_setnetinfo((wiz_NetInfo*)arg);
|
||||
break;
|
||||
case CN_GET_NETINFO:
|
||||
wizchip_getnetinfo((wiz_NetInfo*)arg);
|
||||
break;
|
||||
case CN_SET_NETMODE:
|
||||
return wizchip_setnetmode(*(netmode_type*)arg);
|
||||
case CN_GET_NETMODE:
|
||||
*(netmode_type*)arg = wizchip_getnetmode();
|
||||
break;
|
||||
case CN_SET_TIMEOUT:
|
||||
wizchip_settimeout((wiz_NetTimeout*)arg);
|
||||
break;
|
||||
case CN_GET_TIMEOUT:
|
||||
wizchip_gettimeout((wiz_NetTimeout*)arg);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void wizchip_sw_reset(void)
|
||||
{
|
||||
uint8_t gw[4], sn[4], sip[4];
|
||||
uint8_t mac[6];
|
||||
//A20150601
|
||||
#if _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
uint16_t mr = (uint16_t)getMR();
|
||||
setMR(mr | MR_IND);
|
||||
#endif
|
||||
//
|
||||
getSHAR(mac);
|
||||
getGAR(gw); getSUBR(sn); getSIPR(sip);
|
||||
setMR(MR_RST);
|
||||
getMR(); // for delay
|
||||
//A2015051 : For indirect bus mode
|
||||
#if _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
setMR(mr | MR_IND);
|
||||
#endif
|
||||
//
|
||||
setSHAR(mac);
|
||||
setGAR(gw);
|
||||
setSUBR(sn);
|
||||
setSIPR(sip);
|
||||
}
|
||||
|
||||
int8_t wizchip_init(uint8_t* txsize, uint8_t* rxsize)
|
||||
{
|
||||
int8_t i;
|
||||
#if _WIZCHIP_ < W5200
|
||||
int8_t j;
|
||||
#endif
|
||||
int8_t tmp = 0;
|
||||
wizchip_sw_reset();
|
||||
if(txsize)
|
||||
{
|
||||
tmp = 0;
|
||||
//M20150601 : For integrating with W5300
|
||||
#if _WIZCHIP_ == W5300
|
||||
for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
|
||||
{
|
||||
if(txsize[i] >= 64) return -1; //No use 64KB even if W5300 support max 64KB memory allocation
|
||||
tmp += txsize[i];
|
||||
if(tmp > 128) return -1;
|
||||
}
|
||||
if(tmp % 8) return -1;
|
||||
#else
|
||||
for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
|
||||
{
|
||||
tmp += txsize[i];
|
||||
|
||||
#if _WIZCHIP_ < W5200 //2016.10.28 peter add condition for w5100 and w5100s
|
||||
if(tmp > 8) return -1;
|
||||
#else
|
||||
if(tmp > 16) return -1;
|
||||
#endif
|
||||
}
|
||||
for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
|
||||
{
|
||||
#if _WIZCHIP_ < W5200 //2016.10.28 peter add condition for w5100
|
||||
j = 0;
|
||||
while((txsize[i] >> j != 1)&&(txsize[i] !=0)){j++;}
|
||||
setSn_TXBUF_SIZE(i, j);
|
||||
#else
|
||||
setSn_TXBUF_SIZE(i, txsize[i]);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
if(rxsize)
|
||||
{
|
||||
tmp = 0;
|
||||
#if _WIZCHIP_ == W5300
|
||||
for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
|
||||
{
|
||||
if(rxsize[i] >= 64) return -1; //No use 64KB even if W5300 support max 64KB memory allocation
|
||||
tmp += rxsize[i];
|
||||
if(tmp > 128) return -1;
|
||||
}
|
||||
if(tmp % 8) return -1;
|
||||
#else
|
||||
for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
|
||||
{
|
||||
tmp += rxsize[i];
|
||||
#if _WIZCHIP_ < W5200 //2016.10.28 peter add condition for w5100 and w5100s
|
||||
if(tmp > 8) return -1;
|
||||
#else
|
||||
if(tmp > 16) return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
for(i = 0 ; i < _WIZCHIP_SOCK_NUM_; i++)
|
||||
{
|
||||
#if _WIZCHIP_ < W5200 // add condition for w5100
|
||||
j = 0;
|
||||
while((rxsize[i] >> j != 1)&&(txsize[i] !=0)){j++;}
|
||||
setSn_RXBUF_SIZE(i, j);
|
||||
#else
|
||||
setSn_RXBUF_SIZE(i, rxsize[i]);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void wizchip_clrinterrupt(intr_kind intr)
|
||||
{
|
||||
uint8_t ir = (uint8_t)intr;
|
||||
uint8_t sir = (uint8_t)((uint16_t)intr >> 8);
|
||||
#if _WIZCHIP_ < W5500
|
||||
ir |= (1<<4); // IK_WOL
|
||||
#endif
|
||||
#if _WIZCHIP_ == W5200
|
||||
ir |= (1 << 6);
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ < W5200
|
||||
sir &= 0x0F;
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ <= W5100S
|
||||
ir |= sir;
|
||||
setIR(ir);
|
||||
//A20150601 : For integrating with W5300
|
||||
#elif _WIZCHIP_ == W5300
|
||||
setIR( ((((uint16_t)ir) << 8) | (((uint16_t)sir) & 0x00FF)) );
|
||||
#else
|
||||
setIR(ir);
|
||||
setSIR(sir);
|
||||
#endif
|
||||
}
|
||||
|
||||
intr_kind wizchip_getinterrupt(void)
|
||||
{
|
||||
uint8_t ir = 0;
|
||||
uint8_t sir = 0;
|
||||
uint16_t ret = 0;
|
||||
#if _WIZCHIP_ <= W5100S
|
||||
ir = getIR();
|
||||
sir = ir & 0x0F;
|
||||
//A20150601 : For integrating with W5300
|
||||
#elif _WIZCHIP_ == W5300
|
||||
ret = getIR();
|
||||
ir = (uint8_t)(ret >> 8);
|
||||
sir = (uint8_t)ret;
|
||||
#else
|
||||
ir = getIR();
|
||||
sir = getSIR();
|
||||
#endif
|
||||
|
||||
//M20150601 : For Integrating with W5300
|
||||
//#if _WIZCHIP_ < W5500
|
||||
#if _WIZCHIP_ < W5200
|
||||
ir &= ~(1<<4); // IK_WOL
|
||||
#endif
|
||||
#if _WIZCHIP_ == W5200
|
||||
ir &= ~(1 << 6);
|
||||
#endif
|
||||
ret = sir;
|
||||
ret = (ret << 8) + ir;
|
||||
return (intr_kind)ret;
|
||||
}
|
||||
|
||||
void wizchip_setinterruptmask(intr_kind intr)
|
||||
{
|
||||
uint8_t imr = (uint8_t)intr;
|
||||
uint8_t simr = (uint8_t)((uint16_t)intr >> 8);
|
||||
#if _WIZCHIP_ < W5500
|
||||
imr &= ~(1<<4); // IK_WOL
|
||||
#endif
|
||||
#if _WIZCHIP_ == W5200
|
||||
imr &= ~(1 << 6);
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ < W5200
|
||||
simr &= 0x0F;
|
||||
imr |= simr;
|
||||
setIMR(imr);
|
||||
//A20150601 : For integrating with W5300
|
||||
#elif _WIZCHIP_ == W5300
|
||||
setIMR( ((((uint16_t)imr) << 8) | (((uint16_t)simr) & 0x00FF)) );
|
||||
#else
|
||||
setIMR(imr);
|
||||
setSIMR(simr);
|
||||
#endif
|
||||
}
|
||||
|
||||
intr_kind wizchip_getinterruptmask(void)
|
||||
{
|
||||
uint8_t imr = 0;
|
||||
uint8_t simr = 0;
|
||||
uint16_t ret = 0;
|
||||
#if _WIZCHIP_ < W5200
|
||||
imr = getIMR();
|
||||
simr = imr & 0x0F;
|
||||
//A20150601 : For integrating with W5300
|
||||
#elif _WIZCHIP_ == W5300
|
||||
ret = getIMR();
|
||||
imr = (uint8_t)(ret >> 8);
|
||||
simr = (uint8_t)ret;
|
||||
#else
|
||||
imr = getIMR();
|
||||
simr = getSIMR();
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ < W5500
|
||||
imr &= ~(1<<4); // IK_WOL
|
||||
#endif
|
||||
#if _WIZCHIP_ == W5200
|
||||
imr &= ~(1 << 6); // IK_DEST_UNREACH
|
||||
#endif
|
||||
ret = simr;
|
||||
ret = (ret << 8) + imr;
|
||||
return (intr_kind)ret;
|
||||
}
|
||||
|
||||
int8_t wizphy_getphylink(void)
|
||||
{
|
||||
int8_t tmp = PHY_LINK_OFF;
|
||||
#if _WIZCHIP_ == W5100S
|
||||
if(getPHYSR() & PHYSR_LNK)
|
||||
tmp = PHY_LINK_ON;
|
||||
#elif _WIZCHIP_ == W5200
|
||||
if(getPHYSTATUS() & PHYSTATUS_LINK)
|
||||
tmp = PHY_LINK_ON;
|
||||
#elif _WIZCHIP_ == W5500
|
||||
if(getPHYCFGR() & PHYCFGR_LNK_ON)
|
||||
tmp = PHY_LINK_ON;
|
||||
|
||||
#else
|
||||
tmp = -1;
|
||||
#endif
|
||||
return tmp;
|
||||
}
|
||||
|
||||
#if _WIZCHIP_ > W5100
|
||||
|
||||
int8_t wizphy_getphypmode(void)
|
||||
{
|
||||
int8_t tmp = 0;
|
||||
#if _WIZCHIP_ == W5200
|
||||
if(getPHYSTATUS() & PHYSTATUS_POWERDOWN)
|
||||
tmp = PHY_POWER_DOWN;
|
||||
else
|
||||
tmp = PHY_POWER_NORM;
|
||||
#elif _WIZCHIP_ == 5500
|
||||
if((getPHYCFGR() & PHYCFGR_OPMDC_ALLA) == PHYCFGR_OPMDC_PDOWN)
|
||||
tmp = PHY_POWER_DOWN;
|
||||
else
|
||||
tmp = PHY_POWER_NORM;
|
||||
#else
|
||||
tmp = -1;
|
||||
#endif
|
||||
return tmp;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ == W5100S
|
||||
void wizphy_reset(void)
|
||||
{
|
||||
uint16_t tmp = wiz_mdio_read(PHYMDIO_BMCR);
|
||||
tmp |= BMCR_RESET;
|
||||
wiz_mdio_write(PHYMDIO_BMCR, tmp);
|
||||
while(wiz_mdio_read(PHYMDIO_BMCR)&BMCR_RESET){}
|
||||
}
|
||||
|
||||
void wizphy_setphyconf(wiz_PhyConf* phyconf)
|
||||
{
|
||||
uint16_t tmp = wiz_mdio_read(PHYMDIO_BMCR);
|
||||
if(phyconf->mode == PHY_MODE_AUTONEGO)
|
||||
tmp |= BMCR_AUTONEGO;
|
||||
else
|
||||
{
|
||||
tmp &= ~BMCR_AUTONEGO;
|
||||
if(phyconf->duplex == PHY_DUPLEX_FULL)
|
||||
{
|
||||
tmp |= BMCR_DUP;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp &= ~BMCR_DUP;
|
||||
}
|
||||
if(phyconf->speed == PHY_SPEED_100)
|
||||
{
|
||||
tmp |= BMCR_SPEED;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp &= ~BMCR_SPEED;
|
||||
}
|
||||
}
|
||||
wiz_mdio_write(PHYMDIO_BMCR, tmp);
|
||||
}
|
||||
|
||||
void wizphy_getphyconf(wiz_PhyConf* phyconf)
|
||||
{
|
||||
uint16_t tmp = 0;
|
||||
tmp = wiz_mdio_read(PHYMDIO_BMCR);
|
||||
phyconf->by = PHY_CONFBY_SW;
|
||||
if(tmp & BMCR_AUTONEGO)
|
||||
{
|
||||
phyconf->mode = PHY_MODE_AUTONEGO;
|
||||
}
|
||||
else
|
||||
{
|
||||
phyconf->mode = PHY_MODE_MANUAL;
|
||||
if(tmp&BMCR_DUP) phyconf->duplex = PHY_DUPLEX_FULL;
|
||||
else phyconf->duplex = PHY_DUPLEX_HALF;
|
||||
if(tmp&BMCR_SPEED) phyconf->speed = PHY_SPEED_100;
|
||||
else phyconf->speed = PHY_SPEED_10;
|
||||
}
|
||||
}
|
||||
|
||||
int8_t wizphy_setphypmode(uint8_t pmode)
|
||||
{
|
||||
uint16_t tmp = 0;
|
||||
tmp = wiz_mdio_read(PHYMDIO_BMCR);
|
||||
if( pmode == PHY_POWER_DOWN)
|
||||
{
|
||||
tmp |= BMCR_PWDN;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp &= ~BMCR_PWDN;
|
||||
}
|
||||
wiz_mdio_write(PHYMDIO_BMCR, tmp);
|
||||
tmp = wiz_mdio_read(PHYMDIO_BMCR);
|
||||
if( pmode == PHY_POWER_DOWN)
|
||||
{
|
||||
if(tmp & BMCR_PWDN) return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if((tmp & BMCR_PWDN) != BMCR_PWDN) return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
#if _WIZCHIP_ == W5500
|
||||
void wizphy_reset(void)
|
||||
{
|
||||
uint8_t tmp = getPHYCFGR();
|
||||
tmp &= PHYCFGR_RST;
|
||||
setPHYCFGR(tmp);
|
||||
tmp = getPHYCFGR();
|
||||
tmp |= ~PHYCFGR_RST;
|
||||
setPHYCFGR(tmp);
|
||||
}
|
||||
|
||||
void wizphy_setphyconf(wiz_PhyConf* phyconf)
|
||||
{
|
||||
uint8_t tmp = 0;
|
||||
if(phyconf->by == PHY_CONFBY_SW)
|
||||
tmp |= PHYCFGR_OPMD;
|
||||
else
|
||||
tmp &= ~PHYCFGR_OPMD;
|
||||
if(phyconf->mode == PHY_MODE_AUTONEGO)
|
||||
tmp |= PHYCFGR_OPMDC_ALLA;
|
||||
else
|
||||
{
|
||||
if(phyconf->duplex == PHY_DUPLEX_FULL)
|
||||
{
|
||||
if(phyconf->speed == PHY_SPEED_100)
|
||||
tmp |= PHYCFGR_OPMDC_100F;
|
||||
else
|
||||
tmp |= PHYCFGR_OPMDC_10F;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(phyconf->speed == PHY_SPEED_100)
|
||||
tmp |= PHYCFGR_OPMDC_100H;
|
||||
else
|
||||
tmp |= PHYCFGR_OPMDC_10H;
|
||||
}
|
||||
}
|
||||
setPHYCFGR(tmp);
|
||||
wizphy_reset();
|
||||
}
|
||||
|
||||
void wizphy_getphyconf(wiz_PhyConf* phyconf)
|
||||
{
|
||||
uint8_t tmp = 0;
|
||||
tmp = getPHYCFGR();
|
||||
phyconf->by = (tmp & PHYCFGR_OPMD) ? PHY_CONFBY_SW : PHY_CONFBY_HW;
|
||||
switch(tmp & PHYCFGR_OPMDC_ALLA)
|
||||
{
|
||||
case PHYCFGR_OPMDC_ALLA:
|
||||
case PHYCFGR_OPMDC_100FA:
|
||||
phyconf->mode = PHY_MODE_AUTONEGO;
|
||||
break;
|
||||
default:
|
||||
phyconf->mode = PHY_MODE_MANUAL;
|
||||
break;
|
||||
}
|
||||
switch(tmp & PHYCFGR_OPMDC_ALLA)
|
||||
{
|
||||
case PHYCFGR_OPMDC_100FA:
|
||||
case PHYCFGR_OPMDC_100F:
|
||||
case PHYCFGR_OPMDC_100H:
|
||||
phyconf->speed = PHY_SPEED_100;
|
||||
break;
|
||||
default:
|
||||
phyconf->speed = PHY_SPEED_10;
|
||||
break;
|
||||
}
|
||||
switch(tmp & PHYCFGR_OPMDC_ALLA)
|
||||
{
|
||||
case PHYCFGR_OPMDC_100FA:
|
||||
case PHYCFGR_OPMDC_100F:
|
||||
case PHYCFGR_OPMDC_10F:
|
||||
phyconf->duplex = PHY_DUPLEX_FULL;
|
||||
break;
|
||||
default:
|
||||
phyconf->duplex = PHY_DUPLEX_HALF;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void wizphy_getphystat(wiz_PhyConf* phyconf)
|
||||
{
|
||||
uint8_t tmp = getPHYCFGR();
|
||||
phyconf->duplex = (tmp & PHYCFGR_DPX_FULL) ? PHY_DUPLEX_FULL : PHY_DUPLEX_HALF;
|
||||
phyconf->speed = (tmp & PHYCFGR_SPD_100) ? PHY_SPEED_100 : PHY_SPEED_10;
|
||||
}
|
||||
|
||||
int8_t wizphy_setphypmode(uint8_t pmode)
|
||||
{
|
||||
uint8_t tmp = 0;
|
||||
tmp = getPHYCFGR();
|
||||
if((tmp & PHYCFGR_OPMD)== 0) return -1;
|
||||
tmp &= ~PHYCFGR_OPMDC_ALLA;
|
||||
if( pmode == PHY_POWER_DOWN)
|
||||
tmp |= PHYCFGR_OPMDC_PDOWN;
|
||||
else
|
||||
tmp |= PHYCFGR_OPMDC_ALLA;
|
||||
setPHYCFGR(tmp);
|
||||
wizphy_reset();
|
||||
tmp = getPHYCFGR();
|
||||
if( pmode == PHY_POWER_DOWN)
|
||||
{
|
||||
if(tmp & PHYCFGR_OPMDC_PDOWN) return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(tmp & PHYCFGR_OPMDC_ALLA) return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void wizchip_setnetinfo(wiz_NetInfo* pnetinfo)
|
||||
{
|
||||
setSHAR(pnetinfo->mac);
|
||||
setGAR(pnetinfo->gw);
|
||||
setSUBR(pnetinfo->sn);
|
||||
setSIPR(pnetinfo->ip);
|
||||
_DNS_[0] = pnetinfo->dns[0];
|
||||
_DNS_[1] = pnetinfo->dns[1];
|
||||
_DNS_[2] = pnetinfo->dns[2];
|
||||
_DNS_[3] = pnetinfo->dns[3];
|
||||
_DHCP_ = pnetinfo->dhcp;
|
||||
}
|
||||
|
||||
void wizchip_getnetinfo(wiz_NetInfo* pnetinfo)
|
||||
{
|
||||
getSHAR(pnetinfo->mac);
|
||||
getGAR(pnetinfo->gw);
|
||||
getSUBR(pnetinfo->sn);
|
||||
getSIPR(pnetinfo->ip);
|
||||
pnetinfo->dns[0]= _DNS_[0];
|
||||
pnetinfo->dns[1]= _DNS_[1];
|
||||
pnetinfo->dns[2]= _DNS_[2];
|
||||
pnetinfo->dns[3]= _DNS_[3];
|
||||
pnetinfo->dhcp = _DHCP_;
|
||||
}
|
||||
|
||||
int8_t wizchip_setnetmode(netmode_type netmode)
|
||||
{
|
||||
uint8_t tmp = 0;
|
||||
#if _WIZCHIP_ != W5500
|
||||
if(netmode & ~(NM_WAKEONLAN | NM_PPPOE | NM_PINGBLOCK)) return -1;
|
||||
#else
|
||||
if(netmode & ~(NM_WAKEONLAN | NM_PPPOE | NM_PINGBLOCK | NM_FORCEARP)) return -1;
|
||||
#endif
|
||||
tmp = getMR();
|
||||
tmp |= (uint8_t)netmode;
|
||||
setMR(tmp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
netmode_type wizchip_getnetmode(void)
|
||||
{
|
||||
return (netmode_type) getMR();
|
||||
}
|
||||
|
||||
void wizchip_settimeout(wiz_NetTimeout* nettime)
|
||||
{
|
||||
setRCR(nettime->retry_cnt);
|
||||
setRTR(nettime->time_100us);
|
||||
}
|
||||
|
||||
void wizchip_gettimeout(wiz_NetTimeout* nettime)
|
||||
{
|
||||
nettime->retry_cnt = getRCR();
|
||||
nettime->time_100us = getRTR();
|
||||
}
|
||||
@ -0,0 +1,660 @@
|
||||
//*****************************************************************************
|
||||
//
|
||||
//! \file wizchip_conf.h
|
||||
//! \brief WIZCHIP Config Header File.
|
||||
//! \version 1.0.0
|
||||
//! \date 2013/10/21
|
||||
//! \par Revision history
|
||||
//! <2015/02/05> Notice
|
||||
//! The version history is not updated after this point.
|
||||
//! Download the latest version directly from GitHub. Please visit the our GitHub repository for ioLibrary.
|
||||
//! >> https://github.com/Wiznet/ioLibrary_Driver
|
||||
//! <2013/10/21> 1st Release
|
||||
//! \author MidnightCow
|
||||
//! \copyright
|
||||
//!
|
||||
//! Copyright (c) 2013, WIZnet Co., LTD.
|
||||
//! All rights reserved.
|
||||
//!
|
||||
//! Redistribution and use in source and binary forms, with or without
|
||||
//! modification, are permitted provided that the following conditions
|
||||
//! are met:
|
||||
//!
|
||||
//! * Redistributions of source code must retain the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer.
|
||||
//! * Redistributions in binary form must reproduce the above copyright
|
||||
//! notice, this list of conditions and the following disclaimer in the
|
||||
//! documentation and/or other materials provided with the distribution.
|
||||
//! * Neither the name of the <ORGANIZATION> nor the names of its
|
||||
//! contributors may be used to endorse or promote products derived
|
||||
//! from this software without specific prior written permission.
|
||||
//!
|
||||
//! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
//! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
//! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
//! ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
//! LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
//! CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
//! SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
//! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
//! CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
//! ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
//! THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
//*****************************************************************************
|
||||
|
||||
/**
|
||||
* @defgroup extra_functions 2. WIZnet Extra Functions
|
||||
*
|
||||
* @brief These functions is optional function. It could be replaced at WIZCHIP I/O function because they were made by WIZCHIP I/O functions.
|
||||
* @details There are functions of configuring WIZCHIP, network, interrupt, phy, network information and timer. \n
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _WIZCHIP_CONF_H_
|
||||
#define _WIZCHIP_CONF_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
/**
|
||||
* @brief Select WIZCHIP.
|
||||
* @todo You should select one, \b W5100, \b W5100S, \b W5200, \b W5300, \b W5500 or etc. \n\n
|
||||
* ex> <code> #define \_WIZCHIP_ W5500 </code>
|
||||
*/
|
||||
|
||||
#define W5100 5100
|
||||
#define W5100S 5100+5
|
||||
#define W5200 5200
|
||||
#define W5300 5300
|
||||
#define W5500 5500
|
||||
|
||||
#ifndef _WIZCHIP_
|
||||
#define _WIZCHIP_ W5500 // W5100, W5100S, W5200, W5300, W5500
|
||||
#endif
|
||||
|
||||
#define _WIZCHIP_IO_MODE_NONE_ 0x0000
|
||||
#define _WIZCHIP_IO_MODE_BUS_ 0x0100 /**< Bus interface mode */
|
||||
#define _WIZCHIP_IO_MODE_SPI_ 0x0200 /**< SPI interface mode */
|
||||
//#define _WIZCHIP_IO_MODE_IIC_ 0x0400
|
||||
//#define _WIZCHIP_IO_MODE_SDIO_ 0x0800
|
||||
// Add to
|
||||
//
|
||||
|
||||
#define _WIZCHIP_IO_MODE_BUS_DIR_ (_WIZCHIP_IO_MODE_BUS_ + 1) /**< BUS interface mode for direct */
|
||||
#define _WIZCHIP_IO_MODE_BUS_INDIR_ (_WIZCHIP_IO_MODE_BUS_ + 2) /**< BUS interface mode for indirect */
|
||||
|
||||
#define _WIZCHIP_IO_MODE_SPI_VDM_ (_WIZCHIP_IO_MODE_SPI_ + 1) /**< SPI interface mode for variable length data*/
|
||||
#define _WIZCHIP_IO_MODE_SPI_FDM_ (_WIZCHIP_IO_MODE_SPI_ + 2) /**< SPI interface mode for fixed length data mode*/
|
||||
#define _WIZCHIP_IO_MODE_SPI_5500_ (_WIZCHIP_IO_MODE_SPI_ + 3) /**< SPI interface mode for fixed length data mode*/
|
||||
|
||||
#if (_WIZCHIP_ == W5100)
|
||||
#define _WIZCHIP_ID_ "W5100\0"
|
||||
/**
|
||||
* @brief Define interface mode.
|
||||
* @todo you should select interface mode as chip. Select one of @ref \_WIZCHIP_IO_MODE_SPI_ , @ref \_WIZCHIP_IO_MODE_BUS_DIR_ or @ref \_WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
*/
|
||||
// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_DIR_
|
||||
// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_
|
||||
|
||||
//A20150601 : Define the unit of IO DATA.
|
||||
typedef uint8_t iodata_t;
|
||||
//A20150401 : Indclude W5100.h file
|
||||
#include "W5100/w5100.h"
|
||||
|
||||
#elif (_WIZCHIP_ == W5100S)
|
||||
#define _WIZCHIP_ID_ "W5100S\0"
|
||||
/**
|
||||
* @brief Define interface mode.
|
||||
* @todo you should select interface mode as chip. Select one of @ref \_WIZCHIP_IO_MODE_SPI_ , @ref \_WIZCHIP_IO_MODE_BUS_DIR_ or @ref \_WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
*/
|
||||
// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
//#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_5500_
|
||||
#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_
|
||||
|
||||
//A20150601 : Define the unit of IO DATA.
|
||||
typedef uint8_t iodata_t;
|
||||
//A20150401 : Indclude W5100.h file
|
||||
#include "W5100S/w5100s.h"
|
||||
#elif (_WIZCHIP_ == W5200)
|
||||
#define _WIZCHIP_ID_ "W5200\0"
|
||||
/**
|
||||
* @brief Define interface mode.
|
||||
* @todo you should select interface mode as chip. Select one of @ref \_WIZCHIP_IO_MODE_SPI_ or @ref \ _WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
*/
|
||||
#ifndef _WIZCHIP_IO_MODE_
|
||||
// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_
|
||||
#endif
|
||||
//A20150601 : Define the unit of IO DATA.
|
||||
typedef uint8_t iodata_t;
|
||||
#include "W5200/w5200.h"
|
||||
#elif (_WIZCHIP_ == W5500)
|
||||
#define _WIZCHIP_ID_ "W5500\0"
|
||||
|
||||
/**
|
||||
* @brief Define interface mode. \n
|
||||
* @todo Should select interface mode as chip.
|
||||
* - @ref \_WIZCHIP_IO_MODE_SPI_ \n
|
||||
* -@ref \_WIZCHIP_IO_MODE_SPI_VDM_ : Valid only in @ref \_WIZCHIP_ == W5500 \n
|
||||
* -@ref \_WIZCHIP_IO_MODE_SPI_FDM_ : Valid only in @ref \_WIZCHIP_ == W5500 \n
|
||||
* - @ref \_WIZCHIP_IO_MODE_BUS_ \n
|
||||
* - @ref \_WIZCHIP_IO_MODE_BUS_DIR_ \n
|
||||
* - @ref \_WIZCHIP_IO_MODE_BUS_INDIR_ \n
|
||||
* - Others will be defined in future. \n\n
|
||||
* ex> <code> #define \_WIZCHIP_IO_MODE_ \_WIZCHIP_IO_MODE_SPI_VDM_ </code>
|
||||
*
|
||||
*/
|
||||
#ifndef _WIZCHIP_IO_MODE_
|
||||
//#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_FDM_
|
||||
#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_SPI_VDM_
|
||||
#endif
|
||||
//A20150601 : Define the unit of IO DATA.
|
||||
typedef uint8_t iodata_t;
|
||||
#include "W5500/w5500.h"
|
||||
#elif ( _WIZCHIP_ == W5300)
|
||||
#define _WIZCHIP_ID_ "W5300\0"
|
||||
/**
|
||||
* @brief Define interface mode.
|
||||
* @todo you should select interface mode as chip. Select one of @ref \_WIZCHIP_IO_MODE_SPI_ , @ref \_WIZCHIP_IO_MODE_BUS_DIR_ or @ref \_WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
*/
|
||||
#ifndef _WIZCHIP_IO_MODE_
|
||||
// #define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_DIR_
|
||||
#define _WIZCHIP_IO_MODE_ _WIZCHIP_IO_MODE_BUS_INDIR_
|
||||
#endif
|
||||
|
||||
//A20150601 : Define the unit and bus width of IO DATA.
|
||||
/**
|
||||
* @brief Select the data width 8 or 16 bits.
|
||||
* @todo you should select the bus width. Select one of 8 or 16.
|
||||
*/
|
||||
#ifndef _WIZCHIP_IO_BUS_WIDTH_
|
||||
#define _WIZCHIP_IO_BUS_WIDTH_ 8 // 16
|
||||
#endif
|
||||
#if _WIZCHIP_IO_BUS_WIDTH_ == 8
|
||||
typedef uint8_t iodata_t;
|
||||
#elif _WIZCHIP_IO_BUS_WIDTH_ == 16
|
||||
typedef uint16_t iodata_t;
|
||||
#else
|
||||
#error "Unknown _WIZCHIP_IO_BUS_WIDTH_. It should be 8 or 16."
|
||||
#endif
|
||||
//
|
||||
#include "W5300/w5300.h"
|
||||
#else
|
||||
#error "Unknown defined _WIZCHIP_. You should define one of 5100, 5200, and 5500 !!!"
|
||||
#endif
|
||||
|
||||
#ifndef _WIZCHIP_IO_MODE_
|
||||
#error "Undefined _WIZCHIP_IO_MODE_. You should define it !!!"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Define I/O base address when BUS IF mode.
|
||||
* @todo Should re-define it to fit your system when BUS IF Mode (@ref \_WIZCHIP_IO_MODE_BUS_,
|
||||
* @ref \_WIZCHIP_IO_MODE_BUS_DIR_, @ref \_WIZCHIP_IO_MODE_BUS_INDIR_). \n\n
|
||||
* ex> <code> #define \_WIZCHIP_IO_BASE_ 0x00008000 </code>
|
||||
*/
|
||||
#if _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_
|
||||
#define _WIZCHIP_IO_BASE_ 0x60000000 // for 5100S IND
|
||||
#elif _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_SPI_
|
||||
#define _WIZCHIP_IO_BASE_ 0x00000000 // for 5100S SPI
|
||||
#endif
|
||||
|
||||
#ifndef _WIZCHIP_IO_BASE_
|
||||
#define _WIZCHIP_IO_BASE_ 0x00000000 // 0x8000
|
||||
#endif
|
||||
|
||||
//M20150401 : Typing Error
|
||||
//#if _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS
|
||||
#if _WIZCHIP_IO_MODE_ & _WIZCHIP_IO_MODE_BUS_
|
||||
#ifndef _WIZCHIP_IO_BASE_
|
||||
#error "You should be define _WIZCHIP_IO_BASE to fit your system memory map."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ >= W5200
|
||||
#define _WIZCHIP_SOCK_NUM_ 8 ///< The count of independant socket of @b WIZCHIP
|
||||
#else
|
||||
#define _WIZCHIP_SOCK_NUM_ 4 ///< The count of independant socket of @b WIZCHIP
|
||||
#endif
|
||||
|
||||
|
||||
/********************************************************
|
||||
* WIZCHIP BASIC IF functions for SPI, SDIO, I2C , ETC.
|
||||
*********************************************************/
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* @brief The set of callback functions for W5500:@ref WIZCHIP_IO_Functions W5200:@ref WIZCHIP_IO_Functions_W5200
|
||||
*/
|
||||
typedef struct __WIZCHIP
|
||||
{
|
||||
uint16_t if_mode; ///< host interface mode
|
||||
uint8_t id[6]; ///< @b WIZCHIP ID such as @b 5100, @b 5200, @b 5500, and so on.
|
||||
/**
|
||||
* The set of critical section callback func.
|
||||
*/
|
||||
struct _CRIS
|
||||
{
|
||||
void (*_enter) (void); ///< crtical section enter
|
||||
void (*_exit) (void); ///< critial section exit
|
||||
}CRIS;
|
||||
/**
|
||||
* The set of @ref \_WIZCHIP_ select control callback func.
|
||||
*/
|
||||
struct _CS
|
||||
{
|
||||
void (*_select) (void); ///< @ref \_WIZCHIP_ selected
|
||||
void (*_deselect)(void); ///< @ref \_WIZCHIP_ deselected
|
||||
}CS;
|
||||
/**
|
||||
* The set of interface IO callback func.
|
||||
*/
|
||||
union _IF
|
||||
{
|
||||
/**
|
||||
* For BUS interface IO
|
||||
*/
|
||||
//M20156501 : Modify the function name for integrating with W5300
|
||||
//struct
|
||||
//{
|
||||
// uint8_t (*_read_byte) (uint32_t AddrSel);
|
||||
// void (*_write_byte) (uint32_t AddrSel, uint8_t wb);
|
||||
//}BUS;
|
||||
struct
|
||||
{
|
||||
iodata_t (*_read_data) (uint32_t AddrSel);
|
||||
void (*_write_data) (uint32_t AddrSel, iodata_t wb);
|
||||
}BUS;
|
||||
|
||||
/**
|
||||
* For SPI interface IO
|
||||
*/
|
||||
struct
|
||||
{
|
||||
uint8_t (*_read_byte) (void);
|
||||
void (*_write_byte) (uint8_t wb);
|
||||
void (*_read_burst) (uint8_t* pBuf, uint16_t len);
|
||||
void (*_write_burst) (uint8_t* pBuf, uint16_t len);
|
||||
}SPI;
|
||||
// To be added
|
||||
//
|
||||
}IF;
|
||||
}_WIZCHIP;
|
||||
|
||||
extern _WIZCHIP WIZCHIP;
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* WIZCHIP control type enumration used in @ref ctlwizchip().
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
CW_RESET_WIZCHIP, ///< Resets WIZCHIP by softly
|
||||
CW_INIT_WIZCHIP, ///< Initializes to WIZCHIP with SOCKET buffer size 2 or 1 dimension array typed uint8_t.
|
||||
CW_GET_INTERRUPT, ///< Get Interrupt status of WIZCHIP
|
||||
CW_CLR_INTERRUPT, ///< Clears interrupt
|
||||
CW_SET_INTRMASK, ///< Masks interrupt
|
||||
CW_GET_INTRMASK, ///< Get interrupt mask
|
||||
CW_SET_INTRTIME, ///< Set interval time between the current and next interrupt.
|
||||
CW_GET_INTRTIME, ///< Set interval time between the current and next interrupt.
|
||||
CW_GET_ID, ///< Gets WIZCHIP name.
|
||||
|
||||
//D20150601 : For no modification your application code
|
||||
//#if _WIZCHIP_ == W5500
|
||||
CW_RESET_PHY, ///< Resets internal PHY. Valid Only W5500
|
||||
CW_SET_PHYCONF, ///< When PHY configured by internal register, PHY operation mode (Manual/Auto, 10/100, Half/Full). Valid Only W5000
|
||||
CW_GET_PHYCONF, ///< Get PHY operation mode in internal register. Valid Only W5500
|
||||
CW_GET_PHYSTATUS, ///< Get real PHY status on operating. Valid Only W5500
|
||||
CW_SET_PHYPOWMODE, ///< Set PHY power mode as normal and down when PHYSTATUS.OPMD == 1. Valid Only W5500
|
||||
//#endif
|
||||
//D20150601 : For no modification your application code
|
||||
//#if _WIZCHIP_ == W5200 || _WIZCHIP_ == W5500
|
||||
CW_GET_PHYPOWMODE, ///< Get PHY Power mode as down or normal, Valid Only W5100, W5200
|
||||
CW_GET_PHYLINK ///< Get PHY Link status, Valid Only W5100, W5200
|
||||
//#endif
|
||||
}ctlwizchip_type;
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* Network control type enumration used in @ref ctlnetwork().
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
CN_SET_NETINFO, ///< Set Network with @ref wiz_NetInfo
|
||||
CN_GET_NETINFO, ///< Get Network with @ref wiz_NetInfo
|
||||
CN_SET_NETMODE, ///< Set network mode as WOL, PPPoE, Ping Block, and Force ARP mode
|
||||
CN_GET_NETMODE, ///< Get network mode as WOL, PPPoE, Ping Block, and Force ARP mode
|
||||
CN_SET_TIMEOUT, ///< Set network timeout as retry count and time.
|
||||
CN_GET_TIMEOUT, ///< Get network timeout as retry count and time.
|
||||
}ctlnetwork_type;
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* Interrupt kind when CW_SET_INTRRUPT, CW_GET_INTERRUPT, CW_SET_INTRMASK
|
||||
* and CW_GET_INTRMASK is used in @ref ctlnetwork().
|
||||
* It can be used with OR operation.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
#if _WIZCHIP_ == W5500
|
||||
IK_WOL = (1 << 4), ///< Wake On Lan by receiving the magic packet. Valid in W500.
|
||||
#elif _WIZCHIP_ == W5300
|
||||
IK_FMTU = (1 << 4), ///< Received a ICMP message (Fragment MTU)
|
||||
#endif
|
||||
|
||||
IK_PPPOE_TERMINATED = (1 << 5), ///< PPPoE Disconnected
|
||||
|
||||
#if _WIZCHIP_ != W5200
|
||||
IK_DEST_UNREACH = (1 << 6), ///< Destination IP & Port Unreachable, No use in W5200
|
||||
#endif
|
||||
|
||||
IK_IP_CONFLICT = (1 << 7), ///< IP conflict occurred
|
||||
|
||||
IK_SOCK_0 = (1 << 8), ///< Socket 0 interrupt
|
||||
IK_SOCK_1 = (1 << 9), ///< Socket 1 interrupt
|
||||
IK_SOCK_2 = (1 << 10), ///< Socket 2 interrupt
|
||||
IK_SOCK_3 = (1 << 11), ///< Socket 3 interrupt
|
||||
#if _WIZCHIP_ > W5100S
|
||||
IK_SOCK_4 = (1 << 12), ///< Socket 4 interrupt, No use in 5100
|
||||
IK_SOCK_5 = (1 << 13), ///< Socket 5 interrupt, No use in 5100
|
||||
IK_SOCK_6 = (1 << 14), ///< Socket 6 interrupt, No use in 5100
|
||||
IK_SOCK_7 = (1 << 15), ///< Socket 7 interrupt, No use in 5100
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ > W5100S
|
||||
IK_SOCK_ALL = (0xFF << 8) ///< All Socket interrupt
|
||||
#else
|
||||
IK_SOCK_ALL = (0x0F << 8) ///< All Socket interrupt
|
||||
#endif
|
||||
}intr_kind;
|
||||
|
||||
#define PHY_CONFBY_HW 0 ///< Configured PHY operation mode by HW pin
|
||||
#define PHY_CONFBY_SW 1 ///< Configured PHY operation mode by SW register
|
||||
#define PHY_MODE_MANUAL 0 ///< Configured PHY operation mode with user setting.
|
||||
#define PHY_MODE_AUTONEGO 1 ///< Configured PHY operation mode with auto-negotiation
|
||||
#define PHY_SPEED_10 0 ///< Link Speed 10
|
||||
#define PHY_SPEED_100 1 ///< Link Speed 100
|
||||
#define PHY_DUPLEX_HALF 0 ///< Link Half-Duplex
|
||||
#define PHY_DUPLEX_FULL 1 ///< Link Full-Duplex
|
||||
#define PHY_LINK_OFF 0 ///< Link Off
|
||||
#define PHY_LINK_ON 1 ///< Link On
|
||||
#define PHY_POWER_NORM 0 ///< PHY power normal mode
|
||||
#define PHY_POWER_DOWN 1 ///< PHY power down mode
|
||||
|
||||
|
||||
#if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5500
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* It configures PHY configuration when CW_SET PHYCONF or CW_GET_PHYCONF in W5500,
|
||||
* and it indicates the real PHY status configured by HW or SW in all WIZCHIP. \n
|
||||
* Valid only in W5500.
|
||||
*/
|
||||
typedef struct wiz_PhyConf_t
|
||||
{
|
||||
uint8_t by; ///< set by @ref PHY_CONFBY_HW or @ref PHY_CONFBY_SW
|
||||
uint8_t mode; ///< set by @ref PHY_MODE_MANUAL or @ref PHY_MODE_AUTONEGO
|
||||
uint8_t speed; ///< set by @ref PHY_SPEED_10 or @ref PHY_SPEED_100
|
||||
uint8_t duplex; ///< set by @ref PHY_DUPLEX_HALF @ref PHY_DUPLEX_FULL
|
||||
//uint8_t power; ///< set by @ref PHY_POWER_NORM or @ref PHY_POWER_DOWN
|
||||
//uint8_t link; ///< Valid only in CW_GET_PHYSTATUS. set by @ref PHY_LINK_ON or PHY_DUPLEX_OFF
|
||||
}wiz_PhyConf;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* It used in setting dhcp_mode of @ref wiz_NetInfo.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
NETINFO_STATIC = 1, ///< Static IP configuration by manually.
|
||||
NETINFO_DHCP ///< Dynamic IP configruation from a DHCP sever
|
||||
}dhcp_mode;
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* Network Information for WIZCHIP
|
||||
*/
|
||||
typedef struct wiz_NetInfo_t
|
||||
{
|
||||
uint8_t mac[6]; ///< Source Mac Address
|
||||
uint8_t ip[4]; ///< Source IP Address
|
||||
uint8_t sn[4]; ///< Subnet Mask
|
||||
uint8_t gw[4]; ///< Gateway IP Address
|
||||
uint8_t dns[4]; ///< DNS server IP Address
|
||||
dhcp_mode dhcp; ///< 1 - Static, 2 - DHCP
|
||||
}wiz_NetInfo;
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* Network mode
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
#if _WIZCHIP_ == W5500
|
||||
NM_FORCEARP = (1<<1), ///< Force to APP send whenever udp data is sent. Valid only in W5500
|
||||
#endif
|
||||
NM_WAKEONLAN = (1<<5), ///< Wake On Lan
|
||||
NM_PINGBLOCK = (1<<4), ///< Block ping-request
|
||||
NM_PPPOE = (1<<3), ///< PPPoE mode
|
||||
}netmode_type;
|
||||
|
||||
/**
|
||||
* @ingroup DATA_TYPE
|
||||
* Used in CN_SET_TIMEOUT or CN_GET_TIMEOUT of @ref ctlwizchip() for timeout configruation.
|
||||
*/
|
||||
typedef struct wiz_NetTimeout_t
|
||||
{
|
||||
uint8_t retry_cnt; ///< retry count
|
||||
uint16_t time_100us; ///< time unit 100us
|
||||
}wiz_NetTimeout;
|
||||
|
||||
/**
|
||||
*@brief Registers call back function for critical section of I/O functions such as
|
||||
*\ref WIZCHIP_READ, @ref WIZCHIP_WRITE, @ref WIZCHIP_READ_BUF and @ref WIZCHIP_WRITE_BUF.
|
||||
*@param cris_en : callback function for critical section enter.
|
||||
*@param cris_ex : callback function for critical section exit.
|
||||
*@todo Describe @ref WIZCHIP_CRITICAL_ENTER and @ref WIZCHIP_CRITICAL_EXIT marco or register your functions.
|
||||
*@note If you do not describe or register, default functions(@ref wizchip_cris_enter & @ref wizchip_cris_exit) is called.
|
||||
*/
|
||||
void reg_wizchip_cris_cbfunc(void(*cris_en)(void), void(*cris_ex)(void));
|
||||
|
||||
|
||||
/**
|
||||
*@brief Registers call back function for WIZCHIP select & deselect.
|
||||
*@param cs_sel : callback function for WIZCHIP select
|
||||
*@param cs_desel : callback fucntion for WIZCHIP deselect
|
||||
*@todo Describe @ref wizchip_cs_select and @ref wizchip_cs_deselect function or register your functions.
|
||||
*@note If you do not describe or register, null function is called.
|
||||
*/
|
||||
void reg_wizchip_cs_cbfunc(void(*cs_sel)(void), void(*cs_desel)(void));
|
||||
|
||||
/**
|
||||
*@brief Registers call back function for bus interface.
|
||||
*@param bus_rb : callback function to read byte data using system bus
|
||||
*@param bus_wb : callback function to write byte data using system bus
|
||||
*@todo Describe @ref wizchip_bus_readbyte and @ref wizchip_bus_writebyte function
|
||||
*or register your functions.
|
||||
*@note If you do not describe or register, null function is called.
|
||||
*/
|
||||
//M20150601 : For integrating with W5300
|
||||
//void reg_wizchip_bus_cbfunc(uint8_t (*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, uint8_t wb));
|
||||
void reg_wizchip_bus_cbfunc(iodata_t (*bus_rb)(uint32_t addr), void (*bus_wb)(uint32_t addr, iodata_t wb));
|
||||
|
||||
/**
|
||||
*@brief Registers call back function for SPI interface.
|
||||
*@param spi_rb : callback function to read byte using SPI
|
||||
*@param spi_wb : callback function to write byte using SPI
|
||||
*@todo Describe \ref wizchip_spi_readbyte and \ref wizchip_spi_writebyte function
|
||||
*or register your functions.
|
||||
*@note If you do not describe or register, null function is called.
|
||||
*/
|
||||
void reg_wizchip_spi_cbfunc(uint8_t (*spi_rb)(void), void (*spi_wb)(uint8_t wb));
|
||||
|
||||
/**
|
||||
*@brief Registers call back function for SPI interface.
|
||||
*@param spi_rb : callback function to burst read using SPI
|
||||
*@param spi_wb : callback function to burst write using SPI
|
||||
*@todo Describe \ref wizchip_spi_readbyte and \ref wizchip_spi_writebyte function
|
||||
*or register your functions.
|
||||
*@note If you do not describe or register, null function is called.
|
||||
*/
|
||||
void reg_wizchip_spiburst_cbfunc(void (*spi_rb)(uint8_t* pBuf, uint16_t len), void (*spi_wb)(uint8_t* pBuf, uint16_t len));
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Controls to the WIZCHIP.
|
||||
* @details Resets WIZCHIP & internal PHY, Configures PHY mode, Monitor PHY(Link,Speed,Half/Full/Auto),
|
||||
* controls interrupt & mask and so on.
|
||||
* @param cwtype : Decides to the control type
|
||||
* @param arg : arg type is dependent on cwtype.
|
||||
* @return 0 : Success \n
|
||||
* -1 : Fail because of invalid \ref ctlwizchip_type or unsupported \ref ctlwizchip_type in WIZCHIP
|
||||
*/
|
||||
int8_t ctlwizchip(ctlwizchip_type cwtype, void* arg);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Controls to network.
|
||||
* @details Controls to network environment, mode, timeout and so on.
|
||||
* @param cntype : Input. Decides to the control type
|
||||
* @param arg : Inout. arg type is dependent on cntype.
|
||||
* @return -1 : Fail because of invalid \ref ctlnetwork_type or unsupported \ref ctlnetwork_type in WIZCHIP \n
|
||||
* 0 : Success
|
||||
*/
|
||||
int8_t ctlnetwork(ctlnetwork_type cntype, void* arg);
|
||||
|
||||
|
||||
/*
|
||||
* The following functions are implemented for internal use.
|
||||
* but You can call these functions for code size reduction instead of ctlwizchip() and ctlnetwork().
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Reset WIZCHIP by softly.
|
||||
*/
|
||||
void wizchip_sw_reset(void);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Initializes WIZCHIP with socket buffer size
|
||||
* @param txsize Socket tx buffer sizes. If null, initialized the default size 2KB.
|
||||
* @param rxsize Socket rx buffer sizes. If null, initialized the default size 2KB.
|
||||
* @return 0 : succcess \n
|
||||
* -1 : fail. Invalid buffer size
|
||||
*/
|
||||
int8_t wizchip_init(uint8_t* txsize, uint8_t* rxsize);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Clear Interrupt of WIZCHIP.
|
||||
* @param intr : @ref intr_kind value operated OR. It can type-cast to uint16_t.
|
||||
*/
|
||||
void wizchip_clrinterrupt(intr_kind intr);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Get Interrupt of WIZCHIP.
|
||||
* @return @ref intr_kind value operated OR. It can type-cast to uint16_t.
|
||||
*/
|
||||
intr_kind wizchip_getinterrupt(void);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Mask or Unmask Interrupt of WIZCHIP.
|
||||
* @param intr : @ref intr_kind value operated OR. It can type-cast to uint16_t.
|
||||
*/
|
||||
void wizchip_setinterruptmask(intr_kind intr);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Get Interrupt mask of WIZCHIP.
|
||||
* @return : The operated OR vaule of @ref intr_kind. It can type-cast to uint16_t.
|
||||
*/
|
||||
intr_kind wizchip_getinterruptmask(void);
|
||||
|
||||
//todo
|
||||
#if _WIZCHIP_ > W5100
|
||||
int8_t wizphy_getphylink(void); ///< get the link status of phy in WIZCHIP. No use in W5100
|
||||
int8_t wizphy_getphypmode(void); ///< get the power mode of PHY in WIZCHIP. No use in W5100
|
||||
#endif
|
||||
|
||||
#if _WIZCHIP_ == W5100S || _WIZCHIP_ == W5500
|
||||
void wizphy_reset(void); ///< Reset phy. Vailid only in W5500
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Set the phy information for WIZCHIP without power mode
|
||||
* @param phyconf : @ref wiz_PhyConf
|
||||
*/
|
||||
void wizphy_setphyconf(wiz_PhyConf* phyconf);
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Get phy configuration information.
|
||||
* @param phyconf : @ref wiz_PhyConf
|
||||
*/
|
||||
void wizphy_getphyconf(wiz_PhyConf* phyconf);
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Get phy status.
|
||||
* @param phyconf : @ref wiz_PhyConf
|
||||
*/
|
||||
void wizphy_getphystat(wiz_PhyConf* phyconf);
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief set the power mode of phy inside WIZCHIP. Refer to @ref PHYCFGR in W5500, @ref PHYSTATUS in W5200
|
||||
* @param pmode Settig value of power down mode.
|
||||
*/
|
||||
int8_t wizphy_setphypmode(uint8_t pmode);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Set the network information for WIZCHIP
|
||||
* @param pnetinfo : @ref wizNetInfo
|
||||
*/
|
||||
void wizchip_setnetinfo(wiz_NetInfo* pnetinfo);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Get the network information for WIZCHIP
|
||||
* @param pnetinfo : @ref wizNetInfo
|
||||
*/
|
||||
void wizchip_getnetinfo(wiz_NetInfo* pnetinfo);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Set the network mode such WOL, PPPoE, Ping Block, and etc.
|
||||
* @param pnetinfo Value of network mode. Refer to @ref netmode_type.
|
||||
*/
|
||||
int8_t wizchip_setnetmode(netmode_type netmode);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Get the network mode such WOL, PPPoE, Ping Block, and etc.
|
||||
* @return Value of network mode. Refer to @ref netmode_type.
|
||||
*/
|
||||
netmode_type wizchip_getnetmode(void);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Set retry time value(@ref _RTR_) and retry count(@ref _RCR_).
|
||||
* @details @ref _RTR_ configures the retransmission timeout period and @ref _RCR_ configures the number of time of retransmission.
|
||||
* @param nettime @ref _RTR_ value and @ref _RCR_ value. Refer to @ref wiz_NetTimeout.
|
||||
*/
|
||||
void wizchip_settimeout(wiz_NetTimeout* nettime);
|
||||
|
||||
/**
|
||||
* @ingroup extra_functions
|
||||
* @brief Get retry time value(@ref _RTR_) and retry count(@ref _RCR_).
|
||||
* @details @ref _RTR_ configures the retransmission timeout period and @ref _RCR_ configures the number of time of retransmission.
|
||||
* @param nettime @ref _RTR_ value and @ref _RCR_ value. Refer to @ref wiz_NetTimeout.
|
||||
*/
|
||||
void wizchip_gettimeout(wiz_NetTimeout* nettime);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _WIZCHIP_CONF_H_
|
||||
@ -0,0 +1,402 @@
|
||||
/**
|
||||
@file httpd.c
|
||||
@brief functions associated http processing
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "socket.h"
|
||||
#include "httpParser.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* Public types/enumerations/variables
|
||||
****************************************************************************/
|
||||
//uint8_t BUFPUB[2048];
|
||||
uint8_t BUFPUB[256];
|
||||
|
||||
/*****************************************************************************
|
||||
* Private functions
|
||||
****************************************************************************/
|
||||
static void replacetochar(uint8_t * str, uint8_t oldchar, uint8_t newchar); /* Replace old character with new character in the string */
|
||||
static uint8_t C2D(uint8_t c); /* Convert a character to HEX */
|
||||
|
||||
/**
|
||||
@brief convert escape characters(%XX) to ASCII character
|
||||
*/
|
||||
void unescape_http_url(
|
||||
char * url /**< pointer to be converted ( escape characters )*/
|
||||
)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
for (x = 0, y = 0; url[y]; ++x, ++y) {
|
||||
if ((url[x] = url[y]) == '%') {
|
||||
url[x] = C2D(url[y+1])*0x10+C2D(url[y+2]);
|
||||
y+=2;
|
||||
}
|
||||
}
|
||||
url[x] = '\0';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@brief make response header such as html, gif, jpeg,etc.
|
||||
*/
|
||||
void make_http_response_head(
|
||||
char * buf, /**< pointer to response header to be made */
|
||||
char type, /**< response type */
|
||||
uint32_t len /**< size of response header */
|
||||
)
|
||||
{
|
||||
const char * head;
|
||||
char tmp[10];
|
||||
|
||||
/* file type*/
|
||||
if (type == PTYPE_HTML) head = PSTR(RES_HTMLHEAD_OK);
|
||||
else if (type == PTYPE_GIF) head = PSTR(RES_GIFHEAD_OK);
|
||||
else if (type == PTYPE_TEXT) head = PSTR(RES_TEXTHEAD_OK);
|
||||
else if (type == PTYPE_JPEG) head = PSTR(RES_JPEGHEAD_OK);
|
||||
else if (type == PTYPE_FLASH) head = PSTR(RES_FLASHHEAD_OK);
|
||||
else if (type == PTYPE_XML) head = PSTR(RES_XMLHEAD_OK);
|
||||
else if (type == PTYPE_CSS) head = PSTR(RES_CSSHEAD_OK);
|
||||
else if (type == PTYPE_JSON) head = PSTR(RES_JSONHEAD_OK);
|
||||
else if (type == PTYPE_JS) head = PSTR(RES_JSHEAD_OK);
|
||||
else if (type == PTYPE_CGI) head = PSTR(RES_CGIHEAD_OK);
|
||||
else if (type == PTYPE_PNG) head = PSTR(RES_PNGHEAD_OK);
|
||||
else if (type == PTYPE_ICO) head = PSTR(RES_ICOHEAD_OK);
|
||||
else if (type == PTYPE_TTF) head = PSTR(RES_TTFHEAD_OK);
|
||||
else if (type == PTYPE_OTF) head = PSTR(RES_OTFHEAD_OK);
|
||||
else if (type == PTYPE_WOFF) head = PSTR(RES_WOFFHEAD_OK);
|
||||
else if (type == PTYPE_EOT) head = PSTR(RES_EOTHEAD_OK);
|
||||
else if (type == PTYPE_SVG) head = PSTR(RES_SVGHEAD_OK);
|
||||
#ifdef _HTTPPARSER_DEBUG_
|
||||
else
|
||||
{
|
||||
head = NULL;
|
||||
PRINTF("\r\n\r\n-MAKE HEAD UNKNOWN-\r\n");
|
||||
}
|
||||
#else
|
||||
else head = NULL;
|
||||
#endif
|
||||
|
||||
sprintf(tmp, "%ld", len);
|
||||
strcpy_P(buf, head);
|
||||
strcat(buf, tmp);
|
||||
strcat(buf, "\r\n\r\n");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@brief find MIME type of a file
|
||||
*/
|
||||
void find_http_uri_type(
|
||||
uint8_t * type, /**< type to be returned */
|
||||
uint8_t * buff /**< file name */
|
||||
)
|
||||
{
|
||||
/* Decide type according to extension*/
|
||||
|
||||
char * buf;
|
||||
buf = (char *)buff;
|
||||
|
||||
if (strstr_P(buf, PSTR(".htm")) || strstr_P(buf, PSTR(".html"))) *type = PTYPE_HTML;
|
||||
else if (strstr_P(buf, PSTR(".gif"))) *type = PTYPE_GIF;
|
||||
else if (strstr_P(buf, PSTR(".text")) || strstr_P(buf,PSTR(".txt"))) *type = PTYPE_TEXT;
|
||||
else if (strstr_P(buf, PSTR(".jpeg")) || strstr_P(buf,PSTR(".jpg"))) *type = PTYPE_JPEG;
|
||||
else if (strstr_P(buf, PSTR(".swf"))) *type = PTYPE_FLASH;
|
||||
else if (strstr_P(buf, PSTR(".cgi")) || strstr_P(buf,PSTR(".CGI"))) *type = PTYPE_CGI;
|
||||
else if (strstr_P(buf, PSTR(".json")) || strstr_P(buf,PSTR(".JSON"))) *type = PTYPE_JSON;
|
||||
else if (strstr_P(buf, PSTR(".js")) || strstr_P(buf,PSTR(".JS"))) *type = PTYPE_JS;
|
||||
else if (strstr_P(buf, PSTR(".CGI")) || strstr_P(buf,PSTR(".cgi"))) *type = PTYPE_CGI;
|
||||
else if (strstr_P(buf, PSTR(".xml")) || strstr_P(buf,PSTR(".XML"))) *type = PTYPE_XML;
|
||||
else if (strstr_P(buf, PSTR(".css")) || strstr_P(buf,PSTR(".CSS"))) *type = PTYPE_CSS;
|
||||
else if (strstr_P(buf, PSTR(".png")) || strstr_P(buf,PSTR(".PNG"))) *type = PTYPE_PNG;
|
||||
else if (strstr_P(buf, PSTR(".ico")) || strstr_P(buf,PSTR(".ICO"))) *type = PTYPE_ICO;
|
||||
else if (strstr_P(buf, PSTR(".ttf")) || strstr_P(buf,PSTR(".TTF"))) *type = PTYPE_TTF;
|
||||
else if (strstr_P(buf, PSTR(".otf")) || strstr_P(buf,PSTR(".OTF"))) *type = PTYPE_OTF;
|
||||
else if (strstr_P(buf, PSTR(".woff")) || strstr_P(buf,PSTR(".WOFF"))) *type = PTYPE_WOFF;
|
||||
else if (strstr_P(buf, PSTR(".eot")) || strstr_P(buf,PSTR(".EOT"))) *type = PTYPE_EOT;
|
||||
else if (strstr_P(buf, PSTR(".svg")) || strstr_P(buf,PSTR(".SVG"))) *type = PTYPE_SVG;
|
||||
else *type = PTYPE_ERR;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@brief parse http request from a peer
|
||||
*/
|
||||
void parse_http_request(
|
||||
st_http_request * request, /**< request to be returned */
|
||||
uint8_t * buf /**< pointer to be parsed */
|
||||
)
|
||||
{
|
||||
char * nexttok;
|
||||
nexttok = strtok((char*)buf," ");
|
||||
if(!nexttok)
|
||||
{
|
||||
request->METHOD = METHOD_ERR;
|
||||
return;
|
||||
}
|
||||
if(!strcmp_P(nexttok, PSTR("GET")) || !strcmp_P(nexttok,PSTR("get")))
|
||||
{
|
||||
request->METHOD = METHOD_GET;
|
||||
nexttok = strtok(NULL," ");
|
||||
|
||||
}
|
||||
else if (!strcmp_P(nexttok, PSTR("HEAD")) || !strcmp_P(nexttok,PSTR("head")))
|
||||
{
|
||||
request->METHOD = METHOD_HEAD;
|
||||
nexttok = strtok(NULL," ");
|
||||
|
||||
}
|
||||
else if (!strcmp_P(nexttok, PSTR("POST")) || !strcmp_P(nexttok,PSTR("post")))
|
||||
{
|
||||
nexttok = strtok(NULL,"\0");
|
||||
request->METHOD = METHOD_POST;
|
||||
}
|
||||
else
|
||||
{
|
||||
request->METHOD = METHOD_ERR;
|
||||
}
|
||||
|
||||
if(!nexttok)
|
||||
{
|
||||
request->METHOD = METHOD_ERR;
|
||||
return;
|
||||
}
|
||||
strcpy((char *)request->URI, nexttok);
|
||||
}
|
||||
|
||||
#ifdef _OLD_
|
||||
/**
|
||||
@brief get next parameter value in the request
|
||||
*/
|
||||
uint8_t * get_http_param_value(
|
||||
char* uri,
|
||||
char* param_name
|
||||
)
|
||||
{
|
||||
char tempURI[MAX_URI_SIZE];
|
||||
uint8_t * name = 0;
|
||||
|
||||
|
||||
if(!uri || !param_name) return 0;
|
||||
|
||||
strcpy((char*)tempURI,uri);
|
||||
if((name = (uint8_t*)strstr(tempURI, param_name)))
|
||||
{
|
||||
name += strlen(param_name) + 1; // strlen(para_name) + strlen("=")
|
||||
if((name = (uint8_t*)strtok((char *)name,"& \r\n\t\0")))
|
||||
{
|
||||
unescape_http_url((char *)name);
|
||||
replacetochar(name, '+', ' ');
|
||||
}
|
||||
}
|
||||
#ifdef _HTTPPARSER_DEBUG_
|
||||
printf(" %s=%s",param_name,name);
|
||||
#endif
|
||||
|
||||
return name;
|
||||
}
|
||||
#else
|
||||
/**
|
||||
@brief get next parameter value in the request
|
||||
*/
|
||||
uint8_t * get_http_param_value(char* uri, char* param_name)
|
||||
{
|
||||
|
||||
uint8_t * name = 0;
|
||||
uint8_t * ret = BUFPUB;
|
||||
uint8_t * pos2;
|
||||
uint16_t len = 0, content_len = 0;
|
||||
uint8_t tmp_buf[10]={0x00, };
|
||||
|
||||
if(!uri || !param_name) return 0;
|
||||
|
||||
/***************/
|
||||
mid(uri, "Content-Length: ", "\r\n", (char *)tmp_buf);
|
||||
content_len = ATOI(tmp_buf, 10);
|
||||
uri = strstr(uri, "\r\n\r\n");
|
||||
uri += 4;
|
||||
uri[content_len] = 0;
|
||||
/***************/
|
||||
|
||||
if((name = (uint8_t *)strstr(uri, param_name)))
|
||||
{
|
||||
name += strlen(param_name) + 1;
|
||||
pos2 = (uint8_t*)strstr((char*)name, "&");
|
||||
if(!pos2)
|
||||
{
|
||||
pos2 = name + strlen((char*)name);
|
||||
}
|
||||
len = pos2 - name;
|
||||
|
||||
if(len)
|
||||
{
|
||||
ret[len] = 0;
|
||||
strncpy((char*)ret,(char*)name, len);
|
||||
unescape_http_url((char *)ret);
|
||||
replacetochar(ret, '+' ,' ');
|
||||
//ret[len] = 0;
|
||||
//ret[strlen((int8*)ret)] = 0;
|
||||
//printf("len=%d\r\n",len);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret[0] = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#ifdef _HTTPPARSER_DEBUG_
|
||||
printf(" %s=%s\r\n", param_name, ret);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef _OLD_
|
||||
uint8_t * get_http_uri_name(uint8_t * uri)
|
||||
{
|
||||
char tempURI[MAX_URI_SIZE];
|
||||
uint8_t * uri_name;
|
||||
|
||||
if(!uri) return 0;
|
||||
|
||||
strcpy(tempURI, (char *)uri);
|
||||
|
||||
uri_name = (uint8_t *)strtok(tempURI, " ?");
|
||||
|
||||
if(strcmp((char *)uri_name,"/")) uri_name++;
|
||||
|
||||
#ifdef _HTTPPARSER_DEBUG_
|
||||
printf(" uri_name = %s\r\n", uri_name);
|
||||
#endif
|
||||
|
||||
return uri_name;
|
||||
}
|
||||
#else
|
||||
|
||||
uint8_t get_http_uri_name(uint8_t * uri, uint8_t * uri_buf)
|
||||
{
|
||||
uint8_t * uri_ptr;
|
||||
if(!uri) return 0;
|
||||
|
||||
strcpy((char *)uri_buf, (char *)uri);
|
||||
|
||||
uri_ptr = (uint8_t *)strtok((char *)uri_buf, " ?");
|
||||
|
||||
if(strcmp((char *)uri_ptr,"/")) uri_ptr++;
|
||||
strcpy((char *)uri_buf, (char *)uri_ptr);
|
||||
|
||||
#ifdef _HTTPPARSER_DEBUG_
|
||||
PRINTF(" uri_name = %s\r\n", uri_buf);
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void inet_addr_(uint8_t * addr, uint8_t *ip)
|
||||
{
|
||||
uint8_t i;
|
||||
uint8_t taddr[30];
|
||||
uint8_t * nexttok;
|
||||
uint8_t num;
|
||||
|
||||
strcpy((char *)taddr, (char *)addr);
|
||||
|
||||
nexttok = taddr;
|
||||
for(i = 0; i < 4 ; i++)
|
||||
{
|
||||
nexttok = (uint8_t *)strtok((char *)nexttok, ".");
|
||||
if(nexttok[0] == '0' && nexttok[1] == 'x') num = ATOI(nexttok+2,0x10);
|
||||
else num = ATOI(nexttok,10);
|
||||
ip[i] = num;
|
||||
nexttok = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@brief CONVERT STRING INTO INTEGER
|
||||
@return a integer number
|
||||
*/
|
||||
uint16_t ATOI(
|
||||
uint8_t * str, /**< is a pointer to convert */
|
||||
uint8_t base /**< is a base value (must be in the range 2 - 16) */
|
||||
)
|
||||
{
|
||||
unsigned int num = 0;
|
||||
// debug_2013_11_25
|
||||
// while (*str !=0)
|
||||
while ((*str !=0) && (*str != 0x20)) // not include the space(0x020)
|
||||
num = num * base + C2D(*str++);
|
||||
return num;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check strings and then execute callback function by each string.
|
||||
* @param src The information of URI
|
||||
* @param s1 The start string to be researched
|
||||
* @param s2 The end string to be researched
|
||||
* @param sub The string between s1 and s2
|
||||
* @return The length value atfer working
|
||||
*/
|
||||
void mid(char* src, char* s1, char* s2, char* sub)
|
||||
{
|
||||
char* sub1;
|
||||
char* sub2;
|
||||
uint16_t n;
|
||||
|
||||
sub1=strstr((char*)src,(char*)s1);
|
||||
sub1+=strlen((char*)s1);
|
||||
sub2=strstr((char*)sub1,(char*)s2);
|
||||
|
||||
n=sub2-sub1;
|
||||
strncpy((char*)sub,(char*)sub1,n);
|
||||
sub[n]='\0';
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Static functions
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
@brief replace the specified character in a string with new character
|
||||
*/
|
||||
static void replacetochar(
|
||||
uint8_t * str, /**< pointer to be replaced */
|
||||
uint8_t oldchar, /**< old character */
|
||||
uint8_t newchar /**< new character */
|
||||
)
|
||||
{
|
||||
int x;
|
||||
for (x = 0; str[x]; x++)
|
||||
if (str[x] == oldchar) str[x] = newchar;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief CONVERT CHAR INTO HEX
|
||||
@return HEX
|
||||
|
||||
This function converts HEX(0-F) to a character
|
||||
*/
|
||||
static uint8_t C2D(
|
||||
uint8_t c /**< is a character('0'-'F') to convert to HEX */
|
||||
)
|
||||
{
|
||||
if (c >= '0' && c <= '9')
|
||||
return c - '0';
|
||||
if (c >= 'a' && c <= 'f')
|
||||
return 10 + c -'a';
|
||||
if (c >= 'A' && c <= 'F')
|
||||
return 10 + c -'A';
|
||||
|
||||
return (char)c;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,159 @@
|
||||
/**
|
||||
@file httpd.h
|
||||
@brief Define Constants and fucntions associated with HTTP protocol.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include "../../globals.h"
|
||||
|
||||
#ifndef __HTTPPARSER_H__
|
||||
#define __HTTPPARSER_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//#define _HTTPPARSER_DEBUG_
|
||||
|
||||
#define HTTP_SERVER_PORT 80 /**< HTTP server well-known port number */
|
||||
|
||||
/* HTTP Method */
|
||||
#define METHOD_ERR 0 /**< Error Method. */
|
||||
#define METHOD_GET 1 /**< GET Method. */
|
||||
#define METHOD_HEAD 2 /**< HEAD Method. */
|
||||
#define METHOD_POST 3 /**< POST Method. */
|
||||
|
||||
/* HTTP GET Method */
|
||||
#define PTYPE_ERR 0 /**< Error file. */
|
||||
#define PTYPE_HTML 1 /**< HTML file. */
|
||||
#define PTYPE_GIF 2 /**< GIF file. */
|
||||
#define PTYPE_TEXT 3 /**< TEXT file. */
|
||||
#define PTYPE_JPEG 4 /**< JPEG file. */
|
||||
#define PTYPE_FLASH 5 /**< FLASH file. */
|
||||
#define PTYPE_MPEG 6 /**< MPEG file. */
|
||||
#define PTYPE_PDF 7 /**< PDF file. */
|
||||
#define PTYPE_CGI 8 /**< CGI file. */
|
||||
#define PTYPE_XML 9 /**< XML file. */
|
||||
#define PTYPE_CSS 10 /**< CSS file. */
|
||||
#define PTYPE_JS 11 /**< JavaScript file. */
|
||||
#define PTYPE_JSON 12 /**< JSON (JavaScript Standard Object Notation) file. */
|
||||
#define PTYPE_PNG 13 /**< PNG file. */
|
||||
#define PTYPE_ICO 14 /**< ICON file. */
|
||||
|
||||
#define PTYPE_TTF 20 /**< Font type: TTF file. */
|
||||
#define PTYPE_OTF 21 /**< Font type: OTF file. */
|
||||
#define PTYPE_WOFF 22 /**< Font type: WOFF file. */
|
||||
#define PTYPE_EOT 23 /**< Font type: EOT file. */
|
||||
#define PTYPE_SVG 24 /**< Font type: SVG file. */
|
||||
|
||||
|
||||
/* HTTP response */
|
||||
#define STATUS_OK 200
|
||||
#define STATUS_CREATED 201
|
||||
#define STATUS_ACCEPTED 202
|
||||
#define STATUS_NO_CONTENT 204
|
||||
#define STATUS_MV_PERM 301
|
||||
#define STATUS_MV_TEMP 302
|
||||
#define STATUS_NOT_MODIF 304
|
||||
#define STATUS_BAD_REQ 400
|
||||
#define STATUS_UNAUTH 401
|
||||
#define STATUS_FORBIDDEN 403
|
||||
#define STATUS_NOT_FOUND 404
|
||||
#define STATUS_INT_SERR 500
|
||||
#define STATUS_NOT_IMPL 501
|
||||
#define STATUS_BAD_GATEWAY 502
|
||||
#define STATUS_SERV_UNAVAIL 503
|
||||
|
||||
/* HTML Doc. for ERROR */
|
||||
static const char PROGMEM ERROR_HTML_PAGE[] = "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\nContent-Length: 78\r\n\r\n<HTML>\r\n<BODY>\r\nSorry, the page you requested was not found.\r\n</BODY>\r\n</HTML>\r\n\0";
|
||||
static const char PROGMEM ERROR_REQUEST_PAGE[] = "HTTP/1.1 400 OK\r\nContent-Type: text/html\r\nContent-Length: 50\r\n\r\n<HTML>\r\n<BODY>\r\nInvalid request.\r\n</BODY>\r\n</HTML>\r\n\0";
|
||||
|
||||
/* HTML Doc. for CGI result */
|
||||
#define HTML_HEADER "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: "
|
||||
|
||||
/* Response header for HTML*/
|
||||
#define RES_HTMLHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: keep-alive\r\nContent-Length: "
|
||||
|
||||
/* Response head for TEXT */
|
||||
#define RES_TEXTHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: "
|
||||
|
||||
/* Response head for GIF */
|
||||
#define RES_GIFHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: image/gif\r\nContent-Length: "
|
||||
|
||||
/* Response head for JPEG */
|
||||
#define RES_JPEGHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\nContent-Length: "
|
||||
|
||||
/* Response head for PNG */
|
||||
#define RES_PNGHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: image/png\r\nContent-Length: "
|
||||
|
||||
/* Response head for FLASH */
|
||||
#define RES_FLASHHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: application/x-shockwave-flash\r\nContent-Length: "
|
||||
|
||||
/* Response head for XML */
|
||||
#define RES_XMLHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\nConnection: keep-alive\r\nContent-Length: "
|
||||
|
||||
/* Response head for CSS */
|
||||
#define RES_CSSHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: text/css\r\nContent-Length: "
|
||||
|
||||
/* Response head for JavaScript */
|
||||
#define RES_JSHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: application/javascript\r\nContent-Length: "
|
||||
|
||||
/* Response head for JSON */
|
||||
#define RES_JSONHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: "
|
||||
|
||||
/* Response head for ICO */
|
||||
#define RES_ICOHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: image/x-icon\r\nContent-Length: "
|
||||
|
||||
/* Response head for CGI */
|
||||
#define RES_CGIHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: "
|
||||
|
||||
/* Response head for TTF, Font */
|
||||
#define RES_TTFHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: application/x-font-truetype\r\nContent-Length: "
|
||||
|
||||
/* Response head for OTF, Font */
|
||||
#define RES_OTFHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: application/x-font-opentype\r\nContent-Length: "
|
||||
|
||||
/* Response head for WOFF, Font */
|
||||
#define RES_WOFFHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: application/font-woff\r\nContent-Length: "
|
||||
|
||||
/* Response head for EOT, Font */
|
||||
#define RES_EOTHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.ms-fontobject\r\nContent-Length: "
|
||||
|
||||
/* Response head for SVG, Font */
|
||||
#define RES_SVGHEAD_OK "HTTP/1.1 200 OK\r\nContent-Type: image/svg+xml\r\nContent-Length: "
|
||||
|
||||
/**
|
||||
@brief Structure of HTTP REQUEST
|
||||
*/
|
||||
|
||||
//#define MAX_URI_SIZE 1461
|
||||
#define MAX_URI_SIZE 512
|
||||
|
||||
typedef struct _st_http_request
|
||||
{
|
||||
uint8_t METHOD; /**< request method(METHOD_GET...). */
|
||||
uint8_t TYPE; /**< request type(PTYPE_HTML...). */
|
||||
uint8_t URI[MAX_URI_SIZE]; /**< request file name. */
|
||||
}st_http_request;
|
||||
|
||||
// HTTP Parsing functions
|
||||
void unescape_http_url(char * url); /* convert escape character to ascii */
|
||||
void parse_http_request(st_http_request *, uint8_t *); /* parse request from peer */
|
||||
void find_http_uri_type(uint8_t *, uint8_t *); /* find MIME type of a file */
|
||||
void make_http_response_head(char *, char, uint32_t); /* make response header */
|
||||
uint8_t * get_http_param_value(char* uri, char* param_name); /* get the user-specific parameter value */
|
||||
uint8_t get_http_uri_name(uint8_t * uri, uint8_t * uri_buf); /* get the requested URI name */
|
||||
#ifdef _OLD_
|
||||
uint8_t * get_http_uri_name(uint8_t * uri);
|
||||
#endif
|
||||
|
||||
// Utility functions
|
||||
uint16_t ATOI(uint8_t * str, uint8_t base);
|
||||
void mid(char* src, char* s1, char* s2, char* sub);
|
||||
void inet_addr_(uint8_t * addr, uint8_t * ip);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* end of __HTTPPARSER_H__ */
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,123 @@
|
||||
/**
|
||||
@file httpServer.h
|
||||
@brief Define constants and functions related HTTP Web server.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef __HTTPSERVER_H__
|
||||
#define __HTTPSERVER_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// HTTP Server debug message enable
|
||||
#define _HTTPSERVER_DEBUG_
|
||||
|
||||
#define INITIAL_WEBPAGE "index.html"
|
||||
#define M_INITIAL_WEBPAGE "m/index.html"
|
||||
#define MOBILE_INITIAL_WEBPAGE "mobile/index.html"
|
||||
|
||||
/* Web Server Content Storage Select */
|
||||
//#define _USE_SDCARD_
|
||||
#ifndef _USE_SDCARD_
|
||||
//#define _USE_FLASH_
|
||||
#endif
|
||||
|
||||
#if !defined(_USE_SDCARD_) && !defined(_USE_FLASH_)
|
||||
#define _NOTUSED_STORAGE_
|
||||
#endif
|
||||
|
||||
|
||||
/* Watchdog timer */
|
||||
//#define _USE_WATCHDOG_
|
||||
|
||||
/*********************************************
|
||||
* HTTP Process states list
|
||||
*********************************************/
|
||||
#define STATE_HTTP_IDLE 0 /* IDLE, Waiting for data received (TCP established) */
|
||||
#define STATE_HTTP_REQ_INPROC 1 /* Received HTTP request from HTTP client */
|
||||
#define STATE_HTTP_REQ_DONE 2 /* The end of HTTP request parse */
|
||||
#define STATE_HTTP_RES_INPROC 3 /* Sending the HTTP response to HTTP client (in progress) */
|
||||
#define STATE_HTTP_RES_DONE 4 /* The end of HTTP response send (HTTP transaction ended) */
|
||||
|
||||
/*********************************************
|
||||
* HTTP Simple Return Value
|
||||
*********************************************/
|
||||
#define HTTP_FAILED 0
|
||||
#define HTTP_OK 1
|
||||
#define HTTP_RESET 2
|
||||
|
||||
/*********************************************
|
||||
* HTTP Content NAME length
|
||||
*********************************************/
|
||||
//#define MAX_CONTENT_NAME_LEN 128 ? Wastefull
|
||||
#define MAX_CONTENT_NAME_LEN 16
|
||||
|
||||
/*********************************************
|
||||
* HTTP Timeout
|
||||
*********************************************/
|
||||
#define HTTP_MAX_TIMEOUT_SEC 3 // Sec.
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NONE, ///< Web storage none
|
||||
CODEFLASH, ///< Code flash memory
|
||||
SDCARD, ///< SD card
|
||||
DATAFLASH ///< External data flash memory
|
||||
}StorageType;
|
||||
|
||||
typedef struct _st_http_socket
|
||||
{
|
||||
uint8_t sock_status;
|
||||
uint8_t file_name[MAX_CONTENT_NAME_LEN];
|
||||
uint32_t file_start;
|
||||
uint32_t file_len;
|
||||
uint32_t file_offset; // (start addr + sent size...)
|
||||
uint8_t storage_type; // Storage type; Code flash, SDcard, Data flash ...
|
||||
}st_http_socket;
|
||||
|
||||
// Web content structure for file in code flash memory
|
||||
#define MAX_CONTENT_CALLBACK 20
|
||||
|
||||
typedef struct _httpServer_webContent
|
||||
{
|
||||
uint8_t * content_name;
|
||||
uint32_t content_len;
|
||||
uint8_t * content;
|
||||
}httpServer_webContent;
|
||||
|
||||
|
||||
void httpServer_init(uint8_t * tx_buf, uint8_t * rx_buf, uint8_t cnt, uint8_t * socklist);
|
||||
void reg_httpServer_cbfunc(void(*mcu_reset)(void), void(*wdt_reset)(void));
|
||||
|
||||
//void httpServer_run(uint8_t seqnum);
|
||||
void httpServer_run_avr(uint8_t seqnum);
|
||||
|
||||
//void reg_httpServer_webContent(uint8_t * content_name, uint8_t * content);
|
||||
void reg_httpServer_webContent_avr(const uint8_t * content_name,const uint8_t * content);
|
||||
|
||||
void reg_httpServer_binContent_avr(const uint8_t * content_name,const uint8_t * content, const uint32_t content_len);
|
||||
|
||||
//uint8_t find_userReg_webContent(uint8_t * content_name, uint16_t * content_num, uint32_t * file_len);
|
||||
uint8_t find_userReg_webContent_avr(uint8_t * content_name, uint16_t * content_num, uint32_t * file_len);
|
||||
|
||||
//uint16_t read_userReg_webContent(uint16_t content_num, uint8_t * buf, uint32_t offset, uint16_t size);
|
||||
uint16_t read_userReg_webContent_avr(uint16_t content_num, uint8_t * buf, uint32_t offset, uint16_t size);
|
||||
|
||||
//uint8_t display_reg_webContent_list(void);
|
||||
uint8_t display_reg_webContent_list_avr(void);
|
||||
|
||||
/*
|
||||
* @brief HTTP Server 1sec Tick Timer handler
|
||||
* @note SHOULD BE register to your system 1s Tick timer handler
|
||||
*/
|
||||
void httpServer_time_handler(void);
|
||||
uint32_t get_httpServer_timecount(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,65 @@
|
||||
/**
|
||||
* @file httpUtil.c
|
||||
* @brief HTTP Server Utilities
|
||||
* @version 1.0
|
||||
* @date 2014/07/15
|
||||
* @par Revision
|
||||
* 2014/07/15 - 1.0 Release
|
||||
* @author
|
||||
* \n\n @par Copyright (C) 1998 - 2014 WIZnet. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "httpUtil.h"
|
||||
|
||||
uint8_t http_get_cgi_handler(uint8_t * uri_name, uint8_t * buf, uint32_t * file_len)
|
||||
{
|
||||
uint8_t ret = HTTP_OK;
|
||||
uint16_t len = 0;
|
||||
|
||||
if(predefined_get_cgi_processor(uri_name, buf, &len))
|
||||
{
|
||||
;
|
||||
}
|
||||
else if(strcmp((const char *)uri_name, "example.cgi") == 0)
|
||||
{
|
||||
// To do
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
// CGI file not found
|
||||
ret = HTTP_FAILED;
|
||||
}
|
||||
|
||||
if(ret) *file_len = len;
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint8_t http_post_cgi_handler(uint8_t * uri_name, st_http_request * p_http_request, uint8_t * buf, uint32_t * file_len)
|
||||
{
|
||||
uint8_t ret = HTTP_OK;
|
||||
uint16_t len = 0;
|
||||
uint8_t val = 0;
|
||||
|
||||
if(predefined_set_cgi_processor(uri_name, p_http_request->URI, buf, &len))
|
||||
{
|
||||
;
|
||||
}
|
||||
else if(strcmp((const char *)uri_name, "example.cgi") == 0)
|
||||
{
|
||||
// To do
|
||||
val = 1;
|
||||
len = sprintf((char *)buf, "%d", val);
|
||||
}
|
||||
else
|
||||
{
|
||||
// CGI file not found
|
||||
ret = HTTP_FAILED;
|
||||
}
|
||||
|
||||
if(ret) *file_len = len;
|
||||
return ret;
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
/**
|
||||
* @file httpUtil.h
|
||||
* @brief Header File for HTTP Server Utilities
|
||||
* @version 1.0
|
||||
* @date 2014/07/15
|
||||
* @par Revision
|
||||
* 2014/07/15 - 1.0 Release
|
||||
* @author
|
||||
* \n\n @par Copyright (C) 1998 - 2014 WIZnet. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __HTTPUTIL_H__
|
||||
#define __HTTPUTIL_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "httpServer.h"
|
||||
#include "httpParser.h"
|
||||
|
||||
uint8_t http_get_cgi_handler(uint8_t * uri_name, uint8_t * buf, uint32_t * file_len);
|
||||
uint8_t http_post_cgi_handler(uint8_t * uri_name, st_http_request * p_http_request, uint8_t * buf, uint32_t * file_len);
|
||||
|
||||
uint8_t predefined_get_cgi_processor(uint8_t * uri_name, uint8_t * buf, uint16_t * len);
|
||||
uint8_t predefined_set_cgi_processor(uint8_t * uri_name, uint8_t * uri, uint8_t * buf, uint16_t * len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,52 @@
|
||||
# -- coding: utf-8 --
|
||||
#Reading file in binary & print in HEX AVR PROGCHAR ARRAY every symbol & to ***.h
|
||||
#Ethercard helper utilites for something like: <bfill.emit_raw_p(index_htm, sizeof(index_htm));>
|
||||
#(c) Ibragimov M. Russia Togliatty 19/08/2014
|
||||
# .PS used for build <***.h> from images(*.gif, *.jpg), *.css, static htm(l) pages, javascript etc..
|
||||
import sys, os
|
||||
if len(sys.argv) < 2:
|
||||
sys.exit('Usage: %s file-name' % sys.argv[0])
|
||||
|
||||
file_name = sys.argv[1]
|
||||
if not os.path.exists(sys.argv[1]):
|
||||
sys.exit('ERROR: Filename %s was not found!' % file_name)
|
||||
else:
|
||||
print('File %s is OK!' % file_name)
|
||||
file_out = file_name.replace(".", "_") + ".h"
|
||||
print('File_to_write is: %s' % file_out)
|
||||
fhex = open(file_out, "w")
|
||||
fhex_str = 'const char %s[] PROGMEM = {' % file_name.replace(".", "_")
|
||||
print(fhex_str)
|
||||
fhex.write(fhex_str + '\n')
|
||||
with open(file_name, "rb") as f:
|
||||
byte = f.read(1)
|
||||
i = 0
|
||||
fhex_size = 0
|
||||
_str = ""
|
||||
while byte != "":
|
||||
# Do stuff with byte.
|
||||
_byte = f.read(1)
|
||||
fhex_size = fhex_size + 1
|
||||
if _byte != "":
|
||||
#print ('%s, ' % hex(ord(byte)))
|
||||
_str = _str + "%s," % hex(ord(byte))
|
||||
else:
|
||||
#Last byte wo <,>
|
||||
#print hex(ord(byte))
|
||||
_str = _str + "%s" % hex(ord(byte))
|
||||
if i < 15:
|
||||
print _str
|
||||
fhex.write(_str + '\n')
|
||||
byte = _byte;
|
||||
i = i + 1;
|
||||
if i > 15:
|
||||
i = 0;
|
||||
print _str
|
||||
fhex.write(_str + '\n')
|
||||
_str = ""
|
||||
print'};'
|
||||
fhex.write('};\n')
|
||||
_str = '%s: %d bytes' % (file_name, fhex_size)
|
||||
print(_str);
|
||||
fhex.write('//' + _str + '\n');
|
||||
fhex.close()
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@ -0,0 +1,860 @@
|
||||
const char brd_wiznet_png[] PROGMEM = {
|
||||
0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,
|
||||
0x0,0x0,0x3,0x7f,0x0,0x0,0x3,0x91,0x1,0x3,0x0,0x0,0x0,0x78,0x37,0x89,
|
||||
0x3e,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0xff,0xff,0xff,0xa5,
|
||||
0xd9,0x9f,0xdd,0x0,0x0,0x20,0x0,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9d,0x4f,
|
||||
0x88,0x24,0x47,0xbe,0xdf,0x33,0x95,0x62,0x72,0x17,0x86,0x49,0x2d,0xef,0xd2,0x82,
|
||||
0x66,0x52,0x8b,0x6c,0xf6,0x62,0xcc,0xc,0xc2,0xb8,0x5,0xed,0x4e,0x3d,0x16,0x2c,
|
||||
0x1e,0x6,0xeb,0x6c,0xf0,0x61,0x16,0xc1,0xd3,0xc1,0x97,0x1a,0xe6,0xe0,0x16,0x2e,
|
||||
0x3a,0xab,0xdd,0x8b,0xda,0x7,0xa1,0x32,0xf8,0x22,0xc1,0xb0,0x7d,0xf4,0xd5,0xe0,
|
||||
0xcb,0x33,0x98,0x37,0x59,0x2e,0x31,0xe5,0x83,0x50,0xfb,0xea,0x93,0xb2,0xb6,0x96,
|
||||
0xad,0x8b,0xb0,0xb2,0xdc,0x87,0x8d,0xf6,0x8b,0xcd,0x78,0xbf,0x5f,0x44,0x64,0x66,
|
||||
0x44,0x66,0x56,0x66,0x64,0x56,0x56,0xeb,0x8f,0xa7,0x44,0xcd,0x1f,0x4d,0x77,0x7d,
|
||||
0x3a,0x33,0xe2,0xf7,0xe7,0xfb,0x8b,0x5f,0x44,0x5a,0xec,0x6e,0x5f,0xa9,0xf5,0xa,
|
||||
0xf8,0xa,0xf8,0xa,0xf8,0xe3,0x6,0xde,0x5e,0xde,0x31,0x70,0x73,0x71,0xc7,0xc0,
|
||||
0xd5,0xe3,0x3b,0x6,0xae,0xdf,0xfd,0xa9,0x3,0xff,0xf8,0xf1,0x5d,0x3,0x9f,0xde,
|
||||
0x31,0x30,0xf9,0xf0,0x8e,0x81,0x64,0xfd,0x3d,0x7b,0x1a,0x3a,0xb6,0x1e,0x1c,0x38,
|
||||
0x71,0xe8,0xaf,0x67,0xcb,0x74,0xe4,0x3d,0xf,0xae,0xbe,0xb6,0xf7,0xa,0x24,0x1c,
|
||||
0x38,0x39,0xf1,0xd7,0x93,0x88,0x8e,0xdc,0xbf,0xf1,0xfd,0xcf,0xac,0x61,0x5d,0xdb,
|
||||
0x77,0x25,0x60,0x70,0xfd,0xe0,0x4d,0xf6,0xd9,0x43,0xef,0xf2,0xf9,0x57,0xe3,0x67,
|
||||
0x8b,0x77,0x0,0x78,0x3a,0xac,0x6b,0x9b,0x97,0x7e,0x80,0xe0,0xfa,0x1f,0xbf,0xc9,
|
||||
0xfc,0x93,0xf,0xdc,0xe7,0x5f,0x9f,0x3e,0x5b,0xbf,0x93,0xfa,0xf,0xc6,0xc3,0xba,
|
||||
0xb6,0x55,0xe9,0x7,0x8,0xae,0xff,0xd1,0x17,0x2c,0xa0,0x1f,0x7c,0x44,0xbf,0x1a,
|
||||
0x3d,0x5b,0x3c,0x3a,0x7e,0xf8,0x60,0xd8,0x2b,0x5c,0x6f,0xf4,0xbf,0xdf,0xf8,0xd7,
|
||||
0xff,0xe0,0x73,0x37,0xa0,0x8b,0x35,0x89,0xff,0xef,0xc8,0x1d,0x1d,0xfe,0xee,0x5f,
|
||||
0xe,0x3b,0x86,0xeb,0xdb,0x12,0xf0,0xa,0x81,0xc7,0x87,0xeb,0xf5,0x26,0xfe,0xe3,
|
||||
0xe8,0xe1,0xb3,0x37,0x9f,0x7f,0xed,0xec,0x15,0x18,0xfb,0xd7,0xff,0xf0,0xb,0x76,
|
||||
0x7c,0xe0,0xae,0x57,0x5f,0xfd,0xf5,0xb3,0xf4,0xd9,0x17,0xcf,0xbf,0xe,0xf7,0x7a,
|
||||
0x4b,0x63,0xef,0xfa,0x9f,0x7c,0xc1,0xfc,0x3,0x67,0xbd,0xf8,0xfa,0xbd,0xbf,0x48,
|
||||
0x9f,0xfd,0x47,0xeb,0xb5,0x61,0x81,0x37,0xa5,0x49,0xb3,0xbe,0xbe,0x7e,0xfc,0x5,
|
||||
0x9b,0xbe,0x79,0xb3,0x9e,0x7e,0x5,0xc0,0xcd,0x1b,0x43,0x3,0x89,0xab,0xff,0x7d,
|
||||
0x1,0xc0,0xcf,0x9d,0xc9,0xe3,0x1b,0x30,0xfc,0xb3,0x67,0x94,0x80,0xa7,0x19,0x16,
|
||||
0x48,0xbd,0x12,0x70,0x81,0xc0,0xf8,0xe9,0x66,0x6d,0xc5,0xe9,0x33,0x4a,0xc3,0x3e,
|
||||
0x40,0x7a,0xcf,0x83,0xf,0x5e,0xe0,0xc7,0xb1,0xc4,0xa,0xf6,0x9f,0xb5,0x11,0xcb,
|
||||
0x85,0x5b,0x27,0x80,0xb1,0xe5,0x97,0xfe,0xf5,0xc5,0xf0,0xc0,0xc4,0x72,0x58,0x22,
|
||||
0x81,0x91,0xe5,0xdd,0x1,0xf0,0xc9,0x9c,0x25,0x73,0x9,0xf4,0x3d,0x96,0xfe,0x66,
|
||||
0xdf,0xc0,0xcd,0x8a,0x6d,0x96,0x2,0xf8,0xa5,0x37,0x65,0xf4,0xc9,0x5d,0x0,0x13,
|
||||
0x1c,0x3f,0x97,0xbd,0x74,0xa7,0x8c,0x7c,0x15,0xde,0x1,0x90,0xbc,0xcf,0x81,0xb,
|
||||
0x67,0xca,0x6e,0xbf,0xbe,0xb,0x20,0x75,0x5,0x70,0xd6,0xa,0x4c,0xc0,0x5b,0xa7,
|
||||
0x87,0x60,0x3d,0xdf,0xf4,0x6,0x32,0x0,0xa6,0x2e,0x4b,0xc2,0x5,0x5b,0xc4,0x0,
|
||||
0xfc,0x9d,0x19,0xf0,0x6a,0x30,0xe0,0xf3,0xe6,0x5b,0x1a,0xec,0xc,0xc,0xc1,0x2c,
|
||||
0x18,0x18,0x7f,0xb0,0x60,0xf3,0x4,0xbc,0xce,0x81,0xe2,0xac,0x6b,0xbe,0x3e,0xf0,
|
||||
0x7e,0x99,0xfe,0xeb,0xe3,0xe3,0x4f,0xee,0x79,0x3f,0x9f,0xf7,0xf3,0x34,0xc1,0x25,
|
||||
0x23,0xe1,0x25,0xa3,0xbe,0xf0,0x34,0xe9,0xbb,0xcd,0xc0,0x13,0xd7,0x4a,0xff,0xd5,
|
||||
0xd1,0xe1,0x6b,0xaf,0xdf,0xb3,0xcf,0x7b,0x1,0x69,0x0,0xb6,0x7,0xc0,0xd4,0xaf,
|
||||
0xfa,0xd2,0x3a,0xe0,0xf1,0x87,0x7,0xe9,0x5f,0x3d,0xfe,0xf4,0xc3,0xe7,0x2f,0x1f,
|
||||
0x3f,0xdf,0x1,0x8,0x86,0x6f,0xa,0xbc,0x39,0x4e,0xff,0xea,0x9d,0xaf,0x6e,0xae,
|
||||
0x3e,0xf9,0xd8,0x1a,0x24,0xf3,0x4e,0xff,0x9d,0x12,0xe1,0xed,0x7a,0xe0,0xbf,0x0,
|
||||
0xe0,0xf3,0x7b,0x3,0x1,0xe9,0xa8,0x1d,0xf8,0x6f,0x10,0xf8,0xf2,0x63,0xbf,0x1f,
|
||||
0x30,0x2,0xcb,0x9a,0x40,0x68,0x7,0xc3,0x4f,0x21,0x5a,0x10,0xa2,0xdf,0xd2,0xe9,
|
||||
0x45,0x75,0xc,0x3f,0x7c,0xfc,0xe9,0xcd,0xe7,0x7d,0xc7,0x90,0x4d,0x1c,0x9,0x73,
|
||||
0x19,0x5,0xe0,0x2d,0xd,0x75,0x60,0x29,0x11,0x3c,0x86,0x59,0xfa,0xe1,0xa3,0xc3,
|
||||
0x9b,0xdf,0xf6,0x9d,0xa5,0xc,0xe2,0xa1,0x80,0x81,0x2d,0x22,0x30,0xd5,0x81,0xf,
|
||||
0xec,0xb2,0x1d,0xbe,0x9d,0x7e,0x78,0x7c,0x7c,0xf3,0xdb,0x5f,0xf5,0xb4,0x43,0xa,
|
||||
0x1f,0x48,0x1d,0x91,0x30,0x25,0xf0,0x2e,0x1,0xd3,0xc3,0x37,0x6a,0x7c,0x8d,0x48,
|
||||
0xfc,0x7b,0xa6,0x18,0xbf,0x80,0xf7,0xdb,0x0,0x7b,0x1f,0x26,0x9,0x58,0x87,0x7a,
|
||||
0x4b,0xf1,0x3,0x8e,0x8f,0xb6,0x0,0x53,0xa7,0xa7,0x6b,0x7b,0x2c,0xa4,0x35,0xc2,
|
||||
0x66,0xf0,0xa6,0x44,0xab,0x62,0xa4,0xc7,0xa7,0xdb,0xae,0xd0,0xed,0x9,0x7c,0xa,
|
||||
0x6f,0x48,0x78,0x31,0xe8,0x63,0xa6,0x91,0xda,0x6d,0xc0,0x5d,0xe3,0x61,0xe9,0xa,
|
||||
0x99,0xb3,0x67,0x60,0x79,0xc,0x4b,0x85,0xa1,0xe1,0x81,0xe5,0x59,0xca,0xd8,0x77,
|
||||
0x1a,0xf0,0x60,0x34,0x74,0x15,0xa3,0x64,0x87,0x65,0xa0,0xf5,0x64,0x68,0x60,0xc9,
|
||||
0xd3,0x94,0x80,0xcc,0x5a,0xe,0xd,0x2c,0xf9,0x52,0x15,0x88,0xce,0xfb,0x7c,0xb5,
|
||||
0xf7,0xc2,0xd0,0x77,0x8d,0xd1,0x62,0xaf,0xc0,0xbd,0xa8,0xa7,0x3b,0x7,0x26,0xd2,
|
||||
0xd,0xaf,0xb8,0xba,0xa8,0xde,0xd2,0xe9,0xc5,0xd0,0xc0,0x50,0x40,0x71,0x32,0xce,
|
||||
0x6b,0x80,0x9e,0xbd,0x77,0xa0,0xf2,0x5a,0xee,0x3,0x18,0x8,0x68,0xc,0x7f,0x9e,
|
||||
0x31,0xdd,0x97,0x32,0xc8,0x1e,0xef,0x5b,0x43,0xbb,0x36,0x30,0x3d,0xea,0x63,0x42,
|
||||
0x2c,0xe0,0x54,0xfd,0xe,0xd0,0xa7,0x87,0x8f,0x86,0x9e,0xa5,0x60,0xf3,0x69,0x6,
|
||||
0xc5,0x37,0x55,0x73,0xd6,0x3d,0x38,0x6f,0x7e,0x1f,0x2f,0x24,0xb8,0x94,0x62,0x90,
|
||||
0x70,0x1f,0xc0,0x58,0x81,0x3a,0x3a,0x70,0xc9,0xf6,0x1,0x54,0x67,0xcc,0x4c,0x7,
|
||||
0x82,0x59,0xec,0x1,0xa8,0xce,0x18,0x80,0xef,0x1f,0xa8,0xcd,0x98,0x40,0x3,0xe2,
|
||||
0xbf,0xe,0x1f,0x80,0xd5,0x19,0x3,0x70,0x62,0xe9,0xe5,0xb3,0xe1,0xe3,0x21,0xf7,
|
||||
0x2f,0x97,0x32,0xed,0xd3,0x81,0xab,0xdb,0xbd,0xc4,0xc3,0xcc,0x6d,0xe3,0x7b,0xaa,
|
||||
0x7b,0xb6,0xdb,0x3b,0x9,0xc0,0x8a,0xc5,0xdc,0xde,0x41,0x3c,0x54,0x6b,0x6d,0xf1,
|
||||
0x3e,0x96,0xf3,0x78,0xbd,0xd4,0xf2,0x61,0xec,0x7c,0x7e,0x4b,0xd5,0x5a,0xdb,0x1f,
|
||||
0xdf,0x64,0x69,0x30,0x38,0xf0,0x75,0x1d,0xa8,0xd6,0xda,0xd6,0x3f,0x67,0xa9,0x3f,
|
||||
0x34,0x90,0xc8,0x7c,0x34,0xe1,0x19,0x9b,0x5e,0xfa,0x5a,0x9f,0x73,0x2b,0x1d,0xba,
|
||||
0x5e,0xfa,0x6b,0x10,0x33,0x97,0x2c,0xf6,0xdd,0x2a,0x70,0x29,0xac,0x74,0x58,0x20,
|
||||
0x48,0xa7,0xcd,0x6a,0xc1,0x7e,0xef,0x9,0xb3,0xd0,0x6a,0x6d,0x1b,0x19,0x94,0x7,
|
||||
0xaf,0x26,0x2,0x70,0xe5,0x8a,0x12,0xb4,0x5e,0x6b,0x13,0xbe,0x7d,0x3f,0xc0,0xb,
|
||||
0x1,0x54,0x6b,0x6d,0xa2,0x34,0xb6,0x2f,0xe0,0x4c,0x0,0xd5,0x5a,0x1b,0x66,0x6d,
|
||||
0xd4,0xdf,0x17,0x10,0xc4,0x61,0x5c,0x72,0x6d,0x3c,0xd5,0x77,0x7,0x9f,0xa5,0x58,
|
||||
0xd5,0xbf,0x64,0x4b,0x10,0x87,0x49,0x30,0xad,0xd6,0xda,0x2e,0xee,0x10,0x18,0x87,
|
||||
0xfb,0x0,0xe2,0x42,0x89,0x23,0x6a,0xde,0xc4,0x2f,0x1,0x3d,0x99,0xf3,0xc,0xee,
|
||||
0x69,0x5c,0xe1,0x69,0x68,0x9,0xc8,0x2b,0x1a,0x89,0x2e,0x5f,0xad,0x86,0x97,0x6d,
|
||||
0xbe,0xd8,0x25,0x7c,0x69,0x5a,0x2,0xf2,0xfc,0x9f,0xe8,0x9,0x40,0xe3,0x6b,0xe7,
|
||||
0xc6,0x81,0xaa,0xae,0xd8,0x2f,0x90,0x54,0x3d,0x77,0xa3,0x55,0x92,0x9d,0x23,0x7e,
|
||||
0xb8,0x7,0x20,0x75,0x57,0x7c,0xc1,0x92,0x1c,0xf8,0x2c,0x39,0xc8,0xa,0x77,0x3e,
|
||||
0x8b,0x20,0xf4,0x62,0x3a,0xa3,0xd7,0xfa,0x6,0x0,0x12,0x67,0xc5,0x17,0x2c,0x71,
|
||||
0x96,0xe6,0xb,0x96,0x0,0x9c,0x9c,0x5,0xfc,0xa,0x7,0x7,0x26,0xf6,0xa,0xec,
|
||||
0x50,0xac,0xae,0xe5,0xb,0x96,0x0,0xb4,0x4e,0x2,0x1c,0xc3,0xd4,0xb2,0x86,0x6,
|
||||
0x3e,0x1,0x20,0x38,0xee,0xe5,0x85,0xcb,0xe6,0x4e,0x1,0xbc,0xff,0x20,0xc0,0x59,
|
||||
0xba,0x7,0x60,0xf2,0x21,0xdb,0x80,0xe3,0x5e,0x2d,0x16,0x6c,0xb1,0x98,0xe6,0xc0,
|
||||
0x87,0xf7,0x2,0xb4,0xc3,0x3d,0x0,0xc9,0xdb,0x6c,0x93,0xbc,0xaf,0x1,0x27,0x30,
|
||||
0x96,0xfe,0x6b,0x1,0xf7,0x34,0xaf,0x6b,0x63,0x18,0x5b,0x2c,0xdc,0x15,0x48,0x1d,
|
||||
0xb6,0x21,0x6e,0x15,0x38,0x81,0x49,0x3,0xa1,0x69,0x52,0x2,0x36,0x5,0x64,0x33,
|
||||
0x60,0xea,0xf0,0x5,0xcb,0xa,0x30,0x12,0xb3,0x34,0x2a,0x1,0xa3,0x9d,0xaf,0x30,
|
||||
0x84,0x68,0x1,0xca,0x69,0x9,0x91,0x76,0xce,0xc4,0xa4,0x59,0xc2,0x18,0x7a,0xa0,
|
||||
0x17,0xd7,0x15,0xe3,0x5f,0x95,0xc5,0x55,0xf,0x60,0x70,0x1,0x50,0x8,0x4f,0x0,
|
||||
0x9d,0xc9,0x2c,0x34,0x39,0xf3,0x99,0x2b,0xef,0x5d,0x52,0x2,0xfe,0x97,0x5d,0x81,
|
||||
0x24,0x98,0xf3,0xf5,0xc3,0x4,0x60,0x4b,0x99,0x67,0x13,0x0,0x5e,0xd2,0x20,0x2b,
|
||||
0x2c,0x68,0xc0,0x78,0x67,0xd7,0x16,0xac,0xf8,0x72,0x1e,0x1,0xd8,0x46,0x2a,0x9,
|
||||
0xa,0xc0,0x45,0xf6,0xe7,0x12,0xf0,0xcb,0x7d,0x3a,0xef,0x1a,0x2d,0x49,0x3e,0xbd,
|
||||
0x13,0x20,0xe8,0x80,0x8,0x26,0xee,0x1c,0x80,0x6f,0xde,0xd,0xf0,0x81,0x1d,0xf9,
|
||||
0xa9,0x7f,0x1,0xc0,0x7f,0xb6,0xb3,0xa7,0x29,0xd5,0x4b,0x33,0xe1,0xd,0xd3,0x7,
|
||||
0x47,0x51,0x8c,0xe4,0xfa,0xd3,0x8f,0x29,0x8,0xa9,0x77,0x1,0x18,0xee,0xc,0x2c,
|
||||
0x95,0x2f,0xb3,0x12,0x83,0x27,0xa,0x2a,0x62,0xde,0xae,0xbf,0xa2,0x0,0xfc,0x0,
|
||||
0x22,0x24,0x61,0x77,0x3,0xfc,0x14,0x80,0xf4,0x3,0xf0,0x47,0xc9,0xee,0xc0,0xa0,
|
||||
0x52,0xfd,0x2a,0x55,0x6e,0x70,0xc,0xef,0x23,0x70,0x61,0x83,0x20,0xd8,0x3d,0xc5,
|
||||
0xf0,0x2a,0xd5,0xaf,0x1c,0x7e,0x9e,0x25,0xde,0xf1,0x31,0x2,0xd7,0x30,0x86,0xd1,
|
||||
0xee,0x49,0x94,0x5b,0xa9,0x7e,0xe5,0xd0,0x28,0xab,0x12,0xaf,0x29,0x0,0x89,0xb,
|
||||
0xc0,0xff,0xb0,0x3b,0xb0,0xe6,0x1e,0x66,0x57,0x9c,0xc1,0x1,0x48,0x0,0xe8,0x0,
|
||||
0xf0,0x60,0x77,0x60,0xa9,0x5e,0x9a,0x5f,0xb1,0x2,0x6,0x20,0x98,0xc5,0xed,0xcd,
|
||||
0xbb,0xec,0xf7,0x47,0xbb,0x3,0x5b,0x66,0xc,0x17,0xa4,0xeb,0xd4,0xa6,0x6c,0x73,
|
||||
0x73,0xc1,0xe2,0xd3,0xdd,0x81,0x6d,0x33,0xc6,0xe5,0x42,0xd1,0xa5,0xec,0x66,0x3,
|
||||
0xb9,0xdd,0xee,0x76,0xd8,0x3a,0x63,0x34,0x7d,0xb8,0x1c,0x0,0x58,0x3b,0x63,0x4a,
|
||||
0xf0,0x5c,0x2c,0xae,0x86,0x0,0xea,0xf5,0x52,0xee,0x5b,0x10,0x8a,0x1,0x98,0x84,
|
||||
0x85,0x3e,0xe4,0xc0,0xf9,0x10,0xc0,0x3a,0xb7,0x2d,0x5d,0x37,0x46,0x5f,0xd,0x71,
|
||||
0x31,0x4,0xb0,0xcb,0xcb,0xb9,0x63,0x60,0xfa,0xf6,0x1d,0x3,0xe9,0x87,0xbb,0x3,
|
||||
0xcb,0xd,0xad,0x9,0x26,0x9e,0x52,0x1f,0x4e,0x66,0xa5,0x24,0x8a,0xc,0x30,0x4b,
|
||||
0xcb,0xd,0xad,0x31,0x36,0x62,0x49,0x7d,0x88,0x42,0x46,0x3,0x6e,0x86,0x8,0xc0,
|
||||
0xbc,0x4e,0x53,0x34,0xb4,0x46,0x96,0x9f,0xe9,0x43,0x50,0x4e,0xa1,0xae,0x9e,0x56,
|
||||
0xb1,0x35,0x80,0x3e,0x9c,0x73,0x7d,0x98,0x35,0xb4,0x46,0x27,0x7e,0xa6,0xf,0xd3,
|
||||
0xfb,0x7,0x39,0x50,0xd4,0x67,0xdc,0x21,0x80,0x58,0xdc,0x8b,0x5,0xf0,0xa5,0x37,
|
||||
0x65,0x2f,0x7d,0x3f,0xd3,0x87,0xe9,0xc9,0x71,0xe,0xbc,0xe2,0xbf,0x7e,0x37,0x14,
|
||||
0x30,0x91,0xfd,0xa5,0xee,0x94,0x2d,0x3c,0x3f,0xd3,0x87,0x8,0xcc,0xf4,0xe1,0xd5,
|
||||
0x70,0x82,0x94,0x37,0xb4,0xca,0xfe,0xd2,0x39,0x0,0x2f,0xfd,0x4c,0x1f,0x72,0xe0,
|
||||
0x64,0x2f,0xc0,0xac,0xa1,0x75,0x9,0xc0,0xb9,0x9f,0xe9,0x43,0xe,0x8c,0x6,0x7,
|
||||
0x62,0xbb,0x27,0x44,0xa,0x12,0x8a,0x76,0xcf,0x79,0xec,0x67,0xfa,0x30,0xf5,0xc0,
|
||||
0x79,0xc7,0x3f,0x7e,0xa0,0x14,0xa4,0xd8,0x5f,0x9a,0xd9,0xa1,0x14,0xa4,0xa9,0xb,
|
||||
0xf1,0x30,0x19,0x1a,0x98,0x35,0xb4,0xa6,0x7e,0xe1,0x69,0x32,0x41,0xea,0x26,0xb9,
|
||||
0x20,0x1d,0xe,0x58,0xee,0x2f,0x45,0x5f,0x9a,0x9,0xd2,0xcb,0x4d,0xee,0xda,0x86,
|
||||
0x3,0x1a,0xbe,0x5e,0x1,0x3b,0x0,0x4b,0x4d,0x58,0xc9,0x23,0x30,0x85,0x27,0xf0,
|
||||
0xbf,0x21,0x4d,0xc4,0x78,0x78,0x7e,0x31,0x34,0xb0,0xd4,0x66,0x96,0xbc,0x5,0xc0,
|
||||
0xf7,0x0,0x38,0x81,0x7f,0x82,0x64,0xf8,0xdc,0x19,0x1a,0x58,0x6a,0xa4,0x43,0xb3,
|
||||
0x88,0x60,0xa6,0x4e,0xe0,0x8d,0x91,0xc2,0xb2,0x87,0x36,0x8b,0x52,0xab,0xe0,0xfc,
|
||||
0x35,0x9f,0x7d,0xf2,0x3a,0xc4,0xc3,0xd7,0x21,0x1e,0xfe,0x2c,0x4c,0xf,0xde,0x18,
|
||||
0xda,0xf0,0x4b,0xcd,0x90,0x18,0x2d,0xa6,0xf,0x20,0x1e,0x42,0x0,0x3e,0x39,0xc,
|
||||
0xb3,0x86,0xd6,0x1,0x5d,0x5b,0xa9,0xdd,0x73,0x31,0x5,0xe0,0x43,0x0,0x9e,0x88,
|
||||
0x0,0x2c,0x9b,0x3f,0x6,0x4,0x96,0x1a,0x5a,0xf7,0xf,0xbc,0xeb,0x2b,0xac,0x8c,
|
||||
0xe1,0xbe,0x81,0xe5,0x59,0xba,0x77,0x60,0xd9,0xe,0x31,0x1e,0x62,0x8a,0x61,0x59,
|
||||
0x5a,0x5e,0xba,0x3f,0x4f,0xb3,0x7f,0x60,0xc9,0x97,0xee,0x1f,0xf8,0x2a,0x1e,0xb2,
|
||||
0x3d,0x9b,0x5,0x64,0x8a,0xc,0x32,0x45,0x16,0x81,0x6a,0x9b,0x4,0x6c,0xf8,0xcc,
|
||||
0xfb,0xce,0x81,0x4,0xbe,0x82,0xd8,0x62,0x8f,0x58,0x8c,0x6f,0x80,0x46,0x0,0x9d,
|
||||
0xc0,0x1b,0xa5,0xa2,0xdc,0x28,0x34,0xa0,0x2f,0x95,0xa9,0x21,0xa,0xb1,0x8,0xdf,
|
||||
0xb6,0x34,0x4d,0xe1,0xf,0x52,0xb9,0x86,0x39,0x20,0x70,0xc,0x40,0xc8,0x76,0x97,
|
||||
0x90,0xf4,0xce,0xf1,0xbd,0x64,0xec,0x72,0xce,0x98,0x77,0xc1,0x52,0xf,0xf3,0xe3,
|
||||
0xc1,0x81,0x90,0xf0,0x6e,0x20,0xdb,0x45,0xf5,0xbe,0xc0,0x37,0x24,0xbf,0x53,0x8,
|
||||
0x57,0xfe,0x9c,0xa5,0xc1,0x2,0xde,0xd3,0x57,0xc0,0x9f,0x8,0xf0,0x7a,0x40,0xb3,
|
||||
0x70,0xe0,0xed,0xe6,0xeb,0xf8,0x5b,0xa2,0xc5,0x2b,0xe0,0xe0,0xd1,0xe2,0x15,0xf0,
|
||||
0x15,0xf0,0xa7,0xe,0xb4,0xf6,0xf0,0xa,0x9a,0x80,0x21,0x6,0x77,0x2c,0xf0,0xee,
|
||||
0x7e,0x85,0x44,0xf6,0xb3,0xf1,0x6d,0xe6,0x4d,0x40,0x5e,0x52,0x76,0x76,0x7,0x26,
|
||||
0x1c,0x18,0xb6,0x3,0xb3,0x5e,0xc2,0x5d,0x81,0x71,0x76,0x3f,0x5b,0x80,0x69,0xd6,
|
||||
0xda,0xb7,0x2b,0x90,0xf,0xd,0x66,0x77,0x2d,0x40,0x6a,0x65,0xb7,0x62,0x47,0xa0,
|
||||
0xa8,0xf6,0x7b,0x3f,0x3c,0x20,0x29,0xe6,0xf2,0x6e,0x40,0xf1,0x39,0x6e,0x2b,0x50,
|
||||
0x4c,0x2e,0xcb,0xdf,0x15,0x28,0xe7,0x82,0xd3,0xa,0x14,0x93,0xcb,0xf2,0x76,0x5,
|
||||
0xd2,0xbc,0x75,0xb6,0x5,0x18,0xe5,0xb7,0x62,0x37,0x20,0xc9,0x3b,0x59,0x5b,0x80,
|
||||
0x93,0xfc,0x56,0xec,0x6,0x94,0x43,0x3,0xb3,0xaf,0xa,0x4c,0x8b,0x11,0xb,0x59,
|
||||
0xd1,0x63,0xbb,0x1b,0x30,0xce,0x3d,0x69,0x33,0x30,0xb5,0xac,0x8e,0x76,0xb1,0x5,
|
||||
0x28,0x87,0x6,0x3e,0xba,0xf9,0x96,0x52,0xd5,0xc7,0x77,0x2,0x2a,0xf1,0xc1,0x67,
|
||||
0x45,0x17,0xb6,0xd7,0x2,0x24,0xea,0x37,0xf5,0x5,0x7a,0xb9,0x55,0xe0,0xec,0xab,
|
||||
0x1,0x16,0xc7,0x3c,0x86,0x89,0xf2,0x4d,0xdd,0x80,0x13,0xd,0x98,0xdf,0x29,0xa7,
|
||||
0x6e,0xc,0x8b,0x29,0x19,0xc6,0xc5,0x4f,0xd6,0x11,0xa8,0xbc,0xa6,0x85,0x55,0x80,
|
||||
0x21,0xd6,0x0,0xdf,0x29,0x80,0x51,0xf1,0x93,0xed,0x4,0x4c,0x8a,0x96,0xf2,0x1a,
|
||||
0xe0,0xb3,0x2,0x38,0x51,0xba,0xeb,0x77,0x1,0xc6,0x45,0x86,0xd1,0xc,0x54,0x9b,
|
||||
0xdd,0x77,0x1,0x46,0xc5,0x94,0x6d,0x4,0x9e,0x15,0xc0,0x70,0x27,0x60,0x31,0x85,
|
||||
0xbc,0x46,0xe0,0xa9,0x9e,0x6c,0xf5,0x7,0x16,0x9f,0xe3,0x36,0x7a,0x9a,0x91,0x6e,
|
||||
0xbd,0xbd,0x81,0x69,0xf1,0x39,0x4e,0x23,0xf0,0x89,0x66,0x4c,0xfd,0x81,0x54,0xd9,
|
||||
0xdb,0xd1,0xe8,0x69,0xde,0x53,0x6e,0xc5,0x2e,0x40,0xa2,0xf8,0x9d,0x17,0x86,0x99,
|
||||
0xb7,0xb3,0xb,0x30,0x69,0xce,0xbc,0x3f,0xf,0x6b,0x80,0xf6,0x2e,0xc0,0xb8,0x19,
|
||||
0x78,0x10,0x68,0x40,0x3f,0x19,0x6,0xe8,0xa4,0x5b,0x80,0xe9,0x3b,0xbe,0x6,0x14,
|
||||
0xbf,0xed,0xe,0xf4,0x85,0xf9,0xd7,0x0,0x9f,0x5d,0x7d,0xaf,0x40,0x47,0x75,0x4c,
|
||||
0x6d,0x7b,0x7d,0x9a,0x80,0x32,0xe7,0xac,0x1,0x7e,0xa4,0x1,0x5d,0xa6,0x8d,0x79,
|
||||
0xd3,0x2b,0x6c,0x2,0xda,0x32,0x48,0xd5,0x1,0xb5,0x31,0xf4,0xc5,0x17,0x1a,0xdc,
|
||||
0xd2,0xb4,0x11,0xe8,0xca,0xb8,0x5f,0x33,0x4b,0xef,0x69,0xb3,0x34,0x10,0xf1,0x7a,
|
||||
0x67,0xa0,0x57,0x7c,0x5e,0x19,0xf8,0x99,0x66,0x87,0xa1,0xf8,0xc9,0x76,0x6,0xfa,
|
||||
0x32,0x77,0xb,0xda,0x3c,0x4d,0xe,0x94,0xe5,0x7b,0x74,0xb5,0x14,0xbe,0x8d,0x5a,
|
||||
0x21,0xaf,0xf4,0x27,0xf8,0xb6,0xb1,0xd2,0xdf,0x1f,0xf8,0x77,0x2a,0x50,0xfe,0x6e,
|
||||
0x67,0x8b,0x5c,0xb8,0xb2,0x46,0xf8,0x6,0xe4,0xac,0xca,0x1f,0xca,0x2a,0x7f,0x33,
|
||||
0x30,0x90,0xe9,0x70,0x1b,0xd0,0x96,0x29,0x98,0x4d,0xc1,0x40,0xc4,0xda,0xa1,0xcb,
|
||||
0x37,0x5b,0x25,0xbc,0xc5,0x5,0x8d,0x2b,0xe0,0x6b,0xf9,0x13,0xab,0x19,0x18,0xca,
|
||||
0x84,0xdf,0x18,0x48,0xe0,0x8f,0x84,0x97,0x30,0x1d,0x5e,0xc2,0x8c,0x79,0x9,0xd3,
|
||||
0xcb,0x4a,0x98,0xf0,0x3e,0x1b,0x4,0xe8,0xca,0x44,0xdd,0x86,0x2f,0x86,0x6f,0xb0,
|
||||
0xe1,0x9b,0x6d,0xf8,0xbb,0x3,0x6f,0x17,0x60,0x2e,0x7c,0x8d,0x7,0x63,0xec,0xc3,
|
||||
0xfb,0xa4,0x11,0x98,0x69,0x28,0x63,0x20,0x7c,0x13,0xa6,0xa9,0x98,0x39,0x2,0x8,
|
||||
0x86,0x14,0xa0,0xc2,0x23,0xbb,0x60,0x36,0x1e,0xbc,0x1f,0xe,0xb,0x8c,0xbc,0x49,
|
||||
0x10,0xf9,0x56,0x30,0x39,0xb1,0x42,0xeb,0xc4,0x4a,0xad,0xb1,0x9d,0x5a,0xc4,0xa6,
|
||||
0x36,0x71,0x88,0x9d,0xb8,0xc4,0x89,0xef,0xd,0x2,0xf4,0xa4,0xd8,0xb2,0x23,0x3f,
|
||||
0xa,0xa2,0x60,0x12,0x4c,0x42,0x0,0x32,0x0,0xa6,0x76,0xa,0x38,0xea,0x50,0x7,
|
||||
0x90,0x2e,0x71,0x93,0x46,0xa0,0x9d,0xe9,0x60,0x73,0x60,0x10,0x7,0x51,0x8,0x48,
|
||||
0x16,0x85,0x60,0x94,0xa9,0xcd,0xec,0xd4,0x1,0xa4,0x9b,0x2,0x8e,0xba,0xc4,0x23,
|
||||
0x43,0x3,0xc3,0x24,0x88,0x58,0x1c,0x9c,0xb3,0x38,0x84,0x29,0x3,0xa,0xe4,0x3c,
|
||||
0x75,0x99,0x4d,0x3d,0xe6,0x10,0x2f,0x75,0x89,0x4f,0xfb,0x3,0xd9,0x4e,0xc0,0x54,
|
||||
0x8b,0x20,0x9e,0x1,0x30,0xda,0xd,0x48,0x35,0xa0,0x6b,0x0,0xb4,0x82,0xdd,0x80,
|
||||
0xda,0x4d,0x5a,0xb7,0x3,0xd3,0xe0,0xae,0x81,0xe1,0xd5,0x4e,0xb3,0x74,0x30,0xa0,
|
||||
0xa9,0x1d,0xee,0x8,0xec,0xee,0x69,0xea,0x81,0xd,0x9e,0x66,0xb,0xd0,0xd8,0x97,
|
||||
0xfe,0x8,0x80,0x96,0xbf,0x53,0x78,0xda,0x11,0xd8,0x3d,0x0,0x6f,0x1,0x36,0x5,
|
||||
0x60,0xb6,0x53,0x8a,0xb1,0x23,0xb0,0x7b,0x12,0xb5,0x5,0xd8,0x90,0x44,0x7d,0x1e,
|
||||
0xee,0x94,0x26,0x6e,0x1,0x36,0xa4,0x89,0xba,0x3e,0xec,0x9c,0x8,0x53,0x55,0x8b,
|
||||
0x84,0x6,0xc0,0x92,0x3e,0xec,0x9c,0xea,0x53,0xf5,0x6c,0xbc,0x2,0xb8,0x3d,0xd5,
|
||||
0x2f,0xc9,0x35,0x9f,0x69,0x35,0x81,0x76,0xf5,0x44,0xd9,0xff,0x29,0x82,0x53,0x18,
|
||||
0xb7,0x8b,0x99,0x12,0xb0,0xb3,0x5c,0xa3,0xec,0xdb,0xa2,0x14,0x11,0xc6,0xa1,0x81,
|
||||
0x5c,0xab,0x13,0xa4,0xe6,0xa,0x18,0x80,0xf9,0xdf,0x6e,0x42,0x1a,0x1a,0x8,0xd2,
|
||||
0xdd,0x34,0xfe,0x36,0xe0,0x56,0xc9,0x5d,0xd2,0x87,0x9d,0xab,0x18,0xdb,0x80,0x5b,
|
||||
0xab,0x18,0x25,0x7d,0xd8,0xb9,0x4e,0xb3,0xd,0x68,0xb2,0x24,0xdb,0xab,0x12,0x55,
|
||||
0x3,0xac,0xaf,0x44,0x25,0x76,0xe2,0xe0,0xb6,0x7d,0x30,0xa7,0xf4,0x71,0x7a,0x2,
|
||||
0xbe,0x8c,0x58,0x7d,0x6a,0x6d,0x35,0xc0,0xfa,0x5a,0x5b,0x62,0x25,0x36,0x7,0x82,
|
||||
0xcf,0x7c,0x44,0x8f,0x21,0xa6,0x9f,0x5a,0x7d,0xaa,0x89,0x35,0xc0,0xfa,0x6a,0x62,
|
||||
0x62,0x8d,0x0,0x11,0xfe,0x19,0x92,0x24,0xfa,0x68,0x74,0x64,0x3d,0xb2,0x8e,0xac,
|
||||
0x3e,0xf5,0xd2,0x1a,0x60,0x7d,0xbd,0x74,0x43,0x9e,0x92,0x53,0xc6,0x6e,0x19,0xf5,
|
||||
0xc9,0xe8,0xad,0xa3,0xf1,0xa3,0xf1,0xc9,0x51,0x9f,0x8a,0x70,0xd,0xb0,0xbe,0x22,
|
||||
0xbc,0xa1,0x4f,0xe9,0x29,0xdf,0xab,0xfd,0x4d,0x92,0x58,0x47,0xe9,0xa3,0xf4,0xe4,
|
||||
0xa4,0x4f,0xcd,0xbb,0xe,0x58,0x5b,0xf3,0xe6,0xc0,0x73,0xb6,0x84,0x49,0xb3,0xe1,
|
||||
0x40,0x48,0x89,0xfb,0x54,0xf5,0xeb,0x80,0xb5,0x55,0x7d,0x0,0x92,0x53,0x8b,0xcd,
|
||||
0x0,0xb8,0xdc,0xbc,0x6,0xc0,0x30,0xd,0xfa,0xac,0x5b,0xd4,0x1,0x6b,0xd7,0x2d,
|
||||
0x36,0x94,0x4f,0x9a,0xb,0x0,0xae,0x36,0x9f,0x1,0xd0,0x4a,0x83,0x3e,0x2b,0x33,
|
||||
0x75,0xc0,0xda,0x95,0x19,0x0,0xda,0xe4,0x28,0xbc,0x4,0xe0,0x7a,0x93,0x1e,0xa5,
|
||||
0x90,0xec,0x6,0x13,0x93,0x20,0xe1,0x37,0x1,0x93,0x70,0xeb,0xda,0x53,0xe,0xb4,
|
||||
0xfc,0x3b,0x2,0x92,0x91,0x45,0x68,0xe8,0x66,0xc0,0xc0,0x3a,0xb,0x8c,0xc2,0xa0,
|
||||
0xd7,0x4,0xe4,0xf1,0xb0,0x7e,0x39,0x2f,0xb1,0x36,0x49,0x48,0xcf,0x7c,0xb8,0xa5,
|
||||
0xdf,0x71,0x20,0x3d,0x9,0x8c,0x16,0x2c,0xe7,0x5b,0x80,0xde,0x1a,0x80,0x3c,0xc5,
|
||||
0xa8,0x5f,0xb0,0x4c,0xec,0xd,0x9,0xe9,0x38,0xc0,0xd4,0x84,0x3,0xd3,0x93,0xc0,
|
||||
0x68,0x49,0x76,0x53,0xf,0x4c,0x9d,0x2,0x58,0xbb,0x24,0xb,0x40,0x7a,0x4a,0xc7,
|
||||
0x61,0x6,0x4,0xc3,0xf,0x8c,0x16,0x9d,0xb5,0x13,0x29,0xa,0x20,0x79,0xaa,0x0,
|
||||
0xeb,0x16,0x9d,0x37,0x30,0x8a,0xa7,0xa7,0xa7,0x19,0x10,0x5d,0x5b,0x60,0xb4,0xac,
|
||||
0xae,0x1d,0x99,0x28,0x80,0x98,0xa6,0x13,0xaa,0x0,0xeb,0x96,0xd5,0x37,0x30,0x8a,
|
||||
0xa7,0x96,0x38,0x14,0x14,0x80,0xe8,0xbc,0x5d,0xb3,0xc6,0x1,0xaf,0x1e,0x98,0x7e,
|
||||
0x54,0x0,0xeb,0x1a,0x7,0x0,0x8,0x2,0x62,0xc3,0xb3,0xb6,0x4d,0xca,0xc3,0x93,
|
||||
0x6b,0xd6,0x1a,0xb1,0xa8,0xde,0x52,0xb8,0x68,0xd,0x58,0xd7,0x1a,0x1,0x40,0xd0,
|
||||
0xec,0x19,0x90,0x7,0x60,0xd7,0xac,0xf9,0x63,0x59,0xf,0x64,0xbf,0x2a,0x80,0x4d,
|
||||
0xcd,0x1f,0x4a,0x5e,0x6a,0xd8,0xde,0x42,0xaa,0xc0,0x2b,0xc6,0x37,0x2b,0xe6,0xc0,
|
||||
0xa6,0xf6,0x16,0xd,0x68,0xd4,0xc0,0x43,0x83,0xa,0xf0,0x1b,0xc6,0x1b,0x79,0x73,
|
||||
0x60,0x53,0x3,0x8f,0x6,0x34,0x6b,0x51,0xf2,0x6a,0xd,0x3f,0x50,0x66,0x69,0x53,
|
||||
0x8b,0x92,0x6,0x34,0xeb,0xfa,0xba,0xd8,0xee,0xda,0x32,0x60,0x43,0xd7,0x97,0x6,
|
||||
0x34,0xeb,0x6b,0xdb,0xb4,0x3,0x1b,0xfa,0xda,0xb4,0x7e,0x1a,0xb3,0xce,0x3d,0xc5,
|
||||
0xd7,0x6c,0x3,0x36,0x74,0xee,0xe9,0x40,0xa3,0xde,0x44,0xc5,0xd7,0x6c,0x3,0x1a,
|
||||
0xf7,0x26,0xc6,0x46,0x49,0xa9,0xa7,0x2,0xc3,0x12,0xf0,0x32,0xab,0x7a,0xf1,0xa1,
|
||||
0x69,0x3,0x9a,0xbd,0x16,0xa,0x30,0x2d,0x3,0xf5,0x53,0xbf,0xda,0x6e,0xa9,0xd9,
|
||||
0x6b,0xd9,0x4,0xd4,0xcf,0x1c,0x1c,0x6,0x48,0x9a,0x80,0xec,0xbc,0x19,0xa8,0x1c,
|
||||
0x98,0x6b,0xc,0x2c,0x7c,0x4d,0x1d,0x30,0x9,0x9a,0x81,0xc5,0x24,0x37,0x6,0x16,
|
||||
0x3f,0xa3,0x0,0x62,0x15,0x10,0xf7,0xa,0x9,0xa0,0xf6,0x94,0x92,0x17,0x9a,0x5c,
|
||||
0xe3,0x3b,0xb2,0x13,0x94,0x6b,0x47,0x2e,0xd6,0x63,0xcb,0x1f,0x1c,0x1b,0x64,0x54,
|
||||
0x39,0x10,0x86,0x46,0x0,0xb5,0x69,0xa3,0xcb,0x35,0xbe,0xab,0x7e,0x8e,0x72,0xed,
|
||||
0xc8,0x9d,0xf8,0x13,0x9f,0x31,0x56,0x5a,0x16,0x30,0x7,0x62,0x9d,0x4c,0x2,0xd5,
|
||||
0x47,0xdd,0xd5,0x0,0x2f,0xb7,0x3,0x7d,0x83,0xcc,0xad,0x6,0xc8,0x26,0xf5,0xc0,
|
||||
0x91,0x15,0x4e,0xc2,0x3f,0xc3,0x78,0xa0,0x3e,0xbc,0x67,0xb9,0xc2,0xe0,0x53,0x93,
|
||||
0x91,0x4c,0xaa,0x40,0x2c,0x3b,0x66,0xc0,0xc4,0xaf,0x1,0xa2,0x3e,0xc,0xcf,0xd9,
|
||||
0x2d,0x98,0x5,0xe8,0xc3,0x93,0x13,0xff,0xd2,0x33,0x7,0x2a,0xde,0x34,0x3,0x62,
|
||||
0x61,0x35,0x3,0x2a,0x8f,0x19,0xd0,0xe5,0x5a,0x88,0xc7,0xdb,0x59,0x3e,0xe8,0xc3,
|
||||
0x93,0x93,0x60,0xe1,0x9b,0x3,0x95,0xb3,0xa7,0x33,0xa0,0x28,0x1d,0xcb,0xd9,0x1f,
|
||||
0x7,0xf5,0xc0,0x33,0x9f,0x3b,0x8d,0xd,0x7,0xb2,0xe,0x40,0xe5,0x50,0x5f,0xe,
|
||||
0xf4,0x27,0x61,0xe4,0x5b,0x5,0x90,0xba,0xb5,0x40,0x32,0xe,0xf8,0x81,0x48,0xa0,
|
||||
0xf,0xe1,0x96,0x76,0x2,0xce,0x75,0x60,0xb6,0xa6,0x92,0xc7,0xee,0xa8,0xe,0x8,
|
||||
0xfa,0xd0,0x66,0x17,0x69,0x70,0x5,0xfa,0x10,0xe4,0x76,0xd0,0x5,0x18,0xeb,0x40,
|
||||
0x10,0x31,0x80,0x54,0x80,0xc4,0xaf,0x3,0xda,0xc4,0x66,0x97,0xa9,0x7f,0x5,0xea,
|
||||
0xe9,0x24,0x98,0xf8,0xbe,0x67,0x2e,0xd7,0x28,0x36,0xbf,0xf2,0x8d,0xf2,0xf5,0xc0,
|
||||
0xfc,0x98,0xda,0x92,0x5c,0xb3,0x98,0x9b,0x7a,0x2,0x18,0x79,0xbe,0x67,0x2e,0xd7,
|
||||
0x52,0x5c,0x48,0xe0,0xfb,0x83,0x68,0x3d,0x30,0x9b,0x36,0xba,0x5c,0x3b,0x25,0x20,
|
||||
0xd7,0xdc,0xab,0xef,0x10,0xc8,0x5c,0xc3,0x5b,0x2a,0x82,0xe1,0x14,0xae,0xd1,0xa7,
|
||||
0x21,0xa8,0x3c,0x56,0xb,0x4c,0xdd,0xaa,0x2f,0x5,0x31,0x83,0x72,0xed,0x37,0x3c,
|
||||
0xf3,0xe,0xd8,0xa5,0x21,0x50,0x1c,0xa8,0x8f,0x47,0x51,0x4d,0xe1,0xed,0x6f,0x1,
|
||||
0x66,0xe,0xb5,0x46,0xae,0x8d,0x38,0xd0,0xdc,0xe,0x45,0xce,0xb6,0x81,0xdf,0xae,
|
||||
0xc1,0xa6,0xae,0x38,0xb0,0x32,0x4b,0xf3,0x38,0x5c,0x23,0xd7,0x4e,0x7d,0xe,0x34,
|
||||
0xf0,0x34,0xc4,0x2a,0xa2,0x2f,0xf9,0x30,0x72,0xd6,0xf3,0xc8,0xbd,0xe6,0x40,0x69,
|
||||
0x87,0xf3,0x50,0x39,0x7b,0xef,0x9c,0xaf,0x37,0x54,0xe5,0x5a,0x7a,0x86,0x40,0x23,
|
||||
0x5f,0xca,0x8f,0x6e,0x92,0x39,0x5b,0xea,0x4e,0xec,0x9b,0xcb,0x89,0xb3,0xc2,0x74,
|
||||
0x29,0xf3,0x34,0x1a,0x10,0xe2,0x70,0x6c,0xd5,0xc8,0x35,0x6c,0x99,0x6,0x60,0x11,
|
||||
0x2d,0xb6,0x3,0xe5,0xf1,0xbe,0xc2,0xc4,0x60,0x4a,0x6f,0x7c,0xcb,0x5e,0x22,0xf0,
|
||||
0x89,0xf4,0xa5,0x1a,0x30,0xc5,0x15,0xb2,0xa0,0x2a,0xd7,0xa4,0x20,0xcd,0x3,0x70,
|
||||
0x3,0x50,0x1e,0xef,0x2b,0x76,0x1e,0xde,0xb3,0xac,0xd3,0x13,0xcb,0x4a,0x28,0x7c,
|
||||
0xcb,0x13,0x19,0x2d,0x34,0x20,0x4c,0x9b,0x49,0x5d,0x43,0x6b,0x39,0x4d,0x6c,0x0,
|
||||
0x4e,0x44,0x8a,0xcc,0xed,0x22,0x7d,0xcb,0xb2,0x8e,0xc7,0x96,0x35,0xce,0x80,0x18,
|
||||
0xf,0x75,0x20,0xf5,0xea,0x1b,0x5a,0x4b,0x59,0x5b,0x3,0x50,0x8a,0x0,0x6e,0x17,
|
||||
0xe9,0xa9,0x65,0x1d,0x42,0x7e,0x7d,0x9c,0x1,0x31,0xc5,0xd0,0x81,0xa8,0x1b,0xdc,
|
||||
0x5d,0x80,0xa9,0x94,0x39,0x7c,0x18,0xd2,0x91,0x13,0xdf,0x8f,0xdd,0xe8,0x30,0x7,
|
||||
0x42,0x12,0x55,0x2,0x26,0xf5,0xd,0xad,0x21,0xeb,0x8,0x24,0x2,0xe8,0x26,0xf7,
|
||||
0x63,0x2f,0xe6,0xc0,0xec,0x5b,0x4a,0x40,0xa,0x79,0x5a,0xd,0xd0,0x35,0x7,0x8e,
|
||||
0x6c,0xe9,0xb8,0xf9,0x15,0x92,0xfb,0xb1,0x9f,0x34,0x2,0xad,0xd3,0xda,0x96,0x5d,
|
||||
0x73,0x20,0xb1,0x73,0x2d,0x93,0x8e,0x7e,0x49,0xef,0xc7,0x1,0x69,0x4,0xbe,0x7e,
|
||||
0x5c,0x3,0xe4,0x9b,0xde,0xcd,0x80,0x36,0x15,0xc0,0x4b,0xe,0x3c,0x1a,0xb7,0x2,
|
||||
0x5d,0xea,0xe0,0x36,0xfa,0xe6,0x54,0xdf,0x0,0x38,0xe7,0xc0,0x13,0x23,0xa0,0x15,
|
||||
0x54,0x80,0x49,0x67,0xe0,0x86,0x3,0x3,0x6a,0x2,0x7c,0x51,0x5,0x4e,0xd8,0xdd,
|
||||
0x2,0xbb,0xcc,0x52,0x39,0x69,0xc8,0x6e,0xc0,0xa0,0xab,0x59,0x70,0xbb,0x48,0x47,
|
||||
0x7e,0xbb,0x59,0x38,0x64,0xc7,0x2b,0x94,0x5,0x15,0x7e,0xae,0xaf,0xa9,0xe1,0xef,
|
||||
0x32,0x86,0x79,0x5,0xc7,0x2f,0xb9,0xb6,0x10,0x23,0x5b,0xd5,0xb5,0x51,0x74,0x6d,
|
||||
0x41,0x79,0x39,0xf,0x66,0x29,0x56,0xf4,0xed,0x24,0xd,0xc,0x9d,0xb7,0x28,0x6b,
|
||||
0xab,0xce,0x3b,0xb4,0x44,0x97,0x41,0x9,0x88,0xad,0x29,0xa,0x50,0x2e,0xe7,0x61,
|
||||
0xc6,0x77,0x6c,0x8d,0x21,0xb0,0x5,0x86,0xe1,0x89,0xc7,0x8b,0x74,0x8c,0x30,0x19,
|
||||
0x9e,0xce,0x64,0x1f,0x45,0x9,0x88,0xad,0x29,0x2a,0x50,0x2e,0xe7,0xc5,0x3e,0xc5,
|
||||
0xa5,0xbc,0x47,0xa4,0x15,0x98,0x9f,0xaf,0xf,0x76,0x1,0x77,0xc5,0x1a,0x9f,0x59,
|
||||
0x16,0xa5,0x1c,0xee,0x30,0x19,0x80,0x43,0xfd,0x27,0xf4,0xb,0x20,0x97,0x6b,0x24,
|
||||
0x4,0xb9,0x16,0x92,0x11,0x3d,0x1a,0x3f,0x4a,0xc2,0x36,0x60,0xfe,0x4,0x1,0xb4,
|
||||
0xb,0xdf,0xb2,0x48,0x60,0xd9,0x3c,0xe2,0x9f,0xc2,0xe0,0x8a,0x14,0x43,0x3f,0x13,
|
||||
0x1a,0x53,0x8c,0x40,0x93,0x6b,0x24,0x5c,0xe2,0x73,0x9b,0x79,0x55,0x3f,0x6e,0xd,
|
||||
0xc0,0x49,0x56,0xd7,0x44,0xbb,0x98,0x4e,0xec,0x8d,0x3f,0x71,0x96,0x8,0x1c,0x41,
|
||||
0x7a,0x28,0x92,0x28,0x1d,0x88,0x49,0x94,0xe,0x4c,0xc4,0x72,0xde,0x6,0xfe,0x5f,
|
||||
0x32,0x6b,0x5,0x12,0x4b,0xb1,0xdd,0x45,0xe4,0xac,0x2e,0x23,0x77,0xce,0x3,0x70,
|
||||
0x9e,0x26,0xea,0x40,0x4c,0x13,0x55,0x20,0x5c,0x9f,0x90,0x6b,0x9,0x2,0x2f,0x5a,
|
||||
0x81,0xc5,0xcb,0xe7,0xe3,0xb8,0x58,0x62,0xca,0x7f,0x1b,0xa5,0x4f,0x8a,0x44,0xb8,
|
||||
0xfc,0xdd,0x2a,0x10,0x34,0xfe,0x9c,0x17,0x5b,0x57,0x89,0x45,0xf0,0x88,0x16,0x73,
|
||||
0xe0,0x94,0x7f,0x8a,0x48,0xf5,0x37,0x93,0x93,0x27,0x45,0xaa,0xdf,0x8,0x4,0xb1,
|
||||
0xc6,0x63,0xdb,0x9a,0x22,0xd0,0x53,0x36,0x5a,0xb5,0xc9,0xb5,0x5,0xb7,0x6a,0x1f,
|
||||
0xde,0x1,0x5d,0xf9,0x86,0x40,0x90,0x6b,0x10,0xbb,0xf9,0xf9,0xc3,0xa9,0x75,0xca,
|
||||
0xaf,0xd0,0x58,0xae,0xdd,0x70,0xab,0x16,0x72,0x6d,0x1d,0xfc,0xce,0x8,0x88,0x72,
|
||||
0xd,0xc4,0x1a,0xfe,0xbc,0xdf,0x31,0x7a,0x84,0x7,0xd1,0x98,0xdd,0xd2,0x85,0xbe,
|
||||
0x92,0x60,0xe,0x4,0xb9,0x36,0xe,0x64,0x99,0x2e,0x5,0xe0,0x5f,0x1a,0x2,0x4b,
|
||||
0xf,0xc,0xe9,0x2,0xa4,0xa7,0xa1,0xf8,0x4e,0x43,0x3b,0x2c,0xe4,0x9a,0x12,0xd3,
|
||||
0xe8,0xfa,0xc5,0xef,0xcc,0x66,0x29,0xca,0x35,0x69,0x37,0x49,0xe1,0x69,0xd2,0x86,
|
||||
0x65,0x12,0xe1,0x4b,0x6f,0xb,0x41,0xc3,0x81,0x9b,0xab,0x93,0x27,0x45,0xd9,0x24,
|
||||
0xa4,0xca,0xf7,0x73,0x3b,0x8c,0x1c,0x45,0xae,0xc9,0x1a,0x56,0x52,0xf8,0xd2,0xb4,
|
||||
0x61,0x99,0x44,0x0,0x69,0x96,0xb8,0x49,0x20,0xb1,0xce,0x32,0x4f,0x13,0x71,0x51,
|
||||
0xe3,0xeb,0x9e,0x26,0xb2,0xb,0xb9,0x46,0xa4,0x9c,0xa5,0x4a,0xb4,0x68,0x5,0xf2,
|
||||
0x7b,0x5e,0xd4,0x69,0x68,0x6a,0xe5,0xbe,0x14,0x97,0xd5,0x13,0xa5,0x46,0xcf,0x7d,
|
||||
0x69,0x64,0x15,0x72,0x2d,0x3,0xa6,0x4a,0x3c,0x6c,0x58,0x97,0x91,0xc0,0x40,0xab,
|
||||
0x7a,0xab,0xd1,0x2,0x57,0xb9,0x63,0x65,0x15,0x42,0x44,0xb,0x6c,0xf9,0x68,0x90,
|
||||
0x6b,0x93,0x36,0x20,0x1f,0x3f,0xa2,0x1,0xb3,0x78,0x88,0xab,0xdc,0x91,0xb2,0xce,
|
||||
0x22,0xe2,0x21,0x3e,0xee,0xab,0x9,0x68,0xb7,0x1,0xa7,0xda,0x34,0x55,0x23,0x3e,
|
||||
0x56,0x13,0x27,0xc5,0x4a,0x92,0x8c,0xf8,0x69,0x33,0x30,0xba,0x73,0xa0,0x63,0xa4,
|
||||
0x80,0x7d,0xd,0x28,0x93,0x28,0x4,0x2a,0x8b,0x73,0x32,0x89,0x6a,0xb9,0xa5,0x71,
|
||||
0x2b,0x70,0x55,0x8,0xfd,0xc,0xa8,0x2c,0x23,0xa8,0x40,0x91,0x26,0x92,0xa3,0x66,
|
||||
0xa0,0xdb,0x6,0xdc,0x68,0xab,0x41,0x15,0xe0,0x91,0x55,0x4a,0x84,0x93,0xd3,0xbe,
|
||||
0xc0,0x2b,0x71,0x5d,0xb7,0x45,0x1,0xac,0xe,0x38,0xb6,0xf4,0x54,0x3f,0xb3,0xc3,
|
||||
0x2d,0xc0,0xa6,0xf5,0x4a,0x9,0xa4,0xe2,0x32,0x65,0xf9,0xb2,0x2,0x64,0x1a,0x70,
|
||||
0x92,0x7b,0x9a,0x7a,0x60,0xda,0xb4,0x22,0x2b,0x81,0xfc,0xf3,0x49,0x1e,0xf,0x9b,
|
||||
0x81,0x56,0xee,0x4b,0xb7,0x0,0x43,0xe2,0xd1,0x36,0x20,0x9a,0x4,0x1d,0xe7,0xe5,
|
||||
0xcb,0x46,0x60,0x8d,0xb6,0x28,0x3,0xfd,0x36,0xa0,0xd0,0xf8,0x47,0x79,0xf9,0xb2,
|
||||
0x65,0xc,0xdb,0x80,0xb4,0x1d,0x78,0x29,0x8b,0x85,0xb2,0x7c,0xd9,0x36,0x4b,0x5b,
|
||||
0x80,0x91,0xdb,0xa,0xe4,0xa1,0x62,0x9e,0x97,0x2f,0x5b,0xec,0x70,0x31,0x39,0x6d,
|
||||
0x4,0x4e,0x9c,0x56,0x20,0x37,0xc4,0x79,0x56,0xbe,0x6c,0xf3,0x34,0xb,0xeb,0x54,
|
||||
0xa6,0x18,0xd8,0xb6,0x18,0xaa,0xdd,0x31,0x1c,0x8,0xfa,0xa4,0x4d,0x3d,0xf1,0x50,
|
||||
0x71,0x9e,0x95,0x2f,0xdb,0x7c,0xe9,0x4b,0xeb,0x48,0x66,0x6d,0x90,0x22,0xc6,0x15,
|
||||
0x20,0x8,0xa2,0x71,0x1b,0x90,0xff,0x44,0x7,0x4a,0xf9,0xb2,0x8,0x4f,0x6b,0x56,
|
||||
0x9,0x4f,0x5f,0x3e,0x3c,0x90,0xc0,0x33,0x87,0x4d,0x42,0x7a,0x2,0x60,0x7c,0xa2,
|
||||
0x70,0xb0,0xe4,0x40,0x94,0x7d,0x6d,0x40,0x1c,0x33,0xd0,0x94,0xb2,0x7c,0x9,0xf7,
|
||||
0xb0,0x8,0xc0,0x6b,0x56,0x9,0xc0,0x5f,0x6,0x7,0x32,0x11,0x1e,0xdb,0x30,0xd5,
|
||||
0xc8,0x99,0x35,0xb6,0x1,0x48,0x21,0xe9,0xa,0xa5,0xb0,0x6d,0x15,0xa4,0x81,0xaa,
|
||||
0x80,0x1,0x58,0xa4,0x18,0x6b,0x56,0x49,0x31,0xbe,0xc,0x25,0x90,0x9e,0xbe,0x5,
|
||||
0x16,0x15,0xa7,0x30,0x8f,0x11,0xe8,0x3f,0xf,0x79,0x71,0xc2,0x8d,0xee,0xb7,0x2,
|
||||
0x75,0x8d,0xff,0x2d,0xd6,0x29,0x79,0x12,0x85,0xc0,0x4a,0x12,0x55,0x0,0x47,0x23,
|
||||
0x5c,0x5d,0x4b,0x4f,0x1e,0x11,0xf8,0x4,0xea,0xfb,0xfc,0xa,0x47,0x5e,0xdc,0xe,
|
||||
0x9c,0x72,0x60,0x56,0xc5,0x28,0xaa,0xfa,0x8,0xac,0xa4,0x89,0xf9,0x2d,0xa5,0x23,
|
||||
0xbe,0xba,0x96,0x9e,0x3c,0xa6,0xa1,0xcf,0xc8,0x95,0x2d,0x80,0x7e,0xd2,0xe,0x5c,
|
||||
0xe0,0x17,0xda,0x59,0x9d,0xa6,0x58,0xb7,0xc8,0x17,0x2c,0xd5,0x44,0xf8,0x65,0x1,
|
||||
0x14,0xab,0x6b,0x2,0x78,0x3b,0xb5,0x4,0x30,0x20,0xed,0xc0,0x15,0xaf,0x26,0x66,
|
||||
0x95,0xa8,0x62,0x65,0xa6,0x16,0xb8,0x78,0xa8,0x1,0x2f,0x53,0xeb,0x1d,0x1,0x3c,
|
||||
0x34,0x7,0x62,0x51,0x61,0x74,0x3c,0x36,0x3,0x46,0xf7,0x8f,0x72,0xb9,0x76,0x8a,
|
||||
0xab,0x6b,0xd6,0x33,0x4,0x6e,0xae,0xf,0xc3,0x36,0xa0,0xda,0x1a,0xa1,0x94,0x2f,
|
||||
0x5b,0x81,0xa7,0x99,0x5c,0xa3,0x7c,0x75,0xd,0x7e,0x7,0x60,0xe2,0x76,0x0,0x82,
|
||||
0x4,0x52,0x8a,0x7b,0xa6,0x40,0xb1,0xd8,0x15,0xa4,0x1,0x7,0xc6,0x5d,0x80,0x69,
|
||||
0x17,0x60,0x69,0x75,0xd,0x80,0x9,0x9a,0x45,0xec,0xdc,0x11,0x10,0x9c,0x29,0xb1,
|
||||
0x0,0xb8,0x5a,0x7d,0xda,0x6a,0x16,0xc5,0x2b,0x50,0xcb,0x97,0x2d,0x66,0xa1,0xe8,
|
||||
0x43,0xca,0x97,0xf3,0x2,0x6a,0x3,0x70,0xb1,0x9a,0xb4,0x1a,0xbe,0x1a,0xa8,0x94,
|
||||
0xf2,0x65,0x8b,0xe1,0x6b,0x40,0x5c,0xce,0xb,0x20,0x6a,0x0,0x70,0x33,0x63,0x6d,
|
||||
0xae,0x4d,0x2d,0x9b,0x98,0xbb,0x36,0x9e,0x89,0x48,0xe0,0xd8,0xda,0x94,0x3,0x70,
|
||||
0x93,0xf3,0x56,0xb,0xb,0x4a,0xf9,0xf2,0x5b,0x46,0x9a,0x9c,0xb7,0xa,0x3c,0xb3,
|
||||
0x2b,0xc0,0xa6,0xf0,0xa4,0x16,0x16,0x94,0xf2,0xa5,0xec,0x2f,0xdd,0x16,0x9e,0x32,
|
||||
0x60,0xa9,0xd8,0x1b,0x18,0x4,0x60,0xb5,0xb0,0xa0,0x94,0x2f,0xbf,0xcd,0xcf,0xdd,
|
||||
0xad,0xd,0xc0,0x2d,0xc0,0xa6,0x14,0x43,0x73,0x35,0x45,0xf9,0xf2,0x5b,0xf8,0xe4,
|
||||
0x86,0x14,0x23,0xb1,0x7a,0x27,0x51,0x9a,0xab,0x29,0xca,0x97,0x0,0x6c,0x4a,0xa2,
|
||||
0xda,0x80,0xd,0x69,0xa2,0x66,0xf9,0x45,0xf9,0x52,0xef,0xfa,0xaa,0xa4,0x89,0x6d,
|
||||
0x40,0xc6,0xc,0x80,0x60,0xf9,0x79,0xf9,0xb2,0xc,0xac,0x24,0xc2,0x53,0x32,0x0,
|
||||
0xf0,0x8a,0xa9,0x9d,0xa,0xac,0x31,0xd5,0x1f,0x4,0x78,0x59,0x94,0x2f,0xcb,0xc0,
|
||||
0xb2,0x5c,0x1b,0x6,0x38,0x2f,0xca,0x97,0xcd,0x40,0x6b,0x20,0xa0,0x5a,0x18,0x6a,
|
||||
0x4,0xe,0x75,0x4b,0xc9,0x76,0x60,0x57,0xb9,0x66,0x6,0x2c,0xa,0xa6,0xed,0xb3,
|
||||
0xb4,0xbf,0x5c,0x53,0xd,0x31,0xd8,0xa,0xac,0x94,0x4d,0x5a,0x80,0x46,0x9e,0x86,
|
||||
0x67,0xfb,0xed,0xc0,0xd2,0xea,0x1a,0x44,0x35,0x74,0xc2,0x36,0x81,0xe9,0x16,0x2c,
|
||||
0xe0,0x7f,0x9b,0xfb,0xd2,0xe2,0x98,0xeb,0xa,0xb0,0x5a,0xfa,0xca,0x8b,0xec,0xc,
|
||||
0x1f,0xbe,0xb,0x2a,0x88,0x3,0x2f,0x58,0xd2,0x21,0x5a,0x28,0xc7,0x45,0x94,0x81,
|
||||
0xd5,0x68,0x91,0x3,0x41,0xae,0xcd,0x18,0x3d,0x82,0xec,0x34,0xa0,0x81,0xcd,0xe2,
|
||||
0xe,0xf1,0x90,0xef,0x30,0xae,0x7,0x56,0xe3,0x61,0xbe,0x6e,0x21,0xe4,0x1a,0xa4,
|
||||
0x35,0x34,0x48,0xce,0x2c,0x16,0x75,0x88,0xf8,0x5a,0x25,0x4a,0x7,0x56,0x23,0x7e,
|
||||
0xbe,0x32,0x3,0x72,0xd,0xae,0x8b,0xd0,0x90,0x4,0x31,0x7d,0x23,0x9c,0x74,0xc8,
|
||||
0x69,0x94,0xf6,0xf9,0x32,0xb0,0x9a,0xd3,0x7c,0x7f,0x40,0xd0,0x87,0x36,0x4c,0x1b,
|
||||
0x1a,0x26,0xe1,0x92,0x1c,0x5,0x3f,0xeb,0x90,0x26,0x2a,0xae,0xa6,0xc,0xdc,0x9e,
|
||||
0x26,0xa2,0x3e,0xfc,0x5,0x4c,0x1b,0x12,0xc6,0x6c,0x46,0xc6,0xc7,0x7,0x1d,0x12,
|
||||
0x61,0xc5,0xd5,0x54,0x7a,0xf5,0x9b,0x96,0xf3,0x70,0x77,0x1e,0x4b,0xc2,0x19,0xbb,
|
||||
0x20,0xd6,0x23,0x2b,0x30,0x4e,0xf5,0x55,0x57,0xd3,0x15,0x78,0x9,0xe6,0x70,0x1,
|
||||
0xe,0xbd,0x2b,0x10,0x93,0x28,0x59,0xbe,0xd4,0xf6,0xae,0xb1,0xc6,0xe5,0x3c,0x0,
|
||||
0xba,0x70,0x53,0x5d,0xe6,0x75,0x7,0xfe,0xae,0x36,0x1e,0xc6,0x8d,0xcb,0x79,0x34,
|
||||
0xdc,0xa4,0x3e,0x88,0x6e,0x2f,0xf5,0x9,0x68,0x1a,0xd6,0x9,0xf8,0x95,0xd2,0x7d,
|
||||
0x59,0x0,0x69,0xf3,0xea,0x5a,0xb8,0xc1,0x87,0x9a,0x51,0x9f,0x6,0xdd,0x81,0x71,
|
||||
0x6d,0x4e,0xd3,0xe,0xc,0x53,0x8f,0x4,0x60,0x8a,0x39,0xb0,0x76,0x96,0xa6,0x9e,
|
||||
0x13,0x27,0x67,0x9e,0x1b,0x27,0xa7,0x81,0x7b,0x91,0xc5,0xfc,0xbc,0xfb,0xd2,0x8,
|
||||
0x88,0xda,0x22,0xc4,0x1d,0x81,0x3e,0xf6,0xf,0x14,0xc0,0x5a,0x3b,0xac,0x3,0x2a,
|
||||
0xdd,0x97,0xc2,0x53,0xfb,0x1c,0xd8,0x28,0xd7,0xc2,0x4d,0x2,0x9e,0x1,0x17,0xf5,
|
||||
0xa,0x60,0xad,0xa7,0xa9,0x1,0x46,0x79,0xf9,0x52,0xee,0x3f,0xe4,0xda,0x82,0x86,
|
||||
0xdb,0x3d,0xd,0x7,0x6e,0x38,0x70,0x53,0x0,0xeb,0x9d,0x77,0xd,0xf0,0xd3,0xbc,
|
||||
0x7c,0x29,0xf7,0x1f,0x72,0xf5,0x54,0xb3,0x9c,0xd7,0x2,0xac,0xf,0x4f,0x35,0xc0,
|
||||
0x87,0x79,0xf9,0xf2,0x5b,0xb9,0xe8,0x29,0xd6,0xf,0xb7,0x86,0xa7,0x2d,0x29,0x46,
|
||||
0x7d,0x0,0xae,0x2,0x8b,0xf2,0xa5,0x4,0xa,0x5,0x4c,0xc3,0xad,0x1,0x78,0x5b,
|
||||
0x4e,0x53,0x9b,0x62,0xd4,0x0,0x55,0x5,0x2c,0x6e,0x9f,0xc5,0x81,0x5b,0x53,0x8c,
|
||||
0x4e,0x49,0x54,0xd,0x50,0xd5,0xf8,0xe2,0xf6,0x59,0x21,0x2,0xb7,0x26,0x51,0x9d,
|
||||
0xd2,0xc4,0x5a,0x60,0x51,0xc5,0xd8,0x6,0x34,0x4a,0x13,0x6b,0x13,0xe1,0x3a,0xa0,
|
||||
0x52,0xbe,0xe4,0xc0,0x7,0x12,0xd8,0x35,0x11,0x36,0x6,0x2a,0xe5,0x4b,0xe,0xf4,
|
||||
0x25,0x70,0x90,0x54,0xbf,0xe,0x58,0x94,0x2f,0x95,0xa3,0x46,0x92,0xb0,0x2a,0xd7,
|
||||
0x86,0x2,0x9e,0xd4,0x1,0xe3,0xb0,0x2a,0xd7,0x86,0x2,0xe6,0xc5,0x3d,0x71,0x5c,
|
||||
0xc,0x9e,0x61,0xc5,0x6a,0xe4,0x1a,0xdb,0x1b,0x10,0xc6,0x90,0xd5,0xc8,0x35,0x36,
|
||||
0x8c,0x5c,0x53,0xab,0x89,0xfa,0x9,0x3c,0xe5,0x59,0xca,0x86,0x91,0x6b,0x5a,0x33,
|
||||
0x64,0x6e,0x87,0xa8,0x0,0xca,0x76,0xf8,0xc3,0x3,0x1a,0xea,0x43,0xb5,0xfb,0x72,
|
||||
0x2b,0x50,0x6b,0x2c,0x47,0x7d,0x48,0xac,0x10,0x77,0x71,0xa7,0xa8,0xf,0x13,0x91,
|
||||
0xb5,0x99,0xea,0x43,0xb5,0xfb,0x32,0x77,0xde,0x8,0x2c,0x3b,0x6f,0xa6,0xea,0x43,
|
||||
0x4,0x1e,0xc3,0x1f,0x51,0x1f,0x4a,0xa0,0xa9,0x3e,0x54,0xbb,0x2f,0xf3,0xf0,0x84,
|
||||
0xc0,0x72,0x78,0x62,0xaa,0x3e,0x4,0x20,0xe8,0xc3,0x30,0x42,0x7d,0x28,0x81,0xa6,
|
||||
0xfa,0x50,0xed,0xbe,0xcc,0x3,0x30,0x2,0xcb,0x1,0x98,0xa9,0xfa,0x10,0xfe,0x84,
|
||||
0xfa,0x70,0xc2,0x40,0x1f,0x26,0xac,0x93,0x3e,0x54,0xbb,0x2f,0xf3,0x14,0x3,0x81,
|
||||
0xe5,0x14,0x83,0xa9,0x72,0xd,0xfe,0x84,0x72,0xcd,0x65,0x20,0xd7,0x46,0xac,0x93,
|
||||
0x5c,0x53,0xbb,0x2f,0xf3,0x24,0xa,0x81,0xe5,0x24,0x8a,0xa9,0x72,0xd,0xf,0x53,
|
||||
0x61,0xf4,0xcc,0x63,0x20,0xd7,0x1e,0x45,0xdb,0xd2,0xc4,0xb4,0xdc,0x2c,0x91,0xe2,
|
||||
0xdd,0x53,0xba,0x2f,0xf3,0x34,0x11,0x81,0xe5,0x34,0x51,0x5,0xf2,0xc3,0x54,0x18,
|
||||
0x19,0xfb,0x28,0xd7,0x1e,0x59,0xe1,0x96,0x44,0xb8,0x1e,0x58,0x94,0x2f,0x6b,0xa5,
|
||||
0x7f,0x9e,0x8,0xb3,0xaa,0x5c,0xc3,0x45,0xbd,0x26,0x31,0x53,0xf,0x2c,0xca,0x97,
|
||||
0x5d,0x80,0x47,0x28,0xd7,0x88,0xc5,0xe5,0xda,0x61,0x37,0x60,0x5e,0xbe,0x2c,0x1f,
|
||||
0x45,0xb9,0x15,0x88,0x72,0xd,0x27,0xcc,0xc,0x8c,0x3,0xe5,0x5a,0xda,0xd,0x98,
|
||||
0x97,0x2f,0x9b,0x8e,0x3e,0x29,0x6d,0x96,0xa3,0x78,0xb6,0x9,0xdc,0x4e,0x72,0x82,
|
||||
0x72,0x2d,0xed,0xa6,0xf,0xb7,0xad,0x69,0xda,0x5b,0x81,0xa8,0x9e,0xe8,0x18,0xe4,
|
||||
0x1a,0xa1,0xc7,0xc1,0x40,0x40,0xea,0xe9,0x1b,0xab,0x6b,0x37,0xcb,0x79,0x24,0x3d,
|
||||
0x6,0xf5,0x94,0xdd,0x52,0xc3,0xa2,0x42,0xfd,0x2b,0x9,0x21,0x56,0x6f,0x1b,0x43,
|
||||
0xb9,0xba,0x6,0x72,0x6d,0x7c,0x84,0xc0,0x71,0xd0,0xa5,0x6c,0xb2,0xbd,0x50,0x7c,
|
||||
0xd9,0x4,0xb4,0x46,0x28,0x66,0xac,0x47,0x20,0x66,0x32,0xb3,0xa8,0x7a,0x9a,0xfa,
|
||||
0x49,0xb3,0xa5,0xf6,0x3e,0x61,0x71,0x3,0x10,0x57,0xd7,0x88,0xc5,0x7f,0x5,0x67,
|
||||
0x1c,0x6e,0xf1,0xa5,0x1d,0x80,0x60,0x28,0x81,0xde,0xea,0xad,0x3,0x71,0x75,0x8d,
|
||||
0x58,0xfc,0xd7,0x34,0xb0,0xb6,0xc9,0xb5,0x16,0x60,0xe4,0x2b,0xc5,0x1b,0xf0,0xa4,
|
||||
0x34,0xa8,0x7,0x9a,0xcb,0xb5,0x66,0x60,0xaa,0x74,0x89,0x9,0x39,0x7a,0xd5,0x9,
|
||||
0x58,0x13,0xf1,0x9b,0x81,0x89,0x5f,0x6c,0x9c,0xba,0xe5,0xd1,0xf0,0xba,0x1b,0xd0,
|
||||
0x30,0xa7,0x29,0x4c,0x3d,0x3f,0x61,0x0,0x93,0xc,0x8c,0xf7,0xeb,0x6e,0x40,0xc3,
|
||||
0xac,0x2d,0x7f,0x81,0xf7,0x9c,0x69,0xc0,0xeb,0x9b,0x6e,0x40,0xc3,0x44,0x58,0x2d,
|
||||
0xf2,0x91,0x2,0x38,0x39,0xb4,0xaf,0x37,0x54,0x19,0x83,0x1f,0x3a,0xb0,0xfd,0x6c,
|
||||
0x3a,0x2c,0x3d,0xc9,0xf2,0x13,0x7,0x9e,0xd8,0xce,0xed,0x5e,0x81,0x31,0x8b,0x7d,
|
||||
0xb9,0xdd,0x8e,0x3,0x71,0x96,0xef,0x2,0xc,0x22,0xbf,0xd9,0x2c,0xe6,0xd4,0x8f,
|
||||
0x65,0x7f,0x9d,0x0,0xda,0xd7,0xe0,0xc0,0x8a,0x9e,0xd1,0xc1,0x81,0x53,0x98,0x93,
|
||||
0xc1,0x42,0x3,0xa2,0xb7,0xca,0xf,0xe,0x1a,0x1c,0xe8,0x83,0x3a,0xfc,0x66,0xa5,
|
||||
0x8e,0xe1,0x35,0x24,0xf3,0x76,0xde,0xf3,0x3f,0x38,0x30,0xf8,0x86,0xb1,0xef,0x6e,
|
||||
0x90,0xe6,0xc8,0x59,0xca,0xd8,0xb1,0xf8,0x6,0xbf,0x8b,0xe1,0x4f,0x3c,0x33,0x60,
|
||||
0x1a,0xc2,0x75,0xdc,0xdc,0x72,0x20,0xdc,0x4b,0xa1,0x2c,0x24,0x70,0xda,0xc5,0xb5,
|
||||
0xc9,0xf4,0x8b,0x3,0x1b,0xad,0xe2,0xc,0x7e,0xf9,0x33,0x11,0x40,0x42,0x5,0xf0,
|
||||
0xb9,0x0,0x5e,0x37,0x1,0x23,0x7b,0xbe,0x51,0x9c,0x77,0x76,0xd,0xed,0xc0,0x3f,
|
||||
0xe3,0x65,0xd2,0x1c,0xc8,0xa5,0x4c,0x27,0xa0,0x8,0x4f,0x54,0xc6,0x9c,0x56,0x20,
|
||||
0x41,0x20,0x1b,0x87,0x19,0x90,0x4b,0x99,0x76,0x20,0xd,0x73,0xa0,0x8,0xc0,0x44,
|
||||
0x4e,0xea,0x56,0xe0,0x2d,0xf7,0xd4,0x67,0x2,0xb8,0xa1,0x42,0xca,0x7c,0x65,0x0,
|
||||
0x5c,0x30,0x9,0x14,0x29,0x46,0x22,0x27,0x75,0xeb,0xa4,0xb9,0xf9,0x4e,0x56,0xd2,
|
||||
0x25,0x90,0x4b,0x99,0x4e,0x40,0x91,0x44,0xc5,0xd2,0xa5,0xb5,0x2,0x57,0x1c,0xf8,
|
||||
0x4d,0xe,0xe4,0xfb,0x35,0x4d,0x80,0x2f,0xbd,0xc,0xc8,0xd3,0x44,0x63,0xe0,0xfa,
|
||||
0x1b,0xfc,0xf5,0xbb,0xab,0x1c,0xc8,0xc,0x81,0x20,0xf4,0x36,0xca,0xba,0x45,0xec,
|
||||
0x76,0x5,0x5e,0xb3,0x75,0x7,0x60,0x64,0xe7,0x93,0x46,0xa4,0xfa,0xb1,0x37,0xd9,
|
||||
0x37,0x70,0xa9,0x3,0x7d,0x31,0x3b,0x5b,0xc3,0xd3,0xfa,0x45,0x4f,0xe0,0x62,0xd3,
|
||||
0xf,0xb8,0x50,0x81,0xeb,0xe,0x63,0xc8,0xb6,0x0,0xdb,0xec,0xf0,0x9a,0x3,0xff,
|
||||
0xd4,0xf5,0xa,0x11,0x38,0x5b,0xea,0x63,0xf8,0xd0,0xe8,0xd8,0xd4,0xde,0xc0,0xc5,
|
||||
0x26,0x9a,0xe9,0xb3,0xd4,0x10,0x18,0xf6,0x4,0xce,0x97,0xb1,0xab,0xdb,0x61,0x1,
|
||||
0x6c,0x9a,0xa5,0xbd,0x81,0x91,0x8d,0x5b,0x3a,0x55,0x4f,0x63,0x6,0x9c,0x66,0xc0,
|
||||
0xcc,0xf0,0xd1,0x7,0x7f,0x25,0xfc,0xe2,0xf,0x9,0x8,0xde,0xda,0xa5,0xbe,0xee,
|
||||
0xbc,0x4f,0x0,0x98,0x72,0xb3,0x68,0x2,0x5e,0x95,0x80,0xd2,0x79,0xe3,0xe1,0xb2,
|
||||
0x7e,0x23,0x90,0x78,0x90,0x42,0x6b,0xe1,0xe9,0xac,0x17,0x50,0x86,0x27,0x3c,0x2,
|
||||
0xd9,0xbd,0xee,0xa0,0xf,0x21,0x0,0x53,0xe,0xc,0xa3,0x56,0x20,0xfc,0x45,0x2,
|
||||
0x8b,0x0,0x7c,0x8c,0x8b,0x18,0x66,0xc0,0x3c,0xc5,0x80,0x5f,0x6f,0x4,0xb0,0xe9,
|
||||
0x75,0x85,0xf,0xda,0xc,0xa,0xa0,0x4c,0x31,0xf0,0x54,0x69,0xdb,0x10,0x98,0x25,
|
||||
0x51,0xa6,0x40,0x18,0x6e,0xbf,0x0,0xca,0x24,0xea,0x91,0xe5,0x4f,0x2c,0x43,0x60,
|
||||
0x96,0x26,0x9a,0x2,0x61,0x42,0x7b,0x12,0x8,0x69,0x22,0xaf,0x44,0x1d,0x63,0xa5,
|
||||
0x30,0x32,0x5,0x66,0x89,0xb0,0x29,0x30,0x72,0x2d,0x57,0x0,0x95,0x44,0xf8,0x2d,
|
||||
0x3c,0x73,0xe8,0x83,0xbe,0xc0,0xe6,0x49,0x13,0x79,0x13,0x15,0x88,0x8b,0x4,0x8,
|
||||
0x84,0xe9,0xb3,0xf,0x20,0x8c,0x5f,0xe4,0x47,0x8,0x2c,0xc4,0xc,0x9a,0xd6,0x3e,
|
||||
0x81,0x93,0xa,0x90,0x8e,0xef,0xf8,0xa,0x41,0x90,0xee,0x15,0x28,0xc6,0xb0,0x90,
|
||||
0x6b,0xec,0x76,0x57,0x60,0xc3,0xb,0x81,0x62,0x96,0x16,0x45,0x5,0xb6,0xa1,0x9d,
|
||||
0x66,0x69,0x56,0xa7,0x31,0x5,0x4a,0x3b,0xcc,0x80,0x70,0x37,0x56,0xb4,0x93,0x1d,
|
||||
0x66,0x95,0x28,0x53,0xa0,0xf4,0x34,0x6a,0x25,0x8a,0x1a,0x78,0x9a,0x92,0x5c,0xeb,
|
||||
0x0,0x94,0xbe,0x54,0xad,0xb5,0x51,0x3,0x5f,0x5a,0x92,0x6b,0x39,0xd0,0x7a,0xaf,
|
||||
0x6d,0xd2,0xc8,0xf0,0x24,0xbf,0x7,0xa3,0x85,0x4f,0x5b,0xa3,0x45,0x45,0xae,0x15,
|
||||
0xc0,0xe6,0x78,0x78,0x75,0x15,0xa8,0x40,0x59,0x2f,0xa5,0xad,0xf1,0xb0,0x22,0xd7,
|
||||
0x4c,0xcd,0xa2,0x4,0x94,0x15,0x61,0xda,0x1a,0xf1,0x2b,0x72,0x4d,0x2,0x5b,0x73,
|
||||
0x9a,0x32,0xf0,0x12,0x72,0x9a,0x38,0x5b,0xef,0xea,0x22,0xd7,0xfa,0x2,0x45,0x55,
|
||||
0x9f,0x76,0x97,0x6b,0x1a,0xb0,0x29,0x3a,0x95,0x80,0x62,0xdd,0x82,0x76,0x97,0x6b,
|
||||
0x7d,0x81,0x62,0x65,0xe6,0x87,0x9,0x5c,0xe,0x2,0x14,0x29,0x6,0xed,0xae,0xf,
|
||||
0x7b,0x3,0x13,0xf1,0xe0,0xf1,0xce,0xfa,0xd0,0x14,0x58,0xf2,0x34,0x79,0x87,0x42,
|
||||
0x67,0x7d,0x68,0x6a,0x16,0xfd,0x81,0x25,0x7d,0xb8,0x7f,0x60,0x49,0x1f,0xf6,0x1,
|
||||
0x16,0xd5,0x0,0xda,0x5d,0x1f,0xf6,0x0,0xa6,0xc5,0xea,0x2f,0xed,0x2e,0xd7,0x7a,
|
||||
0x0,0x49,0xb1,0xc2,0x4d,0xbb,0xcb,0x35,0x36,0xc1,0xe5,0x72,0xbb,0xcb,0x2c,0x4d,
|
||||
0x8a,0xec,0x98,0x76,0x97,0x6b,0x8c,0xaf,0xd1,0x77,0x2,0xc6,0xc5,0x97,0xd3,0x3e,
|
||||
0x72,0xcd,0x4b,0x3b,0x2,0x23,0xb5,0x53,0x48,0xa4,0x18,0x69,0xed,0xd9,0x97,0xb5,
|
||||
0x49,0x14,0xb5,0x5c,0x23,0x60,0xa1,0x80,0x65,0x8b,0x92,0x4,0x8a,0x24,0xca,0xc,
|
||||
0x88,0x69,0xe2,0x9f,0x88,0xe5,0xfc,0x3f,0xa3,0xa2,0xc2,0x56,0x20,0xa6,0x89,0x66,
|
||||
0x40,0x9c,0x9f,0x2b,0xc8,0xfd,0x12,0x4,0x62,0xb3,0x85,0x29,0xf0,0x81,0x2,0x14,
|
||||
0x89,0xb0,0x39,0x70,0x1e,0xfb,0x78,0xcc,0x6b,0x37,0xa0,0xaf,0x1,0x31,0xd5,0x37,
|
||||
0x7,0x5e,0xc4,0xc1,0x64,0x14,0xf2,0x6f,0x35,0x7,0x62,0x6f,0x62,0x5f,0xa0,0x1b,
|
||||
0x87,0xd1,0x69,0x70,0x97,0xc0,0x28,0x8c,0x8e,0xfd,0xc,0x68,0x38,0x4b,0x2b,0xc0,
|
||||
0xd2,0x13,0xad,0x1a,0x80,0xa9,0x37,0x9,0xa3,0x87,0x5e,0x47,0x60,0x65,0xc,0xcd,
|
||||
0x81,0x14,0xbe,0x37,0xf2,0xdc,0x8e,0xc0,0xca,0x2c,0x45,0x3b,0x59,0x1b,0xd9,0x21,
|
||||
0x3d,0x7e,0x2b,0x8c,0x3e,0xb8,0xec,0x8,0xac,0xd8,0xa1,0x21,0x10,0x3c,0xd,0x39,
|
||||
0x7a,0x12,0x4c,0xde,0xbf,0xd8,0x9,0xe8,0x4f,0x9a,0x80,0x89,0x7,0x11,0xdf,0xcd,
|
||||
0x7d,0x29,0x19,0x81,0x1d,0x7e,0x38,0xe7,0x81,0x12,0xb7,0xde,0x1b,0xcd,0xd2,0x8a,
|
||||
0x2f,0xfd,0x41,0x1,0x63,0x7,0x80,0x4e,0x1e,0x9e,0xc8,0x33,0x98,0x62,0x37,0x1d,
|
||||
0x81,0x95,0xf0,0xd4,0x4,0xc4,0xbc,0x3b,0xb2,0xf3,0x0,0x9c,0x7c,0x4,0xce,0xfb,
|
||||
0x76,0x66,0xe,0x8c,0xe5,0xf6,0x78,0x2d,0x0,0x37,0x1,0xe7,0xb3,0xd9,0x66,0xbe,
|
||||
0xcc,0x53,0x8c,0x4,0x54,0xba,0x7b,0xbb,0xec,0x6,0xac,0xa4,0x18,0x6f,0x34,0x0,
|
||||
0x17,0xcb,0xd9,0x46,0xd1,0x87,0x31,0x4,0x16,0x8f,0xc6,0xdd,0x80,0x95,0x24,0xea,
|
||||
0xe6,0x9a,0x6c,0x7,0xb2,0x68,0xa3,0xe8,0xc3,0xe5,0x14,0x53,0x8c,0x51,0x6,0x6c,
|
||||
0x37,0xb,0x3e,0x7e,0xe5,0x34,0xb1,0x5,0xf8,0x54,0xd1,0x87,0xcb,0x2b,0xf0,0x8c,
|
||||
0x69,0x57,0x60,0x39,0x11,0x6e,0x2,0x7e,0x69,0x7f,0xf9,0x58,0xd1,0x16,0x4b,0xcc,
|
||||
0x6b,0xf7,0xc,0x7c,0xb9,0x5,0x68,0xe6,0x69,0xfa,0x0,0x7f,0xb1,0x1d,0x68,0x36,
|
||||
0x69,0x3a,0x1,0x17,0xcb,0x85,0x7d,0xd7,0xc0,0x73,0x5,0x38,0xeb,0xa,0x5c,0x5f,
|
||||
0xdd,0x74,0x6,0xce,0xf4,0x59,0x3a,0x0,0x30,0x69,0xf4,0x34,0x0,0x5c,0x16,0x76,
|
||||
0xb8,0x77,0x20,0x68,0xfc,0xa5,0xf4,0xa5,0xe8,0x69,0x3a,0xcf,0xd2,0xa,0x30,0x68,
|
||||
0x1,0x2a,0xd1,0x2,0x7d,0xa9,0x0,0x3e,0xd9,0x5,0xd8,0xe2,0x4b,0x95,0x78,0x88,
|
||||
0xd1,0x2,0x5c,0x1b,0xc8,0xb5,0xdf,0xec,0x0,0x6c,0x8b,0x16,0x25,0xb9,0xb6,0xbc,
|
||||
0x46,0x5f,0xba,0x64,0x6,0x2f,0xb1,0xba,0x56,0x1,0x1e,0x9b,0x3,0x31,0xe2,0x2f,
|
||||
0xd7,0xe0,0xfa,0x6f,0xd,0x81,0x58,0x11,0xae,0x0,0x8f,0x3a,0x0,0x21,0x89,0x8a,
|
||||
0x79,0x3c,0x9c,0x99,0x1,0x13,0x5e,0x68,0x2f,0x19,0xbe,0x4c,0xa2,0x4c,0xe5,0x5a,
|
||||
0xf2,0xc,0x22,0xfe,0xcd,0xdc,0xc,0x88,0x55,0xfd,0x1a,0xa0,0x7c,0xa6,0xa9,0x59,
|
||||
0x22,0x9c,0x8c,0xe0,0xc7,0x5e,0x5d,0x98,0x1,0x71,0xdd,0xa2,0x2,0xec,0x28,0xd7,
|
||||
0x20,0x2f,0xf5,0xad,0xf7,0xd5,0xb6,0xfb,0x9a,0x2d,0x9d,0xea,0xea,0x5a,0xd,0xb0,
|
||||
0x93,0x98,0xa1,0x87,0x6f,0x5,0x93,0xf,0x4c,0x81,0x7e,0xb4,0x33,0x30,0xf5,0x2c,
|
||||
0x29,0x66,0xc,0x80,0x93,0x1f,0x27,0x10,0xe4,0xda,0xa1,0x7f,0x77,0xb7,0x54,0x28,
|
||||
0x60,0xff,0xee,0x26,0xd,0x68,0xfc,0x30,0x1a,0x5,0x86,0xc0,0x5d,0xcd,0x2,0xeb,
|
||||
0x34,0x11,0x0,0xdf,0xb,0xcd,0x80,0xc5,0x72,0x5e,0xd9,0xf0,0x3b,0x2c,0xe7,0xc5,
|
||||
0xa0,0xf,0xb5,0xaf,0x68,0x0,0x16,0xcb,0x79,0x65,0xd7,0xd6,0x0,0x2c,0xc9,0x35,
|
||||
0x96,0xbc,0xe5,0xeb,0x1b,0xe,0x1a,0x80,0xea,0x72,0x5e,0xa9,0xd6,0xb6,0x1d,0x58,
|
||||
0x92,0x6b,0x8c,0xbc,0x51,0xda,0xdf,0xd3,0x0,0xac,0x2d,0x41,0xb7,0x55,0x13,0x4b,
|
||||
0x72,0x8d,0xd1,0x3,0xcb,0xf1,0x76,0x1,0xb6,0xd5,0x4b,0x4b,0x72,0x8d,0xb1,0xc3,
|
||||
0xd2,0x6,0xa6,0xae,0xc0,0xb6,0x8a,0x70,0x49,0xae,0x69,0x5,0xec,0x7e,0xc0,0x96,
|
||||
0x9a,0x77,0x49,0xae,0x69,0x25,0xfa,0x66,0xe0,0x34,0xec,0xb5,0x8c,0x50,0x92,0x6b,
|
||||
0xbc,0xe6,0x6d,0x6,0xbc,0xee,0x7,0x2c,0xc9,0x35,0x66,0x1f,0xb8,0x77,0x17,0x0,
|
||||
0x0,0x15,0x2f,0x49,0x44,0x41,0x54,0xfe,0x52,0x80,0xc5,0x73,0x1d,0x4d,0x80,0x2f,
|
||||
0xfb,0x2,0x5f,0xf4,0x5a,0x28,0x29,0xc9,0xb5,0x5e,0x40,0x4d,0xe3,0xb7,0x8e,0xa1,
|
||||
0x2e,0xd7,0x3a,0x0,0xf3,0xfe,0x52,0xbd,0x8a,0xa1,0x3,0x37,0x6d,0x72,0xad,0x17,
|
||||
0x30,0xf1,0x9d,0x6d,0xc0,0x55,0x9b,0x5c,0xeb,0x2,0xfc,0x26,0x3,0xc6,0xe1,0x6c,
|
||||
0x1b,0x70,0xd1,0x26,0xd7,0xfa,0x1,0x8b,0x23,0xd5,0x4,0x70,0x95,0x3,0xaf,0xdb,
|
||||
0xe4,0x5a,0x7,0x60,0xde,0xe7,0xcd,0xa2,0x62,0x97,0x9c,0x0,0x4e,0x72,0xe0,0x55,
|
||||
0x9b,0x5c,0xeb,0x0,0xcc,0x3b,0xd9,0xd9,0xac,0x78,0x56,0x68,0x19,0x18,0xb4,0xc9,
|
||||
0xb5,0xe,0x40,0xd1,0xab,0xff,0xb7,0x61,0xd,0xf0,0x7e,0xd6,0x31,0xc4,0xf,0x56,
|
||||
0xee,0x78,0xb6,0xc9,0xd6,0x57,0xbe,0x1b,0x41,0x2,0xff,0xae,0x0,0x1e,0x66,0x40,
|
||||
0x7a,0xd7,0x40,0xfe,0x3c,0xaa,0x8e,0x87,0xa9,0x6c,0x7d,0xe5,0x1b,0x3c,0x10,0xb8,
|
||||
0xe6,0xcd,0x18,0x15,0xe0,0x2d,0x6b,0x5f,0xce,0x4b,0xda,0xa4,0x76,0xe,0xcc,0xb6,
|
||||
0xb0,0x20,0x30,0x96,0x4f,0x1c,0x2b,0x4d,0x9a,0x1b,0xd6,0xde,0xf5,0x65,0xc,0xcc,
|
||||
0x37,0xe9,0xa0,0x59,0x44,0x1,0x5b,0xb9,0x55,0xe0,0x9a,0xb5,0xf7,0xb5,0x19,0x3,
|
||||
0xf3,0x6d,0x48,0x68,0xf8,0x91,0xc7,0xd6,0xb3,0xc2,0xf0,0xb3,0x5d,0x41,0xd7,0x83,
|
||||
0x2,0xf3,0x8d,0x56,0xe0,0xda,0x26,0xe,0x5b,0xe0,0x2,0x14,0xd5,0xf7,0x3d,0x4d,
|
||||
0x7,0x5,0xe6,0x5b,0xc9,0xc0,0x79,0x43,0xf2,0x7c,0x8d,0xdb,0x26,0xa8,0xf2,0xd0,
|
||||
0xfb,0x17,0x2,0x3c,0x1c,0x70,0x4e,0x43,0xca,0xaf,0x1,0xc2,0x13,0x7c,0xd3,0xd4,
|
||||
0xba,0xcc,0x81,0x4c,0x2,0x83,0x41,0x81,0x31,0xbb,0xbc,0x48,0xc5,0x35,0xe0,0x13,
|
||||
0x24,0xaf,0xec,0x65,0x7e,0x4b,0x25,0x90,0xd7,0x94,0x87,0x3,0xe2,0x53,0xb1,0xc4,
|
||||
0x86,0x47,0xec,0x7d,0x77,0x9e,0xdb,0x24,0x2c,0x1,0x29,0x1b,0x14,0x58,0x6c,0xe9,
|
||||
0xc4,0x87,0x72,0x5a,0xc7,0xe,0x3e,0x23,0x5a,0x3,0xde,0x32,0x3,0x3b,0x5c,0x2b,
|
||||
0x67,0x4d,0xb6,0xbc,0x8a,0x5d,0xb2,0xd8,0xe1,0x7f,0xe4,0x54,0x36,0x8f,0x6f,0x98,
|
||||
0x81,0xa7,0xe9,0x0,0xcc,0xf7,0x1,0x47,0x28,0xa4,0x4e,0xdd,0xca,0xe6,0xf1,0x95,
|
||||
0x2,0x8c,0x1d,0xea,0x24,0x16,0xa3,0x63,0x9b,0x4f,0xb4,0xc2,0x97,0x76,0x0,0x26,
|
||||
0xd9,0xb6,0x1a,0xf8,0xcd,0xb2,0x46,0x2e,0x23,0x81,0xe,0x5c,0xab,0x40,0x9b,0xd8,
|
||||
0x8,0x3c,0xb5,0xf8,0x33,0x2b,0x8a,0x68,0xd1,0x1,0x98,0xed,0xe5,0xc6,0x34,0x31,
|
||||
0xb2,0x12,0x4f,0x3c,0xfe,0x42,0x1,0x5e,0xab,0x40,0x2b,0xb6,0x46,0x16,0x23,0x23,
|
||||
0xeb,0x2c,0x3,0x8a,0x0,0xdc,0x1,0x98,0x7,0x2a,0x48,0x13,0x13,0x2b,0xf6,0xb4,
|
||||
0xc7,0x92,0x23,0xf0,0x4a,0x1,0x2e,0x93,0x25,0x79,0xa,0x77,0x25,0x49,0xc6,0x19,
|
||||
0x50,0xa4,0x18,0x3d,0x80,0x98,0x26,0x52,0x1b,0x81,0x49,0xa8,0x1,0x7d,0x15,0x48,
|
||||
0x56,0xf4,0x29,0x3e,0x26,0x9b,0x9e,0x66,0x40,0x91,0x44,0xf5,0x0,0xf2,0x34,0xd1,
|
||||
0xc6,0x86,0x5b,0xaa,0x2a,0xaf,0x17,0xf2,0x69,0xbe,0x39,0x90,0x6d,0x1c,0x98,0x47,
|
||||
0x74,0x94,0x3,0x79,0x9a,0xd8,0x7,0x88,0x69,0xe2,0x3c,0xf2,0x53,0x8f,0xb9,0x1a,
|
||||
0x30,0x2c,0x1,0x13,0x1b,0x6e,0x7a,0x32,0xca,0x66,0xa9,0x48,0x84,0x7b,0x0,0x79,
|
||||
0x9a,0x78,0x33,0x9,0x0,0xa8,0x96,0x76,0x5f,0x50,0x56,0x6,0x5a,0x60,0xaa,0xf1,
|
||||
0xd3,0x1c,0xc8,0x53,0xfd,0x1e,0x40,0x9e,0xd3,0xac,0x1,0x18,0x6a,0x83,0xf8,0xe2,
|
||||
0xb6,0x2,0x1c,0x81,0xd,0x46,0x6c,0x20,0x20,0x7f,0xd0,0x8d,0x3a,0x88,0x2f,0x6e,
|
||||
0x34,0x60,0x2,0x63,0x48,0xc0,0x70,0xce,0xb,0xe0,0x3f,0xdd,0x5,0x78,0x6d,0x8d,
|
||||
0xc7,0xec,0x4f,0x4c,0x5,0xae,0x98,0x66,0xf8,0x2b,0x7c,0x8,0x8f,0xcf,0x9c,0x2,
|
||||
0xe8,0xee,0x2,0xfc,0xda,0xa2,0x6f,0x26,0xae,0x7a,0x8c,0xc3,0x8b,0x45,0x1b,0xd0,
|
||||
0x1b,0x18,0x78,0xad,0x1,0x1d,0x4,0x52,0x9c,0x59,0xc3,0x8c,0xe1,0x67,0x16,0x7f,
|
||||
0x26,0x85,0xa,0xbc,0x2a,0x1,0xe9,0x53,0x2,0x49,0x82,0xcf,0xda,0xcd,0x22,0x6d,
|
||||
0xde,0xfc,0xc8,0xcd,0xe2,0xb9,0xc5,0x62,0x77,0xad,0x7e,0xef,0x8b,0x40,0x9b,0x34,
|
||||
0x30,0x4f,0x47,0x9,0x9,0xc1,0xc1,0x4f,0x5b,0xd,0xbf,0x5,0xc8,0xd,0xff,0xd0,
|
||||
0x61,0x49,0x70,0xad,0x7e,0xef,0xdf,0x86,0x3a,0x10,0x9d,0x77,0xcc,0x1f,0x11,0x1a,
|
||||
0xa,0xe0,0x93,0xad,0xae,0xad,0xd,0x88,0xae,0xd,0xe2,0x6f,0xe2,0x5d,0xab,0x2b,
|
||||
0xe3,0xff,0xbd,0x4,0x24,0x10,0xa0,0x96,0x2a,0xf0,0x67,0x5b,0x9d,0x77,0xb,0x90,
|
||||
0x6b,0xfc,0x3,0x97,0xfd,0xe1,0xd7,0x57,0x2a,0xf0,0x6f,0x98,0xe,0xa4,0x10,0x82,
|
||||
0x35,0xe0,0xe1,0xd6,0xf0,0xd4,0x2,0xe4,0x55,0xc,0x78,0xff,0x71,0xa4,0x1d,0xac,
|
||||
0xf4,0xdf,0x34,0x60,0x35,0xc5,0xa0,0xdb,0x3,0x70,0xb,0x90,0xd7,0x69,0x20,0xd9,
|
||||
0xbf,0x3e,0xd6,0x80,0xff,0xb5,0x5,0x98,0x6c,0x4f,0x31,0x5a,0x80,0xbc,0x12,0x5,
|
||||
0x1,0xff,0xda,0x77,0x94,0x7,0x4e,0xb2,0xff,0xdc,0x2,0xfc,0xfd,0xf6,0x24,0xaa,
|
||||
0xd,0x88,0xb5,0x36,0xf0,0x21,0xd7,0x57,0x6f,0xa9,0x59,0xcd,0xb4,0x5,0xf8,0xc9,
|
||||
0xf6,0x34,0x31,0x6d,0x3d,0x94,0x83,0xf1,0x3,0x86,0xbe,0x3a,0x25,0x9e,0x39,0xf0,
|
||||
0xe1,0xf6,0x44,0x18,0xe6,0x5e,0xbb,0xf7,0x1,0xe3,0xff,0x32,0x4c,0x94,0x2,0xbd,
|
||||
0xdf,0xc,0xa4,0x27,0x3b,0x2,0xe1,0x6e,0xc6,0xc5,0x43,0x6e,0x59,0x7e,0xa3,0xb6,
|
||||
0x1,0x49,0xda,0x1f,0x28,0x6e,0x38,0xa4,0x6e,0xc5,0x63,0x7c,0x8b,0x23,0xa3,0xb7,
|
||||
0x1,0x97,0x3b,0x3,0x67,0x1c,0x58,0x14,0x16,0x5f,0x34,0x3,0x17,0x3b,0x3,0x31,
|
||||
0xbd,0x88,0xa,0x31,0x73,0xdb,0x2,0xf4,0x77,0x6,0x62,0x7a,0xa1,0x3c,0xff,0x74,
|
||||
0xd3,0xc,0x4c,0x83,0x9d,0x81,0x98,0x23,0xe2,0xa2,0x85,0x3c,0x5a,0x69,0xd5,0xc,
|
||||
0x24,0x4d,0x65,0x13,0x43,0xe0,0xc,0xa3,0xa2,0xe5,0x4d,0x70,0x18,0x13,0x7b,0xdd,
|
||||
0xc,0xdc,0x34,0x15,0x86,0x4c,0x5c,0x1b,0x1a,0x46,0xc8,0xae,0x0,0xc8,0x17,0xcb,
|
||||
0x62,0xeb,0x5a,0x7,0xa2,0x5c,0xc3,0xbc,0x7b,0x6c,0x53,0xfc,0xf7,0x70,0xd1,0x54,
|
||||
0xfa,0x32,0x4,0x82,0x77,0xb,0x22,0x90,0xdf,0x38,0x6f,0x22,0x71,0x50,0xa3,0x2e,
|
||||
0xd7,0x20,0xef,0x6,0xb9,0xc6,0x9f,0xb,0x1f,0x4e,0x9b,0x8a,0x7b,0x86,0x40,0xf0,
|
||||
0x6e,0x41,0x62,0x1d,0x7a,0x11,0xcb,0x4f,0x86,0xd4,0xe5,0x5a,0x78,0x81,0x72,0x8d,
|
||||
0xc7,0xc3,0xb3,0xa0,0xa9,0x5e,0x6a,0xa,0x8c,0xd3,0x90,0x5a,0x7,0x1,0xda,0x87,
|
||||
0x3c,0xfb,0x52,0x97,0x6b,0xa1,0x83,0x72,0x6d,0x84,0x87,0x9e,0x9d,0x86,0x4d,0x15,
|
||||
0x61,0x53,0x20,0x1,0x7f,0x3c,0x39,0xc2,0x7,0xff,0x66,0x6b,0xc0,0x5b,0x81,0x4f,
|
||||
0xd9,0xde,0x81,0xa0,0xf,0xcf,0x1c,0xd4,0x87,0x4f,0xf1,0xe,0xfc,0xba,0xb1,0xc8,
|
||||
0x6e,0xa,0x64,0xaf,0xc3,0x6d,0x7d,0x84,0x99,0x60,0x76,0x60,0xaa,0x2e,0x66,0xc4,
|
||||
0x3c,0x7d,0x8a,0xe7,0xd3,0x7b,0x8d,0xcb,0x8,0xc6,0x40,0x98,0x2e,0x64,0xc4,0x68,
|
||||
0x90,0x1f,0x9,0xab,0x3,0xc9,0xdb,0xa8,0xf,0x9f,0x42,0xbc,0xc6,0xa,0x56,0xc3,
|
||||
0x42,0x89,0x31,0x30,0xe1,0x2d,0x63,0x8,0x74,0xe2,0x1a,0xa0,0xd4,0x87,0x93,0x50,
|
||||
0x14,0xc3,0x47,0xef,0x92,0x5d,0x81,0x2,0x8a,0x40,0xf7,0xf,0xf5,0x40,0xd0,0x87,
|
||||
0x9b,0xd7,0x85,0x8e,0xe4,0x87,0x58,0xb3,0x5e,0xaf,0x3a,0x20,0x75,0x26,0x61,0x59,
|
||||
0x1f,0x26,0x58,0xa3,0x39,0x4f,0xee,0x87,0x6c,0x55,0xc8,0xb5,0xe1,0x80,0x56,0x50,
|
||||
0x91,0x6b,0x2b,0x94,0x6b,0xc9,0x61,0xc8,0xd7,0x73,0x77,0x38,0x8a,0x52,0x7,0xf2,
|
||||
0x59,0x2a,0x8f,0xd7,0x2e,0xc9,0xb5,0x15,0xca,0xb5,0xe4,0x18,0x82,0x21,0x5f,0xd0,
|
||||
0x18,0x6,0x88,0xf,0x7,0xa8,0x7,0xd2,0x70,0x85,0x72,0x2d,0x19,0x87,0x14,0xf,
|
||||
0x6a,0x24,0x56,0xef,0xb3,0x2f,0x75,0x20,0xba,0xb6,0xec,0xc4,0x72,0x5d,0xae,0x85,
|
||||
0x2b,0x94,0x6b,0xa8,0xd9,0x30,0x4d,0x8c,0xfa,0x9f,0x7d,0xa9,0x1,0x29,0x3a,0xef,
|
||||
0xec,0x4c,0x76,0x5d,0xae,0x85,0x2b,0x29,0xd7,0x56,0x98,0x26,0xde,0xeb,0xb8,0x9c,
|
||||
0xa7,0x68,0x19,0xed,0xac,0xd4,0x54,0x6c,0xed,0xb4,0x2a,0x40,0x8,0x4b,0x2b,0x54,
|
||||
0x4f,0xa7,0x36,0x5b,0x0,0x30,0x3e,0xe9,0xb8,0x9c,0xa7,0x56,0x31,0xb5,0x76,0xa,
|
||||
0x79,0x88,0xab,0x5b,0x6,0xa2,0x63,0x43,0xe0,0xd8,0x61,0xb8,0x3b,0xcf,0xe9,0xba,
|
||||
0x9c,0x97,0xbf,0xb0,0x1c,0xa3,0x9e,0xd0,0xc8,0x53,0xc,0xf9,0xe4,0x80,0xfa,0x14,
|
||||
0x3,0xec,0x26,0x24,0x7e,0xd7,0xd5,0xb5,0xad,0x40,0x9e,0x44,0xc9,0x67,0x23,0xd4,
|
||||
0x3,0x41,0x63,0x85,0x93,0xce,0xab,0x6b,0x5b,0x81,0xc2,0x8d,0x8b,0xa7,0x3f,0xd4,
|
||||
0x3,0x97,0x8c,0x8d,0xdd,0x1e,0x67,0x5f,0x2a,0xc0,0xb8,0x74,0xe0,0x6e,0xf6,0x7c,
|
||||
0x8b,0x7a,0xe0,0x82,0xb1,0x27,0x61,0x8f,0xb3,0x2f,0x95,0x49,0x53,0x7e,0x5,0xf2,
|
||||
0x9,0x1e,0xf5,0x40,0x8f,0x57,0xe7,0x1b,0x8e,0xa2,0x24,0x56,0xd8,0x2,0xb4,0xab,
|
||||
0x4b,0x1a,0xdb,0x81,0xf0,0xaf,0xb8,0xd8,0xd8,0x0,0x4c,0x1a,0xd7,0x4e,0x3a,0x3,
|
||||
0xc1,0xf5,0x9d,0x87,0x8d,0xcf,0xe5,0x8e,0x9b,0xab,0x26,0x5d,0x81,0x33,0xf0,0x46,
|
||||
0xcd,0xc0,0xa8,0x7c,0xea,0xf2,0x4e,0xc0,0xd8,0x61,0x51,0x18,0x36,0x2f,0xc1,0x58,
|
||||
0xee,0x70,0xc0,0xd8,0xa,0x52,0x87,0x35,0x3,0x2d,0xcb,0x19,0xc,0x88,0xc3,0x93,
|
||||
0x4,0xcd,0xc0,0x96,0x4d,0xac,0x37,0x4c,0x7d,0xa0,0x5e,0xb,0x90,0x4f,0x7,0x9b,
|
||||
0xdd,0x19,0x90,0xf3,0xb0,0xb6,0x32,0x38,0xb0,0xde,0xf0,0x13,0x3e,0xdd,0x23,0xd6,
|
||||
0xa,0x3c,0xed,0xc,0xac,0x75,0x6d,0x82,0x97,0xba,0xed,0x40,0xda,0x19,0x58,0xe7,
|
||||
0xbc,0xe5,0xb9,0xfb,0x71,0xd0,0xa,0xb4,0xd3,0xce,0xc0,0x9a,0xf0,0xf4,0xbf,0xa4,
|
||||
0x35,0xdb,0x6c,0x67,0xe0,0x4d,0x15,0x58,0x13,0x80,0xe5,0xc1,0xa8,0xc4,0xdf,0x7,
|
||||
0xf0,0xa4,0x92,0x62,0xe4,0xc5,0xbe,0x9,0x63,0x3b,0x8f,0x61,0x15,0x78,0x5c,0x49,
|
||||
0xa2,0x32,0x20,0x75,0x4d,0x80,0xa7,0x9d,0x81,0x95,0x34,0x31,0x3,0xca,0x87,0x97,
|
||||
0xed,0x66,0x87,0x35,0xc0,0x4a,0x22,0x2c,0x81,0x7f,0x76,0xd8,0x7e,0x80,0x95,0x54,
|
||||
0x5f,0x2,0x89,0x6f,0x0,0x6c,0x71,0xde,0x37,0xc4,0x72,0xeb,0x80,0x93,0x5a,0x60,
|
||||
0x51,0x11,0x8e,0x6b,0x9e,0x36,0x60,0x14,0x9e,0x6e,0x12,0xcb,0xa9,0x3,0x5a,0x2d,
|
||||
0xc0,0xa8,0xf6,0x89,0xa,0x6,0x1,0xf8,0x86,0x6d,0x3a,0xdc,0xd2,0x2,0xc8,0xb7,
|
||||
0xd6,0x38,0x3d,0x52,0x8c,0x1b,0xb5,0x39,0xb1,0x3,0x90,0xa7,0x77,0x76,0x8f,0x24,
|
||||
0xa,0x80,0xa1,0xf1,0x2c,0x2d,0x80,0xa9,0xd2,0xeb,0xd3,0x2d,0x4d,0xbc,0x61,0xff,
|
||||
0x23,0xac,0xb7,0x43,0x5e,0x72,0xdf,0x6,0xa4,0xca,0xc1,0xd8,0x5d,0x33,0xef,0x8b,
|
||||
0xa0,0xde,0xd3,0xc4,0x78,0x67,0xb6,0x1,0x89,0xd2,0x3e,0xd5,0x15,0xf8,0x9f,0xfc,
|
||||
0x7a,0x5f,0x1a,0xe1,0xd8,0x6f,0x3,0xca,0x84,0xdd,0xef,0x3,0xfc,0x8b,0xab,0xfa,
|
||||
0x68,0x31,0x4f,0x1b,0x80,0x71,0xed,0x63,0x3f,0xcc,0x80,0xef,0x5c,0xc7,0x38,0x18,
|
||||
0xa9,0x9c,0x76,0xb8,0x2d,0x82,0xc7,0xc3,0x5,0x6b,0x0,0x46,0x5b,0x1e,0x6d,0x62,
|
||||
0x0,0x4c,0x9f,0x2d,0x62,0x64,0x88,0x8d,0x79,0x20,0xef,0x2d,0x4b,0x44,0xfc,0x46,
|
||||
0xe0,0x44,0x3e,0xec,0xab,0x7,0x90,0x3c,0x5b,0xf3,0xe,0x33,0x2f,0xb7,0x21,0x99,
|
||||
0xd3,0x34,0x2,0x73,0x65,0xd7,0x3,0xc8,0x5d,0x5b,0xd6,0xed,0x8d,0x5e,0x42,0x66,
|
||||
0x6d,0x3f,0x28,0x60,0x9a,0x3f,0xec,0xab,0x3b,0x50,0x38,0xef,0xec,0x18,0x0,0x74,
|
||||
0xbc,0x32,0x11,0x6e,0x2,0xe6,0xf,0xa9,0xe9,0x6e,0x88,0x37,0xb7,0x3c,0x1e,0x66,
|
||||
0x3b,0xa0,0x30,0xb4,0x48,0x60,0x93,0x1d,0x92,0xc,0xe8,0xf7,0x30,0x8b,0x3e,0xc0,
|
||||
0x64,0xcb,0xf3,0x77,0xcc,0x81,0xd9,0xd9,0x11,0x38,0xd3,0xd,0x80,0xf1,0xd6,0x67,
|
||||
0xc,0xed,0x0,0xd4,0xa2,0xc5,0x37,0x53,0x21,0xed,0xc4,0x43,0x67,0xc3,0x28,0x7f,
|
||||
0xea,0xde,0xbe,0x80,0x53,0x57,0x94,0x57,0x82,0x88,0x3,0x27,0x19,0xd0,0xde,0x17,
|
||||
0xf0,0x33,0x57,0x5e,0x21,0xf7,0xbb,0xa1,0x52,0xd3,0xe9,0x53,0x18,0x5a,0xf2,0x8c,
|
||||
0x41,0xa6,0x78,0x4e,0x66,0x87,0xda,0x18,0x7e,0xf6,0xc,0x7e,0xb9,0x25,0x94,0x9d,
|
||||
0xe3,0xdf,0xce,0x94,0xa7,0xee,0xd,0x2,0xe4,0xae,0x4d,0x7,0xfe,0x5b,0xcc,0xbb,
|
||||
0xc9,0x6d,0xfa,0x17,0xf8,0xb7,0x53,0xa5,0x88,0x34,0x8,0x90,0x3b,0x6f,0x1d,0xf8,
|
||||
0x2b,0x4,0x9e,0x6e,0x8,0x6e,0x4d,0x67,0xa3,0x2,0xe8,0xf,0x2,0x14,0x72,0x2d,
|
||||
0x9,0x4b,0x93,0x26,0x3d,0xbd,0xd9,0xf0,0x49,0xf3,0x64,0xeb,0x83,0xb0,0xcc,0x6a,
|
||||
0x6d,0x76,0x19,0x28,0xe4,0x5a,0xac,0xce,0x52,0xfe,0xeb,0xd1,0x5a,0x64,0x78,0xef,
|
||||
0x35,0x3c,0xec,0xcb,0x14,0xe8,0x4b,0x20,0x71,0x72,0xb9,0x76,0x51,0x1,0x1e,0xac,
|
||||
0xc5,0xa4,0x51,0xa,0x81,0x3d,0x22,0xa2,0xe5,0x6f,0x0,0x18,0xf2,0x7b,0x95,0x3a,
|
||||
0xa9,0x93,0xcb,0x35,0xb7,0x2,0xfc,0xfc,0x5a,0x4c,0x1a,0x5,0x68,0xf7,0x5,0x8a,
|
||||
0x16,0xe1,0xd4,0x85,0xeb,0x92,0x69,0x22,0xf5,0xa,0xa0,0x7c,0xbe,0xd6,0xff,0xbc,
|
||||
0x12,0xf,0x85,0x12,0xd3,0x25,0x19,0xe,0xc8,0x13,0x61,0xde,0x5d,0xa3,0x3,0xa3,
|
||||
0xab,0xd,0xcb,0x81,0xe2,0xb7,0xbe,0xc0,0xb,0xb1,0x73,0x6,0x3e,0x78,0x9e,0xa5,
|
||||
0xfa,0xbc,0x17,0x53,0x7,0xc6,0x1,0xcb,0x81,0x8e,0x10,0x34,0x83,0x1,0x27,0x9a,
|
||||
0x1d,0x4a,0x60,0xa2,0x0,0x5d,0x21,0xd9,0x6,0x3,0x5a,0x35,0xc0,0x24,0xf3,0x64,
|
||||
0xd2,0xe2,0xc9,0xb0,0xb7,0xb4,0xa,0x8c,0x33,0x4f,0x26,0x7d,0x1a,0x1d,0x16,0xa8,
|
||||
0x46,0x8b,0x9a,0x2b,0x94,0x55,0xe1,0x1,0x67,0x69,0x15,0x98,0x47,0xfc,0xc1,0x81,
|
||||
0x95,0xb2,0xc9,0xf,0x1,0x28,0x7f,0xb7,0x87,0x73,0x6d,0x9b,0x49,0xd8,0x0,0xb4,
|
||||
0x45,0x8e,0xd7,0x1f,0x58,0x75,0xde,0xcb,0x49,0xb0,0x4f,0x60,0x35,0x3c,0xcd,0x26,
|
||||
0x7e,0xd9,0x79,0x2b,0x40,0x57,0xe4,0xe9,0x3,0x1,0x79,0x0,0x9e,0x7f,0x76,0x77,
|
||||
0x40,0xa1,0xf,0xa7,0x77,0x7,0x14,0xfa,0xb0,0x11,0x98,0xb9,0x9e,0x61,0x80,0x42,
|
||||
0xae,0x69,0x40,0x77,0x60,0x60,0x4d,0x22,0xac,0xc9,0x35,0x9e,0xb5,0xed,0x19,0xa8,
|
||||
0x55,0x31,0x78,0x22,0x5c,0x7,0xec,0xf8,0x72,0x1b,0x80,0x7a,0x5e,0xea,0xe,0x3,
|
||||
0xb4,0x1b,0x80,0x5a,0x25,0x6a,0xa8,0x31,0xdc,0x64,0xc0,0x1a,0x41,0xaa,0xd5,0xda,
|
||||
0xbe,0x99,0xe,0x7,0xe4,0xbf,0xd6,0x0,0x1b,0xaa,0x89,0x3,0x0,0x6b,0x8a,0xa,
|
||||
0xa6,0x40,0x5c,0x42,0xe1,0x67,0xdc,0xfb,0xfc,0x14,0x8,0x6a,0x61,0xe9,0xf,0x3f,
|
||||
0x91,0x3f,0xc8,0x18,0x97,0x54,0x59,0xe4,0x88,0x16,0x88,0x89,0x97,0x3,0x6b,0xca,
|
||||
0x26,0xcd,0xc0,0xc2,0xd3,0xe0,0x3d,0xb1,0x3c,0x5e,0x5a,0xc2,0x87,0xc7,0x10,0x80,
|
||||
0xe2,0x68,0xc4,0x16,0x16,0xc8,0x70,0xbf,0x39,0x80,0x6c,0xd1,0xe4,0x61,0xb9,0x8,
|
||||
0x8c,0xc2,0x4d,0x6d,0x25,0xca,0x10,0x48,0xe1,0x93,0x28,0xfc,0x55,0xec,0x10,0xf3,
|
||||
0xf8,0x22,0x1c,0xfe,0xd8,0xe0,0x1e,0x61,0x80,0xb0,0x48,0x86,0x5f,0xcf,0xdb,0x58,
|
||||
0x52,0xcb,0xc9,0x27,0x4d,0x76,0xdc,0x4,0xae,0xe2,0xd4,0xae,0xae,0x6d,0x5,0x12,
|
||||
0x7e,0xf6,0xa2,0xc3,0x7,0x5,0x9b,0x8c,0x63,0xbe,0x17,0xce,0xc3,0x7e,0xe,0x86,
|
||||
0xa9,0x16,0xe4,0x6,0xf2,0xf1,0xc3,0xb8,0xbf,0x91,0x1f,0x62,0xc0,0x6f,0xac,0xec,
|
||||
0xf2,0xc2,0xf6,0xd1,0xda,0xd5,0xb5,0xe9,0xb6,0x78,0x8,0x99,0x15,0xc0,0x6c,0x3e,
|
||||
0xed,0xf0,0x91,0xe,0x11,0x40,0x71,0xea,0x59,0xfc,0xc,0x65,0x3f,0x15,0xf,0x57,
|
||||
0xe,0xf0,0x11,0x74,0xf0,0xa5,0x62,0xf4,0x4,0x50,0x6c,0x76,0x76,0xd8,0x6d,0xed,
|
||||
0xea,0xda,0x56,0x20,0xd6,0x3e,0xf1,0x9d,0x3d,0xb4,0x2,0x2d,0x19,0xde,0xd8,0x93,
|
||||
0x3,0x20,0x8f,0x8a,0xe7,0x3e,0xa0,0x10,0x81,0x91,0xb2,0x9e,0xf2,0xfd,0x16,0x2,
|
||||
0x18,0x7b,0x19,0x70,0xeb,0xea,0x5a,0x5d,0x4e,0x13,0x79,0x90,0xa4,0xfb,0x56,0x30,
|
||||
0x39,0xb1,0x42,0xeb,0xc4,0x4a,0xad,0xb1,0xd,0x79,0x83,0x4d,0x6d,0xe2,0x10,0x3b,
|
||||
0x71,0x89,0x13,0xbb,0x89,0x1b,0x79,0xb1,0x17,0xe1,0x43,0x43,0x1e,0xf3,0x1d,0x25,
|
||||
0x2,0xb8,0x58,0x8,0xe0,0x72,0xfb,0xea,0x5a,0x5d,0xd6,0x6,0x9f,0x13,0x44,0x1,
|
||||
0x1e,0x9d,0xb,0x40,0x6,0x40,0x5c,0x3f,0xa4,0x36,0x6e,0x8,0x1,0xa4,0x4b,0x0,
|
||||
0x97,0x0,0x2e,0xf6,0xf1,0x79,0x62,0xd1,0x63,0xbe,0x67,0x46,0x0,0xaf,0xd7,0x2,
|
||||
0x38,0xdb,0xbe,0xba,0x56,0xb,0xc,0xe2,0x20,0xa,0x1,0x9,0xd3,0x1d,0x8c,0x32,
|
||||
0xb5,0x99,0xd,0xa9,0x98,0x4d,0xdd,0x14,0x70,0xd4,0x25,0x1e,0x20,0x7d,0xe2,0xc5,
|
||||
0x41,0x2,0x3f,0x59,0xfc,0x98,0xef,0xa,0x92,0x93,0x46,0x2,0xbf,0x68,0x5f,0xb7,
|
||||
0xf8,0x5e,0x80,0x99,0xb6,0x88,0xc2,0x24,0x80,0xcf,0x8,0xce,0x61,0x70,0x60,0x8e,
|
||||
0x42,0x9a,0x79,0xe,0xd9,0xad,0xd,0x72,0xd6,0x21,0x5e,0xea,0x12,0x9f,0xba,0x9,
|
||||
0x88,0xdb,0x38,0x24,0x3e,0x7c,0xe9,0x63,0xde,0xa4,0xaf,0x3,0x6f,0xdb,0x97,0x82,
|
||||
0x54,0xf5,0xb4,0x3,0xf0,0x5a,0x5,0x4e,0xda,0x80,0x99,0x3e,0x1c,0xa,0x68,0xb5,
|
||||
0x1,0x33,0x5,0xbc,0x3,0xf0,0x4a,0xbb,0xa5,0xac,0x5,0x98,0x69,0xfc,0xfe,0x40,
|
||||
0xfe,0x10,0xe9,0xe,0x40,0x59,0xc5,0xe8,0x3f,0x4b,0x79,0x45,0x44,0x0,0x71,0x96,
|
||||
0xb6,0x2,0x65,0x92,0xd2,0xdf,0xf0,0x6f,0x58,0xe,0xac,0x74,0x41,0x37,0x1,0x7b,
|
||||
0xbb,0xb6,0x75,0x1,0xac,0xf4,0x79,0x97,0x80,0x4a,0xad,0xad,0xb7,0xf3,0xc6,0xc7,
|
||||
0x23,0x89,0xd5,0x4d,0xe9,0xbc,0x9b,0x80,0x4a,0x35,0xf1,0xe7,0x7d,0xc3,0x93,0xa,
|
||||
0xc,0x2a,0x9b,0x3,0x4a,0x40,0xa5,0x5e,0xfa,0x66,0xcf,0x0,0xac,0xa7,0x18,0x95,
|
||||
0xed,0xf,0x25,0xa0,0x52,0x11,0x7e,0xb7,0x67,0x8a,0xa1,0x3,0x31,0xc5,0x68,0x2,
|
||||
0x2a,0x35,0xef,0x8f,0x7b,0x26,0x51,0x7a,0xd6,0x86,0x49,0x54,0x13,0x50,0xa9,0xea,
|
||||
0xdf,0xf6,0x4e,0x13,0xdf,0x17,0xc0,0xd7,0xb2,0x34,0xb1,0x11,0x58,0xac,0x5b,0xdc,
|
||||
0xf6,0x4c,0x84,0x75,0x20,0x63,0x2d,0xc0,0x62,0x65,0xa6,0x2f,0x50,0x1f,0xc3,0x2a,
|
||||
0x50,0xec,0xa3,0xcb,0x2a,0xdc,0xca,0xda,0x13,0xe9,0xae,0x9e,0x4,0xf0,0x44,0x2,
|
||||
0xa9,0x11,0xb0,0x58,0x5d,0xeb,0xb,0x64,0xf,0xc4,0x2,0x4,0x19,0x85,0x26,0xc0,
|
||||
0x1d,0xd6,0xf,0xb,0xd1,0x96,0xf7,0x51,0xd4,0x1,0x37,0xfc,0x58,0x12,0x7f,0xb1,
|
||||
0xfb,0xa,0x69,0x6,0x8c,0xd4,0xcc,0xbb,0x15,0xb8,0xc3,0x1a,0x70,0x6,0x94,0xa7,
|
||||
0xd,0xd0,0xa9,0x11,0x70,0x87,0x55,0xee,0xc,0x28,0x77,0x39,0x53,0x66,0x6,0xec,
|
||||
0xdf,0x38,0xf0,0x63,0x1,0x1a,0xf6,0x62,0xd0,0x70,0x28,0xa0,0x61,0xb7,0xc9,0x70,
|
||||
0x40,0xc3,0x7e,0x9a,0xe1,0x80,0x86,0x1d,0x43,0xd,0x40,0xad,0x81,0xa7,0x1d,0x68,
|
||||
0xd8,0x13,0x35,0x1c,0x30,0x35,0x31,0xc3,0x74,0xdb,0x4f,0x54,0xde,0x91,0x60,0x0,
|
||||
0x64,0x26,0x8b,0x87,0x83,0x2,0x27,0x6,0x66,0x38,0x28,0x30,0x32,0x31,0x43,0x87,
|
||||
0xe,0x4,0xb4,0xf6,0xf0,0xa,0x9a,0x80,0xa6,0xaf,0x88,0x76,0x8e,0x26,0xbb,0x1,
|
||||
0x93,0xbb,0x6,0x92,0xbb,0x6,0xf6,0x78,0xfd,0x90,0x81,0xdc,0x48,0xa6,0xba,0xcb,
|
||||
0xc2,0xef,0x22,0x4a,0x42,0x3b,0x24,0x30,0xad,0x1,0x7a,0x64,0xf,0x40,0x4c,0xa1,
|
||||
0xe9,0x7d,0x9f,0x2b,0x28,0x4,0xf2,0xe3,0x2,0x21,0x6c,0x45,0x11,0x4b,0xdd,0xbd,
|
||||
0x1,0x7f,0x6,0xaa,0xc9,0x65,0x3a,0x70,0x2,0x9e,0x26,0x61,0xc3,0x3,0x9,0xd7,
|
||||
0x86,0xa0,0xb,0xdf,0x97,0x40,0xf4,0x19,0x3e,0xe3,0xda,0xf0,0x7c,0xb9,0x7,0x60,
|
||||
0xf2,0x74,0xce,0x92,0xe8,0x92,0xc5,0xb,0x1,0x7c,0xf9,0xd0,0xe7,0xea,0xf7,0xfe,
|
||||
0xeb,0x1,0x8b,0xe6,0xfc,0x94,0x36,0xda,0x21,0x9d,0xac,0x4f,0xf5,0x35,0xe0,0x66,
|
||||
0xc5,0x36,0xcb,0x5,0x5b,0x66,0xc0,0x40,0x0,0x1f,0x3e,0x0,0x61,0xea,0xee,0xb,
|
||||
0xb8,0x5a,0x14,0x57,0x98,0x1,0x4f,0x2,0xdc,0x41,0xb4,0x3f,0x60,0x36,0x86,0x8,
|
||||
0x9c,0xc1,0x18,0x22,0x10,0xf,0xdb,0x70,0x9,0x9a,0x47,0x67,0xa0,0x2e,0x48,0x7f,
|
||||
0x10,0xc0,0xcc,0x2c,0x5e,0xfa,0x3e,0xdf,0x88,0x8a,0x40,0x5c,0x8d,0xbf,0x20,0x1c,
|
||||
0x3a,0x3c,0x10,0xd,0x1f,0xeb,0x33,0xb,0x0,0xe2,0x8a,0x84,0x9f,0x6,0x3c,0xc5,
|
||||
0x98,0x11,0x1,0x1d,0xe,0xf8,0x1b,0x30,0x8b,0xd9,0x25,0x77,0x6d,0x1c,0x8,0x66,
|
||||
0x41,0x0,0xe8,0x51,0x1,0x5c,0xc2,0x37,0xcd,0x7,0x5,0xda,0x17,0x30,0xa5,0xc4,
|
||||
0xd1,0x4f,0x8,0x8c,0xd0,0xcd,0xf1,0xb1,0x13,0xc0,0xd,0x7c,0xd3,0x6a,0x48,0x20,
|
||||
0x71,0x2e,0xb9,0xa7,0xc9,0xd3,0x8a,0xfb,0x1,0x3f,0x74,0xe1,0x92,0x34,0x7,0xdf,
|
||||
0xdb,0xe4,0xc3,0x15,0x63,0xe7,0xab,0x97,0x4e,0x47,0x20,0x75,0xa7,0xdc,0x79,0x17,
|
||||
0x40,0xe1,0x4b,0x17,0x2d,0x57,0x75,0x1b,0xbf,0xbd,0x86,0x8f,0x5f,0xbd,0xb4,0x3a,
|
||||
0x2,0x7b,0xbe,0xd6,0xcb,0xf5,0x3b,0x0,0x3c,0xfa,0xcd,0xcb,0x71,0xd8,0xf,0x88,
|
||||
0x75,0xb6,0x4d,0xaa,0xab,0x9b,0xcb,0xd,0x3e,0xf2,0x1b,0xcf,0x4a,0x15,0xe1,0x52,
|
||||
0xb9,0xf3,0xeb,0xd9,0xfa,0x31,0x4c,0xed,0x71,0xdc,0x1b,0x88,0x95,0xc4,0x65,0xaa,
|
||||
0xeb,0x37,0x37,0x81,0xe1,0xc4,0x63,0x1a,0xf0,0x11,0xdc,0x8e,0x8c,0xd1,0x12,0xf8,
|
||||
0xbf,0xd9,0xe3,0x6b,0x10,0x6b,0x7f,0x78,0x79,0xd6,0x19,0x88,0xc7,0x1,0x2e,0x78,
|
||||
0xad,0x74,0xc6,0xfb,0x6e,0x7c,0x26,0x8e,0xea,0x8,0x52,0x37,0x9,0x53,0x2f,0x82,
|
||||
0x49,0x3b,0x41,0x7d,0xc7,0xeb,0xb8,0x79,0x42,0x72,0x9b,0xbe,0xcb,0x81,0xff,0xbc,
|
||||
0x2f,0x70,0xc9,0x5c,0x36,0x67,0x3a,0x10,0x53,0x8c,0x8b,0xb,0xb8,0x52,0x7,0x26,
|
||||
0x73,0x2,0xc1,0x63,0xa9,0x0,0xe9,0xc7,0x30,0xdb,0x92,0xbf,0xee,0xd,0x5c,0xc1,
|
||||
0x7b,0xc1,0xbf,0xac,0x0,0x62,0x12,0x35,0x83,0xdb,0xf8,0xef,0x21,0x46,0x9f,0x13,
|
||||
0x96,0xcc,0xb,0x61,0xb8,0xbe,0x25,0xe4,0xa,0x80,0x1f,0xdd,0x1b,0x1a,0x88,0x6e,
|
||||
0x2e,0x86,0x48,0x15,0x1,0x70,0xa9,0x2,0x37,0x14,0x80,0xe3,0xe1,0x81,0xd8,0xc4,
|
||||
0x99,0xc0,0x6f,0xf1,0x29,0x4b,0x12,0x15,0xb8,0x2,0x7f,0x94,0x1e,0x7f,0xf4,0x49,
|
||||
0xd7,0x59,0x9a,0xf0,0x2,0xbb,0x9b,0x3,0xb1,0x67,0x44,0x16,0xd8,0x39,0x10,0x23,
|
||||
0x47,0x4,0x57,0x98,0x1c,0xb1,0x4,0xf,0x5d,0x2d,0xc,0xff,0x18,0x1f,0x2b,0xb6,
|
||||
0xfe,0xa4,0xab,0xe1,0xb7,0x1,0xb3,0x31,0xa4,0x6f,0xb0,0x64,0xfc,0x4b,0x5,0x18,
|
||||
0x41,0xfc,0x62,0xe7,0xeb,0xce,0xae,0x4d,0x5,0xe2,0x2c,0x55,0x81,0xea,0x2c,0x3d,
|
||||
0x3,0xb3,0x38,0xb1,0x7,0x70,0xde,0xd4,0x5f,0x81,0x65,0x2f,0xe4,0x9a,0x5,0xc4,
|
||||
0x42,0x18,0x43,0x74,0x0,0xf3,0x34,0xe0,0xcb,0x7,0x1e,0x18,0xbd,0x1f,0xf1,0x43,
|
||||
0x91,0xa9,0x41,0xa9,0xcc,0x60,0xd2,0xb8,0x2b,0xf8,0x54,0x1,0xc4,0x2,0x36,0x81,
|
||||
0x14,0x23,0x39,0x83,0xa8,0xf,0xc0,0x89,0x9d,0x7b,0x9a,0xb4,0xe4,0x69,0x76,0x0,
|
||||
0x5e,0xc2,0x2c,0x55,0x80,0x14,0x80,0x4,0x80,0x89,0x4,0x6e,0xf1,0xa5,0x3b,0x0,
|
||||
0x17,0x0,0x9c,0x2e,0x14,0xc9,0x4,0x1,0x18,0x80,0x24,0xed,0x55,0x2d,0xde,0x5b,
|
||||
0x78,0xda,0x1d,0x48,0x20,0x91,0xd9,0xe8,0xc7,0x3b,0xa3,0x59,0xf0,0xeb,0xb4,0x8,
|
||||
0xc3,0xff,0x92,0x72,0xcd,0xeb,0x47,0x6,0x4,0xa7,0xb9,0x49,0x82,0xb2,0x20,0x15,
|
||||
0xc0,0x53,0x46,0x42,0x88,0x16,0xe1,0x72,0x0,0x60,0x92,0x55,0xe9,0x63,0x8,0xc0,
|
||||
0xe0,0xc7,0x16,0xf2,0x8b,0xd1,0x9b,0xba,0x31,0x7,0xa6,0xd6,0x5b,0x90,0x39,0x46,
|
||||
0xe0,0xc7,0xcf,0x87,0x0,0x86,0x2,0xba,0x4,0x1f,0x36,0x9f,0x79,0xfc,0x8,0x6b,
|
||||
0x3c,0x8b,0x1c,0x2d,0xe0,0x7c,0xc6,0x4b,0x93,0xf4,0x18,0xcc,0xc3,0xbb,0x80,0xf7,
|
||||
0x10,0x76,0x98,0x88,0x68,0xc0,0x56,0x73,0xf0,0xa5,0xf3,0x29,0x3f,0x6e,0x19,0x37,
|
||||
0x4e,0xe0,0x67,0x47,0x17,0x2,0x78,0xe6,0x8,0x21,0x34,0x88,0x1d,0xe2,0xa6,0x5,
|
||||
0x4c,0x7c,0x57,0xb,0x0,0x2e,0xa6,0x1c,0x8e,0xd,0xce,0x8,0xce,0xe4,0x5a,0x8,
|
||||
0xb0,0x48,0x44,0x8d,0x21,0x5c,0x9b,0x68,0x21,0xce,0x80,0x32,0xfe,0x71,0x28,0x46,
|
||||
0x3c,0xe,0x14,0x41,0x38,0xdb,0xec,0xbe,0x23,0x50,0xde,0xc3,0xc,0x98,0xca,0x2b,
|
||||
0xe6,0x60,0xaf,0x0,0x76,0xbb,0x42,0xc2,0xab,0xbf,0x51,0x6d,0x19,0x5f,0xde,0xbf,
|
||||
0xc,0x98,0x5d,0x31,0xde,0xea,0x6c,0xc,0x11,0xd8,0x6d,0xc,0x13,0x5e,0xdf,0x9e,
|
||||
0xd4,0x2e,0x54,0xc8,0xfb,0xb7,0xbc,0x84,0x59,0xea,0x7a,0xf9,0x8c,0xc1,0xf3,0x2c,
|
||||
0xb2,0x59,0xa,0xc0,0x8e,0xb3,0xb4,0xe9,0xa,0xe5,0xfd,0x8b,0xef,0x81,0x7a,0xba,
|
||||
0xe7,0x15,0x33,0xe6,0x9c,0xf1,0xbc,0x34,0xe0,0x9d,0x45,0xdd,0xed,0xb0,0xe1,0x4b,
|
||||
0xc4,0xa0,0x25,0xf,0x3c,0x16,0xe3,0xb2,0x67,0x36,0x63,0xa2,0xdc,0xd3,0x70,0x60,
|
||||
0x57,0x4f,0xd3,0xf0,0x12,0xf7,0x90,0x80,0x10,0x4d,0x1e,0x6,0xf2,0x8a,0xf9,0x55,
|
||||
0x67,0xbe,0x94,0x3,0x3b,0xfa,0xd2,0x48,0x34,0x5d,0xd5,0xa6,0x8,0x99,0x6f,0xc9,
|
||||
0xbe,0xc5,0x17,0x50,0xba,0x53,0x3c,0x9c,0x88,0xa6,0x2b,0x7b,0x7b,0x5e,0x5a,0xbc,
|
||||
0xf2,0xbc,0x74,0x17,0x60,0xd3,0x15,0xee,0x27,0x0,0xb7,0xbe,0xca,0xd7,0x29,0xd7,
|
||||
0x94,0x84,0x59,0x48,0x9f,0x61,0x6f,0x6,0x4,0x2e,0x59,0xe9,0x61,0x7,0x62,0xfe,
|
||||
0xa6,0x72,0x34,0xc5,0x63,0x79,0xcc,0x67,0x29,0x3f,0x96,0xa6,0xd6,0x17,0x52,0xb0,
|
||||
0x3d,0x8a,0x59,0x5b,0x28,0xe,0xcb,0x41,0x13,0x9c,0x82,0x59,0x3c,0xb4,0xc4,0x89,
|
||||
0x59,0xae,0x70,0x3a,0x84,0xbb,0xf,0xf3,0x44,0x98,0x9f,0x93,0x5a,0xeb,0xb,0x79,
|
||||
0xbd,0xd4,0x5d,0x8,0xdf,0x19,0x8,0xe8,0x34,0xa,0xd9,0x21,0xd6,0x4b,0x8b,0x50,
|
||||
0xc5,0x81,0x63,0x67,0x80,0x2b,0xe4,0xa9,0xbe,0xb3,0x10,0x97,0xe1,0x89,0x86,0x80,
|
||||
0x4b,0x98,0xd3,0x7,0x30,0xcd,0x22,0x79,0xd5,0xe7,0x12,0x98,0xba,0x3,0x8c,0x61,
|
||||
0xf2,0x4,0x2b,0x51,0x8b,0xdc,0x7f,0xe2,0x5d,0x58,0xdc,0x7,0xe0,0x38,0x50,0x43,
|
||||
0x15,0x97,0xdc,0xa9,0x37,0x4,0x10,0x6b,0x6d,0x58,0x2c,0x9d,0x89,0x1,0x7c,0x89,
|
||||
0x35,0x1a,0xf0,0x3a,0x7,0x69,0xa0,0x86,0x2a,0x1,0xf4,0x87,0x2,0x62,0xed,0x52,
|
||||
0x46,0xd8,0x5,0x3e,0x9a,0x43,0x2,0x59,0x36,0x6b,0x5c,0x9,0xc,0x7e,0xb4,0x40,
|
||||
0x2c,0x96,0xa,0x87,0xcd,0x16,0xe0,0x56,0x97,0x19,0x30,0xcb,0xa8,0x1c,0x39,0x69,
|
||||
0x6,0x3,0x52,0x71,0x19,0x38,0x55,0x17,0x60,0xfd,0x31,0x2,0xcf,0x64,0x12,0xc3,
|
||||
0x8f,0xed,0xed,0x6c,0x87,0xd,0xc0,0x70,0x2e,0xe7,0xbb,0xcb,0xb3,0xd1,0x5,0x4e,
|
||||
0xc9,0x43,0x9f,0x1d,0x8e,0x3,0x7e,0x9a,0x1c,0x4f,0x5a,0xe3,0x21,0x81,0xc1,0x5,
|
||||
0x40,0x5d,0xe9,0x49,0xa7,0x6c,0x91,0xe0,0xb2,0x10,0x48,0xee,0x23,0xc5,0x8b,0x92,
|
||||
0x1,0x81,0x24,0xb8,0x84,0xb,0x29,0xe2,0xe1,0x82,0x60,0x6e,0x18,0x2,0x30,0xdc,
|
||||
0x4f,0xb4,0xa0,0xc1,0x14,0x2e,0xa4,0x88,0x13,0xb,0x34,0x3c,0x6c,0xf,0x3c,0xda,
|
||||
0x73,0x78,0xba,0xf3,0x78,0x18,0xf3,0xdb,0xa9,0xcf,0xfb,0x89,0x1c,0x43,0x4b,0x9a,
|
||||
0xc5,0xb0,0x40,0xf8,0xec,0x45,0x52,0x2,0x8e,0xb,0x60,0x58,0x7a,0x54,0xcf,0x8e,
|
||||
0x63,0xe8,0x73,0x47,0x33,0x7,0x7d,0x28,0x3a,0x2f,0x19,0xef,0xbc,0xb4,0x4,0x10,
|
||||
0x5b,0x3d,0xd1,0x2d,0x24,0xfe,0xa0,0x40,0x54,0x50,0x33,0x4f,0x5,0xa6,0xf7,0x8f,
|
||||
0x39,0x90,0x3a,0xb1,0x88,0xfe,0x1e,0x1b,0xcc,0x2c,0x3c,0xf6,0x7b,0x54,0x50,0xa0,
|
||||
0xf,0x71,0x7f,0x56,0xc4,0x1b,0x59,0xc3,0xf4,0xe4,0x50,0x0,0xff,0x92,0x88,0x83,
|
||||
0xde,0x1c,0x36,0x94,0xa7,0x81,0xbc,0x14,0x1f,0x86,0xb7,0x4,0x31,0x83,0x5b,0xde,
|
||||
0x2e,0xc1,0x34,0x70,0x65,0x26,0xb8,0x1f,0x72,0xf5,0xf4,0x84,0x14,0xe9,0xc7,0xee,
|
||||
0x40,0xc8,0xd7,0x36,0x58,0x2f,0x5,0x27,0x9d,0x0,0x10,0x37,0xf5,0x4d,0x1,0x8a,
|
||||
0x6b,0x4f,0xc1,0x6f,0x5,0x70,0x74,0xda,0x5d,0x1f,0xb6,0x3,0xe1,0xc7,0x4f,0xdc,
|
||||
0x12,0x30,0x12,0xc0,0xd3,0xa3,0x42,0x33,0xe,0x7,0x44,0xa7,0x5d,0x6,0xc2,0x25,
|
||||
0xb9,0x30,0x86,0xe3,0x83,0x22,0x7d,0x1b,0xe,0x98,0xe0,0x99,0xce,0x9e,0x6,0xf4,
|
||||
0xc0,0xf2,0x2e,0x0,0x78,0x62,0x29,0x95,0x86,0xc1,0x80,0x44,0x74,0x43,0xab,0x40,
|
||||
0x6c,0x1c,0x98,0x11,0xb9,0x6,0x2c,0xd3,0xb7,0xe1,0x66,0x29,0x6,0x60,0xcb,0x57,
|
||||
0x81,0xc,0x81,0x4b,0x61,0xf8,0xb2,0x98,0x33,0x84,0x1d,0xca,0xc6,0x81,0x95,0xcc,
|
||||
0x11,0x95,0x12,0x34,0x98,0x87,0x58,0x3f,0xe4,0x22,0x88,0x30,0xc6,0x86,0xd0,0x16,
|
||||
0xbc,0x35,0x42,0x91,0xe2,0x2a,0x70,0x3f,0xf1,0xf0,0xae,0x81,0xdf,0x5b,0x3c,0xfc,
|
||||
0x1e,0x80,0x59,0xe1,0x52,0xbd,0xdf,0x79,0x12,0xc5,0x8b,0xec,0xf7,0xbc,0xbb,0x3,
|
||||
0xd2,0xae,0xcb,0x8,0xdb,0x27,0x8d,0x9d,0xa9,0x47,0x1,0xc4,0xe7,0xc,0xc6,0x59,
|
||||
0x5d,0x4d,0x49,0x13,0x4b,0xb,0x96,0xbb,0xd8,0x21,0x63,0xfc,0x29,0x1b,0x12,0x18,
|
||||
0xbb,0xfc,0xe1,0x4a,0xe2,0xfc,0x51,0x5,0x38,0x4a,0x40,0xd9,0xd,0x61,0xf8,0x89,
|
||||
0xdc,0xd0,0x91,0x1,0xf9,0x86,0xe,0x47,0x1a,0xbb,0x2,0x4c,0x8,0xa8,0x82,0x21,
|
||||
0xc,0x3f,0x81,0x94,0x3e,0x21,0x21,0x5f,0x99,0xc1,0x4e,0x85,0x39,0x5c,0xc5,0x25,
|
||||
0xe8,0xb,0x2c,0xe6,0x89,0xfd,0x32,0xa2,0x12,0x35,0x1c,0x10,0x7c,0x26,0x36,0x30,
|
||||
0x65,0xc0,0x5,0x7c,0xe8,0x74,0xc5,0x98,0x3f,0xff,0xa9,0x1,0x9,0xa4,0xfb,0x9,
|
||||
0x8a,0x99,0x2,0xc8,0x2e,0xe0,0xff,0x5f,0xc2,0x18,0x7a,0x30,0x86,0x4f,0x6,0x9b,
|
||||
0x34,0x12,0x48,0xfd,0x5,0x24,0x9f,0x3a,0x10,0xfb,0x4b,0x65,0x3f,0xd,0xb1,0xa2,
|
||||
0xa1,0xe4,0x9a,0x4,0xa6,0x0,0xa4,0x25,0x20,0xf6,0x97,0xca,0x7e,0x1a,0x6a,0xcf,
|
||||
0x7,0x32,0xfc,0x6c,0x49,0x16,0x9b,0xde,0x52,0x5f,0x5b,0x3,0xe6,0xfd,0xa5,0xb2,
|
||||
0x9f,0x26,0x75,0x16,0x3,0xb9,0xb6,0x1c,0x78,0x57,0xe1,0xe9,0xce,0x81,0x3f,0xe4,
|
||||
0x7a,0xe9,0xb0,0xfa,0xb0,0xad,0x5e,0x3a,0x98,0x3e,0x54,0x15,0x70,0x49,0xac,0xa4,
|
||||
0x2e,0x2b,0xca,0x6d,0x83,0xe9,0xc3,0x42,0xb6,0x15,0x7,0x57,0x65,0x2f,0xa5,0x5e,
|
||||
0x3a,0x9c,0x3e,0xcc,0x3,0xb1,0x5f,0x9c,0xa4,0x9c,0xcf,0x58,0x56,0x54,0xbf,0x6,
|
||||
0xd3,0x87,0xf9,0xcb,0xcd,0xca,0xb8,0xa5,0xab,0xe,0xb3,0x85,0x9a,0x81,0xf4,0x61,
|
||||
0xfe,0xba,0xa8,0x5e,0x42,0xbe,0xac,0x17,0xe,0xa8,0xf,0xf3,0xd7,0xac,0x66,0xd6,
|
||||
0x28,0x6b,0x89,0x83,0xe9,0xc3,0xef,0xf,0x98,0xad,0x3e,0x97,0x6f,0xb3,0x1c,0xdb,
|
||||
0xc1,0x4,0x69,0x31,0x43,0x6a,0x2e,0x61,0xa6,0x8c,0xed,0x50,0x82,0xb4,0x62,0xe6,
|
||||
0xba,0x78,0x2c,0xa6,0xe8,0x50,0x82,0x54,0xb3,0xb,0x56,0x2,0x16,0x5,0xda,0xe1,
|
||||
0x4,0xa9,0x61,0xaa,0x3f,0x9c,0x20,0xfd,0xff,0x49,0xae,0x7d,0xf,0xfa,0xb0,0x7c,
|
||||
0x38,0x3a,0x46,0xdf,0x73,0x30,0x7,0x47,0x8e,0xa1,0x35,0xb4,0x3e,0x2c,0x1f,0xff,
|
||||
0x8e,0x40,0xdc,0x16,0x6f,0x2b,0xa2,0x74,0x50,0x60,0xe9,0x80,0xfb,0x22,0xd5,0x17,
|
||||
0xc0,0x61,0x12,0x61,0xd,0xe8,0x57,0x81,0x7,0x8f,0x18,0x7d,0x74,0x2a,0x80,0xce,
|
||||
0xd0,0x76,0xf8,0xd2,0x9b,0x56,0x80,0xc7,0xa7,0xa2,0x9a,0x88,0xc0,0xd9,0x90,0x76,
|
||||
0x88,0xea,0x69,0xe1,0xea,0x86,0xff,0x5a,0xc0,0x38,0x70,0x7c,0x20,0x24,0x77,0x3c,
|
||||
0x38,0x70,0xae,0x3,0x27,0x12,0x78,0x66,0x9,0x60,0xf2,0x74,0x68,0xe0,0x52,0x7,
|
||||
0x46,0x12,0x18,0x4a,0x20,0x79,0x3c,0x64,0xd6,0x6,0xfa,0x70,0x9e,0x78,0xe5,0x10,
|
||||
0x29,0xba,0x2f,0x27,0xf0,0x3b,0x8c,0xe1,0x78,0xc8,0x59,0x8a,0xfa,0xb0,0xfc,0xdc,
|
||||
0x7,0x12,0xe4,0xfd,0xa5,0x68,0xfc,0xc3,0x9a,0x5,0xea,0xc3,0xb2,0xe1,0x63,0xca,
|
||||
0xed,0x2d,0xe1,0x9f,0x62,0x2e,0x4a,0x7,0x36,0x7c,0xbf,0xde,0xb5,0x71,0x71,0x2a,
|
||||
0x37,0x79,0xc,0xec,0xda,0x5e,0x85,0xa7,0x81,0x81,0x24,0xad,0xee,0xb7,0x98,0x14,
|
||||
0x65,0xb0,0xce,0x3d,0xc2,0x3f,0x42,0xa0,0x33,0xb0,0x59,0x60,0x2b,0x49,0x79,0x47,
|
||||
0x9,0x3f,0xdb,0xc9,0xe6,0xeb,0x16,0x9d,0x1b,0xcb,0xd,0x24,0x77,0xb6,0xc1,0x43,
|
||||
0x91,0x16,0x24,0xcc,0x1a,0xcb,0x49,0x18,0x83,0xa7,0x9b,0xd,0x8,0x2c,0xb6,0x3f,
|
||||
0x28,0x76,0x8f,0x8d,0x74,0xa2,0xb1,0x1c,0xdb,0xe8,0x86,0xea,0xdc,0x33,0x4,0x76,
|
||||
0xec,0x82,0x7e,0x5,0xbc,0x7b,0x60,0xdd,0x2c,0xdd,0x2b,0x10,0x77,0x76,0x95,0xe2,
|
||||
0xa1,0x56,0x82,0x1e,0x6c,0xdd,0x22,0xf7,0x34,0xb8,0x9b,0x44,0x8f,0x87,0x3f,0x31,
|
||||
0xe0,0xab,0x0,0x3c,0x7c,0x0,0x76,0xb1,0x53,0x81,0x95,0x33,0x6f,0x7e,0x4e,0xa9,
|
||||
0x25,0x3f,0xc8,0x1e,0x12,0x98,0x38,0xe2,0x20,0x31,0x2d,0x3c,0x81,0x95,0xe0,0xd1,
|
||||
0x5a,0x56,0xc8,0xcf,0x1c,0x33,0xf9,0xb0,0x2e,0xa9,0xbe,0x68,0xda,0xd1,0xbe,0x39,
|
||||
0x3b,0x59,0xcd,0xaf,0x9b,0xc4,0xbb,0x7a,0x9a,0x4,0x72,0xcf,0xa4,0x54,0x6a,0xbb,
|
||||
0x84,0x24,0x18,0x80,0x27,0x72,0x2b,0xd4,0x78,0x48,0x20,0x6e,0x2e,0x2e,0x6d,0xc5,
|
||||
0x4d,0x83,0x5,0xbc,0x45,0x43,0x11,0x61,0xfe,0x40,0xbd,0x89,0xaf,0x80,0xaf,0x80,
|
||||
0x3b,0x49,0xee,0xad,0x75,0x9a,0x7d,0x44,0x8b,0x9f,0x3e,0xf0,0x55,0x3c,0x7c,0x5,
|
||||
0x7c,0x5,0x7c,0x5,0x7c,0x5,0x7c,0x5,0x7c,0x5,0x7c,0x5,0x7c,0x5,0x2c,0x80,
|
||||
0x7f,0xf,0x8f,0x5b,0x9c,0x1e,0xf,0x3e,0xf1,0xfb,0x0,0x0,0x0,0x0,0x49,0x45,
|
||||
0x4e,0x44,0xae,0x42,0x60,0x82
|
||||
};
|
||||
//brd_wiznet.png: 13702 bytes
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
@ -0,0 +1,107 @@
|
||||
const char favicon_ico[] PROGMEM = {
|
||||
0x0,0x0,0x1,0x0,0x1,0x0,0x30,0x30,0x10,0x0,0x1,0x0,0x4,0x0,0x68,0x6,
|
||||
0x0,0x0,0x16,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x60,0x0,
|
||||
0x0,0x0,0x1,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,
|
||||
0x0,0x0,0x48,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24,0x22,
|
||||
0x24,0x0,0x8c,0x96,0x4,0x0,0xcb,0xd2,0x8d,0x0,0x57,0x5d,0x11,0x0,0xaa,0xb5,
|
||||
0x4b,0x0,0x41,0x44,0x17,0x0,0xf0,0xf0,0xdc,0x0,0x6f,0x7b,0x9,0x0,0xbf,0xc5,
|
||||
0x70,0x0,0xdc,0xe2,0xb4,0x0,0xfc,0xfe,0xfc,0x0,0x60,0x6e,0xc,0x0,0x4c,0x53,
|
||||
0x14,0x0,0x99,0xa7,0x26,0x0,0x31,0x31,0x1c,0x0,0x7c,0x88,0x4,0x0,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa6,0x8d,0x14,0x8a,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa2,0x11,
|
||||
0x11,0x11,0x11,0x11,0x11,0x16,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xa1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa1,0x11,0x11,0x11,
|
||||
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1d,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xa9,0x11,0x11,0x11,0x11,0x11,0x35,0x5,0xb1,0x11,0x11,0x11,0x11,
|
||||
0x1a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x11,0x11,0x11,0x11,0xe0,
|
||||
0x0,0x0,0x0,0x0,0x0,0xc1,0x11,0x11,0x11,0x2a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xa1,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x11,
|
||||
0x11,0x1d,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x11,0x11,0x11,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb1,0x11,0x11,0x4a,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xa1,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x11,0x11,0x19,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x91,0x11,0x11,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x11,0x11,0x1a,0xaa,0xaa,0xaa,0xaa,0xa1,0x11,0x11,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x11,0x18,0xaa,0xaa,0xaa,0xaa,
|
||||
0xa1,0x11,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0xf,0x11,0x11,0xaa,0xaa,0xaa,0xaa,0x11,0x11,0x10,0x0,0xaa,0xaa,0xaa,0xaa,
|
||||
0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x11,0x11,0x2a,0xaa,0xaa,0xaa,
|
||||
0x11,0x11,0x0,0x0,0xaa,0xaa,0xaa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0x0,
|
||||
0xa,0xaa,0x51,0x11,0x1a,0xaa,0xaa,0xa8,0x11,0x11,0x0,0x0,0xaa,0xaa,0xaa,0xaa,
|
||||
0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x1,0x11,0x1a,0xaa,0xaa,0xa1,
|
||||
0x11,0x10,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0xa,0xaa,0x0,0x0,0xaa,
|
||||
0xa0,0x0,0x1,0x11,0x14,0xaa,0xaa,0xa1,0x11,0x10,0xa,0xaa,0x0,0x0,0x0,0xa,
|
||||
0xaa,0x0,0x0,0xa,0xaa,0x0,0x0,0xaa,0xa0,0x0,0x0,0x11,0x11,0xaa,0xaa,0xa1,
|
||||
0x11,0x10,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0xa,0xaa,0x0,0xaa,0xaa,
|
||||
0xa0,0x0,0x0,0x11,0x11,0xaa,0xaa,0x61,0x11,0x10,0xa,0xaa,0x0,0x0,0x0,0xa,
|
||||
0xaa,0x0,0x0,0xa,0xaa,0x0,0xaa,0xa0,0x0,0x0,0x0,0x11,0x11,0xaa,0xaa,0x41,
|
||||
0x11,0xc0,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0xa,0xaa,0x0,0xaa,0xa0,
|
||||
0x0,0x0,0x0,0x11,0x11,0xaa,0xaa,0xd1,0x11,0xe0,0xa,0xaa,0x0,0x0,0x0,0xa,
|
||||
0xaa,0x0,0x0,0xa,0xaa,0xaa,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0xaa,0xaa,0x11,
|
||||
0x11,0x0,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0xa,0xaa,0xaa,0x0,0x0,
|
||||
0x0,0x0,0x0,0x11,0x11,0xaa,0xaa,0x41,0x11,0x50,0xa,0xaa,0x0,0x0,0x0,0xa,
|
||||
0xaa,0x0,0x0,0xa,0xaa,0xaa,0xaa,0xa0,0x0,0x0,0x0,0x11,0x11,0xaa,0xaa,0x81,
|
||||
0x11,0x30,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0xa,0xaa,0x0,0xaa,0xa0,
|
||||
0x0,0x0,0x0,0x11,0x11,0xaa,0xaa,0xa1,0x11,0x10,0xa,0xaa,0x0,0x0,0x0,0xa,
|
||||
0xaa,0x0,0x0,0xa,0xaa,0x0,0xaa,0xa0,0x0,0x0,0x0,0x11,0x11,0xaa,0xaa,0xa1,
|
||||
0x11,0x10,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0xa,0xaa,0x0,0x0,0xaa,
|
||||
0xa0,0x0,0x0,0x11,0x11,0xaa,0xaa,0xa1,0x11,0x10,0xa,0xaa,0x0,0x0,0x0,0xa,
|
||||
0xaa,0x0,0x0,0xa,0xaa,0x0,0x0,0xaa,0xa0,0x0,0xe,0x11,0x11,0xaa,0xaa,0xa1,
|
||||
0x11,0x1c,0xa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x0,0x0,0xa,0xaa,0x0,0x0,0xaa,
|
||||
0xaa,0xaa,0x1,0x11,0x12,0xaa,0xaa,0xa6,0x11,0x11,0x0,0x0,0xaa,0xaa,0xaa,0xaa,
|
||||
0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x1,0x11,0x1a,0xaa,0xaa,0xaa,
|
||||
0x11,0x11,0x0,0x0,0xaa,0xaa,0xaa,0xaa,0x0,0x0,0x0,0xa,0xaa,0x0,0x0,0x0,
|
||||
0xa,0xaa,0xf1,0x11,0x1a,0xaa,0xaa,0xaa,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0xaa,0xaa,0xaa,0xaa,
|
||||
0xa1,0x11,0x13,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x1,0x11,0x11,0xaa,0xaa,0xaa,0xaa,0xad,0x11,0x11,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc1,0x11,0x1a,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x11,0x11,0x1a,0xaa,0xaa,0xaa,0xaa,0xaa,0xa1,0x11,0x11,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe1,0x11,0x11,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xa2,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb,
|
||||
0x11,0x11,0x1a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xd1,0x11,0x11,0xf0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xa4,0x11,0x11,0x11,0x50,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf1,0x11,
|
||||
0x11,0x1a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x21,0x11,0x11,0x11,0xf0,
|
||||
0x0,0x0,0x0,0x0,0xe,0x11,0x11,0x11,0x11,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
|
||||
0x1a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa9,0x11,0x11,0x11,
|
||||
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xa2,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1a,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x41,
|
||||
0x11,0x11,0x11,0x11,0x11,0x2a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
|
||||
0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
|
||||
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
|
||||
};
|
||||
//favicon.ico: 1662 bytes
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@ -0,0 +1,815 @@
|
||||
const char m1284p_png[] PROGMEM = {
|
||||
0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,
|
||||
0x0,0x0,0x4,0xf8,0x0,0x0,0x3,0x3b,0x1,0x3,0x0,0x0,0x0,0xed,0x52,0xbc,
|
||||
0x4d,0x0,0x0,0x0,0x6,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0xff,0xff,0xff,0xa5,
|
||||
0xd9,0x9f,0xdd,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x12,0x74,0x0,
|
||||
0x0,0x12,0x74,0x1,0xde,0x66,0x1f,0x78,0x0,0x0,0x20,0x0,0x49,0x44,0x41,0x54,
|
||||
0x78,0xda,0xed,0xdd,0x5f,0x8c,0x23,0xc7,0x9d,0x1f,0xf0,0x59,0x4f,0x20,0x26,0xb0,
|
||||
0xb5,0xf4,0x21,0x2f,0x6,0xbc,0xbb,0xf4,0xc5,0x4f,0x79,0x73,0x5e,0x6e,0x25,0x68,
|
||||
0xb5,0xb4,0x90,0x7,0x3f,0xfa,0xf1,0x2,0x8,0xd2,0x2a,0x2f,0xf9,0x3,0x45,0x4b,
|
||||
0x19,0x86,0x96,0xbb,0xe2,0x72,0x7a,0xd6,0x3,0x64,0x1e,0x12,0xdc,0xdc,0x21,0x2f,
|
||||
0x39,0x48,0xde,0x31,0x70,0x7,0xf8,0xe1,0x60,0xad,0x2,0x45,0xa2,0x6c,0x2e,0xa7,
|
||||
0x39,0x98,0xb3,0x6,0xc1,0x59,0xe2,0x19,0x4e,0x30,0xb6,0x29,0xb2,0x38,0x37,0x97,
|
||||
0xa3,0x90,0x11,0xbb,0x38,0x1e,0x2f,0xab,0x67,0x8a,0x5d,0x95,0xfe,0x57,0xfd,0xb7,
|
||||
0xba,0xd9,0xff,0x48,0xb6,0x70,0x43,0xdc,0x59,0xda,0x9d,0xdd,0x99,0x8f,0xaa,0xbb,
|
||||
0xab,0xbe,0xfd,0xab,0xea,0xea,0x15,0x9a,0xef,0xcf,0xca,0x85,0xef,0xc2,0xe7,0xfe,
|
||||
0xf4,0x4b,0xc5,0x5c,0xfb,0x7a,0x12,0xca,0xb5,0xaf,0x3b,0xc9,0xb9,0x8f,0x5e,0xf8,
|
||||
0xd2,0xf9,0x60,0xce,0x7d,0x60,0x91,0xbe,0xc1,0x5a,0x71,0x73,0x73,0x73,0x5a,0xda,
|
||||
0x23,0xd7,0xae,0x14,0x89,0x2c,0xcc,0xf6,0x21,0x71,0x91,0x3e,0xd8,0x42,0xb5,0x5a,
|
||||
0x4d,0xa1,0x2d,0x65,0x34,0x42,0xd3,0x8,0x3f,0xbb,0x7,0x85,0x85,0xfa,0xba,0x58,
|
||||
0xf5,0x61,0xc3,0x77,0x1e,0xc1,0xd7,0xbf,0x56,0x58,0xac,0x8f,0xaa,0x40,0xb9,0xdc,
|
||||
0x52,0xe0,0x8,0x11,0xba,0xc0,0x63,0x17,0xd9,0xb7,0xaf,0xb6,0x1f,0xc8,0xaf,0x6f,
|
||||
0x4f,0x6d,0x3f,0xaa,0xf9,0x3e,0x2d,0x12,0x2a,0xe4,0xcf,0x87,0x71,0xed,0xcd,0x12,
|
||||
0x68,0x3d,0xd,0x5b,0xd3,0x9b,0x84,0xe6,0xd0,0x57,0x33,0x8f,0x6f,0x9d,0x12,0x25,
|
||||
0x7f,0x3e,0xbd,0x7f,0xc1,0x62,0x4b,0x91,0x14,0x4a,0xf0,0xec,0xbf,0xd2,0x3e,0x3c,
|
||||
0x1c,0xb4,0x6f,0x81,0x45,0xf9,0xcc,0xfe,0xf9,0xf9,0x3d,0x72,0xe5,0x69,0x4a,0xc6,
|
||||
0xe5,0x99,0x7f,0x85,0xf4,0xfb,0x10,0x83,0x85,0xf9,0x62,0x7f,0x94,0x7e,0x1f,0x60,
|
||||
0x28,0xe6,0xd9,0xb7,0x9b,0x67,0x1f,0x3e,0xec,0xf7,0x31,0xa,0xe8,0x87,0xc6,0xfe,
|
||||
0x13,0x93,0x90,0xc3,0x8,0xa3,0x7a,0x86,0xbe,0x7e,0x9f,0x4,0xfa,0x10,0xe0,0xf8,
|
||||
0xfa,0xc9,0x13,0x45,0x52,0xdf,0x79,0xc0,0xb1,0x87,0x9c,0x3,0x5f,0x17,0x2b,0x60,
|
||||
0x81,0x3e,0xd4,0x57,0x8f,0x6f,0x90,0x6f,0xc0,0xf5,0x41,0xba,0x58,0x5f,0xf,0x2b,
|
||||
0x41,0xed,0x57,0xf5,0x1f,0xf8,0xe6,0x7c,0x7c,0x2d,0x24,0x15,0x8a,0x9c,0x5b,0x5d,
|
||||
0x74,0x78,0x78,0x18,0xe4,0x1b,0x94,0x17,0xe7,0xbb,0x81,0x3a,0x93,0xb8,0xb7,0x92,
|
||||
0xa,0x7d,0xd3,0xff,0x9b,0x7,0x73,0xf1,0x91,0x56,0xf5,0x91,0x14,0xdb,0x7,0xb9,
|
||||
0xbe,0xb9,0x5c,0x1f,0xad,0x6a,0x5,0xc6,0xf6,0x49,0x9c,0x3,0xf,0xe7,0xd3,0xbf,
|
||||
0xb4,0x1a,0x15,0x80,0x38,0xe7,0xdf,0x8a,0xfd,0xf1,0x7,0xfd,0x31,0xcf,0x37,0x9f,
|
||||
0xfe,0xb9,0xf5,0x1,0x4,0xbc,0x52,0x4b,0xa8,0x6f,0x81,0xe3,0x5b,0xeb,0xff,0x40,
|
||||
0xd0,0x9f,0xa3,0x4f,0xbe,0x1e,0xe1,0xb0,0x7,0xf9,0x56,0xd5,0x1b,0xba,0xff,0x5d,
|
||||
0x10,0x77,0x38,0xbe,0x92,0xfd,0xaf,0xfb,0x69,0x7c,0xe8,0x0,0x95,0x13,0xfb,0xea,
|
||||
0xa7,0xb4,0x35,0x84,0xe2,0xda,0x3c,0x7d,0x5d,0x29,0x79,0xfb,0xad,0x1d,0xab,0xfd,
|
||||
0x33,0xdc,0x29,0xf8,0xaf,0xf,0xe8,0xf0,0x7d,0x54,0x4e,0xe3,0x8b,0x12,0xd2,0x2,
|
||||
0x7d,0x81,0x41,0xbf,0xe3,0xf0,0xfd,0x3c,0x4d,0x8a,0x96,0x15,0x30,0xf,0xdf,0x23,
|
||||
0xe7,0xf1,0x4d,0x95,0xf2,0xaf,0xc6,0xf6,0xb5,0x3d,0xbe,0x31,0xe7,0x6f,0xc0,0xcc,
|
||||
0x7c,0x7d,0x31,0xae,0x6f,0xdd,0x38,0x9f,0x8a,0x44,0x30,0x7c,0x3,0x61,0x2b,0xdc,
|
||||
0x17,0xe9,0xfc,0x1b,0x6,0xe5,0xa0,0xb8,0x3e,0xb2,0x62,0xfc,0xec,0x55,0xe6,0x1b,
|
||||
0x92,0x62,0x6,0xed,0x77,0x18,0x14,0xb5,0x85,0x38,0xbe,0x35,0xf5,0x6,0xb3,0x6c,
|
||||
0x70,0xbe,0x41,0x84,0xba,0xe1,0x93,0xb3,0xf0,0xc9,0x1,0xbf,0x5d,0x8e,0xe5,0x6b,
|
||||
0xb5,0x94,0xcf,0x69,0xc7,0x48,0x56,0x37,0x85,0x55,0xc3,0x77,0xd8,0xe1,0xf8,0x88,
|
||||
0x1e,0x9e,0xb1,0x54,0x8e,0x78,0xfd,0x4e,0x53,0xf4,0x42,0x2e,0xdf,0x67,0x6a,0x87,
|
||||
0xab,0x75,0xb9,0xe5,0xcb,0xe6,0x78,0x3e,0xdc,0x34,0x7d,0x53,0xc1,0xea,0x90,0x2d,
|
||||
0xdf,0x8,0x58,0xfd,0xdf,0x54,0xf0,0xf7,0xde,0x47,0xf6,0xf,0x29,0x66,0xe1,0xeb,
|
||||
0x2a,0x54,0xf3,0x6d,0x68,0xbe,0xb6,0xf9,0xf3,0xfe,0xbe,0xd4,0x61,0xc7,0xc2,0xf8,
|
||||
0xe7,0x86,0x2e,0xb8,0xa3,0x47,0xa9,0x2e,0xb4,0xc6,0xf,0xd9,0x6a,0x21,0xfb,0x84,
|
||||
0xdd,0xcd,0x64,0x98,0xb1,0x7d,0x43,0x45,0x3d,0x91,0x8f,0xe8,0x25,0xcd,0x37,0x36,
|
||||
0x7d,0x3,0xc1,0xf4,0x8d,0xcd,0x66,0xb9,0xc4,0xf7,0x8d,0xad,0x56,0x9b,0x5a,0x91,
|
||||
0x61,0x7d,0xd6,0x5,0xd2,0xd6,0x23,0x46,0x39,0xb2,0xf,0xd3,0x5f,0xd2,0xc1,0xca,
|
||||
0xec,0x8f,0xc3,0xd7,0x5e,0x89,0xf4,0xb9,0x94,0x85,0xaf,0x8b,0x8a,0xff,0x23,0x62,
|
||||
0xfb,0xbd,0xa3,0x1f,0xc9,0x66,0x82,0xf6,0x1b,0x8,0x89,0x7d,0x2d,0x48,0xef,0xa9,
|
||||
0x5d,0xa9,0x7e,0xfe,0xb1,0x6f,0xf3,0xf7,0x65,0xee,0xf9,0xe7,0xf3,0x45,0x3e,0xff,
|
||||
0x9c,0x23,0x9a,0xfe,0xbb,0x24,0xba,0xf,0x10,0x99,0x5d,0xbf,0xff,0x99,0x5d,0xbf,
|
||||
0x45,0xff,0xf5,0xab,0xfa,0xfa,0x46,0x4,0x3,0xd6,0xf,0x9e,0x71,0xfd,0xda,0x83,
|
||||
0x90,0x8,0x12,0xfb,0xd6,0x1e,0x4c,0xbf,0xa2,0xf6,0x7f,0xda,0xad,0xe0,0xcd,0x6b,
|
||||
0x2,0xac,0xe3,0xbd,0x3d,0x3c,0xdc,0x33,0x7d,0xac,0xec,0xb,0x1d,0xbe,0xb5,0xb2,
|
||||
0xe5,0x73,0x54,0x85,0xad,0x6,0xb2,0x93,0x23,0xb1,0x7b,0x74,0xb1,0x6f,0xfd,0x97,
|
||||
0x94,0x4c,0x5f,0x31,0xfa,0xf8,0x36,0x55,0x87,0x5b,0x4d,0xf0,0xcc,0x9a,0xd0,0x79,
|
||||
0xfe,0xb4,0xd5,0x3a,0x1d,0x8e,0xb9,0x3e,0xdf,0x81,0xb,0xf7,0x39,0x5a,0xd7,0xf6,
|
||||
0x11,0x68,0xfa,0x4,0xed,0xa4,0xbd,0xb4,0xdb,0x7e,0xa5,0x3c,0x7b,0xfc,0xbd,0x59,
|
||||
0xd2,0x5,0x7f,0x48,0x84,0x47,0x2f,0x1d,0xb7,0x5a,0xc7,0xc3,0x69,0x31,0x3,0x9f,
|
||||
0x63,0x7c,0x73,0xf8,0xcc,0xe3,0x7b,0x53,0xeb,0xa,0xb0,0xb0,0x3,0x94,0x68,0xf9,
|
||||
0x45,0x13,0x14,0x88,0x0,0x5f,0xea,0xb6,0x5a,0x5d,0x2b,0x1f,0xa4,0xf2,0x1d,0x72,
|
||||
0x7d,0xdb,0xfb,0xac,0x49,0xa2,0xfb,0xda,0x86,0x40,0xcd,0x57,0xf0,0x35,0xdd,0xc7,
|
||||
0x4e,0xed,0x54,0x3e,0x47,0xbe,0x5a,0xbf,0x66,0xf9,0x2a,0xa6,0xf,0xea,0x3e,0x31,
|
||||
0x92,0xcf,0x14,0xa8,0x3f,0x3,0xbe,0xd6,0x6c,0xb5,0x9a,0x94,0x4d,0xf5,0xa6,0xf2,
|
||||
0xb9,0x4e,0x21,0xdf,0xf9,0xa7,0xfb,0x2e,0xed,0xb7,0xeb,0xd1,0x7d,0xda,0x3f,0xde,
|
||||
0xa8,0xb5,0x5a,0x35,0xfb,0xdb,0xce,0xd5,0x37,0x2d,0x8,0x72,0x9c,0xf6,0xd3,0x7d,
|
||||
0x97,0x5a,0xad,0x4b,0x72,0x29,0xe3,0xf6,0x73,0x1c,0x5f,0xe8,0x38,0xbe,0x40,0x20,
|
||||
0x71,0x7d,0xf7,0x70,0xab,0x85,0x31,0xec,0x64,0xdc,0x7e,0x3b,0xbe,0xfe,0x4f,0xbb,
|
||||
0x3e,0x60,0xc4,0xeb,0xc3,0xe1,0xd3,0xfb,0x67,0x8c,0x1e,0x65,0xeb,0x23,0x6b,0x76,
|
||||
0x5f,0xb8,0xdf,0x2e,0xd3,0x75,0x7d,0xfc,0x50,0x50,0x6c,0x9f,0xf1,0xc1,0xa8,0x92,
|
||||
0xad,0xef,0x8c,0x38,0x7c,0xeb,0x45,0xba,0x72,0x53,0xf7,0x61,0xb5,0x7f,0xae,0xe7,
|
||||
0xc1,0x37,0x24,0xce,0xdc,0x55,0x24,0xee,0xdc,0x16,0xdf,0x37,0xc9,0xf8,0xfa,0x0,
|
||||
0xdc,0xf6,0x8b,0x53,0x3f,0x70,0xfb,0x9e,0x4,0xf8,0x64,0xf4,0xeb,0x72,0xba,0xeb,
|
||||
0x37,0x76,0x7e,0xe1,0xfa,0x7e,0x5f,0xe0,0xfb,0xd0,0xf7,0xbb,0x20,0x5d,0xff,0x97,
|
||||
0x8d,0xf,0x6,0xb4,0x1f,0x7c,0xbf,0xb,0x53,0xfa,0x80,0xdd,0xbf,0x24,0xf6,0x5,
|
||||
0xf6,0xcf,0xf0,0x49,0x32,0xdf,0xe7,0x6a,0xff,0x22,0xdc,0xbd,0x79,0x59,0xfd,0xd7,
|
||||
0x6d,0xbb,0x7f,0x26,0xc5,0x4d,0x51,0x48,0xe2,0xb,0x1c,0xdf,0xa4,0x3f,0x4a,0xe6,
|
||||
0xeb,0xa9,0xfd,0xf3,0xcd,0x6a,0x6f,0x62,0xfb,0xf4,0xf1,0x17,0xd5,0x76,0x68,0xa6,
|
||||
0x3e,0xd8,0x78,0x31,0x91,0xaf,0xa5,0xe6,0xab,0x9b,0x95,0x91,0xe6,0xbb,0xe5,0xf0,
|
||||
0x4d,0x94,0x56,0x7e,0x7c,0x2f,0x55,0x46,0xc4,0xe1,0xdb,0x56,0x7d,0x84,0x36,0xb3,
|
||||
0xf5,0xa1,0xea,0x5b,0x89,0xae,0x5f,0x51,0xf7,0x49,0x6a,0x68,0x26,0xc0,0x6e,0x3f,
|
||||
0x35,0x44,0x37,0xb2,0xf5,0x25,0xed,0xff,0x34,0xdf,0xab,0x15,0xf8,0x91,0x76,0x4d,
|
||||
0xd8,0x3e,0xfa,0x11,0xfd,0xab,0x6c,0x7d,0x49,0xc7,0xf,0xd3,0x37,0xb1,0xfb,0x17,
|
||||
0xed,0xfa,0xa5,0x13,0xfa,0xc3,0x7c,0xf8,0xb4,0xfb,0xf3,0x57,0x8d,0xeb,0xc3,0xd1,
|
||||
0xff,0x65,0x7f,0x7d,0x24,0xf5,0x69,0x85,0x89,0xaa,0xd1,0xbf,0xb8,0xf2,0x55,0x84,
|
||||
0xfe,0x45,0xae,0x45,0xf4,0x71,0xe6,0xb7,0xa2,0x8f,0x1f,0xea,0xa7,0x6a,0xf4,0xcf,
|
||||
0x8e,0x7c,0x10,0xa9,0x7f,0x46,0x8d,0x85,0xf8,0x12,0xe7,0x2b,0x33,0x2a,0x43,0x3a,
|
||||
0xbe,0x59,0x9a,0x6b,0xfb,0x25,0xcc,0x57,0x68,0xdb,0x14,0xa0,0x1e,0xc,0xf5,0xe9,
|
||||
0x1f,0x85,0xfb,0x65,0xb7,0xef,0x50,0x19,0x87,0xfa,0xe2,0xe5,0x17,0x73,0xb2,0x53,
|
||||
0xf5,0x8d,0x78,0xbe,0x43,0xdd,0x0,0x49,0x49,0x6f,0xb3,0x93,0x91,0xf7,0xcb,0xac,
|
||||
0x88,0x21,0xca,0x77,0x4b,0xa6,0xaf,0x7f,0x16,0xba,0x92,0x36,0xb1,0xf,0xf2,0x7c,
|
||||
0xfd,0xa9,0xfe,0x55,0xc5,0xf8,0x91,0xd2,0x6b,0xde,0x2f,0xb3,0x5,0x45,0x22,0x32,
|
||||
0x6b,0x68,0x88,0x8a,0x6f,0x84,0xf9,0xd8,0xfd,0x9b,0x18,0xdf,0xc7,0x3b,0xff,0x44,
|
||||
0x7d,0xe1,0x3,0xc4,0x13,0xe3,0x4f,0xfd,0xc4,0xfb,0xe5,0xa,0x6b,0x3f,0x68,0xd6,
|
||||
0x20,0x55,0x9f,0x12,0xb2,0x5a,0xd4,0xba,0x3f,0x57,0x1b,0x50,0x51,0x3e,0xbc,0x59,
|
||||
0x9c,0xe5,0x1b,0xaf,0x86,0xb6,0x9f,0x38,0x31,0x7c,0x46,0xc5,0x8,0x7e,0xec,0xfd,
|
||||
0x32,0xb4,0x7c,0x34,0x92,0x8f,0xb2,0xfb,0x73,0xf5,0x4f,0x4f,0xcf,0x1a,0x3d,0x14,
|
||||
0xb9,0x7f,0x9e,0xe1,0xd3,0xbf,0x11,0xf2,0x9e,0x7f,0xe2,0x67,0xb6,0x4f,0xb0,0x7c,
|
||||
0xbc,0xd5,0xac,0xc8,0xed,0x2b,0x1b,0xbe,0x2e,0x9e,0xe5,0x3b,0xa5,0xa1,0xd7,0x87,
|
||||
0x28,0x19,0x3e,0xf3,0xfb,0x7b,0xaf,0x5f,0x71,0x28,0x78,0x7d,0x50,0x54,0x94,0xa0,
|
||||
0xcb,0xc2,0x31,0xbe,0xa9,0x3e,0xe5,0x8d,0x6,0x9e,0xe9,0x33,0xab,0x9c,0x41,0xfd,
|
||||
0x8b,0xd8,0xf,0xf7,0x41,0x8e,0xaf,0xce,0xfb,0xa1,0x9b,0x3c,0xdf,0x87,0xb3,0x7d,
|
||||
0x66,0xa9,0x2f,0xa8,0x7f,0x16,0xbf,0x2d,0x18,0xd7,0x47,0x80,0xaf,0x62,0xf9,0xfa,
|
||||
0xe6,0x71,0xdc,0xe8,0x2b,0x9c,0x93,0xca,0x2a,0x46,0x8b,0xe,0xdf,0x4f,0xc4,0xaf,
|
||||
0xcf,0xf6,0x19,0x7,0x18,0x6e,0xf3,0xc7,0xb7,0xbe,0xd1,0xff,0x29,0x12,0xe4,0xfa,
|
||||
0xfa,0x56,0xfb,0x21,0x73,0xa8,0x47,0xf0,0x50,0x19,0xf8,0xaf,0xf,0x6b,0xa9,0x8e,
|
||||
0xe0,0xf2,0x75,0x23,0xb7,0x5f,0x80,0xcf,0xea,0x9f,0x8b,0x5c,0xdf,0xe1,0xd8,0xea,
|
||||
0x9f,0xd7,0x98,0x8f,0xfb,0x3,0xd9,0x9f,0xb3,0xf2,0xa9,0xee,0x8b,0x70,0x7d,0x98,
|
||||
0xff,0x61,0x41,0xbe,0x4,0xe3,0x1b,0xf7,0xb3,0xc7,0xab,0x5f,0xf5,0x22,0xf4,0x2f,
|
||||
0xc6,0x1f,0x18,0xf0,0x63,0x44,0x7c,0xdf,0x20,0x60,0x71,0x51,0x91,0x57,0xbf,0xea,
|
||||
0x45,0xe8,0x9f,0x8d,0xf6,0x6b,0x67,0xe5,0x6b,0xaf,0xac,0x66,0x9b,0xaf,0x8c,0xf3,
|
||||
0xaf,0xb3,0x4f,0xb3,0xf1,0x75,0x58,0x87,0x1a,0xa1,0xfd,0xa2,0xd5,0x37,0xf4,0xef,
|
||||
0xd7,0xd9,0x98,0xb3,0x6f,0x3f,0x71,0x7d,0x68,0xcb,0xf4,0xc9,0xcf,0xe1,0xfd,0x4b,
|
||||
0x68,0xf7,0x50,0x99,0x8b,0xef,0x30,0xa9,0xcf,0x18,0x3f,0x3a,0xdf,0xa4,0xe8,0x37,
|
||||
0xa7,0x4d,0x38,0x4,0x7d,0xc7,0x12,0xe2,0x81,0x7a,0xae,0x68,0xdf,0x4c,0x3d,0x4b,
|
||||
0x78,0x3e,0xf3,0xcb,0xda,0x49,0xbc,0xc2,0x4e,0xbb,0xa0,0xf3,0x4f,0x4e,0xea,0x33,
|
||||
0xff,0x73,0xff,0xa5,0xe6,0x13,0xe0,0x81,0x28,0xbe,0x39,0x17,0x9f,0xbd,0x98,0x23,
|
||||
0x51,0xfd,0x8f,0xfc,0x47,0x8a,0xce,0x8f,0x5,0x88,0x36,0xc4,0x74,0xed,0x17,0x9c,
|
||||
0x4b,0x13,0xfa,0x8c,0xfe,0x85,0xfc,0x27,0x2a,0x9f,0x1f,0x7f,0x7,0xa2,0x96,0x88,
|
||||
0xc2,0xc2,0x79,0xf2,0xe7,0x6c,0x36,0x53,0xe5,0xfb,0xe9,0xe7,0x94,0x7e,0xfd,0xc5,
|
||||
0xe7,0x20,0x52,0xe6,0xe5,0x1b,0xa6,0xf3,0x49,0x2,0xed,0xbe,0x58,0xd3,0x7c,0x83,
|
||||
0xf2,0x5c,0x7c,0xe9,0xee,0x8f,0xce,0x24,0x1,0xe9,0xbe,0x96,0x58,0x11,0xd3,0x5d,
|
||||
0x1f,0x97,0xe6,0xe1,0x3b,0x81,0x65,0xd4,0x6d,0xaa,0xbe,0x66,0xdf,0xf1,0x24,0x47,
|
||||
0x7e,0x7c,0xa7,0xb0,0x2c,0x3f,0xd7,0xdc,0x84,0x68,0xef,0x30,0x67,0x3e,0xe3,0xfe,
|
||||
0xed,0x8,0x66,0x96,0xf,0x32,0xf6,0xd1,0x6c,0xf3,0xd5,0x6c,0x5f,0xcc,0xf5,0x43,
|
||||
0xec,0x2f,0xcd,0xd5,0x7,0x3e,0xb5,0xd7,0xbb,0x24,0xf2,0xc1,0xd9,0xf5,0xb5,0x54,
|
||||
0xbe,0xae,0xbd,0x62,0x3e,0x91,0x8f,0x66,0xe5,0xa3,0xa7,0x87,0x87,0xb4,0xed,0xed,
|
||||
0xe2,0x61,0x63,0x84,0x63,0x75,0x92,0x91,0x7d,0x68,0x4f,0x5b,0x91,0x6,0xa7,0x65,
|
||||
0xa4,0xaf,0x56,0xf3,0xfa,0xf6,0xf6,0xcc,0x5,0x6b,0xe2,0x98,0x2,0xdd,0x75,0xda,
|
||||
0xef,0xfb,0x1f,0xa4,0x87,0x8d,0x98,0x1d,0x7b,0x64,0xdf,0xb0,0xa5,0x2f,0x3b,0xc1,
|
||||
0x60,0xa8,0xdf,0xa9,0x78,0x7d,0xad,0x96,0xd9,0x72,0xea,0x8d,0xfa,0xb6,0xee,0x3a,
|
||||
0xea,0xf7,0xfb,0x3e,0x1f,0xaa,0xce,0xcb,0x77,0xd0,0x6a,0x19,0xbe,0x83,0xbf,0xac,
|
||||
0x72,0x7d,0x2d,0xcb,0xf7,0xf2,0x9f,0x69,0xae,0xd3,0x59,0x3e,0x54,0x58,0xa5,0x47,
|
||||
0xf,0xba,0x30,0xa3,0xe3,0xcb,0x7c,0xe8,0xcf,0x1b,0x1c,0x9f,0xa2,0xd8,0xbe,0xfe,
|
||||
0xbf,0x63,0xbe,0xb6,0xf7,0xfb,0x9c,0x23,0xfb,0x2f,0x4e,0x70,0x9d,0xf6,0x76,0x7e,
|
||||
0x93,0x9d,0xef,0x81,0xe1,0x6b,0xbe,0x5b,0xe6,0xfa,0x1e,0x58,0x3e,0xa9,0x1d,0xd4,
|
||||
0x7e,0xe7,0xc8,0xbe,0x3e,0x34,0x9f,0xb8,0xf3,0xdb,0xcc,0xdb,0xaf,0xc9,0x6b,0x3f,
|
||||
0x8c,0x1d,0xed,0x27,0x5,0x1e,0x5f,0x5,0xdb,0xfd,0xcb,0x84,0x2e,0xd0,0x87,0x50,
|
||||
0x34,0xdf,0xd4,0xee,0x9f,0x51,0xa9,0x4e,0xff,0x62,0xa7,0x5b,0x59,0x88,0xf,0x42,
|
||||
0x8e,0xef,0x53,0x10,0xf6,0xa3,0xd1,0xd1,0x2a,0xfd,0xe1,0x83,0xec,0x7c,0x3f,0xd,
|
||||
0xf3,0x1,0xf0,0x53,0xaf,0xef,0xf0,0xf0,0xef,0xc2,0x7d,0x58,0xa0,0x2d,0xb1,0xfb,
|
||||
0x28,0xab,0xfe,0xf9,0xe7,0x9a,0x6f,0xfa,0x3c,0xdf,0xf7,0xe0,0xc1,0xcf,0x4d,0xdf,
|
||||
0x18,0x19,0xbe,0x99,0xf3,0x33,0x93,0x4c,0x7d,0x59,0xd5,0xaf,0x7c,0xbe,0x4e,0x5e,
|
||||
0x7d,0xa8,0x20,0xd0,0x3d,0x31,0xab,0xfe,0x39,0x7b,0x5f,0xb6,0xe3,0xdb,0x3f,0x4a,
|
||||
0xdf,0xca,0x45,0xfb,0x5d,0xf8,0xbe,0x38,0xbe,0x76,0xce,0x7d,0xda,0xe3,0x83,0x39,
|
||||
0xf6,0x11,0xad,0x4a,0x91,0x57,0xdf,0xda,0x1e,0x7d,0xac,0xad,0x2d,0xc8,0xab,0x4f,
|
||||
0xbd,0x1,0xbb,0xa1,0x4d,0xd9,0xe5,0xd7,0x47,0x1e,0x6b,0x25,0x1b,0xfe,0xfc,0x8c,
|
||||
0xf3,0xf9,0x23,0xa3,0x50,0xc5,0xfd,0x32,0x75,0x94,0x97,0x33,0xf6,0x75,0x15,0xfa,
|
||||
0xa1,0xf6,0x4c,0x13,0x7f,0x7e,0xc6,0xf9,0xfc,0x96,0x51,0xed,0x12,0x78,0x5f,0x76,
|
||||
0x3e,0xbf,0x95,0xb1,0x6f,0xa8,0xd0,0x9f,0x6a,0x3e,0x7e,0xd5,0xc9,0xf9,0xfc,0x9b,
|
||||
0x51,0xe7,0x2a,0xf3,0xbe,0xec,0x7c,0xfe,0x2d,0x6b,0x1f,0x56,0x7d,0xe3,0x95,0xec,
|
||||
0x3e,0x85,0x8c,0x8f,0x2f,0x2a,0xfe,0x54,0x9b,0xa3,0xc9,0xac,0xfd,0x68,0xc6,0xd7,
|
||||
0x7,0x34,0x8e,0x6f,0x66,0xe7,0x5f,0xd6,0x3e,0x40,0x1f,0x6b,0x73,0x13,0x99,0x5d,
|
||||
0xbf,0x19,0xfb,0xd6,0x1e,0xd0,0xc7,0x31,0x1e,0xd4,0x5d,0xd4,0x3e,0x6d,0xce,0xf1,
|
||||
0x6d,0x5a,0xde,0xcc,0xb5,0x8f,0xc4,0xd8,0x58,0x77,0x19,0x3e,0xb6,0xfd,0x41,0x6e,
|
||||
0x7d,0x6d,0x9a,0x6f,0x1f,0xbd,0xf0,0x5d,0xf8,0x2e,0x7c,0x17,0xbe,0xb,0xdf,0x85,
|
||||
0xef,0xc2,0x77,0xe1,0xcb,0x81,0x6f,0xaa,0xdf,0xec,0xad,0xe6,0xdd,0x27,0x5f,0xdd,
|
||||
0xc1,0x74,0x33,0xbf,0x3e,0x3c,0x7a,0x78,0x4a,0x6b,0x79,0xf4,0xe9,0xb7,0x7e,0x47,
|
||||
0x78,0xf4,0xce,0x71,0x2b,0xdf,0x3e,0xdc,0xcd,0xa9,0x6f,0x5f,0xf7,0x7d,0x80,0xbb,
|
||||
0xdf,0xcf,0x91,0x4f,0x2e,0x15,0x91,0xe9,0x6b,0xaa,0x3e,0xf9,0xea,0x7,0x78,0xf8,
|
||||
0x5f,0x32,0xf3,0xd,0x56,0x56,0x84,0x74,0x3e,0x2c,0xa1,0xa1,0xc3,0x87,0x95,0x9f,
|
||||
0xe1,0x21,0xce,0xcc,0xd7,0x9e,0xb9,0x30,0x69,0xa6,0x6f,0x84,0xf,0x3c,0xbe,0x6e,
|
||||
0x76,0xbe,0xf4,0x1f,0x3c,0x32,0x9e,0x49,0x56,0x7d,0xef,0xe9,0xbe,0xc7,0xb8,0x5b,
|
||||
0xcd,0xa7,0xef,0x6f,0xe4,0xb2,0xea,0xdb,0xc1,0xad,0xad,0x1c,0xf9,0xe4,0xab,0xb4,
|
||||
0x6a,0xfa,0x30,0x2,0x47,0x59,0x8f,0x6f,0xe9,0xdb,0x4f,0x21,0xd6,0xf5,0xb,0x61,
|
||||
0xd6,0xbe,0x5d,0xf8,0x6e,0xda,0xeb,0x43,0x39,0x5f,0x65,0xfd,0x1f,0x40,0x59,0xfb,
|
||||
0x76,0x86,0xd,0x90,0x2,0x77,0xa2,0xfa,0x8,0x62,0xed,0x47,0x45,0x9c,0xb5,0x4f,
|
||||
0x78,0xb5,0x91,0xe6,0x25,0x3e,0x3,0xd5,0x47,0x8b,0xf3,0xf4,0x1d,0xa7,0xf3,0xb9,
|
||||
0x4b,0xfd,0xe5,0xec,0x7d,0xa3,0xb4,0xed,0xe7,0xcc,0x7,0xd9,0xb7,0xdf,0xdd,0xd7,
|
||||
0xf2,0xed,0x13,0x6e,0xdb,0x3e,0x61,0x75,0x6d,0x90,0xce,0x97,0xfd,0xf5,0xeb,0xf0,
|
||||
0x11,0x1,0xd7,0x81,0x90,0xc6,0xb7,0x9f,0x7d,0xff,0xb7,0x3,0xaf,0xb3,0xfe,0x45,
|
||||
0x11,0x50,0x4d,0xfc,0x9f,0x5b,0x71,0x7d,0x6a,0xbe,0xda,0x60,0xfd,0x73,0xf6,0xe3,
|
||||
0x87,0xa3,0x7f,0xc6,0x2,0xaa,0x8a,0xef,0x5d,0x8f,0xdd,0xbf,0x48,0xe6,0x3,0x27,
|
||||
0xaa,0x4f,0x1d,0x7f,0xe7,0x37,0xbe,0x61,0x1,0x56,0xc4,0x46,0x35,0xb6,0x6f,0x84,
|
||||
0x5,0x47,0xbe,0x9a,0x9f,0xf,0x9,0xf0,0x8f,0x13,0xf9,0x68,0xc1,0x91,0xef,0xe7,
|
||||
0xe7,0x83,0x2,0x7c,0x2e,0x99,0xaf,0xb6,0x90,0xe3,0x3b,0x28,0x83,0x5a,0x2,0x9f,
|
||||
0x9a,0xaf,0xf0,0xfc,0xae,0xf,0x57,0x5f,0x3,0xea,0xa0,0x1a,0xbf,0xfd,0x14,0xdb,
|
||||
0x97,0x7d,0xff,0xe2,0xfc,0xd4,0xc0,0xda,0x0,0x25,0xf0,0xe1,0xda,0xfc,0xf2,0x55,
|
||||
0xda,0x73,0x42,0xcf,0x57,0xd5,0xf9,0x8d,0x6f,0x19,0xf8,0x68,0x71,0x73,0xde,0xbe,
|
||||
0x69,0x6e,0xf3,0x95,0xf1,0x31,0x9f,0xc5,0x5f,0x99,0xfd,0x50,0xa8,0xbf,0xfd,0xd8,
|
||||
0xce,0xb4,0xf3,0x6c,0x3f,0xe3,0x59,0x7c,0x12,0xb8,0x3,0x75,0xe8,0xf1,0x45,0xf3,
|
||||
0xf7,0x6d,0x9a,0x1,0x86,0xd2,0xb3,0xd8,0x3e,0x84,0x3b,0x73,0xcc,0x57,0x6,0xac,
|
||||
0x94,0x8d,0x6f,0x63,0x4e,0xfd,0x9f,0xb9,0xaa,0x24,0xb5,0xf,0xcd,0x69,0xfc,0x18,
|
||||
0xd3,0x8c,0x7c,0x73,0x1a,0x7f,0xd9,0x6a,0x2d,0x41,0x7f,0x2e,0x74,0xc5,0x7a,0x48,
|
||||
0x34,0xae,0xf,0xce,0x29,0xbf,0xf8,0xda,0xcf,0x88,0xfc,0x8f,0x67,0x6c,0x79,0x64,
|
||||
0xf8,0xc6,0xab,0x73,0xf7,0xf9,0xce,0x3f,0xc3,0xd7,0x4,0xe5,0x8,0x3e,0x4a,0x6d,
|
||||
0xdf,0x9c,0x8e,0xaf,0xf9,0x6c,0xac,0xd7,0xd7,0x90,0xc4,0x78,0x3e,0x30,0xaf,0x7c,
|
||||
0x55,0xf4,0xf4,0xcf,0xa6,0x8f,0xc6,0x3c,0xbe,0x60,0x5e,0xf9,0x6a,0x3f,0x85,0x8f,
|
||||
0xa2,0x8e,0x7e,0x8,0x34,0xdf,0xbc,0xf2,0x95,0xf7,0xbb,0xc6,0xf2,0x75,0x34,0xdf,
|
||||
0xb4,0x34,0xcf,0xf1,0x6d,0x9c,0xc6,0xa7,0xbf,0x3a,0x41,0x2e,0x2e,0x32,0x5f,0x99,
|
||||
0x3e,0x18,0xc5,0x37,0x75,0xbc,0xfc,0xa2,0x3c,0xef,0x7c,0x2a,0x1b,0xef,0x1,0x64,
|
||||
0xfd,0x4b,0x14,0x1f,0xa6,0xf3,0x6f,0x3f,0xfb,0x1e,0xdd,0xd8,0x15,0x2b,0x7e,0xff,
|
||||
0x3c,0xdf,0xf3,0x8f,0xef,0x8b,0x5a,0x1f,0xb2,0xae,0x5f,0x3a,0xf7,0xfb,0x23,0x8c,
|
||||
0x12,0xfa,0xa8,0x30,0x9f,0xfa,0x55,0x7a,0x9f,0xb2,0x65,0xf9,0x9a,0x73,0x9f,0xff,
|
||||
0x90,0x8b,0xd0,0xf6,0xf1,0x97,0x93,0x17,0xbd,0xd7,0x47,0xc3,0xf2,0x89,0x73,0x19,
|
||||
0x7f,0x15,0x65,0xcf,0xea,0xff,0xb0,0xb1,0xa7,0x23,0x64,0xc3,0xc9,0xac,0xe5,0xee,
|
||||
0x5a,0xbe,0x6a,0x5a,0xbe,0x1f,0xcf,0x25,0xbf,0x28,0x4a,0xcb,0xda,0x5e,0x12,0x1b,
|
||||
0x5d,0xa,0x64,0x71,0x81,0xf3,0x19,0x6,0xfb,0xde,0xe2,0xf9,0x48,0x9b,0xa4,0xf3,
|
||||
0x11,0xbc,0x66,0x75,0x74,0xd8,0x90,0xc6,0xf2,0x61,0xfb,0xfc,0xe3,0x1d,0x5f,0x2,
|
||||
0xee,0x27,0xf0,0x4d,0xbf,0x2a,0xd8,0x3e,0x1,0xd8,0xfd,0x4b,0x21,0x8d,0x8f,0x77,
|
||||
0x7d,0x10,0xf0,0x66,0x3a,0x1f,0xad,0xda,0x3e,0x7b,0x7c,0x23,0xc1,0xbe,0x93,0xa3,
|
||||
0x20,0x1f,0xaf,0x7f,0x21,0xe0,0x4e,0x86,0x3e,0xb2,0xba,0x3e,0x18,0x7c,0xab,0xa8,
|
||||
0xd,0xab,0x81,0x3e,0xa9,0xc7,0xb9,0x3f,0x17,0x82,0xea,0x57,0xe9,0x7d,0x8f,0x9c,
|
||||
0x3e,0x45,0x4,0x15,0x2,0x43,0x7d,0xa4,0xc7,0xa9,0x6f,0x8,0x41,0xe3,0x1b,0x69,
|
||||
0x4b,0x69,0x7d,0xf6,0xf5,0x61,0xfb,0xce,0xa3,0xfa,0xcc,0x4f,0xb0,0xf,0xf4,0x53,
|
||||
0xfa,0x80,0xdd,0xbf,0xe8,0x3e,0x38,0xc3,0x77,0xc6,0xf3,0x5,0xe6,0x2b,0x9,0xe8,
|
||||
0x9b,0xb3,0xa4,0xf1,0xd9,0xfd,0xb3,0xea,0x5b,0x3f,0x1a,0x68,0x5b,0x89,0x4f,0xe8,
|
||||
0x53,0xb1,0xda,0x2f,0xb0,0x3e,0x24,0x1,0x92,0xb2,0xfd,0x5c,0x47,0x63,0x55,0x9c,
|
||||
0xea,0xc7,0x77,0xbc,0x76,0x9e,0x8d,0xef,0x24,0x5b,0x9f,0x9a,0x99,0x75,0x1f,0x51,
|
||||
0xa6,0x2,0x29,0xac,0x6e,0x7e,0xc9,0xac,0x8,0xa2,0xbb,0xe5,0x6b,0x5f,0xde,0x85,
|
||||
0x5,0xdf,0xf5,0xeb,0xf4,0x65,0x97,0xaf,0x2,0x7d,0x48,0xbb,0x3e,0xf6,0xb5,0x5e,
|
||||
0x9b,0x8,0x6a,0xcf,0x5d,0x63,0xd7,0xb6,0xd4,0xec,0xc3,0x5e,0xff,0x0,0xfa,0xfa,
|
||||
0x3f,0x87,0x6f,0x2f,0xbb,0x7c,0x15,0xe8,0xc3,0x9a,0x4f,0x9b,0xf0,0x43,0x5e,0xdf,
|
||||
0x8,0x99,0x3e,0x6f,0xfe,0xa3,0x73,0xb8,0x3f,0xf,0xf4,0x29,0x6a,0xff,0x7c,0xf3,
|
||||
0x92,0xe5,0x13,0x98,0xaf,0xdf,0x1c,0xd1,0x9d,0xfe,0x1,0xf0,0xfb,0x88,0xe5,0xe3,
|
||||
0xe6,0x2b,0x73,0x77,0xa7,0x88,0x3e,0x2b,0x34,0x7d,0x95,0x13,0x9d,0x4,0xb6,0xa,
|
||||
0x52,0xcf,0x51,0x44,0x3f,0xff,0x56,0x4d,0x5f,0xaf,0xab,0xfa,0x76,0x9b,0x40,0x2f,
|
||||
0x89,0x97,0x9c,0xbe,0xa9,0xe5,0xdb,0xe4,0xe5,0x97,0x98,0xbe,0xb0,0xf6,0xb3,0x7e,
|
||||
0x8b,0xb5,0x1f,0x14,0xac,0xec,0xf0,0xe9,0xd7,0x55,0x1f,0xd8,0xe0,0xb4,0xdf,0xd8,
|
||||
0xf2,0x35,0x17,0xe5,0x63,0xe7,0x1f,0xb2,0xcf,0x3f,0xb5,0xfd,0xd0,0x1a,0x68,0x8a,
|
||||
0x7e,0xdf,0x91,0xe5,0xc3,0xbc,0xe3,0x6b,0xee,0xce,0x96,0xa9,0x4f,0xfb,0x9e,0xd8,
|
||||
0xed,0xeb,0x1e,0xf7,0xe1,0x1a,0xa8,0x73,0x7c,0xfb,0xb6,0x8f,0x77,0x7d,0xcc,0xc3,
|
||||
0xa7,0xc7,0x6a,0xb5,0xff,0xc3,0xf6,0xf9,0x77,0xfc,0x59,0xb9,0x54,0x37,0x7c,0x27,
|
||||
0xc8,0xe5,0xb3,0xe7,0x3f,0xb8,0xf9,0x6a,0x5f,0xfb,0x99,0x73,0xf0,0x11,0xf7,0xf8,
|
||||
0xa1,0x45,0x56,0xc5,0xcc,0x57,0x5a,0x13,0xb6,0xb1,0x6c,0xf8,0x8c,0xe2,0xa1,0x7e,
|
||||
0xff,0xeb,0xca,0x57,0x1b,0x87,0x10,0x18,0xbe,0xe9,0x5c,0x7c,0x9e,0xf1,0x57,0x6b,
|
||||
0x33,0x6c,0x8e,0x6f,0xda,0x7a,0x49,0xf0,0x86,0xb6,0xed,0xe6,0x80,0x15,0x5f,0xfd,
|
||||
0xf5,0x83,0x7a,0xdf,0x28,0xdf,0xec,0xab,0x51,0x63,0x2e,0xbe,0xe0,0x7c,0x85,0x74,
|
||||
0x1f,0x34,0xeb,0x1b,0xe6,0x8d,0xa9,0xcf,0x67,0xee,0x14,0x3e,0xaf,0xe3,0x1b,0x92,
|
||||
0xaf,0xdc,0xbe,0x80,0xf9,0x41,0xc1,0xd8,0x28,0x3e,0x91,0x4f,0x11,0xd2,0xb7,0xdf,
|
||||
0xed,0xcf,0xc2,0xdb,0x6f,0x4b,0x1c,0x59,0xbe,0x8d,0xc5,0xfb,0xda,0xd2,0x30,0xfc,
|
||||
0xfc,0x3b,0x11,0xff,0x9f,0xe5,0xab,0xc7,0xf4,0x91,0x95,0xd8,0x3e,0x35,0x5f,0x95,
|
||||
0xbe,0xbe,0xb,0xb7,0xb4,0xeb,0x57,0x6f,0xbf,0x76,0xc5,0xf0,0x19,0x93,0x77,0xfe,
|
||||
0xfa,0x95,0x62,0xee,0xf4,0xaf,0xfa,0xd4,0x4f,0xcc,0xf3,0x4f,0x6d,0xbf,0xd7,0x57,
|
||||
0x63,0xf9,0xd4,0x7c,0x25,0x8d,0xfa,0x7,0x55,0xd6,0xff,0x1,0x60,0xfa,0xcc,0xc9,
|
||||
0x4f,0xed,0xfe,0x3,0x39,0xfb,0x3f,0xfd,0xfa,0x38,0xd2,0x7d,0xa,0x5d,0x8b,0x7b,
|
||||
0x7d,0x98,0x9d,0x85,0xfe,0x29,0xa0,0x48,0xbe,0xd1,0x44,0xe9,0x1f,0x8,0x6c,0xfc,
|
||||
0x0,0xe2,0x23,0xc1,0x39,0xbe,0x69,0xbe,0xa1,0x73,0xfc,0xd0,0xfb,0x97,0x5d,0x7d,
|
||||
0xfc,0xc0,0x74,0x27,0xa6,0xef,0x81,0x63,0xe1,0x3d,0xc1,0xc3,0x8,0x3e,0x35,0x5f,
|
||||
0x91,0x87,0xfd,0x83,0xef,0xda,0xbe,0x77,0x5d,0xf9,0x40,0xf7,0x39,0xc7,0x5f,0xbd,
|
||||
0x7f,0x5e,0x4f,0xe8,0x5b,0x73,0xd5,0x87,0xe,0x22,0xf8,0xd4,0x7c,0x40,0x6e,0xef,
|
||||
0x36,0xaf,0x7b,0x96,0x1c,0x68,0x97,0x6,0x42,0xc5,0x3d,0xdd,0x77,0xe0,0xc8,0x2f,
|
||||
0xce,0xea,0xd7,0x6a,0x4a,0x5f,0x94,0xe3,0xab,0xe6,0x2b,0x22,0x81,0x8d,0x2a,0x27,
|
||||
0x3f,0xa3,0x9,0x6a,0xf9,0x7c,0xc6,0x27,0x9b,0xf6,0x43,0xd1,0xda,0x6f,0x22,0x81,
|
||||
0x26,0xcf,0x87,0x47,0x78,0x4d,0xf7,0x35,0x7c,0xf9,0x2a,0xe9,0xf9,0xd7,0xd2,0xde,
|
||||
0xf5,0x19,0xcb,0xa7,0xe6,0x2b,0x49,0x2,0x75,0xbe,0x4f,0xfd,0x9b,0x9a,0x6f,0xc3,
|
||||
0x97,0xaf,0xf4,0xeb,0x97,0xc6,0xbf,0x7e,0xd5,0x84,0xce,0xd6,0x5d,0x44,0xf4,0x69,
|
||||
0xf9,0xea,0x2a,0xa8,0x6f,0x71,0xee,0xdf,0x94,0x9e,0xe9,0x43,0xbe,0x7c,0x85,0x74,
|
||||
0x5f,0xfc,0xfe,0x4f,0xfb,0xab,0xac,0x83,0x51,0x8e,0xa3,0xf8,0x9c,0xf9,0xaa,0xa7,
|
||||
0xe7,0xab,0xb1,0xe0,0xf3,0xf9,0xee,0x7f,0xd,0x5f,0xec,0xf1,0xc3,0xe5,0x23,0xa7,
|
||||
0x51,0x7c,0xce,0x7c,0xa5,0x18,0xf9,0x8a,0xb5,0x1f,0x69,0x99,0x3e,0x7f,0xfd,0xc0,
|
||||
0xf4,0xc5,0x1d,0x7f,0xc9,0x1f,0x3a,0x7c,0xf4,0x9f,0x45,0xf1,0x39,0xc7,0x5f,0xc5,
|
||||
0x99,0x5f,0x34,0x9f,0x79,0x7d,0x4,0xfa,0x62,0xe7,0x97,0xbe,0xd3,0x17,0x3b,0x5f,
|
||||
0x61,0xdd,0x37,0xb0,0xee,0xcf,0xd7,0xd4,0xfe,0x85,0x5f,0xbf,0x4a,0xe1,0xc3,0x28,
|
||||
0x71,0x7e,0xd1,0x7d,0xb7,0x21,0x3b,0xff,0xa8,0xa0,0xf6,0xcf,0x34,0xeb,0xf6,0x9b,
|
||||
0x16,0x53,0xe6,0x2b,0x2a,0xcc,0xae,0x5f,0xa5,0xf0,0xd1,0xf8,0xf9,0xea,0xcb,0xbb,
|
||||
0x70,0x53,0xbb,0x7e,0xa1,0x9e,0xaf,0x4,0x61,0x76,0xfd,0x2a,0xa1,0x4f,0xbb,0x3e,
|
||||
0x62,0xfa,0xb4,0xfa,0x55,0xbd,0x7f,0xa0,0xdf,0x5f,0xee,0xba,0xf2,0x95,0xed,0xdb,
|
||||
0xf,0xe8,0xff,0x12,0xdc,0x7f,0x24,0xf0,0x79,0xf3,0xd5,0x3b,0xd4,0x5c,0xdf,0xbe,
|
||||
0x56,0x64,0xf7,0xbf,0xbe,0xf1,0x23,0x1b,0x9f,0x3c,0x58,0x29,0x94,0x22,0xe4,0xab,
|
||||
0x6b,0xfd,0x83,0xa2,0x2f,0x5f,0x61,0x69,0x27,0xb8,0xbe,0x81,0x92,0xd6,0x5f,0x62,
|
||||
0xfb,0xb4,0x7c,0x25,0xed,0xaa,0xf9,0xc0,0x9b,0xaf,0xb0,0xd4,0xb2,0x7c,0xbe,0xfc,
|
||||
0x12,0xc7,0x37,0x2e,0xa7,0xf1,0x69,0xf5,0x2b,0x35,0x5f,0x21,0x5f,0x3e,0xc0,0xd2,
|
||||
0xe3,0x92,0xe9,0x1b,0xa6,0xf2,0xe9,0xe5,0x6,0xc3,0x37,0x75,0xff,0x69,0xf9,0x88,
|
||||
0xee,0x47,0x68,0x3f,0xa4,0xe6,0x2b,0x8e,0x6f,0x64,0xbc,0x86,0x2c,0xe8,0xf8,0x46,
|
||||
0xae,0x9f,0x2,0x68,0x5f,0xbf,0x34,0xb6,0x2f,0x30,0x5f,0xc9,0x57,0x1,0xc,0xac,
|
||||
0x5f,0xc5,0xf3,0x95,0xed,0xfb,0x37,0x57,0xa5,0x4a,0xf3,0x5d,0x11,0xdc,0xbf,0x3b,
|
||||
0x16,0x22,0xe6,0x2b,0x6c,0xce,0xb9,0x73,0xeb,0x57,0x49,0x7d,0xae,0xcf,0x99,0xe6,
|
||||
0xfb,0xba,0xe8,0xf6,0x91,0x99,0xf9,0x8a,0x98,0x3e,0x3c,0x62,0xbe,0x7d,0x5e,0xff,
|
||||
0x3c,0x7e,0xae,0xae,0x6d,0x53,0x9f,0xc2,0xf7,0x44,0x3f,0xbe,0x33,0x7c,0xfe,0x7c,
|
||||
0x35,0x35,0x7d,0xe8,0x9,0x8,0x1b,0xdf,0x50,0xf7,0x79,0xba,0x9d,0xca,0xa7,0xf0,
|
||||
0x7c,0xca,0xcc,0x7c,0x75,0xce,0x7c,0x93,0x52,0xb8,0xef,0xa5,0xda,0xad,0x28,0xbe,
|
||||
0x76,0x31,0xd4,0x27,0x44,0xf6,0x9d,0x9d,0xea,0x3e,0xed,0x3d,0x8b,0xb3,0xd6,0xb7,
|
||||
0x1b,0xbe,0x6,0x88,0x36,0xff,0xe1,0xf0,0x9d,0xa7,0xf0,0x19,0xed,0x77,0x7b,0x42,
|
||||
0x23,0xe5,0x17,0xd4,0x7d,0x2d,0xa1,0x6f,0x8c,0x1c,0xbe,0x6b,0x9e,0xab,0x1a,0xcf,
|
||||
0xf0,0xb5,0x25,0x29,0x9a,0x6f,0xfc,0xdc,0x6b,0x1d,0x10,0xfb,0xf8,0x4e,0x2f,0xa9,
|
||||
0x97,0x64,0xd5,0xe1,0xbb,0xca,0xf1,0x29,0xe3,0xa7,0xad,0xe,0x43,0xcb,0x57,0xdd,
|
||||
0x5d,0x8,0xd9,0xf5,0xb,0xda,0x2f,0xd3,0x48,0xf9,0xa,0xe1,0x37,0xa2,0xf9,0xa8,
|
||||
0xb6,0x1c,0x97,0x6d,0x40,0xa8,0x39,0x61,0xc3,0xe1,0xfb,0x5a,0xd9,0xfd,0xa,0x19,
|
||||
0xcd,0x47,0xe0,0x9b,0xb0,0xe7,0xc8,0x57,0x3f,0xec,0x1f,0x74,0x58,0xff,0x7,0xc0,
|
||||
0xb7,0xa3,0xe5,0x2b,0xd5,0x17,0xf1,0xf8,0x6a,0x6f,0x48,0x95,0x1d,0x6,0x78,0xe0,
|
||||
0x1e,0x3f,0xa6,0x25,0xcf,0xf8,0xa1,0xf9,0x14,0x3b,0x5f,0x21,0xd3,0x67,0xe6,0x97,
|
||||
0x1d,0x96,0xaf,0x4,0x10,0x96,0xaf,0x10,0xbe,0x17,0xcd,0x37,0xd5,0xce,0x3f,0x6b,
|
||||
0x3,0xcc,0x55,0xd5,0x37,0x74,0xfb,0xe4,0xa2,0x77,0x7c,0xbb,0x65,0xfb,0xb4,0xf9,
|
||||
0xc1,0x97,0xfb,0x7,0x8f,0x7c,0x3e,0x2c,0x89,0xdb,0x61,0xe3,0x2f,0xc2,0xf5,0x5a,
|
||||
0x24,0xdf,0x29,0x75,0xbc,0x1c,0x50,0x3b,0xc7,0xd5,0xfb,0x5e,0xb3,0xca,0xa4,0xfa,
|
||||
0xb8,0xd3,0x85,0x62,0xb5,0x82,0xed,0x7c,0x40,0x5f,0xde,0x6d,0x3e,0xe2,0xe4,0x2b,
|
||||
0xf1,0x56,0x58,0xbe,0x8a,0x3c,0xbe,0x41,0x67,0xfb,0x11,0xc5,0x11,0x14,0x82,0xdb,
|
||||
0xef,0x75,0xcb,0xa7,0xd5,0xaf,0xfa,0x60,0xa3,0xc2,0xc9,0x57,0x3b,0xec,0xf8,0x22,
|
||||
0x9e,0x8f,0xb4,0xf5,0x2d,0x42,0x23,0x5e,0xbf,0xec,0xfc,0xe3,0xf9,0x38,0xe7,0x5f,
|
||||
0xb5,0x82,0x1c,0xf5,0xab,0xcb,0xa0,0x59,0xe0,0xe4,0xab,0xbe,0xe5,0xe3,0x1d,0x5f,
|
||||
0x2,0xaa,0xd1,0xda,0x4f,0xef,0xff,0xac,0xd,0x44,0x6b,0xda,0x62,0x35,0xb7,0xcf,
|
||||
0xf3,0xa,0x28,0xcd,0x57,0x79,0x4,0xed,0x7c,0x5,0xfb,0xa0,0xe,0x39,0xf9,0xaa,
|
||||
0xc7,0x7c,0x90,0x77,0x7d,0x10,0x50,0x89,0xe1,0x23,0x56,0x79,0xb3,0xac,0xbd,0xb8,
|
||||
0xd4,0xe5,0xf3,0xde,0xa,0x8,0xa,0xaa,0xfc,0xe8,0x5,0x47,0xbe,0xea,0x19,0xbe,
|
||||
0x13,0xec,0xce,0x57,0x5f,0x66,0x3e,0xc0,0xeb,0x5f,0x8,0x78,0x25,0x9a,0x6f,0x52,
|
||||
0xf6,0x8c,0xbf,0x10,0xcd,0xf0,0x5,0xe5,0xab,0x53,0xa3,0x7e,0xc5,0xf2,0xd5,0x67,
|
||||
0xec,0xfe,0x6d,0x83,0xd7,0x3f,0x13,0xfd,0x46,0x34,0x82,0x4f,0x2,0x69,0x7c,0xce,
|
||||
0x7c,0x65,0xe4,0x3,0xb3,0xbe,0x81,0x11,0xa,0xcd,0x57,0xa4,0x4d,0xa3,0xf9,0xfa,
|
||||
0xce,0x7c,0x35,0xfd,0xd7,0x31,0x7d,0xce,0xf1,0xf7,0x38,0x96,0xf,0x24,0xf1,0xe1,
|
||||
0x56,0x72,0xdf,0x99,0xe1,0xd3,0xeb,0x2f,0xb3,0xf3,0x95,0x4,0x60,0x34,0x1f,0xf0,
|
||||
0xfa,0x66,0x5e,0x1f,0x41,0xed,0xd7,0xd5,0xf3,0x95,0x1c,0x2d,0xbf,0x48,0x20,0xe2,
|
||||
0xfa,0x3a,0x9f,0x4f,0x2e,0x25,0xf4,0xed,0xc6,0xa9,0x5f,0x9d,0x80,0x71,0x42,0x9f,
|
||||
0xb7,0x7f,0xe,0xbf,0x3e,0x1c,0xf3,0x83,0x38,0x4e,0xfd,0x2a,0xfa,0xf8,0x6,0xa8,
|
||||
0xfb,0xfa,0xe0,0xfb,0x84,0xc0,0xfa,0x95,0x35,0x3f,0x88,0x3,0xea,0x57,0x30,0xd5,
|
||||
0xfd,0x25,0xaf,0xbe,0xc1,0xf1,0x55,0x3,0xeb,0x57,0x48,0xf5,0x21,0xdf,0xfc,0xa0,
|
||||
0x9a,0xaf,0xd8,0xfd,0x51,0x27,0xd5,0xfd,0x39,0xaf,0x72,0x40,0x5c,0xf5,0x97,0x30,
|
||||
0x9f,0x96,0xaf,0x24,0x97,0xcf,0xae,0x5f,0xb1,0xfb,0xdf,0x47,0x99,0xd7,0xaf,0xa2,
|
||||
0xfb,0xb4,0x7c,0xf5,0x70,0xb7,0xd9,0x9,0xab,0x5f,0xc1,0x54,0xf5,0xa1,0x74,0xbe,
|
||||
0x90,0xfa,0xd5,0x3c,0x7c,0xf2,0xa5,0xa0,0x72,0x60,0x35,0x7e,0xfd,0x8a,0x9d,0x7f,
|
||||
0x90,0x77,0x7c,0x93,0xd5,0x4f,0x15,0x2a,0x7f,0x83,0xef,0xb3,0xf6,0x3b,0x8b,0x5c,
|
||||
0xbf,0xfa,0x14,0x86,0xe5,0xab,0x64,0x3e,0x12,0xe8,0x63,0xd,0x1c,0x32,0x3f,0x78,
|
||||
0xe8,0xce,0x57,0x4f,0xc3,0xb0,0xfe,0x25,0xd9,0xfa,0x1c,0xea,0xf0,0x89,0x57,0x15,
|
||||
0xd1,0xf7,0x7,0x91,0x10,0x9c,0xaf,0xa0,0x3b,0x5f,0x59,0xf5,0x2b,0xc8,0x9f,0x5f,
|
||||
0x98,0xa6,0xf4,0xdd,0xfc,0xfc,0xcc,0xe1,0x33,0x5f,0x78,0xe0,0xf5,0x39,0xf3,0x15,
|
||||
0x70,0xe7,0x97,0x27,0x30,0x7c,0x7e,0xe6,0x3c,0x9d,0x8f,0xb4,0xa6,0x67,0x7f,0x61,
|
||||
0x2f,0x36,0x1,0xfc,0xf6,0x73,0x8e,0xbf,0x7b,0x6e,0x5f,0x78,0xfd,0x2a,0xfd,0xf1,
|
||||
0x6d,0x29,0x6f,0xfc,0x10,0x79,0x7d,0xf2,0x8c,0xf5,0xed,0x91,0xf3,0x55,0x6,0xbe,
|
||||
0xab,0x6f,0xb4,0xec,0x27,0xb6,0x3a,0xb3,0xdb,0xcf,0xa8,0x5f,0x45,0x9e,0x7f,0x8b,
|
||||
0xbf,0xfe,0xca,0xed,0x7b,0x3c,0xfa,0x89,0xc3,0x17,0x70,0xfe,0xf9,0xeb,0x57,0x84,
|
||||
0x46,0xf6,0xd5,0xd3,0xb5,0x9f,0xea,0x3,0xbc,0xf3,0x4f,0xab,0x5f,0x21,0x4e,0xbe,
|
||||
0x32,0xea,0x57,0x75,0x1a,0x71,0x7e,0x90,0x24,0x5a,0x7f,0xa0,0xfb,0xf4,0xdb,0x61,
|
||||
0xae,0x4f,0x36,0xeb,0x43,0x43,0x4e,0xbe,0x32,0xea,0x57,0x35,0xbf,0x2f,0xa0,0xff,
|
||||
0x4b,0xb4,0xfe,0x4a,0xf7,0xe9,0xe5,0x84,0xd6,0xa8,0xd7,0x12,0x5d,0x1d,0x9d,0xa3,
|
||||
0x7e,0x75,0x10,0x98,0xaf,0x1a,0x7e,0x5f,0xc0,0xf8,0x11,0x7f,0xfd,0xb,0xf3,0xe9,
|
||||
0xe5,0x98,0x9d,0xab,0xbd,0x96,0xdd,0xbf,0xb4,0xcb,0xae,0xfa,0x15,0xa,0xcc,0x57,
|
||||
0x3f,0xf2,0x5f,0x1f,0x1,0xe3,0x6f,0x1c,0x9f,0xdd,0x19,0x7c,0x63,0xd6,0x8b,0x71,
|
||||
0xf4,0xfa,0x95,0xa3,0xfe,0x42,0xfb,0xbb,0x4d,0xe8,0x5f,0x7f,0xe5,0xf0,0xf9,0xf2,
|
||||
0xcb,0x38,0xee,0xfa,0x2b,0xca,0x69,0xbf,0xa0,0xff,0x14,0xbd,0x7e,0x85,0x1c,0xf9,
|
||||
0xaa,0xf,0x36,0x42,0x9f,0x5f,0xa0,0xbc,0xf5,0xed,0xf1,0xda,0x8f,0x72,0xce,0xbf,
|
||||
0x40,0x9f,0xa7,0x7e,0x85,0x76,0x40,0x13,0x2c,0xd6,0x37,0x15,0xc2,0x7d,0x95,0x47,
|
||||
0xc8,0x51,0xbf,0xe2,0xaf,0x6f,0x9f,0xed,0x8b,0x71,0xfd,0x7a,0x7c,0x9e,0xcf,0xdf,
|
||||
0x95,0x5c,0xf9,0x4f,0xab,0x5f,0x55,0xed,0x7c,0x75,0xed,0x69,0x50,0x2f,0x84,0x3d,
|
||||
0x3f,0x13,0xe4,0x8b,0xd1,0xff,0x85,0xfb,0xb4,0x99,0x5c,0x71,0x76,0xfd,0xca,0x98,
|
||||
0x1f,0x54,0x22,0xfb,0x62,0x8c,0x1f,0xb3,0x7d,0x60,0x76,0xfd,0xca,0xc8,0x57,0x67,
|
||||
0xd1,0x7d,0x1b,0x19,0xfa,0x22,0xd4,0x37,0x7e,0xa5,0xfb,0x9e,0x78,0x7c,0x1,0xfb,
|
||||
0xb7,0xc7,0xcb,0xf7,0xe1,0x3e,0x10,0xc9,0x77,0xf6,0xb1,0xee,0x53,0x16,0xef,0x1b,
|
||||
0x6e,0x47,0x6a,0x3f,0x3d,0x1f,0xdc,0x9e,0xbf,0xcf,0x78,0x43,0xfc,0x9e,0x67,0xa5,
|
||||
0x98,0x18,0xc9,0xd7,0x96,0x3c,0xbe,0xa0,0x4f,0xa,0x9f,0xf1,0x86,0xf8,0xd6,0xe9,
|
||||
0x30,0x68,0xfc,0xf0,0xd4,0xaf,0x9a,0xbb,0x10,0x4,0xe6,0x2b,0xfa,0x79,0xb1,0x98,
|
||||
0xb9,0x4f,0x7b,0x43,0xfc,0xda,0xf1,0x81,0x85,0x10,0x3,0x7d,0xda,0xfc,0xe0,0xf3,
|
||||
0xfd,0x83,0x6d,0x3b,0x5f,0x79,0x7d,0xa3,0x9,0xca,0xd2,0xa7,0xf5,0x69,0xfa,0x1b,
|
||||
0xe2,0x5,0xfb,0xf8,0x42,0x10,0xe2,0x1b,0x4d,0x5a,0xfd,0x83,0x5b,0x76,0x7e,0x69,
|
||||
0x2d,0xc2,0x27,0xb5,0x9d,0x3e,0xed,0xfa,0x5d,0x17,0x2,0xeb,0x57,0xce,0xe7,0x7,
|
||||
0x39,0x3e,0xc4,0xf5,0xc5,0xab,0xbf,0xf8,0x7c,0xc0,0xeb,0x13,0xc4,0xc0,0xfa,0x95,
|
||||
0xf5,0xfc,0x20,0x2f,0x5f,0x65,0xec,0x93,0x4b,0x2e,0x9f,0x5c,0x9a,0xe1,0xb,0x7e,
|
||||
0x7e,0xd0,0xbe,0x3e,0x60,0x86,0x3e,0x4,0x99,0x6f,0x4d,0xf3,0x21,0x38,0xbb,0xfd,
|
||||
0xc2,0xf3,0x15,0x1d,0x51,0x10,0xf2,0xf3,0xe2,0xfa,0xb4,0xe0,0xae,0xf9,0x7e,0x50,
|
||||
0x6c,0x69,0x3e,0x23,0xc7,0x43,0xf0,0x83,0x62,0x80,0x4f,0xcb,0x57,0x3b,0xa0,0x1e,
|
||||
0xec,0x23,0xa3,0xd0,0xed,0x8a,0xe2,0xfb,0xb6,0xa9,0xf6,0x86,0xf8,0x1f,0x14,0xf7,
|
||||
0xc,0xdf,0xb6,0x5e,0xa2,0xfe,0x41,0xd1,0xb8,0x3e,0xa6,0x77,0x39,0xf5,0xab,0x96,
|
||||
0xe1,0xd3,0xd7,0x77,0xf2,0x7c,0x42,0xc6,0x3e,0xed,0xf3,0x83,0x22,0xef,0x97,0x14,
|
||||
0x37,0x42,0xea,0x57,0xd8,0x59,0xbf,0xb2,0x3e,0x57,0x9,0xf7,0x95,0x99,0x91,0xd7,
|
||||
0x5f,0xc5,0xf2,0xd1,0x46,0x48,0xfd,0xa,0x3b,0xeb,0x43,0x33,0x4f,0xf4,0xa8,0xeb,
|
||||
0xaf,0xd2,0xf9,0x9c,0xe3,0x2f,0x8a,0xe7,0x8b,0xb8,0xfe,0xca,0xfd,0x19,0x14,0x5c,
|
||||
0x20,0xcf,0x2f,0x29,0xbd,0x23,0xcc,0x7c,0x7e,0x30,0xb2,0xaf,0x1,0x92,0xec,0xff,
|
||||
0xe2,0x1,0x79,0x7e,0x79,0x6f,0x56,0xfb,0xdd,0x8e,0xec,0x7b,0x6d,0xe,0x3e,0x42,
|
||||
0x43,0x7c,0x7a,0x7d,0x57,0x8a,0xe8,0x8b,0xbc,0xfe,0x2a,0xd6,0xf1,0x55,0xf4,0xfa,
|
||||
0xda,0xe3,0xcb,0x4f,0x15,0x39,0xf5,0x2b,0x63,0x7d,0x7b,0x25,0x62,0xfb,0x45,0x5e,
|
||||
0x7f,0xe5,0xb9,0x40,0xdc,0x20,0xcf,0x2f,0xe5,0x67,0xb4,0xfe,0xef,0xa5,0x9,0xa1,
|
||||
0x9c,0xfa,0x95,0xee,0x3,0xd1,0x7d,0x89,0x8e,0xef,0xb6,0x1b,0xe4,0xf9,0xa5,0x31,
|
||||
0x7e,0xb8,0x7c,0xa3,0x89,0xe9,0x33,0xf3,0xcb,0xa3,0xa8,0xbe,0x7b,0x49,0x7c,0x44,
|
||||
0x70,0x81,0x3c,0xbf,0xf4,0xfb,0xb4,0xf5,0xed,0x92,0xcb,0xf7,0x6e,0xb4,0xfb,0x8f,
|
||||
0xc8,0xeb,0xaf,0xdc,0x9f,0x33,0xba,0xae,0x7f,0xc3,0x2f,0x19,0x9b,0x6e,0xb9,0x7f,
|
||||
0x69,0xd6,0xaf,0xc8,0xe7,0x97,0x9f,0x2a,0xd9,0xf9,0x80,0xbf,0xbe,0xdd,0xe3,0xcb,
|
||||
0xea,0xfd,0x5b,0xc8,0x75,0xc1,0x42,0x44,0x39,0xed,0x47,0x9e,0xee,0x13,0x47,0xbe,
|
||||
0xa,0x7a,0x7e,0xd0,0xe5,0xf3,0xbd,0x7f,0x8b,0xb4,0xe5,0x24,0x3e,0xf7,0x5,0xb,
|
||||
0x7d,0xfd,0xb3,0xee,0x1b,0x49,0xc4,0x91,0xaf,0x82,0x9e,0x1f,0x74,0xd5,0xf,0x7c,
|
||||
0xef,0xdf,0x22,0xa0,0x2a,0xd0,0xb4,0xfd,0x1f,0xa4,0xbc,0xf6,0x53,0x9e,0xd8,0xbe,
|
||||
0x90,0xe7,0x7,0xbd,0x3e,0xf7,0xfb,0xb7,0x62,0xac,0xbf,0x8a,0xe1,0x9b,0xbe,0xae,
|
||||
0xd5,0xef,0x9f,0x4c,0x9e,0x72,0xe6,0x2b,0x73,0x7e,0x30,0xd0,0xc7,0x7d,0xff,0x56,
|
||||
0x42,0x1f,0x2e,0xb9,0x7c,0xee,0x5f,0xaa,0x5f,0xde,0x9,0xae,0x5f,0xb9,0x7d,0x72,
|
||||
0x69,0xad,0x64,0xfa,0xb8,0xef,0xdf,0x22,0xe0,0x3f,0x24,0xba,0x3e,0x2a,0xee,0xeb,
|
||||
0xa3,0xe2,0x39,0xbe,0x3b,0xc1,0xf5,0x2b,0xb7,0xf,0x4b,0x2d,0xe8,0xf0,0xf9,0xde,
|
||||
0xbf,0x45,0xda,0xc3,0x24,0xe7,0x1f,0xac,0xba,0x7c,0xee,0x5f,0x52,0xed,0x9,0xd7,
|
||||
0x88,0xfb,0xaf,0x71,0x7c,0xae,0xf7,0x6f,0x91,0xa8,0xeb,0x9b,0xe2,0xf9,0xea,0xd1,
|
||||
0x7d,0x22,0xf3,0x71,0xdf,0xbf,0x25,0x25,0xf4,0x21,0xb7,0xf,0x25,0xf6,0x8d,0x0,
|
||||
0x3b,0xff,0xb8,0xef,0xdf,0x9a,0x8f,0x8f,0xe0,0xa8,0xbe,0xd0,0xe7,0x67,0x68,0x8c,
|
||||
0xf5,0x57,0x7c,0xdf,0x4a,0x11,0x43,0x8e,0x4f,0xd1,0x7d,0x8d,0x4f,0xd7,0xca,0x33,
|
||||
0xdb,0x2f,0xec,0xf9,0x99,0x14,0xe3,0x9b,0x71,0xb3,0x4f,0xbe,0x64,0xf8,0xcc,0x5f,
|
||||
0xda,0xf9,0xea,0x39,0xcd,0xf7,0xc7,0xdd,0x16,0x98,0xe9,0xb,0x7b,0x7e,0x26,0xb9,
|
||||
0xcf,0x28,0x68,0x50,0xa5,0xd6,0xed,0x6a,0x3e,0xb9,0xc4,0xab,0xff,0xbd,0xd8,0xe8,
|
||||
0xc2,0x99,0xbe,0xb0,0xf5,0x7,0xc9,0x7d,0xec,0x63,0xfa,0xf8,0xf5,0xc9,0x17,0x1b,
|
||||
0x78,0xf6,0xf5,0x11,0xb6,0xfe,0x20,0x5d,0xfd,0xca,0xf0,0xfd,0xba,0x68,0xf9,0xdc,
|
||||
0x5b,0x8a,0xa,0xe4,0x78,0xa6,0x6f,0xf6,0xfb,0x21,0x52,0xfb,0x1c,0xed,0x47,0xdc,
|
||||
0xed,0x47,0x9e,0xae,0xce,0x6e,0x3f,0x67,0x3e,0x10,0x17,0xec,0x1b,0x55,0x67,0x9f,
|
||||
0x7f,0xb3,0x7c,0x29,0xea,0xa7,0xb3,0x7c,0xca,0x4,0xcf,0xbe,0x7e,0x9d,0x3e,0xde,
|
||||
0xf5,0x9b,0xda,0xf7,0x16,0xcf,0xa7,0xd7,0xaf,0x94,0xc9,0x94,0xd7,0xff,0x9d,0x4,
|
||||
0xe6,0xab,0xf4,0xfb,0x5f,0xf9,0x3e,0xf7,0x6f,0xbc,0xc8,0xf3,0xe1,0x90,0xfa,0x8b,
|
||||
0x44,0xc7,0xf7,0x9f,0xc7,0xbc,0x7c,0xe5,0x1c,0x3f,0x84,0xdb,0xc6,0x7b,0xb9,0xe2,
|
||||
0xad,0xbf,0xa,0x1a,0x4d,0x7c,0xc7,0x37,0xac,0x3e,0x44,0x61,0xb3,0x87,0x78,0xf9,
|
||||
0xc5,0xb9,0xfe,0xe0,0xe6,0x6b,0xa8,0x6e,0xf8,0xce,0x17,0xef,0x6b,0x18,0x63,0x6,
|
||||
0x27,0x5f,0x39,0x7c,0xc6,0xcd,0x69,0xca,0xe3,0x1b,0xe4,0xbb,0x1b,0x32,0x3f,0xa8,
|
||||
0xe,0x87,0xa,0xe0,0xe4,0x2b,0xd7,0xfb,0xb7,0x5e,0x7a,0x8d,0xa4,0xf7,0xad,0x9b,
|
||||
0x3b,0x4e,0xfb,0x7d,0xd5,0xb0,0xf6,0x3b,0x41,0x8a,0xe8,0xc8,0x57,0xdc,0xe3,0xfb,
|
||||
0xd2,0xed,0x9b,0x96,0x6f,0x23,0x73,0x1f,0x9,0x5b,0x7f,0x45,0xc9,0x75,0xe5,0x96,
|
||||
0x23,0x5f,0x1,0xde,0xf5,0xf1,0x6a,0xe5,0x23,0xcb,0x57,0xcf,0xdc,0x67,0xd4,0xaf,
|
||||
0xc4,0x6b,0xd8,0xaa,0x29,0xbf,0x2b,0xa3,0x4e,0xa1,0xa0,0xef,0x2f,0xaa,0x9e,0x9d,
|
||||
0x53,0xe8,0xc8,0x57,0x22,0x2f,0x5f,0xbd,0x5a,0xb1,0xce,0xbf,0x44,0xeb,0xf,0x5c,
|
||||
0xbe,0x7d,0xaf,0xcf,0xa8,0x5f,0xbd,0x2c,0xd5,0xac,0x5b,0xd9,0x4a,0xb5,0xda,0xa8,
|
||||
0xd5,0xf4,0xe7,0x7b,0xdc,0xd7,0x87,0xb9,0xa7,0xb5,0x37,0x5f,0xbd,0xaa,0x5d,0x1f,
|
||||
0xb1,0xf7,0xbf,0xa,0xf0,0x6d,0x70,0xc7,0xf,0xfa,0xd2,0xa4,0x59,0xb7,0x7c,0x95,
|
||||
0x46,0xd5,0xf0,0x51,0x77,0xff,0x82,0x26,0xdc,0xf1,0xad,0xaa,0xf5,0x2f,0xbb,0xc9,
|
||||
0xd7,0xbf,0xb8,0x7c,0x97,0x2,0x7c,0xc4,0xf2,0x11,0x8,0x27,0xb8,0x56,0x33,0xe6,
|
||||
0x67,0x9c,0xfd,0x33,0x46,0xbf,0x2f,0x72,0x7d,0x5a,0xff,0xbc,0x9e,0xdc,0xd7,0xe6,
|
||||
0x2d,0xb9,0x32,0x2a,0xb2,0x56,0xbe,0x1a,0x7d,0xd4,0xb5,0x7c,0x63,0xf8,0x4,0x17,
|
||||
0x56,0x9d,0xf3,0x83,0xa1,0xf9,0x2a,0xe1,0xfe,0x57,0xf6,0x7,0x70,0xda,0xcf,0xbe,
|
||||
0x15,0x37,0xf3,0xd5,0xe4,0xd8,0xf2,0xd1,0xca,0xef,0xb0,0x50,0x3,0xf1,0xf2,0x4b,
|
||||
0x8a,0xf6,0x3,0x9c,0xf3,0xcf,0xeb,0x1b,0x39,0x7c,0xb0,0xd2,0xa8,0x9,0x35,0x31,
|
||||
0x9e,0x6f,0x37,0x23,0xdf,0x3e,0xd7,0xa7,0x4c,0xa4,0xd3,0x9a,0xe5,0xab,0x56,0x9b,
|
||||
0xb3,0x7c,0xbe,0x7c,0x75,0x94,0x7c,0xfd,0x95,0xcb,0x47,0xf9,0x3e,0xe4,0xe8,0xff,
|
||||
0x5e,0x97,0xd1,0x81,0x50,0x10,0xc3,0xf2,0xd5,0x46,0xfa,0xfd,0xaf,0x62,0xf9,0x5c,
|
||||
0xbf,0x2b,0x98,0x5f,0xd0,0xfa,0x67,0x38,0xda,0xd5,0x1f,0x4a,0x35,0x9f,0x9f,0x61,
|
||||
0xfd,0x33,0xa,0x7a,0x3e,0xa0,0xbe,0x0,0x9f,0x68,0x8e,0x32,0xda,0xf8,0x36,0xfc,
|
||||
0x78,0xc7,0xd8,0x3c,0xd4,0xc8,0x7,0x65,0xe6,0xb,0x7a,0xbe,0x62,0x23,0xa9,0x2f,
|
||||
0xa0,0x34,0xcd,0xf3,0x39,0xc7,0x5f,0xd5,0x67,0xc,0xba,0xc6,0xf3,0x3d,0xac,0xfd,
|
||||
0xb8,0xcf,0xa7,0x24,0xcd,0xf7,0xc9,0x7d,0xa,0x3d,0xfe,0x89,0xe8,0xf0,0x89,0x73,
|
||||
0xf5,0x29,0xa4,0x94,0xc0,0xb7,0x6f,0xfb,0x46,0xc0,0xf2,0xa5,0x7f,0x7e,0x86,0xe3,
|
||||
0x53,0x60,0x4c,0x1f,0xa6,0xa3,0xd7,0x64,0xcb,0xa7,0xe6,0x2b,0xe6,0x3,0xe9,0x9f,
|
||||
0x9f,0x49,0xec,0x3b,0xc7,0xaf,0xcb,0xb0,0x50,0xd0,0xea,0xe3,0x48,0xf5,0x11,0xbb,
|
||||
0xfd,0xec,0x7c,0x5,0xd2,0xef,0x2f,0xc5,0xf1,0xd1,0x48,0xbe,0xc9,0xf7,0xd5,0x80,
|
||||
0x55,0xab,0x69,0xf3,0xb,0x3,0xd5,0xe7,0xb8,0x3e,0x30,0xb4,0x7c,0xe9,0xf7,0xe7,
|
||||
0x4a,0xe3,0x53,0x7,0xb8,0x9a,0xb1,0xff,0x95,0x34,0x72,0xf4,0x2f,0xc8,0x7a,0x7f,
|
||||
0x72,0x6,0xfb,0x9b,0xf1,0x7c,0x20,0x8a,0x4f,0xfa,0xab,0xa,0x6c,0xd6,0x6a,0xdf,
|
||||
0x35,0x7d,0x76,0xff,0x3c,0xcb,0x97,0xb4,0xfe,0x62,0xfb,0xc4,0x68,0xbe,0xd7,0x61,
|
||||
0xb3,0xb0,0x7a,0x3d,0x6a,0xbe,0xca,0xd0,0x27,0x44,0xf3,0x9,0x15,0x35,0x1f,0x54,
|
||||
0xe3,0xe5,0x97,0x2c,0x7c,0x84,0x46,0x3c,0xbe,0xc9,0x7c,0x49,0xeb,0xa7,0xcc,0x37,
|
||||
0xfd,0x27,0x91,0xc6,0x5f,0xa9,0x5b,0xa9,0xd6,0x66,0xf9,0x52,0x3d,0x9f,0x1c,0x6b,
|
||||
0x7c,0x23,0xde,0xfd,0xaf,0x26,0x5d,0x35,0x60,0x9,0x7a,0xff,0x87,0xa3,0xd7,0xaf,
|
||||
0xe6,0xe6,0x9b,0xf2,0xf6,0x97,0x32,0xf3,0xd5,0x29,0x85,0xb0,0xb0,0xb,0x66,0xd4,
|
||||
0xaf,0xd8,0xdf,0x4a,0xb8,0xfe,0x6a,0x86,0xef,0xdc,0xeb,0xc3,0xd4,0xca,0x57,0xc7,
|
||||
0x74,0xf8,0x9,0xde,0x1,0xfe,0xfa,0x90,0xc8,0xdd,0xff,0x25,0xd9,0xfa,0xab,0x59,
|
||||
0xc7,0x57,0x9,0x1b,0x7f,0x87,0x1f,0x2b,0x3c,0xdf,0x8f,0x79,0xf9,0x25,0xee,0xfa,
|
||||
0xab,0xed,0xc,0x7c,0xc7,0x3f,0x51,0x44,0x8e,0xef,0xad,0x0,0x5f,0x9c,0xf5,0x25,
|
||||
0x56,0x9a,0x4a,0xe9,0xdb,0xb7,0xf3,0x55,0x8f,0x5b,0xbf,0xb2,0x7d,0xb1,0xd6,0x5f,
|
||||
0xc9,0x42,0x34,0x1f,0xe,0xcf,0x57,0x8a,0x6c,0xe7,0x2b,0xdb,0xc7,0xbf,0x3e,0x62,
|
||||
0xad,0xbf,0x1a,0xd3,0x64,0xbe,0x73,0xbc,0xbf,0xf7,0xa8,0x50,0xd8,0x64,0x3e,0x62,
|
||||
0xe7,0xab,0xa7,0x43,0xf7,0xd7,0x8b,0xb9,0xfe,0x6a,0x8f,0xfd,0x8b,0x35,0x47,0x6b,
|
||||
0xdd,0x2e,0x6a,0xfb,0xe7,0xc8,0x41,0xbe,0xc9,0xf7,0x9b,0x2d,0x35,0xbf,0x88,0xcc,
|
||||
0x67,0x5f,0x1f,0x33,0xf6,0xd7,0x8b,0xb9,0xfe,0xca,0x62,0x15,0x7c,0x7d,0xac,0xb6,
|
||||
0xff,0xd0,0x58,0x8,0xcc,0x57,0xf5,0x96,0x9d,0xaf,0x24,0x47,0xff,0x32,0xe3,0xf9,
|
||||
0xe4,0x78,0xeb,0xaf,0xac,0xcb,0x83,0x58,0x2b,0xa5,0xda,0xcc,0xa1,0xed,0xdf,0xa4,
|
||||
0x3d,0xbd,0x1a,0x30,0xfe,0xd6,0x45,0x35,0x5f,0x19,0xfb,0x8b,0x4a,0x8e,0xfe,0x79,
|
||||
0xe6,0xfe,0x7a,0xb1,0xd6,0x5f,0x91,0x95,0xe8,0x1f,0xaf,0x6f,0x4f,0xcd,0x57,0xae,
|
||||
0xf5,0x57,0x91,0xf2,0x55,0xbc,0xf1,0x2d,0x4d,0xfb,0x29,0x6a,0x7e,0x41,0xb1,0xf3,
|
||||
0xb,0x69,0xf,0x4,0x3a,0xff,0xf3,0x4f,0xf5,0xb5,0x92,0xf9,0x80,0x10,0xc7,0xb7,
|
||||
0x1f,0xed,0xfa,0xe5,0xe4,0xab,0x66,0xab,0x99,0x24,0x5f,0x11,0xb0,0x16,0x27,0xbf,
|
||||
0x1c,0xfa,0xfa,0x3f,0xec,0x2c,0x1,0x29,0xcc,0x27,0xfb,0xf2,0xd5,0xfe,0x5e,0xc3,
|
||||
0xc8,0x57,0xa,0xe,0xf0,0xed,0xf1,0xf7,0xbf,0x8a,0xe5,0x93,0x23,0xfa,0x70,0x70,
|
||||
0xbe,0xd2,0xf7,0x9f,0x54,0xcf,0x2a,0xc1,0x18,0x3f,0xae,0x14,0x8b,0x61,0xf7,0xe7,
|
||||
0x44,0x7f,0x10,0x28,0xb2,0x6f,0x2a,0x44,0xf3,0xa1,0xe0,0x7c,0x65,0xec,0x8f,0x59,
|
||||
0xd9,0x11,0xcc,0xf1,0xd7,0x78,0xae,0x27,0x28,0x5f,0x91,0xb6,0x12,0xc7,0xe7,0xcf,
|
||||
0x7,0x7c,0xdf,0x38,0x78,0xfc,0x7d,0xa2,0xef,0x2f,0x55,0x69,0xf9,0x7c,0x9b,0xdc,
|
||||
0xfd,0xeb,0x40,0x2c,0x9f,0x3f,0x5f,0x5,0xb4,0x9f,0x30,0xcb,0xd7,0xf4,0xf9,0x9a,
|
||||
0x3c,0x9f,0x4,0x70,0xba,0x7c,0xcf,0xf7,0x85,0xac,0x1f,0x1f,0xe9,0xfb,0x5f,0xbd,
|
||||
0x52,0x33,0x7d,0x9f,0x5f,0x66,0x3e,0xee,0xfe,0x89,0x8b,0xf7,0xd,0xf4,0xfd,0xaf,
|
||||
0x60,0xc3,0xbc,0x3e,0xae,0x5a,0xed,0xc7,0xdd,0xbf,0xf8,0x64,0x3e,0x3e,0x7d,0x7f,
|
||||
0x6,0x54,0x72,0xac,0x44,0xfb,0xf5,0xdd,0x4a,0xa1,0x0,0x59,0xff,0x2,0xa0,0xb9,
|
||||
0x3e,0x1b,0x2b,0xf6,0xf1,0x9d,0xcb,0xfd,0x9b,0xcb,0x67,0xf5,0xcf,0xb2,0x3e,0xbf,
|
||||
0x0,0x1d,0x2b,0xf9,0x1a,0xd,0x35,0xbf,0x74,0x6c,0xdf,0x8f,0xca,0x5e,0xdf,0xfe,
|
||||
0x5c,0xee,0x7f,0x5d,0x3e,0xd7,0xf8,0x46,0x46,0x13,0xcc,0xf1,0x19,0x7f,0x1d,0x8a,
|
||||
0xbe,0xf6,0x9b,0x4b,0xfd,0xc0,0xed,0x73,0xe5,0x3,0x32,0x72,0xd6,0x3e,0xaa,0x8,
|
||||
0xd7,0x6a,0xf6,0xfe,0xa2,0xac,0x7f,0xc6,0xd3,0x62,0x31,0xb3,0xfa,0x8b,0xf8,0xe1,
|
||||
0x5a,0x78,0xff,0x37,0x70,0xad,0xbf,0x72,0xf9,0xee,0xde,0xad,0x15,0x56,0xbd,0xfb,
|
||||
0x8b,0x66,0x5c,0xbf,0x12,0x1b,0xd6,0x4e,0x2a,0x11,0xda,0x8f,0xbe,0xe4,0xf4,0x9,
|
||||
0xa2,0x9a,0xf,0x2a,0xf3,0xad,0x5f,0x81,0x4a,0x17,0x45,0x3f,0xff,0xe8,0x4b,0xce,
|
||||
0xf3,0xaf,0xda,0x50,0x7d,0x85,0xd8,0xbe,0x58,0xf5,0x53,0x60,0xed,0xb7,0x3a,0xeb,
|
||||
0xfa,0xd5,0x7d,0x3b,0xce,0xeb,0x57,0xf7,0xc1,0xd8,0xf9,0x2a,0x96,0x4f,0x82,0x38,
|
||||
0x5a,0xff,0x67,0x3c,0x3f,0x28,0x3a,0xfb,0xbf,0xf,0xef,0x56,0x5,0xa3,0xff,0xb,
|
||||
0xda,0x9f,0x1,0xa5,0xde,0xff,0x2a,0xb2,0x8f,0xb3,0xfe,0x4a,0xb4,0xf2,0x95,0xfe,
|
||||
0xfc,0xf9,0xe0,0xae,0x95,0xaf,0x80,0xe9,0x1b,0xf2,0xe7,0x3f,0x62,0xac,0xbf,0x7a,
|
||||
0x12,0xd5,0xc7,0x59,0xdf,0x4,0xac,0x7c,0xa5,0xef,0x8f,0x54,0x69,0x88,0x66,0x3e,
|
||||
0x30,0x96,0xfe,0x7a,0xdf,0xbf,0x65,0xfb,0xce,0xe3,0xf8,0x66,0x5c,0x1f,0x21,0x3e,
|
||||
0x3b,0xbf,0x78,0x7d,0xb7,0x4c,0xdf,0x1,0x7f,0xfe,0x2d,0xc6,0xf1,0xc5,0x68,0x46,
|
||||
0xff,0xc2,0x7c,0x24,0x64,0xfd,0xd5,0x13,0x23,0x9f,0x8a,0x96,0xf,0x64,0xe7,0x93,
|
||||
0xd7,0x4a,0xa9,0xdb,0x6f,0xa4,0xb7,0xdf,0x2b,0xf7,0x59,0xbe,0xb2,0xce,0xbf,0x6,
|
||||
0xff,0xf8,0xc6,0x5d,0x7f,0x75,0xa8,0x9e,0xea,0xeb,0x9a,0x6f,0x5a,0x46,0x74,0x5c,
|
||||
0xd2,0x7c,0x9b,0x44,0xbb,0x21,0x8e,0xe8,0x1b,0xe8,0xfb,0x5f,0x41,0xb3,0xfd,0xe4,
|
||||
0xab,0x56,0xfb,0x6d,0xf0,0xaf,0x8f,0xb8,0xeb,0xaf,0xfa,0xb4,0xac,0xa,0x81,0xb6,
|
||||
0xc1,0xb2,0x36,0xd9,0xa7,0xf9,0x6a,0x53,0xed,0x28,0x84,0x5e,0xbf,0xd5,0x46,0xdf,
|
||||
0x9c,0x1f,0x54,0x7a,0x46,0x3e,0x30,0x8f,0xaf,0x62,0xf9,0x82,0xfa,0x97,0x98,0xeb,
|
||||
0xf,0xfa,0xa4,0xf5,0x4d,0xd3,0x77,0xf0,0x97,0x55,0xc3,0x77,0xfe,0xfb,0x3f,0xe1,
|
||||
0xf4,0x7f,0xce,0xfb,0x96,0xe3,0xf7,0x3e,0x45,0xc6,0xfc,0xa0,0xde,0xff,0x1,0xd8,
|
||||
0xf0,0xfb,0x2,0xf6,0xe7,0x8a,0xb9,0x7e,0xa3,0x4f,0x1f,0x7f,0x6c,0xfa,0xd0,0x9f,
|
||||
0x37,0xc,0x1f,0x39,0xfd,0x23,0x4f,0x7e,0xf6,0xf9,0xde,0xff,0xad,0xea,0xb3,0xf7,
|
||||
0x97,0xe2,0xf8,0x82,0xc6,0xb7,0x98,0xeb,0x5f,0xfa,0xb4,0xd5,0x7b,0x60,0xfa,0x9a,
|
||||
0xef,0x96,0xd,0x1f,0xba,0x53,0x8,0xf5,0x29,0xc7,0xef,0xf7,0xb1,0xd3,0xc7,0xfa,
|
||||
0x67,0x35,0x5f,0xcd,0xc1,0xc7,0xda,0xaf,0xc9,0xda,0xf,0xdd,0xd1,0xdb,0x6f,0x1a,
|
||||
0x54,0xbf,0x52,0x7a,0x1f,0xf4,0x71,0x61,0xb5,0x13,0x2f,0x5f,0x25,0xda,0xff,0x2a,
|
||||
0xcc,0x17,0x38,0xbf,0xa5,0xec,0x36,0x5e,0xc6,0xb1,0xeb,0x43,0x34,0xeb,0xf6,0xb,
|
||||
0xf6,0xf5,0x72,0xee,0xdb,0x69,0x3c,0xc4,0xb1,0xeb,0x57,0x34,0xc9,0xfa,0xab,0x43,
|
||||
0x68,0xfa,0xa6,0xcf,0x33,0xdf,0xe6,0xce,0x2c,0x1f,0xd9,0x69,0xf4,0xcd,0xf9,0xc1,
|
||||
0xc0,0x7c,0x15,0xb0,0xbe,0x3d,0xc5,0xfa,0x2b,0xdf,0xf8,0x16,0xec,0x73,0xd4,0xaf,
|
||||
0xbc,0xf9,0x2a,0xf8,0xfd,0x5b,0x34,0xe5,0xfa,0xab,0xe8,0x3e,0xed,0x8b,0x1,0xf9,
|
||||
0x6a,0x12,0x5c,0xdf,0xa0,0x19,0xac,0xbf,0x8a,0xe8,0xb,0xce,0x57,0xb6,0x2f,0x68,
|
||||
0x7f,0x2e,0xba,0x58,0x1f,0xf6,0xe4,0x2b,0xe6,0x1b,0xe6,0xc3,0x37,0xd2,0x7d,0xaf,
|
||||
0x8,0x22,0xcb,0x57,0x33,0x8f,0xef,0x62,0x7d,0x3,0x64,0xe4,0x2b,0x56,0xbf,0x42,
|
||||
0xa1,0xcf,0xf,0x26,0xf3,0xa9,0xe3,0x98,0xb9,0x66,0x77,0x7d,0xc5,0xdc,0x51,0x4f,
|
||||
0x1d,0x8b,0xa,0x21,0xbe,0x6a,0xe3,0xd3,0x8a,0x99,0xaf,0xf4,0xfd,0xf,0x20,0x7b,
|
||||
0x7f,0x8a,0x9d,0xf,0x2,0xde,0x1f,0xbf,0x10,0x9f,0x9a,0xaf,0xba,0xd,0x33,0x5f,
|
||||
0xe9,0xef,0x1f,0x84,0x2d,0xcb,0x27,0x6,0xd6,0xaf,0x16,0xe9,0x7b,0x5f,0xf3,0x39,
|
||||
0xf2,0x55,0xd3,0xf2,0x9,0x33,0xc6,0xb7,0xf4,0xcf,0xa7,0xf0,0x8a,0x62,0xbe,0x7c,
|
||||
0xd5,0x6d,0xba,0xf2,0xd5,0xeb,0x66,0xfd,0x6f,0x7a,0xb9,0x10,0xe6,0x4b,0xf9,0xfc,
|
||||
0x5b,0x64,0x5f,0xef,0x83,0x6e,0xb3,0xb0,0xa,0xe3,0xe5,0xab,0x5,0xfa,0x76,0x1b,
|
||||
0x2f,0xce,0xac,0xbf,0x64,0xd7,0x7e,0xb1,0xcf,0x3f,0x35,0x5f,0x69,0x3e,0x10,0xdb,
|
||||
0x97,0xac,0x7e,0x1a,0xdf,0xb7,0xd3,0x78,0x2b,0xfe,0xfa,0xf6,0xb9,0xf9,0x88,0xec,
|
||||
0xcf,0x57,0x9f,0x56,0x5,0xfd,0xf9,0x1e,0x5,0xc5,0xc9,0x57,0xd9,0xd6,0x9f,0x99,
|
||||
0x6f,0xea,0x9d,0x3f,0x72,0xe6,0xab,0xa1,0x9e,0xaf,0xd6,0x68,0xa4,0x7c,0x95,0x7a,
|
||||
0xfd,0x15,0xd7,0x77,0xee,0x9b,0xdf,0x72,0xe4,0xab,0x3,0x3d,0x1f,0x3c,0xa6,0x91,
|
||||
0xf2,0x55,0xea,0xf5,0x57,0x5c,0x5f,0xd8,0xf3,0x65,0x4f,0xf4,0xfd,0x9b,0x2a,0x3f,
|
||||
0xda,0x2e,0x9e,0xf,0x0,0x0,0x12,0x4f,0x49,0x44,0x41,0x54,0xa3,0x91,0xf2,0x55,
|
||||
0xc2,0xfd,0xaf,0x66,0xf9,0x42,0xf6,0x6f,0x37,0x7d,0x6c,0xfc,0xb5,0xf3,0x15,0xa,
|
||||
0xf0,0x35,0xc0,0x42,0xdb,0x6f,0xa4,0xfb,0x5e,0x31,0xcf,0x3f,0x35,0x5f,0x6d,0x31,
|
||||
0x1f,0xff,0xf8,0xc6,0xdf,0xff,0x6a,0xf,0x1f,0x9a,0x3e,0xf9,0x7e,0xd9,0xf4,0x15,
|
||||
0x37,0xa3,0xfa,0xcc,0x7c,0xc5,0xde,0x4f,0x77,0xd5,0x6a,0x3f,0xc8,0xbf,0x3e,0xe2,
|
||||
0xef,0x7f,0xd5,0x3a,0xed,0x9b,0x3e,0xd4,0x34,0xa6,0x17,0x55,0x50,0x6d,0x86,0x6f,
|
||||
0x7c,0x19,0x16,0xa,0x80,0xf5,0x2f,0xce,0x7c,0xc5,0x7c,0x80,0xd7,0xbf,0x24,0xd9,
|
||||
0xff,0x6a,0xed,0x98,0xf9,0x60,0xd7,0xf4,0x29,0xd8,0xf2,0x1d,0xf1,0xcf,0x3f,0x78,
|
||||
0x1f,0xd5,0x6a,0xdb,0x1c,0x9f,0x75,0x7d,0x6c,0xf0,0xfa,0xe7,0x24,0xfb,0x5f,0x9,
|
||||
0xd8,0xf2,0x61,0xe6,0xa3,0x96,0x6f,0x97,0x9f,0x9f,0xe1,0x9b,0xaa,0xcf,0xde,0x5f,
|
||||
0x94,0xe3,0xe3,0x8e,0x6f,0x49,0xf6,0xbf,0x72,0xfa,0xb6,0x99,0xcf,0x3a,0xff,0xd6,
|
||||
0xf9,0x3e,0xb0,0x66,0x3d,0x3f,0xa8,0xe7,0x2b,0x76,0x7d,0x84,0xcd,0xf,0xd2,0x64,
|
||||
0xfb,0x5f,0x39,0x7c,0xd3,0x5b,0xbe,0xf6,0x5b,0xe7,0xd5,0xaf,0x74,0x9f,0xfb,0xf9,
|
||||
0xc1,0x68,0xf9,0x2a,0xc9,0xf8,0xe6,0xf0,0x51,0xff,0xf1,0xd,0x6e,0xbf,0x24,0xf9,
|
||||
0x85,0xb4,0xe3,0xef,0xaf,0xb2,0x66,0xfb,0x80,0xff,0xfa,0xd8,0xcd,0xd6,0x17,0xf5,
|
||||
0xfd,0x74,0xce,0xfe,0x5,0xdb,0xfd,0x8b,0xe8,0xeb,0x5f,0x8e,0x12,0xfb,0x78,0xd7,
|
||||
0x6f,0x12,0x9f,0xb3,0x7f,0x16,0xb8,0xfd,0x33,0xe7,0xfd,0x24,0x70,0xd,0x9,0x46,
|
||||
0xff,0x17,0x54,0xbf,0x82,0xbc,0xfe,0x2f,0x89,0x2f,0xc2,0xfd,0xb9,0xbf,0x7f,0x86,
|
||||
0x81,0xf5,0x2b,0x76,0x7f,0xde,0xe1,0x8d,0x1f,0x4,0xbc,0x4e,0xe7,0xe1,0xf3,0xb5,
|
||||
0x1f,0xb2,0xf2,0x55,0xcf,0x5d,0x1f,0x42,0x1d,0xd3,0xf7,0x88,0x37,0xfe,0x92,0x36,
|
||||
0x9c,0x47,0xfb,0xfd,0x3e,0x24,0xbf,0x78,0x7d,0x8f,0xd8,0xf1,0xe5,0xe5,0x97,0x84,
|
||||
0xfb,0x5f,0xcd,0xf2,0x9d,0xa,0xd1,0x7d,0x95,0x30,0x9f,0x34,0x1f,0x5f,0x58,0xbe,
|
||||
0xd2,0x7d,0xaf,0x54,0xad,0xfa,0x95,0xe5,0xe3,0x1d,0xdf,0xc5,0xfb,0x6,0xfa,0xf5,
|
||||
0xc1,0xe6,0x8f,0xe4,0xab,0x13,0x18,0x96,0xaf,0x12,0xee,0x7f,0x15,0xc9,0xb7,0x55,
|
||||
0x77,0x3c,0xf8,0x3d,0xfe,0x4a,0xc5,0x35,0x3f,0x68,0xcd,0x6f,0x3d,0x81,0x61,0xfd,
|
||||
0x4b,0xf6,0xf7,0x6f,0x47,0x56,0xff,0x57,0x7d,0xbe,0xe5,0xe8,0x5f,0x6a,0xd,0xfe,
|
||||
0xfc,0xe0,0xef,0x59,0xfd,0x5,0x66,0xb8,0xff,0x55,0x88,0xcf,0x1a,0xdf,0x8,0x7e,
|
||||
0x69,0x87,0xe3,0x33,0xf3,0x95,0x3d,0x3f,0x38,0x97,0xfd,0xaf,0x82,0x7d,0x56,0x3e,
|
||||
0x20,0xd4,0xe9,0x3,0xb5,0xa6,0xd3,0xe7,0x98,0x1f,0x84,0xf3,0xa8,0x5f,0x85,0xf8,
|
||||
0xac,0xf5,0x57,0x47,0xaf,0xb9,0x7d,0x9e,0xf5,0xed,0x73,0xad,0x5f,0x45,0x69,0x3f,
|
||||
0xfc,0x86,0xdb,0x17,0xfb,0xf9,0xbc,0xb9,0xf8,0x76,0x33,0xf5,0x65,0x5f,0xbf,0xb7,
|
||||
0xf3,0x55,0xf5,0x5e,0x2b,0x96,0x2f,0xcb,0xfd,0xaf,0x66,0xd4,0x87,0xf4,0xf5,0x7,
|
||||
0xae,0xfe,0xf,0xde,0xaf,0x1a,0xf3,0x83,0xc1,0xbe,0x2c,0xf7,0xbf,0xa,0xf7,0x71,
|
||||
0xd6,0x5f,0x59,0xf9,0x2a,0xd8,0xe7,0xda,0xff,0xea,0xee,0xcd,0xcb,0x86,0x6f,0x3a,
|
||||
0x8f,0xf9,0x19,0xbf,0xcf,0xca,0x57,0xc1,0x3e,0xd7,0xfe,0x57,0xd5,0xde,0xc4,0xf0,
|
||||
0x9d,0x2f,0xc6,0x67,0x8d,0xbf,0xc1,0x3e,0xd7,0xfe,0x57,0x95,0xd1,0x64,0x7e,0xc7,
|
||||
0x97,0xdc,0x49,0xeb,0x7b,0xa9,0x32,0x22,0xf3,0xf3,0xd1,0x9f,0xa6,0xf7,0x49,0x37,
|
||||
0x99,0x6f,0xe,0xf3,0xbf,0x62,0x5a,0xdf,0xab,0x15,0xf8,0x11,0xf3,0xd5,0x17,0x71,
|
||||
0xfd,0xc6,0xf7,0xb1,0xf3,0x2f,0xdd,0xfa,0x3,0xd7,0xf3,0x47,0xec,0x67,0x4c,0xef,
|
||||
0xd2,0xd4,0x3e,0xf5,0xfa,0x48,0xb1,0xff,0x15,0xf0,0xfd,0xc,0xed,0xf9,0xad,0x90,
|
||||
0xfa,0x41,0x4c,0x5f,0x55,0xeb,0x5f,0xd2,0xee,0x3f,0xa4,0xf,0xe0,0xcc,0x21,0x17,
|
||||
0x43,0xeb,0x2f,0xb3,0x7c,0x9e,0xfd,0xdb,0xab,0x5a,0xff,0x9c,0xf5,0xfe,0x57,0xc1,
|
||||
0xcf,0xf,0xc6,0xf5,0xa5,0xde,0xff,0x8a,0xce,0xb9,0xfd,0xd8,0xb7,0x4a,0xb5,0xbf,
|
||||
0x59,0x86,0xe7,0x1f,0xf7,0xb3,0x9b,0x81,0x8f,0x7b,0xfd,0x66,0xe4,0x4b,0xb1,0xff,
|
||||
0x55,0xf0,0x67,0xd6,0xfa,0xd,0xfe,0xfb,0x7,0xa9,0xb9,0x8e,0xd7,0xfb,0xad,0x92,
|
||||
0xae,0xbf,0x4a,0xee,0xd3,0xdf,0x5f,0xe6,0xf7,0x99,0xeb,0xc8,0x39,0xbe,0xe4,0xfb,
|
||||
0x27,0x26,0xf2,0x11,0x10,0xe0,0xbb,0x15,0xe4,0xdb,0x58,0xac,0xef,0x57,0x1,0xbe,
|
||||
0xa0,0xe3,0xbb,0x88,0xf5,0x1b,0xe,0x9f,0xf2,0x71,0xce,0x7d,0xbd,0x98,0xd7,0xc7,
|
||||
0x82,0x7d,0x38,0xe0,0xfa,0xa0,0x4b,0xf4,0xad,0x7f,0x6f,0x2c,0xcb,0xfd,0xe2,0x96,
|
||||
0xb6,0xfe,0x0,0x71,0x7d,0x64,0xa9,0xbe,0x9a,0x4,0xab,0xd5,0xdb,0xa8,0xaa,0xad,
|
||||
0x7f,0x19,0x1c,0xe5,0xd0,0x7,0x2a,0x15,0xf1,0xf6,0x4,0x7,0xaf,0xcf,0xa1,0x57,
|
||||
0x97,0xe8,0x23,0x18,0x54,0x20,0xbd,0x33,0xa1,0x20,0xde,0xf8,0x86,0x16,0xb4,0xbe,
|
||||
0x49,0xf5,0xbd,0xe,0xc9,0xe4,0x32,0x35,0xe6,0x7,0x4b,0x39,0xf4,0x9,0x15,0x32,
|
||||
0x21,0x39,0x6e,0xbf,0x4a,0xa5,0x35,0x21,0x58,0xc,0xf5,0x61,0xf9,0x2b,0x45,0x7a,
|
||||
0xa9,0xfd,0xca,0xda,0x83,0x31,0xad,0x6f,0x6e,0xa6,0x7a,0x7e,0x35,0xa6,0x4f,0xbd,
|
||||
0x7e,0x6b,0x13,0x5a,0x9d,0xe1,0xc3,0xa,0xa2,0x6b,0x0,0xee,0xec,0xc0,0xb5,0xba,
|
||||
0xb6,0xb5,0xf0,0xa2,0x7c,0xb4,0x76,0x32,0x96,0xc7,0xb7,0xe9,0x96,0xbe,0xbf,0xe8,
|
||||
0x61,0x88,0xf,0x6b,0xbe,0xde,0xe,0x68,0xd5,0x16,0xea,0x13,0x8c,0xa,0x96,0x91,
|
||||
0xaf,0x60,0x4,0x1f,0xae,0xe1,0x5a,0xaa,0xfd,0xaf,0xe2,0xf9,0x44,0xeb,0x96,0x2f,
|
||||
0x30,0x5f,0xe9,0xe7,0xdf,0xd3,0xaa,0xaf,0x5d,0x71,0xfa,0x92,0xae,0xbf,0x4a,0x91,
|
||||
0xaf,0xf6,0x42,0xdb,0xef,0x12,0x80,0xdd,0x7,0x0,0x55,0x51,0x2d,0xd1,0xfe,0x57,
|
||||
0x73,0xcb,0x2f,0xcc,0x57,0x55,0x7d,0x22,0x80,0x55,0x58,0x4b,0xb2,0xff,0x55,0x16,
|
||||
0x3e,0x25,0xd4,0x57,0xd3,0x7d,0x3f,0xba,0xe,0x6a,0x49,0xf6,0xbf,0xca,0x22,0x5f,
|
||||
0xf1,0x7c,0x97,0x54,0x18,0xd2,0xfb,0x97,0xba,0x36,0xb5,0x4,0x85,0x8a,0x58,0x4b,
|
||||
0xb2,0xff,0x55,0x8a,0x7c,0xa5,0xa8,0xf9,0x6a,0x2b,0x28,0x5f,0xad,0x9d,0x92,0x1a,
|
||||
0x94,0xff,0xa9,0xda,0x3f,0xaf,0xb5,0x5f,0xa9,0x8a,0x63,0x5a,0x59,0xdd,0x4c,0xb2,
|
||||
0xff,0x55,0x8a,0x7c,0x75,0x4f,0x42,0xd5,0x6a,0x50,0xbe,0x5a,0x3b,0x56,0x6a,0xfd,
|
||||
0xab,0xdf,0xf4,0x7f,0xab,0xa4,0xef,0x1f,0x8c,0x9f,0xaf,0xde,0x97,0x26,0x58,0x8,
|
||||
0x1a,0x3f,0xd6,0xd4,0xe3,0xdb,0xfa,0xfc,0x63,0x9e,0xef,0x5e,0xb6,0xbe,0x75,0x73,
|
||||
0x65,0xaf,0x2f,0x5f,0x29,0x93,0x9,0xfd,0x6e,0x98,0xaf,0x3e,0xea,0x51,0x72,0xc9,
|
||||
0xe7,0x4b,0xf4,0xfe,0xc1,0xe0,0xf,0xdb,0xc6,0xdd,0x97,0xaf,0x14,0x35,0x5f,0x5d,
|
||||
0xf,0xca,0x57,0xea,0xf5,0xf1,0x66,0x6b,0xd4,0xe3,0x1f,0x8a,0x6c,0xc7,0x37,0x1a,
|
||||
0x90,0xaf,0x14,0x35,0x5f,0x5,0xce,0x6f,0x55,0x31,0xbd,0xd7,0xf3,0xfa,0xc6,0xd7,
|
||||
0x93,0xad,0xbf,0x4a,0xe2,0x33,0xf2,0x55,0xa0,0xaf,0xa6,0x1e,0x5f,0xd5,0xa7,0x25,
|
||||
0x2c,0x7b,0x78,0x86,0x7,0xc9,0xd7,0xf,0xc5,0xf4,0xa9,0xd7,0x6f,0x5d,0xcd,0x57,
|
||||
0x81,0xbe,0xba,0xea,0x1b,0xa9,0x3e,0xb5,0x7,0xec,0x58,0xbf,0x9,0x86,0xb,0xf2,
|
||||
0xe9,0xf9,0x4a,0x91,0xa8,0xde,0xff,0x9d,0xe0,0x80,0xeb,0x63,0x72,0x55,0xf3,0xe1,
|
||||
0x47,0xec,0xf7,0x4e,0xe7,0xe2,0x2b,0xec,0xb4,0x67,0xe4,0x2b,0x7d,0xff,0x2b,0xf9,
|
||||
0x7e,0xc9,0xdc,0x5f,0xb4,0x88,0xdc,0x23,0x1c,0xf4,0xf8,0x6e,0x67,0xea,0x23,0xf8,
|
||||
0x21,0x10,0xc2,0xf3,0x95,0xbe,0xbf,0x40,0x95,0x3d,0x7f,0x24,0xa1,0xa1,0x3b,0x61,
|
||||
0x79,0x7c,0xed,0x93,0x4c,0x7d,0x8a,0xf2,0x8e,0xb1,0x61,0x77,0x70,0xbe,0x32,0xf6,
|
||||
0x97,0xea,0x9a,0xbe,0x11,0x3e,0x8,0x6f,0x3f,0x9a,0xad,0x8f,0xce,0xf2,0x29,0x86,
|
||||
0x4f,0x2e,0x9b,0x3e,0xda,0xf0,0xf8,0x36,0x69,0xd9,0xf0,0xb5,0xb,0xda,0xfa,0xa6,
|
||||
0xac,0x7d,0x1f,0xcc,0xf2,0xe9,0xfb,0x5f,0x55,0x30,0x70,0xfb,0xb4,0x19,0x85,0x82,
|
||||
0xee,0x7b,0xc0,0x7c,0xc6,0xfe,0x57,0x52,0xa6,0xfd,0x9f,0x72,0x38,0xcb,0x87,0x8d,
|
||||
0xfd,0xaf,0x28,0x30,0xd7,0x5f,0x51,0x63,0x93,0x98,0xa9,0xfe,0x7a,0x58,0x6d,0xb9,
|
||||
0xce,0x9f,0xa,0xe,0xdf,0x9,0x38,0xc9,0xd6,0xa7,0xfc,0x2c,0xc8,0x47,0x8a,0x5b,
|
||||
0xda,0xfe,0xa2,0xc8,0xd8,0x5f,0xca,0xf4,0x61,0x85,0x18,0xd7,0xef,0x54,0x13,0x69,
|
||||
0x9,0xb,0x3e,0x2c,0x39,0x8e,0x6f,0xd6,0xe3,0x5b,0x98,0xf,0xe9,0xf7,0xbf,0x3,
|
||||
0xc3,0xd7,0x65,0xbe,0xf3,0x55,0xdb,0xa7,0xff,0xdb,0xf6,0x26,0x6b,0xbf,0x83,0xec,
|
||||
0x7d,0x4,0x3f,0xe6,0xf4,0x2f,0xc6,0x97,0x1c,0xf9,0xa,0xa0,0xa6,0x68,0xf8,0x8,
|
||||
0x42,0x5e,0xdf,0x80,0xf9,0xae,0xcf,0x21,0x1f,0x70,0xfb,0x67,0xd3,0x47,0x8b,0x96,
|
||||
0x4f,0xbe,0x6f,0x5e,0xbf,0xb4,0xe8,0xf3,0xc9,0xa6,0x6f,0x3a,0x97,0xfa,0xb,0xd,
|
||||
0xba,0xff,0x20,0x97,0x69,0xd8,0xfa,0x2b,0x6a,0xbf,0x5a,0xc7,0x9c,0x17,0x3c,0x5d,
|
||||
0xb0,0x8f,0xd0,0xe0,0xfd,0xf,0x78,0xed,0x7,0x17,0xed,0xc3,0xd1,0x7c,0x63,0xc7,
|
||||
0xf5,0x9b,0x7d,0xfd,0x34,0xd8,0x17,0x92,0xaf,0x5c,0xbe,0x3d,0x47,0xff,0xb7,0x50,
|
||||
0x9f,0x91,0xaf,0xf8,0xf3,0x83,0x53,0x6b,0xfa,0x77,0xbb,0xe8,0xf2,0x91,0x45,0xf9,
|
||||
0xcc,0xf1,0x43,0x9f,0x1f,0x6c,0xcb,0xe6,0xf3,0xf1,0x1c,0xdf,0xdb,0x65,0xd3,0x37,
|
||||
0xb9,0x9e,0xd1,0xfb,0x7,0x63,0xf9,0x88,0xbe,0xff,0x41,0x55,0x2c,0x7,0xd5,0x77,
|
||||
0xff,0x94,0x8d,0xbf,0xd2,0x41,0x46,0xef,0x1f,0x4c,0xe0,0xab,0xf4,0xc5,0x20,0xdf,
|
||||
0x6,0xf3,0xf5,0x87,0xcb,0x38,0xbe,0x8a,0xb1,0xff,0x95,0x12,0xe8,0xdb,0x5c,0xb2,
|
||||
0x4f,0x99,0xe1,0x3,0xce,0x7c,0x9a,0xea,0xfd,0x83,0x89,0x7c,0xd8,0xd8,0xff,0xa,
|
||||
0x8b,0xb3,0xe6,0x17,0x2c,0x5f,0x7d,0x41,0xfd,0x4b,0x71,0xb,0xb2,0xfa,0x15,0x80,
|
||||
0x28,0xd8,0x87,0xdd,0xbe,0x8c,0xd7,0x1f,0x4,0xfb,0x50,0xb5,0xc3,0xea,0x57,0x0,
|
||||
0xfe,0x6d,0x29,0xc8,0x67,0x15,0x30,0xe1,0x41,0xca,0xf7,0xf,0xc6,0xf4,0x4d,0xb0,
|
||||
0xbd,0xbf,0x28,0x12,0x3,0xdb,0x8f,0x10,0x47,0x7d,0x23,0xf5,0xfa,0x97,0x38,0x3e,
|
||||
0x6a,0xef,0x2f,0xea,0xed,0x9f,0x9d,0xeb,0x87,0x84,0x7f,0x6f,0xd7,0x87,0x16,0xe9,
|
||||
0xbb,0x4c,0xbd,0xfb,0x8b,0xf2,0x7d,0xef,0x6d,0xb2,0x6,0xcc,0x60,0xfd,0x55,0xac,
|
||||
0x7c,0x55,0x89,0xb4,0xfe,0x6a,0x6f,0xd3,0xfe,0xfd,0x45,0xb6,0x1f,0xc1,0x85,0x48,
|
||||
0xeb,0xff,0xf6,0xa,0xcb,0xf1,0xd1,0x2a,0x8c,0xe4,0x7b,0xb0,0xe1,0xf2,0x2d,0xec,
|
||||
0xfa,0xa5,0x7a,0xff,0x77,0x12,0xf0,0xfc,0x20,0xb2,0xde,0xaf,0xbb,0x7b,0xe8,0xf2,
|
||||
0x2d,0xaa,0xff,0x73,0xe7,0x2b,0xf3,0xfe,0x48,0x2e,0x15,0x37,0xd,0xdf,0xd0,0xda,
|
||||
0xdf,0x7b,0x8a,0x5d,0xbe,0x45,0x8d,0x1f,0xee,0x7c,0xd5,0x4,0xac,0x7e,0x55,0x33,
|
||||
0x7c,0x7,0x81,0xfb,0x4b,0x6d,0x2c,0x23,0x5f,0xb1,0xfb,0xf3,0x11,0x36,0x7d,0x28,
|
||||
0xd3,0xfd,0xaf,0x52,0xe4,0x17,0x63,0xff,0x2b,0x6a,0xd5,0x87,0xb0,0xe9,0xd3,0xf6,
|
||||
0x67,0x90,0xaf,0xee,0x60,0xa,0x37,0x73,0xe0,0x23,0x56,0x7d,0x6d,0x9f,0xf9,0xe4,
|
||||
0xf2,0x11,0x1e,0x3d,0x3c,0xa5,0x9d,0xda,0x32,0x7d,0x18,0x79,0xea,0x57,0xac,0xfd,
|
||||
0xb4,0xe7,0x7,0xf1,0xe8,0x9d,0xe3,0xd6,0xa3,0xe5,0xf8,0x88,0x39,0x3f,0x8,0xdd,
|
||||
0xf5,0x2b,0xcb,0xa7,0xed,0xcf,0xa0,0xfa,0x70,0x17,0xe2,0xe5,0xf8,0xcc,0xf9,0xc1,
|
||||
0x5d,0x77,0xfd,0xca,0xba,0x3e,0xb4,0xfd,0x19,0xf0,0xe8,0x83,0xe5,0xf9,0x26,0x76,
|
||||
0xfd,0x0,0x20,0xd6,0xbf,0x10,0xd6,0xbf,0xe8,0xcf,0x6f,0xc9,0x57,0x3f,0xc0,0x43,
|
||||
0x88,0x96,0xe4,0xb3,0xeb,0x2f,0xce,0xfa,0xd5,0xa6,0xc3,0x87,0x95,0x9f,0xa9,0x3e,
|
||||
0xc7,0x2b,0x17,0x17,0x5b,0xbf,0x9a,0xb9,0xbf,0xa8,0xe6,0xeb,0x42,0xb0,0x1c,0x5f,
|
||||
0x58,0xfd,0xca,0x6a,0xbf,0xc7,0xaa,0x4f,0x5c,0x92,0xf,0x47,0xf0,0xed,0xe0,0x16,
|
||||
0x5c,0xf5,0x7d,0xb7,0xa5,0xd7,0xaf,0xb2,0xdd,0xff,0x2a,0x55,0xfd,0x2a,0x60,0xff,
|
||||
0x2b,0x9c,0xe9,0xf3,0xd3,0x29,0xf2,0xd5,0x90,0x9f,0xaf,0x4e,0x3b,0x59,0xee,0x7f,
|
||||
0x95,0x22,0xbf,0x1c,0xf0,0xf3,0xd5,0xf1,0xa3,0x2c,0xf7,0xbf,0x4a,0xe1,0x43,0xfc,
|
||||
0x7c,0x85,0x61,0x96,0xfb,0x5f,0xa5,0xc8,0x2f,0x88,0x9f,0xaf,0x2,0x7d,0xd,0x90,
|
||||
0x13,0x5f,0x56,0xfb,0x5f,0x65,0x93,0xaf,0x44,0x96,0xaf,0x10,0xf3,0x65,0xb5,0xff,
|
||||
0x55,0xca,0x7c,0x65,0xec,0x2f,0xa5,0xbf,0x2e,0x44,0xcf,0x57,0x30,0xac,0x7f,0xc9,
|
||||
0x7e,0xfd,0xd5,0xcc,0x7c,0x65,0xf8,0xfa,0x94,0xe5,0x2b,0xc0,0x7c,0x59,0xed,0x7f,
|
||||
0x95,0x49,0xbe,0x62,0xeb,0xf,0x48,0xc8,0xfb,0x93,0xe9,0x1c,0xd6,0x5f,0x45,0xcd,
|
||||
0x57,0x77,0x4b,0x2c,0x5f,0xad,0x86,0xfb,0x32,0x5e,0x7f,0x15,0x9a,0xaf,0xe0,0x42,
|
||||
0xf6,0xbf,0x4a,0x9e,0xaf,0xe0,0x82,0xf6,0xef,0x4c,0x9a,0xaf,0x40,0xae,0x7d,0x61,
|
||||
0xeb,0xdb,0xf3,0x91,0xaf,0xa,0xa1,0xf5,0xab,0x9c,0xe4,0x2b,0x73,0x7e,0x50,0x60,
|
||||
0xf9,0xa,0xb2,0xfa,0x15,0x6f,0xfc,0x58,0xbc,0x8f,0xe8,0xf3,0x1f,0x55,0xf6,0xfe,
|
||||
0x41,0x89,0xed,0x7f,0x75,0xd0,0xe4,0x8d,0xbf,0xcb,0xf2,0x55,0x7a,0x2,0xcb,0x57,
|
||||
0xe6,0xfe,0x57,0xa8,0xc9,0xcb,0x2f,0x8b,0xf7,0x19,0xfb,0x23,0x55,0xd8,0xf8,0x3b,
|
||||
0x62,0xe3,0x6f,0xfe,0x7d,0xf9,0x38,0xbe,0xd8,0xd8,0xff,0xca,0xf4,0xa9,0xf9,0xca,
|
||||
0xf2,0x2d,0xf9,0xfa,0x50,0xf3,0x15,0xb0,0xe7,0x7,0x7d,0xf9,0xa,0x35,0x97,0xdc,
|
||||
0xbf,0xa8,0xf9,0x6a,0xdb,0x9e,0x1f,0x4,0xcc,0x87,0x99,0x6f,0x7f,0xd9,0xfd,0xf3,
|
||||
0x4,0xdf,0x72,0xcc,0xf,0xa,0x2c,0x5f,0xcd,0x65,0xff,0xab,0x64,0xf9,0xa,0x38,
|
||||
0xe6,0x7,0x5,0x96,0xaf,0x72,0xe3,0x63,0xcf,0xf,0xe6,0x37,0x5f,0x81,0x8b,0x7c,
|
||||
0x95,0x2a,0x5f,0x81,0x9c,0xe7,0x2b,0xcd,0x87,0x63,0xbd,0x1f,0x67,0xf1,0xe3,0xc7,
|
||||
0x69,0xc0,0xfc,0x20,0xcd,0x49,0xbe,0x3a,0xee,0xf1,0xeb,0x57,0x34,0x4f,0xe3,0x2f,
|
||||
0xa7,0x7e,0x45,0x73,0x92,0x5f,0xf0,0x6f,0xa8,0x7b,0xfd,0x38,0xf3,0xbd,0x97,0x13,
|
||||
0xdf,0xff,0xd,0xf0,0xfd,0x4d,0x4e,0x8e,0xaf,0xb9,0xfe,0xa,0xb0,0x7c,0xc5,0x7c,
|
||||
0x78,0xf9,0xf9,0x6a,0xcb,0x3a,0xff,0x98,0xf,0x2b,0x96,0x2f,0x7,0xf9,0xaa,0xca,
|
||||
0xfa,0x3f,0xce,0xfc,0x20,0xcd,0x41,0xbe,0xaa,0xce,0x9a,0x1f,0x5c,0x72,0xbe,0xaa,
|
||||
0xce,0x9a,0x1f,0x5c,0x72,0xbe,0xaa,0xe6,0x3c,0x5f,0x55,0x73,0x9e,0xaf,0xaa,0x39,
|
||||
0xcf,0x57,0x5f,0x84,0xf9,0xc1,0x40,0x5f,0x4e,0xf2,0x95,0xdb,0x27,0x5f,0xb1,0xea,
|
||||
0xcf,0x39,0xc9,0x57,0x6e,0x1f,0x1e,0x21,0x9c,0xaf,0x7c,0xe5,0xf5,0x61,0x94,0xaf,
|
||||
0x7c,0x15,0xe8,0xdb,0xcf,0xa9,0xf,0xe6,0xf9,0xf8,0xca,0x57,0x6d,0x5f,0x2e,0xaf,
|
||||
0xf,0xc5,0xf6,0xe5,0xb1,0x7f,0xb1,0xe7,0x7,0x97,0x9e,0xaf,0x2,0x7c,0x21,0xef,
|
||||
0x77,0xce,0x83,0x2f,0xec,0xfd,0xce,0x4b,0xf7,0xe5,0x2a,0x5f,0x71,0xdb,0x2f,0x47,
|
||||
0xf9,0xe5,0xb,0xef,0xcb,0xc7,0xf5,0x1b,0x58,0xbf,0xda,0xc8,0x53,0xfd,0x6a,0x70,
|
||||
0xb7,0xc4,0xf2,0x95,0xb9,0xbe,0x98,0xa2,0x9c,0xd4,0xaf,0x80,0x5e,0xdf,0x10,0x59,
|
||||
0x7d,0x43,0x9b,0xd7,0xa,0x7e,0x3f,0xdd,0x12,0x8e,0xef,0xaf,0x74,0x9f,0xf6,0x94,
|
||||
0xba,0x91,0xf,0x4,0xd3,0x7,0x73,0x52,0x1f,0xfa,0x38,0xe7,0x3e,0xa3,0xfe,0xc7,
|
||||
0xe6,0x8f,0x46,0xf8,0x3b,0xcc,0x97,0xab,0xf9,0x41,0xd3,0xa7,0xe6,0xab,0xe7,0x4c,
|
||||
0x1f,0x58,0xe6,0xf5,0xf1,0x3d,0x59,0xee,0x5f,0x2e,0x16,0xec,0xfa,0x95,0x3d,0xff,
|
||||
0xc6,0xea,0x2f,0x60,0x89,0xfd,0xb,0x91,0x50,0xf5,0xf6,0x4,0x41,0xbb,0x7e,0x65,
|
||||
0xaf,0xbf,0xb2,0x7c,0x4b,0xec,0x9f,0x9,0x70,0xef,0x2f,0xea,0x7c,0x7f,0x63,0x1e,
|
||||
0xea,0x57,0xa,0xa8,0xd0,0x3b,0x13,0xcc,0x7d,0xff,0xe0,0x66,0x3e,0x7c,0x64,0x72,
|
||||
0x19,0xe7,0x76,0x7e,0x50,0xf7,0xe5,0x78,0xfe,0x4d,0xf5,0x85,0xef,0x2f,0xba,0x6c,
|
||||
0x9f,0x84,0x6a,0x13,0x6d,0x29,0x62,0x4e,0xf3,0x15,0x39,0x91,0xc7,0xb7,0x49,0x51,
|
||||
0xf3,0xe1,0xc3,0x1c,0xd6,0xaf,0xb4,0x47,0x8e,0xcd,0xfd,0xaf,0x4e,0xa1,0x9e,0xaf,
|
||||
0xd6,0xca,0x2c,0x5f,0x6d,0xe4,0xe1,0xfe,0x5c,0xb0,0xf6,0xbf,0x32,0xf3,0x55,0xcb,
|
||||
0xca,0x57,0xa2,0xe9,0x13,0x73,0x32,0xfe,0xee,0x51,0xf7,0xfe,0x57,0x2c,0xbf,0xfc,
|
||||
0x38,0x57,0xf9,0xc5,0xf6,0xb1,0xf7,0xbf,0xbd,0x95,0x13,0x9f,0xf1,0xfc,0xe5,0x6f,
|
||||
0xcb,0xbe,0xf9,0xd5,0x5c,0xcd,0xf,0xfe,0x6,0xb0,0x7c,0x85,0xf3,0x70,0x7d,0x9c,
|
||||
0x9f,0xc,0xd4,0x7c,0xe5,0x98,0x1f,0xb4,0xe7,0xdf,0x70,0x1e,0xea,0x57,0x13,0x9,
|
||||
0xaa,0xf9,0x2a,0xbf,0xf3,0x83,0x13,0x50,0xb9,0xed,0xdc,0xff,0xa,0xb2,0xf9,0x41,
|
||||
0x5,0x55,0xf3,0x50,0x3f,0x90,0x0,0x54,0xf3,0xd5,0x77,0xed,0x7c,0xc5,0xe6,0x7,
|
||||
0xf3,0x91,0xaf,0x54,0xdf,0x40,0xcd,0x57,0xd7,0x73,0x3b,0x3f,0xa8,0xb6,0xdf,0x24,
|
||||
0xcf,0xf3,0x6f,0x12,0xa8,0xe4,0xdb,0x27,0xa9,0xed,0x87,0xf2,0x3b,0x3f,0x38,0x39,
|
||||
0x81,0x12,0x31,0xfa,0x3f,0x1c,0xe0,0xdb,0x5b,0x66,0xff,0x87,0xec,0x7c,0xa5,0xef,
|
||||
0x2f,0x3a,0xb8,0x6f,0xd5,0xaf,0x50,0x1e,0xee,0xcf,0xb1,0x9d,0xaf,0x8c,0xfd,0x9b,
|
||||
0xd8,0xf3,0x3d,0x23,0x63,0x7f,0xd1,0x1c,0xe5,0x2b,0xee,0xfe,0xa2,0xaa,0x6f,0x33,
|
||||
0x27,0xf9,0xc5,0xf0,0xfd,0xda,0xca,0x2f,0xd,0x36,0xfe,0xe6,0xc4,0x67,0xec,0x2f,
|
||||
0x6a,0xaf,0x5f,0x63,0x3e,0x9c,0x93,0xe3,0x6b,0xec,0x2f,0xa,0xac,0x7c,0xc5,0xc6,
|
||||
0xdf,0x65,0xae,0xbf,0xfa,0x70,0xba,0xa6,0xa8,0xf9,0x6a,0x93,0xf5,0x2f,0x80,0xf9,
|
||||
0xb0,0x72,0x8e,0x72,0x90,0xaf,0xaa,0xb5,0xc7,0xe7,0xd2,0x44,0xbf,0xff,0xc5,0xdc,
|
||||
0xfd,0x45,0x97,0x9c,0xaf,0x2a,0x8d,0xdf,0x9e,0x4b,0xee,0x7c,0x25,0xb2,0x7c,0x85,
|
||||
0x96,0x3f,0xbe,0x11,0xd8,0x20,0xe7,0x93,0x9,0x2e,0xf2,0xf2,0x55,0x4e,0x7c,0xe8,
|
||||
0xce,0x65,0x9c,0xd7,0xf5,0x57,0x9a,0x6f,0x7c,0x27,0xc2,0xfe,0x7,0xcb,0xf3,0xf5,
|
||||
0x51,0x9e,0x7d,0xa8,0xb6,0x3,0x3f,0xc8,0x71,0xbe,0xba,0x3b,0x5d,0x83,0xef,0x98,
|
||||
0xf9,0x2a,0x68,0x7e,0x10,0x2d,0xb1,0xff,0x13,0x1c,0xf5,0x2b,0x63,0x7e,0xd0,0xdc,
|
||||
0xbf,0x4e,0xcd,0x57,0xec,0xfe,0x68,0xb8,0xc4,0xf1,0x43,0xab,0x51,0xb1,0x7c,0x65,
|
||||
0xd4,0x37,0x44,0x96,0xf,0xac,0xfa,0xfd,0x30,0x47,0xf5,0xd,0x6b,0x7f,0x51,0x47,
|
||||
0xfd,0xe5,0x20,0x27,0xf9,0xc5,0xc8,0xa7,0x3d,0xcb,0x87,0x73,0xe6,0x53,0x3c,0x3e,
|
||||
0x36,0x3f,0xdd,0xc8,0x55,0xfd,0xaa,0x2b,0x7a,0xeb,0x57,0x1b,0x4b,0xbc,0x3e,0xbe,
|
||||
0x27,0x2b,0x5a,0xfd,0xa,0xda,0xf5,0xab,0x3,0xd1,0x5b,0xbf,0x5a,0x62,0xff,0x42,
|
||||
0x24,0x74,0x4f,0xab,0x5f,0x75,0xec,0xfa,0x95,0xb9,0xbf,0xa8,0xa3,0x7e,0x85,0x96,
|
||||
0xd7,0x3f,0x13,0x50,0x79,0x5f,0xf5,0x39,0xf6,0x17,0x85,0xa2,0x98,0xa3,0xf9,0x41,
|
||||
0x5,0x54,0x14,0xad,0x7e,0x65,0xef,0x2f,0xca,0xfa,0xe7,0x7c,0xd4,0xaf,0x34,0xdf,
|
||||
0x40,0xcd,0x57,0x8f,0x72,0x9a,0xaf,0x8c,0xf6,0x23,0xb8,0x92,0xd3,0xfc,0xa2,0x4d,
|
||||
0xf,0x6a,0xbe,0x42,0x5e,0x7d,0x12,0xaa,0xab,0x3e,0x4,0x73,0x9a,0xaf,0xc8,0x89,
|
||||
0xda,0xff,0x49,0xa4,0x8,0x73,0xfa,0xfc,0xa0,0xbe,0x23,0xb1,0x3b,0x5f,0xb1,0xe7,
|
||||
0x7,0xaf,0xe4,0xe2,0xf9,0x41,0xc1,0x97,0xaf,0x58,0xfd,0xde,0xce,0x57,0x38,0x57,
|
||||
0xf9,0xca,0xff,0xfc,0x20,0xce,0x49,0x7e,0x31,0xf6,0xef,0x4,0xc0,0x9b,0xaf,0x86,
|
||||
0xb9,0xf2,0xf5,0xcb,0x5e,0x5f,0x5e,0x8e,0x2f,0xf2,0xd4,0xaf,0x50,0xe,0xea,0x57,
|
||||
0xa4,0xf1,0xb7,0x57,0xd9,0xfc,0x20,0x74,0xd7,0xaf,0x72,0xb1,0xbe,0x5d,0x79,0xaf,
|
||||
0x7f,0x26,0x99,0xf3,0x83,0xde,0xfd,0x45,0x41,0xe,0xea,0x57,0xca,0xfb,0xfd,0x27,
|
||||
0x92,0x73,0xff,0x2b,0xc7,0xfc,0xa0,0xb8,0xfc,0xf1,0x8d,0xe2,0xf7,0xfb,0xca,0xc4,
|
||||
0xe9,0x73,0xd4,0xaf,0x56,0xf3,0xe0,0xfb,0x40,0xf5,0x5d,0xc6,0x9d,0xbc,0xce,0xf,
|
||||
0xe2,0xc6,0xcb,0xca,0x24,0xbf,0xf5,0xa1,0x2f,0x80,0xef,0xa1,0x92,0xe7,0xf9,0x41,
|
||||
0xa5,0xd1,0x57,0xd8,0xfc,0x20,0xcc,0x5f,0xbe,0xa2,0x8a,0x23,0x5f,0x75,0x3c,0xf9,
|
||||
0x2a,0xf,0xcf,0x47,0x11,0x47,0xbe,0x7a,0xe4,0xc9,0x57,0x9d,0x9c,0x8d,0xbf,0xd0,
|
||||
0x93,0xaf,0x1e,0xe5,0x2c,0x5f,0x41,0x4f,0xbe,0x62,0xc7,0x17,0xe5,0xdd,0x97,0xa3,
|
||||
0xe3,0xab,0xe6,0x2b,0xd1,0xfb,0xfc,0x20,0x5c,0x6e,0xbe,0xfa,0x9a,0x27,0x5f,0x9,
|
||||
0xde,0x7c,0x5,0x96,0x9b,0xaf,0x10,0x5b,0x7f,0x65,0xf8,0xec,0xf5,0xed,0xcc,0xb7,
|
||||
0xb1,0xdc,0x7c,0xa5,0xfa,0x9c,0xf9,0x8a,0xad,0x3f,0x50,0x72,0xb1,0xff,0x95,0x9a,
|
||||
0xaf,0xd0,0x1d,0x57,0xbe,0xba,0x5b,0x62,0xf9,0x2a,0x17,0xbe,0xf,0xfa,0xda,0xfc,
|
||||
0x20,0xcc,0x71,0xbe,0xd2,0xe6,0xdf,0x60,0x8e,0xf3,0x95,0xe6,0x3,0x39,0xce,0x57,
|
||||
0xaa,0x2f,0xbf,0xeb,0xdb,0xd5,0x7c,0x25,0xab,0xf9,0xaa,0x10,0x56,0xbf,0x82,0x39,
|
||||
0xc9,0x57,0xe6,0xfc,0xa0,0xe0,0xad,0x5f,0x75,0x72,0x92,0xaf,0x8c,0xf5,0xd9,0x6c,
|
||||
0x7f,0x51,0xbb,0x7e,0xf5,0x28,0x57,0xfb,0x5f,0xd9,0xfb,0x8b,0x32,0x5f,0x5e,0x9f,
|
||||
0xcf,0xfb,0xc2,0xf8,0x96,0x79,0x7c,0xdb,0xa5,0x17,0xd4,0xfc,0x2,0x78,0xcf,0xf,
|
||||
0xd6,0x72,0x90,0xaf,0x68,0x4b,0xea,0x4b,0x13,0xb4,0x1d,0xf6,0xfc,0xe0,0x52,0xdf,
|
||||
0xf,0xd1,0x92,0xc0,0x6d,0x63,0xff,0x4e,0x7c,0x14,0xe4,0x5b,0xe6,0xfa,0xd8,0xfa,
|
||||
0x13,0xe0,0x7a,0x3e,0xf,0xb2,0xfd,0x45,0xf3,0xf1,0xfc,0x20,0xad,0x63,0x70,0xe7,
|
||||
0xb2,0xf3,0xf9,0x41,0xb6,0xbf,0x68,0x4e,0xd6,0xb7,0x6b,0xed,0x47,0xf2,0xfb,0xfc,
|
||||
0x20,0xad,0x4b,0x20,0xcf,0xf9,0x45,0xf5,0xf5,0x27,0x4,0xe5,0xd7,0xd7,0x2,0x2f,
|
||||
0xa8,0xf9,0x25,0xbf,0xfb,0x8b,0x8a,0x56,0x7e,0x39,0x9,0xf4,0x2d,0xb3,0xff,0x3,
|
||||
0x56,0x7e,0x91,0xa8,0xb3,0x7e,0xe5,0xf4,0xe5,0x63,0x7f,0x6,0xdd,0x67,0xd5,0xaf,
|
||||
0x9c,0xbe,0x7c,0xe4,0x2b,0xd3,0xd7,0x5,0x81,0xef,0xbf,0x5c,0xae,0xef,0xf3,0x9c,
|
||||
0xfb,0x7e,0x97,0x4b,0xdf,0xb7,0xc1,0xb,0x66,0x7d,0x48,0x9f,0x4b,0x6f,0xc3,0x7c,
|
||||
0xf9,0x8,0xb8,0xdd,0x37,0xe7,0xdf,0x8c,0xf3,0x2f,0x7f,0x3e,0x2d,0x5f,0x55,0x59,
|
||||
0xff,0x97,0x37,0x9f,0x2,0xde,0xd0,0xf2,0x55,0xd5,0x37,0x3f,0x98,0x17,0x5f,0x5b,
|
||||
0xcf,0x57,0x55,0xdf,0xfc,0xa0,0xe5,0x73,0xbc,0x9f,0x78,0x19,0xbe,0x9e,0x9e,0xaf,
|
||||
0xaa,0x91,0xde,0xef,0xbc,0xc,0x5f,0x5f,0x32,0x7c,0x51,0xde,0xef,0xbc,0x1c,0x5f,
|
||||
0xdf,0x3f,0xff,0x76,0x12,0xf9,0xbb,0xcd,0xff,0xfa,0xbd,0xf5,0x82,0x39,0xff,0x96,
|
||||
0xe8,0xb3,0xc0,0xfd,0xf,0x2,0x3e,0x9f,0x17,0x8b,0x4b,0xf4,0x39,0xf6,0x3f,0x8,
|
||||
0xf8,0x8c,0x26,0x68,0x99,0x3e,0x7b,0xfc,0xfd,0xa2,0xfa,0x50,0xde,0x7d,0x5b,0xb9,
|
||||
0xf6,0x7d,0x5e,0xcc,0x79,0xfb,0xd1,0x5c,0xfb,0xc8,0x88,0x5c,0xf8,0xd2,0x1c,0xdf,
|
||||
0xab,0x74,0xc1,0xfd,0x33,0xbf,0x6,0x54,0xc8,0xcd,0xf8,0x96,0x73,0x5f,0xb6,0x9f,
|
||||
0xb,0xdf,0x85,0x2f,0xe6,0x7,0xad,0x83,0x5f,0x17,0xb,0x8,0x9f,0x4c,0xae,0x95,
|
||||
0xbe,0xa7,0x28,0x68,0xe7,0x5a,0x9,0xe4,0xc9,0x77,0x8c,0x3a,0x6f,0x11,0x7c,0x7c,
|
||||
0x2a,0x3d,0x19,0xc1,0xdb,0x67,0x67,0xe8,0xf9,0x11,0xdc,0xce,0x9b,0x4f,0x51,0x8e,
|
||||
0x8f,0xc1,0x68,0x24,0x81,0x27,0x4f,0xa4,0xd6,0x8,0xde,0xca,0x97,0xef,0xe0,0x45,
|
||||
0x85,0x1e,0x63,0x0,0xa1,0xa4,0x1a,0xa1,0xa8,0x32,0xf3,0xe4,0xeb,0xa1,0x83,0x7f,
|
||||
0xf3,0x34,0xed,0xe1,0x5f,0xc2,0x92,0xf4,0x4b,0xcd,0x27,0x5d,0xcb,0x99,0xef,0xb7,
|
||||
0x5d,0xe5,0xb0,0x87,0x3f,0x1,0xb0,0xf7,0x49,0xaf,0x7,0xc4,0xde,0x28,0x57,0xbe,
|
||||
0x75,0xcd,0xa7,0xac,0xe3,0x3e,0x80,0xad,0x7e,0xab,0x5,0xc4,0xd6,0x71,0xae,0x7c,
|
||||
0x3b,0xba,0x6f,0x7,0xf7,0x7b,0xb0,0xde,0x5f,0x5f,0x7,0x62,0xfd,0xb3,0x62,0x9e,
|
||||
0x7c,0x42,0xb5,0xd7,0x25,0x58,0xa8,0xf5,0x5b,0x12,0xee,0x2b,0x8a,0xb8,0xa3,0x40,
|
||||
0x90,0x33,0x9f,0xda,0x3f,0xb,0xb5,0xc3,0x9d,0x2b,0x5f,0x3e,0x54,0x7d,0x8f,0x2f,
|
||||
0xe7,0xab,0x7f,0xbe,0x18,0x7f,0x2f,0x7c,0x17,0xbe,0xb,0xdf,0x85,0xef,0xc2,0x77,
|
||||
0xe1,0xbb,0xf0,0x5d,0xf8,0x2e,0x7c,0x5f,0x28,0x1f,0x21,0x14,0x62,0xfd,0xc9,0x79,
|
||||
0xee,0x7,0xd2,0xc3,0xe5,0xfa,0xa6,0xf7,0xe9,0xd6,0x29,0x11,0xa8,0xfe,0x7c,0x99,
|
||||
0x59,0xe,0x3e,0x33,0xbe,0xd4,0xd1,0xff,0xbf,0xbd,0x64,0xdf,0x33,0xa4,0x78,0x34,
|
||||
0xd,0xf4,0x6d,0xd1,0xff,0x2a,0x2c,0xd7,0xf7,0xd5,0x69,0x79,0xcf,0xe5,0x1b,0x3a,
|
||||
0x7d,0x45,0x7a,0x6d,0xc9,0xbe,0x75,0x99,0x6e,0xc8,0x2,0x6d,0xb,0x9d,0xdd,0xe9,
|
||||
0xb5,0xfa,0x58,0xa0,0x7b,0x54,0x2e,0xe,0x48,0xf1,0x4c,0x2e,0x52,0x48,0x8a,0xf4,
|
||||
0xc6,0x92,0x7d,0x7f,0x7d,0x42,0xff,0xf9,0xef,0x54,0xdf,0x8d,0xcd,0x75,0xf9,0xf2,
|
||||
0xf7,0x6,0xcf,0x9e,0x3e,0xa0,0x72,0xa1,0x7d,0xbf,0xf0,0xad,0x71,0x91,0xe,0xdf,
|
||||
0xfe,0x2e,0x7d,0x66,0xc9,0xbe,0xe9,0xe0,0xe6,0xea,0xa0,0x4c,0x3b,0x57,0x4a,0x6f,
|
||||
0xb,0x1f,0xbd,0xb0,0xff,0xec,0xa9,0x7a,0x7c,0x8f,0x3e,0x29,0x1f,0xad,0x1e,0x75,
|
||||
0xe8,0x70,0xbb,0x43,0xbf,0xb5,0x6c,0x5f,0xfb,0x2b,0x97,0xda,0x25,0xda,0x79,0xbb,
|
||||
0xbc,0x72,0xff,0xa9,0xc2,0x96,0xee,0x3b,0xdd,0xba,0xb9,0x5a,0xdc,0xef,0xd0,0x23,
|
||||
0xd5,0xf7,0x2f,0x96,0xed,0xeb,0x18,0xfd,0xcb,0xdb,0xc2,0xca,0xdd,0xa7,0x4a,0xdb,
|
||||
0x86,0x6f,0xfb,0xc6,0x6a,0xa9,0xd3,0xa1,0xa7,0xe5,0xe,0x7d,0x6a,0xe9,0xbe,0x8e,
|
||||
0xe1,0xa3,0xe5,0x93,0x7f,0x28,0x5a,0x3e,0x95,0xd6,0xa1,0x67,0xe5,0xce,0xf0,0xf2,
|
||||
0xb2,0x7d,0xfb,0xcc,0x57,0x3a,0xfa,0x87,0xef,0x6c,0x3d,0x73,0x7a,0xa4,0x1d,0xdf,
|
||||
0x67,0x4e,0xcb,0xea,0xf1,0x95,0x85,0xce,0xde,0xb5,0xa5,0x5f,0x1f,0x45,0xcd,0xd7,
|
||||
0xbe,0x42,0x37,0xc6,0x4f,0xfd,0xdb,0xf6,0x8d,0xd5,0x13,0x2a,0xaf,0xaa,0xff,0x28,
|
||||
0xf,0x8a,0x74,0xba,0xb6,0xba,0xb7,0xbe,0x6c,0xdf,0xb8,0xa4,0xfb,0x6e,0xd0,0x7,
|
||||
0xf2,0x53,0xf7,0xd4,0x8b,0xf9,0x4c,0xef,0x5f,0x56,0xcb,0x6a,0xff,0x32,0xbd,0x7f,
|
||||
0x69,0x6f,0xc9,0xe3,0x9b,0xe3,0x3,0xb4,0xff,0x31,0x5a,0xb,0x12,0x23,0x3c,0x5c,
|
||||
0xe4,0xab,0xb,0xdf,0x85,0xef,0xc2,0x77,0xe1,0xcb,0x9b,0xaf,0x9c,0x17,0xdf,0x86,
|
||||
0x5c,0x56,0x73,0xc0,0x26,0xa5,0x85,0xb1,0x0,0xd4,0x31,0x64,0xcf,0xe9,0x23,0xca,
|
||||
0xd2,0xef,0x7f,0x57,0x6,0xc5,0xb3,0xc1,0xb5,0x4b,0xf4,0xa1,0x9a,0x52,0xb7,0xa7,
|
||||
0x25,0xfa,0x60,0xdb,0xe1,0x9b,0xde,0x5b,0xb6,0x6f,0xfa,0xcc,0xde,0xd6,0xd9,0xde,
|
||||
0x95,0x7f,0x45,0xdf,0xfe,0xde,0xe6,0xb5,0x92,0x5c,0x52,0x33,0xbd,0xf3,0xab,0x7f,
|
||||
0xb0,0xf4,0xf6,0x9b,0xc2,0xce,0x69,0xe7,0xda,0x19,0x2d,0x9f,0x6d,0x5f,0x29,0x9d,
|
||||
0xa8,0xb7,0x97,0xeb,0x74,0x7b,0x4f,0x2e,0xad,0x3d,0x27,0xdf,0x24,0x74,0x7a,0x69,
|
||||
0xe9,0xe7,0xdf,0x94,0x76,0x8e,0x3e,0x29,0x9d,0x91,0xf2,0xd9,0xc3,0x2b,0xdb,0x47,
|
||||
0x9a,0xef,0x5e,0xf1,0xc1,0xf8,0xf2,0x8d,0x3f,0x18,0x5f,0xbb,0x4f,0xa7,0xbb,0x4b,
|
||||
0xf7,0xc9,0xa4,0xb8,0xff,0x49,0x69,0x77,0x2a,0x9c,0xbc,0x5d,0xda,0x6e,0xb,0x74,
|
||||
0xf8,0xf0,0x99,0xb2,0x7c,0xda,0xb9,0xb1,0x7e,0xf4,0x27,0xaa,0xef,0x6c,0xe9,0xbe,
|
||||
0x93,0x69,0xa9,0xf3,0x8b,0xed,0x8d,0x29,0x3d,0xfa,0xef,0xdb,0xdb,0xeb,0x65,0xf5,
|
||||
0xfc,0x7b,0x46,0x98,0x1e,0x75,0x6e,0xfc,0xf5,0xfe,0x27,0xcf,0xe6,0xc1,0x77,0x44,
|
||||
0xb7,0xb6,0xfe,0xd7,0xf6,0x89,0x4c,0xf7,0xff,0x6c,0x7b,0x7b,0x5b,0xbb,0x3e,0x9e,
|
||||
0xa1,0xed,0x61,0xe7,0xc6,0x2f,0x3a,0x9d,0x5c,0xf8,0xb6,0x68,0xa7,0xb4,0xbb,0x7d,
|
||||
0x76,0x42,0xb7,0x36,0x54,0xdf,0xb6,0xee,0x5b,0x37,0x7c,0xff,0x2d,0xf,0xbe,0x12,
|
||||
0xec,0x94,0xf7,0x1e,0x9e,0x9d,0xd2,0xd2,0xa6,0xe9,0x7b,0x96,0x5e,0x31,0x7c,0x1b,
|
||||
0xaa,0x6f,0xb8,0xec,0xfe,0xe5,0xd2,0xe0,0xb2,0xd0,0xbe,0x76,0x69,0x48,0x56,0xd7,
|
||||
0xaf,0xac,0xae,0x97,0xe8,0xde,0xfa,0xb3,0x5a,0x9f,0x7d,0xe5,0x17,0xed,0xe2,0xbe,
|
||||
0xea,0xdb,0x5b,0x76,0xff,0xbc,0xa2,0xfa,0xd4,0xf1,0x63,0x38,0xbd,0xd4,0xfe,0x9a,
|
||||
0x56,0xe8,0x78,0xb0,0xfe,0x2c,0x5d,0x19,0x5f,0xfe,0xca,0x2f,0x6,0xb9,0xf0,0x51,
|
||||
0x8a,0x45,0x8a,0x5,0xed,0xf5,0x2e,0x48,0xd0,0xfe,0x4f,0xbb,0x69,0x3,0x5a,0xed,
|
||||
0xf,0x8b,0x30,0xbf,0xf9,0xa5,0x93,0xef,0x7c,0x45,0x8a,0xf9,0xf6,0xa9,0x39,0xe6,
|
||||
0x22,0x3f,0xff,0xa3,0xf3,0xfd,0x7f,0x6e,0x69,0x1,0x55,0x8,0x9e,0xa1,0x2b,0x0,
|
||||
0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
|
||||
};
|
||||
//m1284p.png: 12987 bytes
|
||||
@ -0,0 +1,3 @@
|
||||
del *.b#*
|
||||
del *.s#*
|
||||
pause
|
||||
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* globals.h
|
||||
*
|
||||
* Created on: 29 íîÿá. 2018 ã.
|
||||
* Author: maxx
|
||||
*/
|
||||
|
||||
#ifndef GLOBALS_H_
|
||||
#define GLOBALS_H_
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include "avr/wdt.h" // WatchDog
|
||||
|
||||
//#define HTTPD_MAX_BUF_SIZE 2048 //For Mega1284p(16kb RAM)/Mega2560(8kb RAM)
|
||||
#define HTTPD_MAX_BUF_SIZE 512 //For Mega644p(4kb RAM)/Mega128(4kb RAM)
|
||||
|
||||
#define PRINTF_EN 1
|
||||
#if PRINTF_EN
|
||||
#define PRINTF(FORMAT,args...) printf_P(PSTR(FORMAT),##args)
|
||||
#else
|
||||
#define PRINTF(...)
|
||||
#endif
|
||||
|
||||
extern unsigned long millis(void);
|
||||
extern int freeRam (void);
|
||||
|
||||
//M644P/M1284p Users LEDS:
|
||||
//LED1/PORTC.4- m644p/m1284p maxxir
|
||||
#define led1_conf() DDRC |= (1<<DDC4)
|
||||
#define led1_high() PORTC |= (1<<PORTC4)
|
||||
#define led1_low() PORTC &= ~(1<<PORTC4)
|
||||
#define led1_tgl() PORTC ^= (1<<PORTC4)
|
||||
#define led1_read() (PORTC & (1<<PORTC4))
|
||||
|
||||
#define sw1_conf() {DDRC &= ~(1<<DDC5); PORTC |= (1<<PORTC5);}
|
||||
#define sw1_read() (PINC & (1<<PINC5))
|
||||
|
||||
extern const char PROGMEM str_mcu[];
|
||||
extern const char compile_date[] PROGMEM;
|
||||
extern const char compile_time[] PROGMEM;
|
||||
extern const char str_prog_name[] PROGMEM;
|
||||
|
||||
#endif /* GLOBALS_H_ */
|
||||
@ -0,0 +1,618 @@
|
||||
/*
|
||||
* main.c
|
||||
*
|
||||
* Created on: 22 íîÿá. 2018 ã.
|
||||
* Author: maxx
|
||||
*/
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include <compat/deprecated.h> //sbi, cbi etc..
|
||||
#include "avr/wdt.h" // WatchDog
|
||||
#include <stdio.h> // printf etc..
|
||||
#include "uart_extd.h"
|
||||
#include "spi.h"
|
||||
|
||||
#include "globals.h" //Global definitions for project
|
||||
|
||||
#include "stdbool.h"
|
||||
#include "Ethernet/socket.h"
|
||||
#include "Ethernet/wizchip_conf.h"
|
||||
#include "Internet/httpServer_avr/httpServer.h"
|
||||
#include "webpage.h"
|
||||
|
||||
#define _MAIN_DEBUG_
|
||||
|
||||
//#include "Application/loopback/loopback.h"
|
||||
//#include "Application/webserver_simple/webserver_simple.h"
|
||||
|
||||
//#include <stdlib.h> // itoa etc..
|
||||
/*
|
||||
* (11) Try move all pages saved at <webpage.h> from RAM to FLASH address space
|
||||
* Example of flash data access look at:
|
||||
* <01_m1284p_bb00_minimum_PSTR_webpage_test>
|
||||
* <09_m1284p_WIZNET_simple_webserver>
|
||||
*
|
||||
* Success initial porting on 10/12/2018 - FREE RAM on webserver: 7936 bytes (From total 16kbytes)!
|
||||
* NEED further optimization to AVR_RAM->AVR_FLASH point (damn Harvard architecture :( )!
|
||||
*
|
||||
* It works on AtMega1284p(16kbytes RAM), but need TODO finish (DONE on v2.3b 12/12/2018)!!
|
||||
*
|
||||
* TODO DONE:
|
||||
* After v2.3 optimization:
|
||||
* (+4kb HTTP Buffers READ-WRITE(with HTTPD_MAX_BUF_SIZE 2048 see <globals.h>)) : FREE RAM on webserver: 10372 bytes - much better! (RAM enough for AtMega1284/AtMega2560 ie. AVR with 8-16Kb RAM)
|
||||
* (+1kb HTTP Buffers READ-WRITE(with HTTPD_MAX_BUF_SIZE 512 see <globals.h>)) : FREE RAM on webserver: 13444 bytes - awesome! (RAM enough for AtMega644/AtMega128 ie. AVR with 4Kb RAM)
|
||||
*
|
||||
* OK 1) Father optimization <httpParser.c> / <httpParser.h> (v2.3 12/12/2018)
|
||||
* OK 2) Father optimization <httpUtil.c> / <httpUtil.h> (v2.3 12/12/2018)
|
||||
* OK 3) Rename httpServer.*->httpServer_avr.*, httpParser.*->httpParser_avr.*, httpUtil.*->httpUtil_avr.* (v2.3b 12/12/2018)
|
||||
* Actually made another way: rename parent folder <http> to <http_avr>
|
||||
* OK 4) Fix not correct showed value on <ain_gauge.html> (v2.2 12/12/2018)
|
||||
* OK 5) Correct indentation in all <*.html> and <*.js> sources and repack it again in <webpage.h>. (v2.2 12/12/2018)
|
||||
* OK 6) Add <favicon.ico> to webserver (v2.1 12/12/2018) + also added binary files support in webserver via: <reg_httpServer_binContent_avr()..>, bin2hex_v2.py
|
||||
* 7) Publish sources in my github, wiznetmuseim, avrfreaks etc.. (optional)
|
||||
*
|
||||
* (10) Try repeat example HTTPServer_LPC11E36_LPCXpresso on AVR Mega1284p (All pages still in RAM)
|
||||
* Here used to WEB-server handle cgi-like requests, with AJAX + JSON
|
||||
* Description here:
|
||||
* http://wiznetmuseum.com/portfolio-items/w5500-evb-web-server/
|
||||
*
|
||||
* To better undestand AJAX look here (actually here used AJAX + XHTML):
|
||||
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/web-server-read-switch-using-AJAX/
|
||||
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/web-server-read-switch-automatically-using-AJAX/
|
||||
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/AJAX-read-switches-analog/
|
||||
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-AJAX-web-server/
|
||||
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-AJAX-XML-web-server/
|
||||
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-gauge/
|
||||
* https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/
|
||||
*
|
||||
* To online encode text file to C source use online utility (Text->Cpp):
|
||||
* https://tomeko.net/online_tools/cpp_text_escape.php?lang=en
|
||||
* add option <split output into multiple lines> (this is for good reading into browser, as source code)
|
||||
* after that insert in any text editor and replace <\n"> sequence to <\n"\> (this is for recognize multiple string into C-source headers)
|
||||
*
|
||||
* For prepare binary data (some image data, like favicon.ico) use <bin2hex_v2.py> script.
|
||||
* Example usage:
|
||||
* >bin2hex_v2.py favicon.ico
|
||||
* >out favicon_ico.h
|
||||
* After that insert into end <webpage.h> content from favicon.ico;
|
||||
* Then use this resource in www server like (look in <main.c>):
|
||||
* reg_httpServer_binContent_avr(PSTR("favicon.ico"),favicon_ico, (uint32_t)sizeof(favicon_ico)); // favicon.ico : webserver icon
|
||||
*
|
||||
*
|
||||
*
|
||||
* Also can use File->HEX (BIN2HEX) - for prepare images for example (bin2hex_v2.py BETTER SUIT for AVR!!):
|
||||
* https://tomeko.net/online_tools/file_to_hex.php?lang=en
|
||||
*
|
||||
* (9) Simple webserver, based on <wiznetweb.c> code from:
|
||||
* http://www.ermicro.com/blog/?p=1773
|
||||
* Article: Integrating Wiznet W5100, WIZ811MJ network module with Atmel AVR Microcontroller
|
||||
*
|
||||
* (3) Trying WIZNET5500 init with using official Wiznet ioLibrary_Driver
|
||||
* working ping on static IP
|
||||
* LED1 = ON when phy_link detected
|
||||
* and loopback test on TCP-IP:5000 and UDP:3000 ports.
|
||||
* use Hercules terminal utility to check network connection see:
|
||||
*
|
||||
* https://wizwiki.net/wiki/doku.php?id=osh:cookie:loopback_test
|
||||
* https://www.hw-group.com/software/hercules-setup-utility
|
||||
*
|
||||
*
|
||||
* Author of porting to AVR Mega:
|
||||
* Ibragimov Maxim, Russia Togliatty ~10..12.2018
|
||||
*/
|
||||
/*
|
||||
#define PRINTF_EN 1
|
||||
#if PRINTF_EN
|
||||
#define PRINTF(FORMAT,args...) printf_P(PSTR(FORMAT),##args)
|
||||
#else
|
||||
#define PRINTF(...)
|
||||
#endif
|
||||
*/
|
||||
//*********Program metrics
|
||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Äàòà êîìïèëÿöèè
|
||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Âðåìÿ êîìïèëÿöèè
|
||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.3d Static IP HTTP_server FLASH Pages WIZNET_5500 ETHERNET 12/12/2018\r\n"; // Program name
|
||||
|
||||
/*
|
||||
* m1284p minimum template, with one button & one led
|
||||
*/
|
||||
|
||||
//M644P/M1284p Users LEDS:
|
||||
//LED1/PORTC.4- m644p/m1284p maxxir
|
||||
#define led1_conf() DDRC |= (1<<DDC4)
|
||||
#define led1_high() PORTC |= (1<<PORTC4)
|
||||
#define led1_low() PORTC &= ~(1<<PORTC4)
|
||||
#define led1_tgl() PORTC ^= (1<<PORTC4)
|
||||
#define led1_read() (PORTC & (1<<PORTC4))
|
||||
|
||||
#define sw1_conf() {DDRC &= ~(1<<DDC5); PORTC |= (1<<PORTC5);}
|
||||
#define sw1_read() (PINC & (1<<PINC5))
|
||||
|
||||
//*********Global vars
|
||||
#define TICK_PER_SEC 1000UL
|
||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||
|
||||
|
||||
#if defined(__AVR_ATmega128__)
|
||||
const char PROGMEM str_mcu[] = "ATmega128"; //CPU is m128
|
||||
#elif defined (__AVR_ATmega2560__)
|
||||
const char PROGMEM str_mcu[] = "ATmega2560"; //CPU is m2560
|
||||
#elif defined (__AVR_ATmega2561__)
|
||||
const char PROGMEM str_mcu[] = "ATmega2561"; //CPU is m2561
|
||||
#elif defined (__AVR_ATmega328P__)
|
||||
const char PROGMEM str_mcu[] = "ATmega328P"; //CPU is m328p
|
||||
#elif defined (__AVR_ATmega32U4__)
|
||||
const char PROGMEM str_mcu[] = "ATmega32u4"; //CPU is m32u4
|
||||
#elif defined (__AVR_ATmega644P__)
|
||||
const char PROGMEM str_mcu[] = "ATmega644p"; //CPU is m644p
|
||||
#elif defined (__AVR_ATmega1284P__)
|
||||
const char PROGMEM str_mcu[] = "ATmega1284p"; //CPU is m1284p
|
||||
#else
|
||||
const char PROGMEM str_mcu[] = "Unknown CPU"; //CPU is unknown
|
||||
#endif
|
||||
|
||||
|
||||
//FUNC headers
|
||||
static void avr_init(void);
|
||||
void timer0_init(void);
|
||||
|
||||
//Wiznet FUNC headers
|
||||
void print_network_information(void);
|
||||
|
||||
// RAM Memory usage test
|
||||
int freeRam (void)
|
||||
{
|
||||
extern int __heap_start, *__brkval;
|
||||
int v;
|
||||
int _res = (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
|
||||
return _res;
|
||||
}
|
||||
|
||||
|
||||
//******************* MILLIS ENGINE: BEGIN
|
||||
//ISR (TIMER0_COMP_vect )
|
||||
ISR (TIMER0_COMPA_vect)
|
||||
{
|
||||
// Compare match Timer0
|
||||
// Here every 1ms
|
||||
_millis++; // INC millis tick
|
||||
// Òåñò ìèãàåì ïðè â õîäå â ïðåðûâàíèå
|
||||
// 500Hz FREQ OUT
|
||||
// LED_TGL;
|
||||
}
|
||||
|
||||
inline unsigned long millis(void)
|
||||
{
|
||||
unsigned long i;
|
||||
cli();
|
||||
// Atomic tick reading
|
||||
i = _millis;
|
||||
sei();
|
||||
return i;
|
||||
}
|
||||
//******************* MILLIS ENGINE: END
|
||||
|
||||
//***************** UART0: BEGIN
|
||||
// Assign I/O stream to UART
|
||||
/* define CPU frequency in Mhz here if not defined in Makefile */
|
||||
//#ifndef F_CPU
|
||||
//#define F_CPU 16000000UL
|
||||
//#endif
|
||||
|
||||
/* 19200 baud */
|
||||
//#define UART_BAUD_RATE 19200
|
||||
//#define UART_BAUD_RATE 38400
|
||||
#define UART_BAUD_RATE 115200
|
||||
|
||||
static int uart0_putchar(char ch,FILE *stream);
|
||||
static void uart0_rx_flash(void);
|
||||
|
||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||
//PS. stdin íå ïåðåíàçíà÷àþ, ò.ê. óäîáíåå ñ íèì ðàáîòàòü ÷åðåç uart.h - api:
|
||||
|
||||
/*
|
||||
* Ò.å. íàïðèìåð òàê
|
||||
c = uart1_getc();
|
||||
if (( c & UART_NO_DATA ) == 0)
|
||||
{
|
||||
uart1_putc( (unsigned char)c );
|
||||
}
|
||||
Ïðè ýòîì ÷åêàåì ÷òî áóôåð ïðèåìà íå ïóñò è îïðîñ èäåò íåáëîêèðóþùèé (+ ðàáîòàåì ÷åðåç UART RX RINGBUFFER),
|
||||
à åñëè ðàáîòàåì â ñòèëå stdin->getchar() òàì îïðîñ áëîêèðóåòñÿ ïîêà ñèìâîë íå áóäåò ïðèíÿò (ïîëëèíã)
|
||||
÷åðåç UART1_RX, ò.å. íåóäîáíî.
|
||||
*/
|
||||
|
||||
// STDOUT UART0 TX handler
|
||||
static int uart0_putchar(char ch,FILE *stream)
|
||||
{
|
||||
uart_putc(ch);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Î÷èùàåì áóôåð ïðèåìà UART1 RX (èíîãäà íóæíî)
|
||||
static void uart0_rx_flash(void)
|
||||
{
|
||||
// Ñ÷èòûâàåì âñå èç ring-buffer UART1 RX
|
||||
unsigned int c;
|
||||
do
|
||||
{
|
||||
c = uart_getc();
|
||||
} while (( c & UART_NO_DATA ) == 0); // Check RX1 none-empty
|
||||
|
||||
}
|
||||
//***************** UART0: END
|
||||
|
||||
//***************** ADC: BEGIN
|
||||
|
||||
#ifndef ADC_DIV
|
||||
//12.5MHz or over use this ADC reference clock
|
||||
#define ADC_DIV (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) //:128 ADC Prescaler
|
||||
#endif
|
||||
|
||||
#ifndef ADC_REF
|
||||
// vcc voltage ref default
|
||||
#define ADC_REF (1<<REFS0)
|
||||
#endif
|
||||
|
||||
void adc_init(void)
|
||||
{
|
||||
ADCSRA = 0;
|
||||
ADCSRA |= (ADC_DIV); // ADC reference clock
|
||||
ADMUX |= (ADC_REF); // Voltage reference
|
||||
ADCSRA |= (1<<ADEN); // Turn on ADC
|
||||
ADCSRA |= (1<<ADSC); // Do an initial conversion because this one is the
|
||||
// slowest and to ensure that everything is up
|
||||
// and running
|
||||
}
|
||||
|
||||
uint16_t adc_read(uint8_t channel)
|
||||
{
|
||||
ADMUX &= 0b11100000; //Clear the older channel that was read
|
||||
ADMUX |= channel; //Defines the new ADC channel to be read
|
||||
ADCSRA |= (1<<ADSC); //Starts a new conversion
|
||||
while(ADCSRA & (1<<ADSC)); //Wait until the conversion is done
|
||||
|
||||
return ADCW; //Returns the ADC value of the chosen channel
|
||||
}
|
||||
//***************** ADC: END
|
||||
|
||||
|
||||
//***************** WIZCHIP INIT: BEGIN
|
||||
#define ETH_MAX_BUF_SIZE 2048
|
||||
|
||||
/*
|
||||
unsigned char ethBuf0[ETH_MAX_BUF_SIZE];
|
||||
unsigned char ethBuf1[ETH_MAX_BUF_SIZE];
|
||||
unsigned char ethBuf2_WEBSRV[WEBSRV_DATA_BUF_SIZE];
|
||||
*/
|
||||
|
||||
wiz_NetInfo netInfo = { .mac = {0x00, 0x08, 0xdc, 0xab, 0xcd, 0xef}, // Mac address
|
||||
.ip = {192, 168, 0, 199}, // IP address
|
||||
.sn = {255, 255, 255, 0}, // Subnet mask
|
||||
.dns = {8,8,8,8}, // DNS address (google dns)
|
||||
.gw = {192, 168, 0, 1}, // Gateway address
|
||||
.dhcp = NETINFO_STATIC}; //Dynamic IP configruation from a DHCP sever
|
||||
|
||||
void cs_sel() {
|
||||
SPI_WIZNET_ENABLE();
|
||||
}
|
||||
|
||||
void cs_desel() {
|
||||
SPI_WIZNET_DISABLE();
|
||||
}
|
||||
|
||||
uint8_t spi_rb(void) {
|
||||
uint8_t rbuf;
|
||||
//HAL_SPI_Receive(&hspi1, &rbuf, 1, HAL_MAX_DELAY);
|
||||
SPI_READ(rbuf);
|
||||
return rbuf;
|
||||
}
|
||||
|
||||
void spi_wb(uint8_t b) {
|
||||
//HAL_SPI_Transmit(&hspi1, &b, 1, HAL_MAX_DELAY);
|
||||
SPI_WRITE(b);
|
||||
}
|
||||
|
||||
void spi_rb_burst(uint8_t *buf, uint16_t len) {
|
||||
//HAL_SPI_Receive_DMA(&hspi1, buf, len);
|
||||
//while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY_RX);
|
||||
for (uint16_t var = 0; var < len; var++) {
|
||||
SPI_READ(*buf++);
|
||||
}
|
||||
}
|
||||
|
||||
void spi_wb_burst(uint8_t *buf, uint16_t len) {
|
||||
//HAL_SPI_Transmit_DMA(&hspi1, buf, len);
|
||||
//while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY_TX);
|
||||
for (uint16_t var = 0; var < len; var++) {
|
||||
SPI_WRITE(*buf++);
|
||||
}
|
||||
}
|
||||
|
||||
void IO_LIBRARY_Init(void) {
|
||||
uint8_t bufSize[] = {2, 2, 2, 2, 2, 2, 2, 2};
|
||||
|
||||
reg_wizchip_cs_cbfunc(cs_sel, cs_desel);
|
||||
reg_wizchip_spi_cbfunc(spi_rb, spi_wb);
|
||||
reg_wizchip_spiburst_cbfunc(spi_rb_burst, spi_wb_burst);
|
||||
|
||||
wizchip_init(bufSize, bufSize);
|
||||
wizchip_setnetinfo(&netInfo);
|
||||
//wizchip_setinterruptmask(IK_SOCK_0);
|
||||
}
|
||||
//***************** WIZCHIP INIT: END
|
||||
//////////////////////////////////////////////////
|
||||
// Socket & Port number definition for Examples //
|
||||
//////////////////////////////////////////////////
|
||||
//#define SOCK_TCPS 0
|
||||
//#define SOCK_UDPS 1
|
||||
//#define PORT_TCPS 5000
|
||||
//#define PORT_UDPS 3000
|
||||
|
||||
////////////////////////////////////////////////
|
||||
//HTTPD Sockets Definition //
|
||||
////////////////////////////////////////////////
|
||||
#define MAX_HTTPSOCK 6
|
||||
uint8_t socknumlist[] = {2, 3, 4, 5, 6, 7};
|
||||
//#define MAX_HTTPSOCK 2
|
||||
//uint8_t socknumlist[] = {0, 1};
|
||||
|
||||
////////////////////////////////////////////////
|
||||
//HTTPD Shared Buffer Definition //
|
||||
////////////////////////////////////////////////
|
||||
uint8_t RX_BUF[HTTPD_MAX_BUF_SIZE];
|
||||
uint8_t TX_BUF[HTTPD_MAX_BUF_SIZE];
|
||||
|
||||
int main()
|
||||
{
|
||||
uint8_t prev_sw1 = 1; // VAR for sw1 pressing detect
|
||||
|
||||
// INIT MCU
|
||||
avr_init();
|
||||
spi_init(); //SPI Master, MODE0, 4Mhz(DIV4), CS_PB.3=HIGH - suitable for WIZNET 5x00(1/2/5)
|
||||
|
||||
|
||||
// Print program metrics
|
||||
PRINTF("%S", str_prog_name);// Íàçâàíèå ïðîãðàììû
|
||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Âðåìÿ Äàòà êîìïèëÿöèè
|
||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||
|
||||
//Short Blink LED 3 times on startup
|
||||
unsigned char i = 3;
|
||||
while(i--)
|
||||
{
|
||||
led1_high();
|
||||
_delay_ms(100);
|
||||
led1_low();
|
||||
_delay_ms(400);
|
||||
wdt_reset();
|
||||
}
|
||||
|
||||
//Wizchip WIZ5500 Ethernet initialize
|
||||
IO_LIBRARY_Init(); //After that ping must working
|
||||
print_network_information();
|
||||
|
||||
//**************************************HTTPD init: BEGIN
|
||||
/* HTTP Server Initialization */
|
||||
httpServer_init(TX_BUF, RX_BUF, MAX_HTTPSOCK, socknumlist); // Tx/Rx buffers (1kB) / The number of W5500 chip H/W sockets in use
|
||||
//reg_httpServer_cbfunc(NVIC_SystemReset, NULL); // Callback: NXP MCU Reset
|
||||
reg_httpServer_cbfunc(NULL, NULL); // Callback: Still not used here ARV System reset, AVR WDT reset
|
||||
if(1)
|
||||
{
|
||||
/* Web content registration (web content in webpage.h, Example web pages) */
|
||||
|
||||
// Index page and netinfo / base64 image demo
|
||||
reg_httpServer_webContent_avr(PSTR("index.html"), PSTR(index_page)); // index.html : Main page example
|
||||
|
||||
//favicon.ico
|
||||
reg_httpServer_binContent_avr(PSTR("favicon.ico"),favicon_ico, (uint32_t)sizeof(favicon_ico)); // favicon.ico : webserver icon
|
||||
|
||||
//brd_wiznet.png
|
||||
reg_httpServer_binContent_avr(PSTR("brd_wiznet.png"),brd_wiznet_png, (uint32_t)sizeof(brd_wiznet_png)); // brd_wiznet.png : webserver image
|
||||
|
||||
/*
|
||||
//m1284p.png
|
||||
reg_httpServer_binContent_avr(PSTR("m1284p.png"),m1284p_png, (uint32_t)sizeof(m1284p_png)); // m1284p.png : webserver image
|
||||
*/
|
||||
|
||||
reg_httpServer_webContent_avr(PSTR("netinfo.html"), PSTR(netinfo_page)); // netinfo.html : Network information example page
|
||||
reg_httpServer_webContent_avr(PSTR("netinfo.js"), PSTR(wiz550web_netinfo_js)); // netinfo.js : JavaScript for Read Network configuration (+ ajax.js)
|
||||
//reg_httpServer_webContent((uint8_t *)"netinfo.html", (uint8_t *)netinfo_page); // netinfo.html : Network information example page
|
||||
//reg_httpServer_webContent((uint8_t *)"netinfo.js", (uint8_t *)wiz550web_netinfo_js); // netinfo.js : JavaScript for Read Network configuration (+ ajax.js)
|
||||
|
||||
// AJAX JavaScript functions
|
||||
reg_httpServer_webContent_avr(PSTR("ajax.js"), PSTR(wiz550web_ajax_js)); // ajax.js : JavaScript for AJAX request transfer
|
||||
//reg_httpServer_webContent((uint8_t *)"ajax.js", (uint8_t *)wiz550web_ajax_js); // ajax.js : JavaScript for AJAX request transfer
|
||||
|
||||
//Device info page && related ajax script
|
||||
reg_httpServer_webContent_avr(PSTR("info.html"), PSTR(info_page)); //info.html
|
||||
reg_httpServer_webContent_avr(PSTR("info.js"), PSTR(wiz550web_info_js)); // info.js : JavaScript for Device information (+ ajax.js)
|
||||
//reg_httpServer_webContent((uint8_t *)"info.html", (uint8_t *)info_page); //info.html
|
||||
//reg_httpServer_webContent((uint8_t *)"info.js", (uint8_t *)wiz550web_info_js); // info.js : JavaScript for Device information (+ ajax.js)
|
||||
|
||||
reg_httpServer_webContent_avr(PSTR("img.html"), PSTR(img_page)); // img.html : Base64 Image data example page
|
||||
//reg_httpServer_webContent((uint8_t *)"img.html", (uint8_t *)img_page); // img.html : Base64 Image data example page
|
||||
|
||||
// Example #1
|
||||
reg_httpServer_webContent_avr(PSTR("dio.html"), PSTR(dio_page)); // dio.html : Digital I/O control example page
|
||||
reg_httpServer_webContent_avr(PSTR("dio.js"), PSTR(wiz550web_dio_js)); // dio.js : JavaScript for digital I/O control (+ ajax.js)
|
||||
//reg_httpServer_webContent((uint8_t *)"dio.html", (uint8_t *)dio_page); // dio.html : Digital I/O control example page
|
||||
//reg_httpServer_webContent((uint8_t *)"dio.js", (uint8_t *)wiz550web_dio_js); // dio.js : JavaScript for digital I/O control (+ ajax.js)
|
||||
|
||||
// Example #2
|
||||
reg_httpServer_webContent_avr(PSTR("ain.html"), PSTR(ain_page)); // ain.html : Analog input monitor example page
|
||||
reg_httpServer_webContent_avr(PSTR("ain.js"), PSTR(wiz550web_ain_js)); // ain.js : JavaScript for Analog input monitor (+ ajax.js)
|
||||
//reg_httpServer_webContent((uint8_t *)"ain.html", (uint8_t *)ain_page); // ain.html : Analog input monitor example page
|
||||
//reg_httpServer_webContent((uint8_t *)"ain.js", (uint8_t *)wiz550web_ain_js); // ain.js : JavaScript for Analog input monitor (+ ajax.js)
|
||||
|
||||
// Example #3
|
||||
reg_httpServer_webContent_avr(PSTR("ain_gauge.html"), PSTR(ain_gauge_page)); // ain_gauge.html : Analog input monitor example page; using Google Gauge chart
|
||||
reg_httpServer_webContent_avr(PSTR("ain_gauge.js"), PSTR(ain_gauge_js)); // ain_gauge.js : JavaScript for Google Gauge chart (+ ajax.js)
|
||||
//reg_httpServer_webContent((uint8_t *)"ain_gauge.html", (uint8_t *)ain_gauge_page); // ain_gauge.html : Analog input monitor example page; using Google Gauge chart
|
||||
//reg_httpServer_webContent((uint8_t *)"ain_gauge.js", (uint8_t *)ain_gauge_js); // ain_gauge.js : JavaScript for Google Gauge chart (+ ajax.js)
|
||||
|
||||
#ifdef _MAIN_DEBUG_
|
||||
//display_reg_webContent_list();
|
||||
display_reg_webContent_list_avr();
|
||||
#endif
|
||||
}
|
||||
//**************************************HTTPD init: END
|
||||
|
||||
/* Loopback Test: TCP Server and UDP */
|
||||
// Test for Ethernet data transfer validation
|
||||
//uint32_t timer_link_1sec = millis();
|
||||
uint32_t timer_httpd_1sec = millis();
|
||||
bool run_user_applications = true;
|
||||
while(1)
|
||||
{
|
||||
//Here at least every 1sec
|
||||
wdt_reset(); // WDT reset at least every sec
|
||||
|
||||
/* HTTPD */
|
||||
/*HTTPD timer 1 sec interval tick*/
|
||||
if((millis()-timer_httpd_1sec)> 1000)
|
||||
{
|
||||
//here every 1 sec
|
||||
timer_httpd_1sec = millis();
|
||||
////////////////////////////////////////////////////////
|
||||
// SHOULD BE Added HTTP Server Time Handler to your 1s tick timer
|
||||
httpServer_time_handler(); // for HTTP server time counter
|
||||
////////////////////////////////////////////////////////
|
||||
//Printout RAM usage every 1 minute
|
||||
static uint16_t j_ram = 0;
|
||||
if(j_ram++%60 == 0)
|
||||
{
|
||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: insert user's code here
|
||||
if(run_user_applications)
|
||||
{
|
||||
//for(i = 0; i < MAX_HTTPSOCK; i++) httpServer_run(i); // HTTP Server handler
|
||||
for(i = 0; i < MAX_HTTPSOCK; i++) httpServer_run_avr(i); // HTTP Server handler avr optimized
|
||||
|
||||
//loopback_tcps(SOCK_TCPS, RX_BUF, 5000); //not used here
|
||||
|
||||
} // End of user's code
|
||||
|
||||
//Use Hercules Terminal to check loopback tcp:5000 and udp:3000
|
||||
/*
|
||||
* https://www.hw-group.com/software/hercules-setup-utility
|
||||
* */
|
||||
//loopback_tcps(0,ethBuf0,5000);
|
||||
//loopback_udps(1, ethBuf1, 3000);
|
||||
|
||||
//Use WEBbrowser to connect to webserver: http://192.168.0.199/index.html
|
||||
//websrv_simple(2, ethBuf2_WEBSRV, 80);
|
||||
|
||||
|
||||
//loopback_ret = loopback_tcpc(SOCK_TCPS, gDATABUF, destip, destport);
|
||||
//if(loopback_ret < 0) printf("loopback ret: %ld\r\n", loopback_ret); // TCP Socket Error code
|
||||
|
||||
//Not used here, because led1 handle via websrv
|
||||
/*
|
||||
if((millis()-timer_link_1sec)> 1000)
|
||||
{
|
||||
//here every 1 sec
|
||||
timer_link_1sec = millis();
|
||||
if(wizphy_getphylink() == PHY_LINK_ON)
|
||||
{
|
||||
led1_high();
|
||||
}
|
||||
else
|
||||
{
|
||||
led1_low();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Timer0
|
||||
// 1ms IRQ
|
||||
// Used for millis() timing
|
||||
void timer0_init(void)
|
||||
{
|
||||
/*
|
||||
*
|
||||
* For M128
|
||||
TCCR0 = (1<<CS02)|(1<<WGM01); //TIMER0 SET-UP: CTC MODE & PS 1:64
|
||||
OCR0 = 249; // 1ms reach for clear (16mz:64=>250kHz:250-=>1kHz)
|
||||
TIMSK |= 1<<OCIE0; //IRQ on TIMER0 output compare
|
||||
*/
|
||||
//For M664p
|
||||
TCCR0A = (1<<WGM01); //TIMER0 SET-UP: CTC MODE
|
||||
TCCR0B = (1<<CS01)|(1<<CS00); // PS 1:64
|
||||
OCR0A = 249; // 1ms reach for clear (16mz:64=>250kHz:250-=>1kHz)
|
||||
TIMSK0 |= 1<<OCIE0A; //IRQ on TIMER0 output compareA
|
||||
}
|
||||
|
||||
static void avr_init(void)
|
||||
{
|
||||
// Initialize device here.
|
||||
// WatchDog INIT
|
||||
wdt_enable(WDTO_8S); // set up wdt reset interval 2 second
|
||||
wdt_reset(); // wdt reset ~ every <2000ms
|
||||
|
||||
timer0_init();// Timer0 millis engine init
|
||||
|
||||
// Initial UART Peripheral
|
||||
/*
|
||||
* Initialize uart11 library, pass baudrate and AVR cpu clock
|
||||
* with the macro
|
||||
* uart1_BAUD_SELECT() (normal speed mode )
|
||||
* or
|
||||
* uart1_BAUD_SELECT_DOUBLE_SPEED() ( double speed mode)
|
||||
*/
|
||||
#if (UART_BAUD_RATE == 115200)
|
||||
uart_init( UART_BAUD_SELECT_DOUBLE_SPEED(UART_BAUD_RATE,F_CPU) ); // To works without error on 115200 bps/F_CPU=16Mhz
|
||||
#else
|
||||
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
|
||||
#endif
|
||||
// Define Output/Input Stream
|
||||
stdout = &uart0_stdout;
|
||||
|
||||
//ADC init
|
||||
adc_init();
|
||||
adc_read(6); //Dummy read
|
||||
|
||||
|
||||
led1_conf();
|
||||
led1_low();// LED1 is OFF
|
||||
|
||||
|
||||
sw1_conf();//SW1 internal pull-up
|
||||
|
||||
sei(); //re-enable global interrupts
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void print_network_information(void)
|
||||
{
|
||||
|
||||
uint8_t tmpstr[6] = {0,};
|
||||
ctlwizchip(CW_GET_ID,(void*)tmpstr); // Get WIZCHIP name
|
||||
PRINTF("\r\n=======================================\r\n");
|
||||
PRINTF(" WIZnet chip: %s \r\n", tmpstr);
|
||||
PRINTF("=======================================\r\n");
|
||||
|
||||
wiz_NetInfo gWIZNETINFO;
|
||||
wizchip_getnetinfo(&gWIZNETINFO);
|
||||
if (gWIZNETINFO.dhcp == NETINFO_STATIC)
|
||||
PRINTF("STATIC IP\r\n");
|
||||
else
|
||||
PRINTF("DHCP IP\r\n");
|
||||
PRINTF("Mac address: %02x:%02x:%02x:%02x:%02x:%02x\n\r",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
|
||||
PRINTF("IP address : %d.%d.%d.%d\n\r",gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);
|
||||
PRINTF("SM Mask : %d.%d.%d.%d\n\r",gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]);
|
||||
PRINTF("Gate way : %d.%d.%d.%d\n\r",gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]);
|
||||
PRINTF("DNS Server : %d.%d.%d.%d\n\r",gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]);
|
||||
}
|
||||
|
||||
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (c) 2007, Swedish Institute of Computer Science
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <avr/io.h>
|
||||
#include "spi.h"
|
||||
//#include "contiki-conf.h"
|
||||
|
||||
/*
|
||||
* On the Tmote sky access to I2C/SPI/UART0 must always be
|
||||
* exclusive. Set spi_busy so that interrupt handlers can check if
|
||||
* they are allowed to use the bus or not. Only the CC2420 radio needs
|
||||
* this in practice.
|
||||
*
|
||||
*/
|
||||
unsigned char spi_busy = 0;
|
||||
|
||||
/*
|
||||
* Initialize SPI bus.
|
||||
*/
|
||||
|
||||
//~ // From working SPI ENC28J60 driver
|
||||
//~ #define ENC28J60_CONTROL_PORT PORTB
|
||||
//~ #define ENC28J60_CONTROL_DDR DDRB
|
||||
//~
|
||||
//~ #define ENC28J60_CONTROL_CS PORTB6
|
||||
//~ #define ENC28J60_CONTROL_SO PORTB3
|
||||
//~ #define ENC28J60_CONTROL_SI PORTB2
|
||||
//~ #define ENC28J60_CONTROL_SCK PORTB1
|
||||
//~ #define ENC28J60_CONTROL_SS PORTB0
|
||||
//~
|
||||
//~ // set CS to 0 = active
|
||||
//~ #define CSACTIVE ENC28J60_CONTROL_PORT&=~(1<<ENC28J60_CONTROL_CS)
|
||||
//~ // set CS to 1 = passive
|
||||
//~ #define CSPASSIVE ENC28J60_CONTROL_PORT|=(1<<ENC28J60_CONTROL_CS)
|
||||
//
|
||||
//~ #define waitspi() while(!(SPSR&(1<<SPIF)))
|
||||
|
||||
|
||||
void
|
||||
spi_init(void)
|
||||
{
|
||||
// CS PIN for FLASH
|
||||
DDRB |= _BV(WIZNET_CS); // CS to OUT && Disable
|
||||
SPI_WIZNET_DISABLE();
|
||||
|
||||
/* Initalize ports for communication with SPI units. */
|
||||
/* CSN=SS and must be output when master! */
|
||||
DDRB |= _BV(MOSI) | _BV(SCK) | _BV(CSN);
|
||||
PORTB |= _BV(MOSI) | _BV(SCK);
|
||||
|
||||
/* Enables SPI, selects "master", clock rate FCK / 4 - 4Mhz, and SPI mode 0 */
|
||||
SPCR = _BV(SPE) | _BV(MSTR);
|
||||
//SPSR = _BV(SPI2X); //FCK / 2 - 8Mhz
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,132 @@
|
||||
/*
|
||||
* Copyright (c) 2010, Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
* Basic SPI macros
|
||||
* \author
|
||||
* Joakim Eriksson <joakime@sics.se>
|
||||
* Niclas Finne <nfi@sics.se>
|
||||
*/
|
||||
|
||||
#ifndef SPI_H_
|
||||
#define SPI_H_
|
||||
|
||||
/* SPI input/output registers. */
|
||||
#define SPI_TXBUF SPDR
|
||||
#define SPI_RXBUF SPDR
|
||||
|
||||
#define BV(bitno) _BV(bitno)
|
||||
|
||||
#define SPI_WAITFOREOTx() do { while (!(SPSR & BV(SPIF))); } while (0)
|
||||
#define SPI_WAITFOREORx() do { while (!(SPSR & BV(SPIF))); } while (0)
|
||||
|
||||
//M128
|
||||
//#define SCK 1 /* - Output: SPI Serial Clock (SCLK) - ATMEGA128 PORTB, PIN1 */
|
||||
//#define MOSI 2 /* - Output: SPI Master out - slave in (MOSI) - ATMEGA128 PORTB, PIN2 */
|
||||
//#define MISO 3 /* - Input: SPI Master in - slave out (MISO) - ATMEGA128 PORTB, PIN3 */
|
||||
//#define CSN 0 /*SPI - SS*/
|
||||
//#define FLASH_CS 6 /* PB.6 Output as CS*/
|
||||
|
||||
//M644p/M1284p
|
||||
#define SCK 7 /* - Output: SPI Serial Clock (SCLK) - ATMEGA644/1284 PORTB, PIN7 */
|
||||
#define MOSI 5 /* - Output: SPI Master out - slave in (MOSI) - ATMEGA644/1284 PORTB, PIN5 */
|
||||
#define MISO 6 /* - Input: SPI Master in - slave out (MISO) - ATMEGA644/1284 PORTB, PIN6 */
|
||||
#define CSN 4 /*SPI - SS*/
|
||||
|
||||
//#define FLASH_CS 3 /* PB.2 Output as CS*/
|
||||
//#define FLASH_CS 2 /* PB.2 Output as CS*/
|
||||
//#define CAN_CS 1 /* PB.1 Output as CS for CAN MCP2515*/
|
||||
|
||||
//#define SPI_FLASH_ENABLE() ( PORTB &= ~BV(FLASH_CS) )
|
||||
//#define SPI_FLASH_DISABLE() ( PORTB |= BV(FLASH_CS) )
|
||||
|
||||
#define WIZNET_CS 3 /* PB.3 Output as CS for Wiznet ETHERNET*/
|
||||
#define SPI_WIZNET_ENABLE() ( PORTB &= ~BV(WIZNET_CS) )
|
||||
#define SPI_WIZNET_DISABLE() ( PORTB |= BV(WIZNET_CS) )
|
||||
|
||||
#define SD_CS 0 /* PB.0 Output as CS for SD-reader*/
|
||||
#define SPI_SD_ENABLE() ( PORTB &= ~BV(SD_CS) )
|
||||
#define SPI_SD_DISABLE() ( PORTB |= BV(SD_CS) )
|
||||
|
||||
|
||||
|
||||
|
||||
/* Define macros to use for checking SPI transmission status depending
|
||||
on if it is possible to wait for TX buffer ready. This is possible
|
||||
on for example MSP430 but not on AVR. */
|
||||
#ifdef SPI_WAITFORTxREADY
|
||||
#define SPI_WAITFORTx_BEFORE() SPI_WAITFORTxREADY()
|
||||
#define SPI_WAITFORTx_AFTER()
|
||||
#define SPI_WAITFORTx_ENDED() SPI_WAITFOREOTx()
|
||||
#else /* SPI_WAITFORTxREADY */
|
||||
#define SPI_WAITFORTx_BEFORE()
|
||||
#define SPI_WAITFORTx_AFTER() SPI_WAITFOREOTx()
|
||||
#define SPI_WAITFORTx_ENDED()
|
||||
#endif /* SPI_WAITFORTxREADY */
|
||||
|
||||
extern unsigned char spi_busy;
|
||||
|
||||
void spi_init(void);
|
||||
|
||||
/* Write one character to SPI */
|
||||
#define SPI_WRITE(data) \
|
||||
do { \
|
||||
SPI_WAITFORTx_BEFORE(); \
|
||||
SPI_TXBUF = data; \
|
||||
SPI_WAITFOREOTx(); \
|
||||
} while(0)
|
||||
|
||||
/* Write one character to SPI - will not wait for end
|
||||
useful for multiple writes with wait after final */
|
||||
#define SPI_WRITE_FAST(data) \
|
||||
do { \
|
||||
SPI_WAITFORTx_BEFORE(); \
|
||||
SPI_TXBUF = data; \
|
||||
SPI_WAITFORTx_AFTER(); \
|
||||
} while(0)
|
||||
|
||||
/* Read one character from SPI */
|
||||
#define SPI_READ(data) \
|
||||
do { \
|
||||
SPI_TXBUF = 0; \
|
||||
SPI_WAITFOREORx(); \
|
||||
data = SPI_RXBUF; \
|
||||
} while(0)
|
||||
|
||||
/* Flush the SPI read register */
|
||||
#ifndef SPI_FLUSH
|
||||
#define SPI_FLUSH() \
|
||||
do { \
|
||||
SPI_RXBUF; \
|
||||
} while(0);
|
||||
#endif
|
||||
|
||||
#endif /* SPI_H_ */
|
||||
@ -0,0 +1,706 @@
|
||||
/*
|
||||
* Modified for different BUFFER_SIZE for UART0 && UART1
|
||||
* see below: UART0_RX_BUFFER_SIZE/UART1_RX_BUFFER_SIZE && UART0_TX_BUFFER_SIZE/UART1_TX_BUFFER_SIZE
|
||||
* Ibragimov M. 7/03/2015
|
||||
*/
|
||||
/*************************************************************************
|
||||
Title: Interrupt UART library with receive/transmit circular buffers
|
||||
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
|
||||
File: $Id: uart.c,v 1.12 2014/01/08 21:58:12 peter Exp $
|
||||
Software: AVR-GCC 4.1, AVR Libc 1.4.6 or higher
|
||||
Hardware: any AVR with built-in UART,
|
||||
License: GNU General Public License
|
||||
|
||||
DESCRIPTION:
|
||||
An interrupt is generated when the UART has finished transmitting or
|
||||
receiving a byte. The interrupt handling routines use circular buffers
|
||||
for buffering received and transmitted data.
|
||||
|
||||
The UART0[1]_RX_BUFFER_SIZE and UART0[1]_TX_BUFFER_SIZE variables define
|
||||
the buffer size in bytes. Note that these variables must be a
|
||||
power of 2.
|
||||
|
||||
USAGE:
|
||||
Refere to the header file uart.h for a description of the routines.
|
||||
See also example test_uart.c.
|
||||
|
||||
NOTES:
|
||||
Based on Atmel Application Note AVR306
|
||||
|
||||
LICENSE:
|
||||
Copyright (C) 2006 Peter Fleury
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
*************************************************************************/
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include "uart_extd.h"
|
||||
|
||||
|
||||
/*
|
||||
* constants and macros
|
||||
*/
|
||||
|
||||
/* size of RX0/TX0 buffers */
|
||||
#define UART0_RX_BUFFER_MASK ( UART0_RX_BUFFER_SIZE - 1)
|
||||
#define UART0_TX_BUFFER_MASK ( UART0_TX_BUFFER_SIZE - 1)
|
||||
|
||||
#if ( UART0_RX_BUFFER_SIZE & UART0_RX_BUFFER_MASK )
|
||||
#error RX0 buffer size is not a power of 2
|
||||
#endif
|
||||
#if ( UART0_TX_BUFFER_SIZE & UART0_TX_BUFFER_MASK )
|
||||
#error TX0 buffer size is not a power of 2
|
||||
#endif
|
||||
|
||||
/* size of RX1/TX1 buffers */
|
||||
#define UART1_RX_BUFFER_MASK ( UART1_RX_BUFFER_SIZE - 1)
|
||||
#define UART1_TX_BUFFER_MASK ( UART1_TX_BUFFER_SIZE - 1)
|
||||
|
||||
#if ( UART1_RX_BUFFER_SIZE & UART1_RX_BUFFER_MASK )
|
||||
#error RX1 buffer size is not a power of 2
|
||||
#endif
|
||||
#if ( UART1_TX_BUFFER_SIZE & UART1_TX_BUFFER_MASK )
|
||||
#error TX1 buffer size is not a power of 2
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__AVR_AT90S2313__) \
|
||||
|| defined(__AVR_AT90S4414__) || defined(__AVR_AT90S4434__) \
|
||||
|| defined(__AVR_AT90S8515__) || defined(__AVR_AT90S8535__) \
|
||||
|| defined(__AVR_ATmega103__)
|
||||
/* old AVR classic or ATmega103 with one UART */
|
||||
#define AT90_UART
|
||||
#define UART0_RECEIVE_INTERRUPT UART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
|
||||
#define UART0_STATUS USR
|
||||
#define UART0_CONTROL UCR
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__)
|
||||
/* old AVR classic with one UART */
|
||||
#define AT90_UART
|
||||
#define UART0_RECEIVE_INTERRUPT UART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \
|
||||
|| defined(__AVR_ATmega323__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART_RXC_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined (__AVR_ATmega8515__) || defined(__AVR_ATmega8535__)
|
||||
#define ATMEGA_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega163__)
|
||||
/* ATmega163 with one UART */
|
||||
#define ATMEGA_UART
|
||||
#define UART0_RECEIVE_INTERRUPT UART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega162__)
|
||||
/* ATmega with two USART */
|
||||
#define ATMEGA_USART0
|
||||
#define ATMEGA_USART1
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RXC_vect
|
||||
#define UART1_RECEIVE_INTERRUPT USART1_RXC_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#define UART1_STATUS UCSR1A
|
||||
#define UART1_CONTROL UCSR1B
|
||||
#define UART1_DATA UDR1
|
||||
#define UART1_UDRIE UDRIE1
|
||||
#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)
|
||||
/* ATmega with two USART */
|
||||
#define ATMEGA_USART0
|
||||
#define ATMEGA_USART1
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART1_RECEIVE_INTERRUPT USART1_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#define UART1_STATUS UCSR1A
|
||||
#define UART1_CONTROL UCSR1B
|
||||
#define UART1_DATA UDR1
|
||||
#define UART1_UDRIE UDRIE1
|
||||
#elif defined(__AVR_ATmega161__)
|
||||
/* ATmega with UART */
|
||||
#error "AVR ATmega161 currently not supported by this libaray !"
|
||||
#elif defined(__AVR_ATmega169__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega48P__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__) \
|
||||
|| defined(__AVR_ATmega3250__) || defined(__AVR_ATmega3290__) ||defined(__AVR_ATmega6450__) || defined(__AVR_ATmega6490__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART0
|
||||
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#elif defined(__AVR_ATtiny2313__)
|
||||
#define ATMEGA_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect
|
||||
#define UART0_STATUS UCSRA
|
||||
#define UART0_CONTROL UCSRB
|
||||
#define UART0_DATA UDR
|
||||
#define UART0_UDRIE UDRIE
|
||||
#elif defined(__AVR_ATmega329__) || \
|
||||
defined(__AVR_ATmega649__) || \
|
||||
defined(__AVR_ATmega325__) || \
|
||||
defined(__AVR_ATmega645__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART0
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega640__)
|
||||
/* ATmega with two USART */
|
||||
#define ATMEGA_USART0
|
||||
#define ATMEGA_USART1
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART1_RECEIVE_INTERRUPT USART1_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#define UART1_STATUS UCSR1A
|
||||
#define UART1_CONTROL UCSR1B
|
||||
#define UART1_DATA UDR1
|
||||
#define UART1_UDRIE UDRIE1
|
||||
#elif defined(__AVR_ATmega644__)
|
||||
/* ATmega with one USART */
|
||||
#define ATMEGA_USART0
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#elif defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)
|
||||
/* ATmega with two USART */
|
||||
#define ATMEGA_USART0
|
||||
#define ATMEGA_USART1
|
||||
#define UART0_RECEIVE_INTERRUPT USART0_RX_vect
|
||||
#define UART1_RECEIVE_INTERRUPT USART1_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect
|
||||
#define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR0A
|
||||
#define UART0_CONTROL UCSR0B
|
||||
#define UART0_DATA UDR0
|
||||
#define UART0_UDRIE UDRIE0
|
||||
#define UART1_STATUS UCSR1A
|
||||
#define UART1_CONTROL UCSR1B
|
||||
#define UART1_DATA UDR1
|
||||
#define UART1_UDRIE UDRIE1
|
||||
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1287__)
|
||||
/* AT90USBxx with one USART */
|
||||
#define AT90USB_USART
|
||||
#define UART0_RECEIVE_INTERRUPT USART1_RX_vect
|
||||
#define UART0_TRANSMIT_INTERRUPT USART1_UDRE_vect
|
||||
#define UART0_STATUS UCSR1A
|
||||
#define UART0_CONTROL UCSR1B
|
||||
#define UART0_DATA UDR1
|
||||
#define UART0_UDRIE UDRIE1
|
||||
#else
|
||||
#error "no UART definition for MCU available"
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* module global variables
|
||||
*/
|
||||
static volatile unsigned char UART_TxBuf[UART0_TX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART_RxBuf[UART0_RX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART_TxHead;
|
||||
static volatile unsigned char UART_TxTail;
|
||||
static volatile unsigned char UART_RxHead;
|
||||
static volatile unsigned char UART_RxTail;
|
||||
static volatile unsigned char UART_LastRxError;
|
||||
|
||||
#if defined( ATMEGA_USART1 )
|
||||
static volatile unsigned char UART1_TxBuf[UART1_TX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART1_RxBuf[UART1_RX_BUFFER_SIZE];
|
||||
static volatile unsigned char UART1_TxHead;
|
||||
static volatile unsigned char UART1_TxTail;
|
||||
static volatile unsigned char UART1_RxHead;
|
||||
static volatile unsigned char UART1_RxTail;
|
||||
static volatile unsigned char UART1_LastRxError;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
ISR (UART0_RECEIVE_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART Receive Complete interrupt
|
||||
Purpose: called when the UART has received a character
|
||||
**************************************************************************/
|
||||
{
|
||||
unsigned char tmphead;
|
||||
unsigned char data;
|
||||
unsigned char usr;
|
||||
unsigned char lastRxError;
|
||||
|
||||
|
||||
/* read UART status register and UART data register */
|
||||
usr = UART0_STATUS;
|
||||
data = UART0_DATA;
|
||||
|
||||
/* */
|
||||
#if defined( AT90_UART )
|
||||
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
|
||||
#elif defined( ATMEGA_USART )
|
||||
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
|
||||
#elif defined( ATMEGA_USART0 )
|
||||
lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) );
|
||||
#elif defined ( ATMEGA_UART )
|
||||
lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
|
||||
#elif defined( AT90USB_USART )
|
||||
lastRxError = (usr & (_BV(FE1)|_BV(DOR1)) );
|
||||
#endif
|
||||
|
||||
/* calculate buffer index */
|
||||
tmphead = ( UART_RxHead + 1) & UART0_RX_BUFFER_MASK;
|
||||
|
||||
if ( tmphead == UART_RxTail ) {
|
||||
/* error: receive buffer overflow */
|
||||
lastRxError = UART_BUFFER_OVERFLOW >> 8;
|
||||
}else{
|
||||
/* store new index */
|
||||
UART_RxHead = tmphead;
|
||||
/* store received data in buffer */
|
||||
UART_RxBuf[tmphead] = data;
|
||||
}
|
||||
UART_LastRxError |= lastRxError;
|
||||
}
|
||||
|
||||
|
||||
ISR (UART0_TRANSMIT_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART Data Register Empty interrupt
|
||||
Purpose: called when the UART is ready to transmit the next byte
|
||||
**************************************************************************/
|
||||
{
|
||||
unsigned char tmptail;
|
||||
|
||||
|
||||
if ( UART_TxHead != UART_TxTail) {
|
||||
/* calculate and store new buffer index */
|
||||
tmptail = (UART_TxTail + 1) & UART0_TX_BUFFER_MASK;
|
||||
UART_TxTail = tmptail;
|
||||
/* get one byte from buffer and write it to UART */
|
||||
UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */
|
||||
}else{
|
||||
/* tx buffer empty, disable UDRE interrupt */
|
||||
UART0_CONTROL &= ~_BV(UART0_UDRIE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_init()
|
||||
Purpose: initialize UART and set baudrate
|
||||
Input: baudrate using macro UART_BAUD_SELECT()
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart_init(unsigned int baudrate)
|
||||
{
|
||||
UART_TxHead = 0;
|
||||
UART_TxTail = 0;
|
||||
UART_RxHead = 0;
|
||||
UART_RxTail = 0;
|
||||
|
||||
#if defined( AT90_UART )
|
||||
/* set baud rate */
|
||||
UBRR = (unsigned char)baudrate;
|
||||
|
||||
/* enable UART receiver and transmmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE)|_BV(RXEN)|_BV(TXEN);
|
||||
|
||||
#elif defined (ATMEGA_USART)
|
||||
/* Set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART0_STATUS = (1<<U2X); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRRH = (unsigned char)(baudrate>>8);
|
||||
UBRRL = (unsigned char) baudrate;
|
||||
|
||||
/* Enable USART receiver and transmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
|
||||
|
||||
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
||||
#ifdef URSEL
|
||||
UCSRC = (1<<URSEL)|(3<<UCSZ0);
|
||||
#else
|
||||
UCSRC = (3<<UCSZ0);
|
||||
#endif
|
||||
|
||||
#elif defined (ATMEGA_USART0 )
|
||||
/* Set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART0_STATUS = (1<<U2X0); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRR0H = (unsigned char)(baudrate>>8);
|
||||
UBRR0L = (unsigned char) baudrate;
|
||||
|
||||
/* Enable USART receiver and transmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
|
||||
|
||||
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
||||
#ifdef URSEL0
|
||||
UCSR0C = (1<<URSEL0)|(3<<UCSZ00);
|
||||
#else
|
||||
UCSR0C = (3<<UCSZ00);
|
||||
#endif
|
||||
|
||||
#elif defined ( ATMEGA_UART )
|
||||
/* set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART0_STATUS = (1<<U2X); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRRHI = (unsigned char)(baudrate>>8);
|
||||
UBRR = (unsigned char) baudrate;
|
||||
|
||||
/* Enable UART receiver and transmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
|
||||
|
||||
#elif defined ( AT90USB_USART )
|
||||
/* set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART0_STATUS = (1<<U2X1 ); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRR1H = (unsigned char)(baudrate>>8);
|
||||
UBRR1L = (unsigned char) baudrate;
|
||||
|
||||
/* Enable UART receiver and transmitter and receive complete interrupt */
|
||||
UART0_CONTROL = _BV(RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
|
||||
|
||||
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
||||
UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);
|
||||
#endif
|
||||
|
||||
}/* uart_init */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_getc()
|
||||
Purpose: return byte from ringbuffer
|
||||
Returns: lower byte: received byte from ringbuffer
|
||||
higher byte: last receive error
|
||||
**************************************************************************/
|
||||
unsigned int uart_getc(void)
|
||||
{
|
||||
unsigned char tmptail;
|
||||
unsigned char data;
|
||||
|
||||
|
||||
if ( UART_RxHead == UART_RxTail ) {
|
||||
return UART_NO_DATA; /* no data available */
|
||||
}
|
||||
|
||||
/* calculate /store buffer index */
|
||||
tmptail = (UART_RxTail + 1) & UART0_RX_BUFFER_MASK;
|
||||
UART_RxTail = tmptail;
|
||||
|
||||
/* get data from receive buffer */
|
||||
data = UART_RxBuf[tmptail];
|
||||
|
||||
data = (UART_LastRxError << 8) + data;
|
||||
UART_LastRxError = 0;
|
||||
return data;
|
||||
|
||||
}/* uart_getc */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_putc()
|
||||
Purpose: write byte to ringbuffer for transmitting via UART
|
||||
Input: byte to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart_putc(unsigned char data)
|
||||
{
|
||||
unsigned char tmphead;
|
||||
|
||||
|
||||
tmphead = (UART_TxHead + 1) & UART0_TX_BUFFER_MASK;
|
||||
|
||||
while ( tmphead == UART_TxTail ){
|
||||
;/* wait for free space in buffer */
|
||||
}
|
||||
|
||||
UART_TxBuf[tmphead] = data;
|
||||
UART_TxHead = tmphead;
|
||||
|
||||
/* enable UDRE interrupt */
|
||||
UART0_CONTROL |= _BV(UART0_UDRIE);
|
||||
|
||||
}/* uart_putc */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_puts()
|
||||
Purpose: transmit string to UART
|
||||
Input: string to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart_puts(const char *s )
|
||||
{
|
||||
while (*s)
|
||||
uart_putc(*s++);
|
||||
|
||||
}/* uart_puts */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart_puts_p()
|
||||
Purpose: transmit string from program memory to UART
|
||||
Input: program memory string to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart_puts_p(const char *progmem_s )
|
||||
{
|
||||
register char c;
|
||||
|
||||
while ( (c = pgm_read_byte(progmem_s++)) )
|
||||
uart_putc(c);
|
||||
|
||||
}/* uart_puts_p */
|
||||
|
||||
|
||||
/*
|
||||
* these functions are only for ATmegas with two USART
|
||||
*/
|
||||
#if defined( ATMEGA_USART1 )
|
||||
|
||||
ISR(UART1_RECEIVE_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART1 Receive Complete interrupt
|
||||
Purpose: called when the UART1 has received a character
|
||||
**************************************************************************/
|
||||
{
|
||||
unsigned char tmphead;
|
||||
unsigned char data;
|
||||
unsigned char usr;
|
||||
unsigned char lastRxError;
|
||||
|
||||
|
||||
/* read UART status register and UART data register */
|
||||
usr = UART1_STATUS;
|
||||
data = UART1_DATA;
|
||||
|
||||
/* */
|
||||
lastRxError = (usr & (_BV(FE1)|_BV(DOR1)) );
|
||||
|
||||
/* calculate buffer index */
|
||||
tmphead = ( UART1_RxHead + 1) & UART1_RX_BUFFER_MASK;
|
||||
|
||||
if ( tmphead == UART1_RxTail ) {
|
||||
/* error: receive buffer overflow */
|
||||
lastRxError = UART_BUFFER_OVERFLOW >> 8;
|
||||
}else{
|
||||
/* store new index */
|
||||
UART1_RxHead = tmphead;
|
||||
/* store received data in buffer */
|
||||
UART1_RxBuf[tmphead] = data;
|
||||
}
|
||||
UART1_LastRxError |= lastRxError;
|
||||
}
|
||||
|
||||
|
||||
ISR(UART1_TRANSMIT_INTERRUPT)
|
||||
/*************************************************************************
|
||||
Function: UART1 Data Register Empty interrupt
|
||||
Purpose: called when the UART1 is ready to transmit the next byte
|
||||
**************************************************************************/
|
||||
{
|
||||
unsigned char tmptail;
|
||||
|
||||
|
||||
if ( UART1_TxHead != UART1_TxTail) {
|
||||
/* calculate and store new buffer index */
|
||||
tmptail = (UART1_TxTail + 1) & UART1_TX_BUFFER_MASK;
|
||||
UART1_TxTail = tmptail;
|
||||
/* get one byte from buffer and write it to UART */
|
||||
UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */
|
||||
}else{
|
||||
/* tx buffer empty, disable UDRE interrupt */
|
||||
UART1_CONTROL &= ~_BV(UART1_UDRIE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_init()
|
||||
Purpose: initialize UART1 and set baudrate
|
||||
Input: baudrate using macro UART_BAUD_SELECT()
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart1_init(unsigned int baudrate)
|
||||
{
|
||||
UART1_TxHead = 0;
|
||||
UART1_TxTail = 0;
|
||||
UART1_RxHead = 0;
|
||||
UART1_RxTail = 0;
|
||||
|
||||
|
||||
/* Set baud rate */
|
||||
if ( baudrate & 0x8000 )
|
||||
{
|
||||
UART1_STATUS = (1<<U2X1); //Enable 2x speed
|
||||
baudrate &= ~0x8000;
|
||||
}
|
||||
UBRR1H = (unsigned char)(baudrate>>8);
|
||||
UBRR1L = (unsigned char) baudrate;
|
||||
|
||||
/* Enable USART receiver and transmitter and receive complete interrupt */
|
||||
UART1_CONTROL = _BV(RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
|
||||
|
||||
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
|
||||
#ifdef URSEL1
|
||||
UCSR1C = (1<<URSEL1)|(3<<UCSZ10);
|
||||
#else
|
||||
UCSR1C = (3<<UCSZ10);
|
||||
#endif
|
||||
}/* uart_init */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_getc()
|
||||
Purpose: return byte from ringbuffer
|
||||
Returns: lower byte: received byte from ringbuffer
|
||||
higher byte: last receive error
|
||||
**************************************************************************/
|
||||
unsigned int uart1_getc(void)
|
||||
{
|
||||
unsigned char tmptail;
|
||||
unsigned char data;
|
||||
|
||||
|
||||
if ( UART1_RxHead == UART1_RxTail ) {
|
||||
return UART_NO_DATA; /* no data available */
|
||||
}
|
||||
|
||||
/* calculate /store buffer index */
|
||||
tmptail = (UART1_RxTail + 1) & UART1_RX_BUFFER_MASK;
|
||||
UART1_RxTail = tmptail;
|
||||
|
||||
/* get data from receive buffer */
|
||||
data = UART1_RxBuf[tmptail];
|
||||
|
||||
data = (UART1_LastRxError << 8) + data;
|
||||
UART1_LastRxError = 0;
|
||||
return data;
|
||||
|
||||
}/* uart1_getc */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_putc()
|
||||
Purpose: write byte to ringbuffer for transmitting via UART
|
||||
Input: byte to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart1_putc(unsigned char data)
|
||||
{
|
||||
unsigned char tmphead;
|
||||
|
||||
|
||||
tmphead = (UART1_TxHead + 1) & UART1_TX_BUFFER_MASK;
|
||||
|
||||
while ( tmphead == UART1_TxTail ){
|
||||
;/* wait for free space in buffer */
|
||||
}
|
||||
|
||||
UART1_TxBuf[tmphead] = data;
|
||||
UART1_TxHead = tmphead;
|
||||
|
||||
/* enable UDRE interrupt */
|
||||
UART1_CONTROL |= _BV(UART1_UDRIE);
|
||||
|
||||
}/* uart1_putc */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_puts()
|
||||
Purpose: transmit string to UART1
|
||||
Input: string to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart1_puts(const char *s )
|
||||
{
|
||||
while (*s)
|
||||
uart1_putc(*s++);
|
||||
|
||||
}/* uart1_puts */
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
Function: uart1_puts_p()
|
||||
Purpose: transmit string from program memory to UART1
|
||||
Input: program memory string to be transmitted
|
||||
Returns: none
|
||||
**************************************************************************/
|
||||
void uart1_puts_p(const char *progmem_s )
|
||||
{
|
||||
register char c;
|
||||
|
||||
while ( (c = pgm_read_byte(progmem_s++)) )
|
||||
uart1_putc(c);
|
||||
|
||||
}/* uart1_puts_p */
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,209 @@
|
||||
#ifndef UART_H
|
||||
#define UART_H
|
||||
/*
|
||||
* Modified for different BUFFER_SIZE for UART0 && UART1
|
||||
* see below: UART0_RX_BUFFER_SIZE/UART1_RX_BUFFER_SIZE && UART0_TX_BUFFER_SIZE/UART1_TX_BUFFER_SIZE
|
||||
* Ibragimov M. 7/03/2015
|
||||
*/
|
||||
/************************************************************************
|
||||
Title: Interrupt UART library with receive/transmit circular buffers
|
||||
Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
|
||||
File: $Id: uart.h,v 1.12 2012/11/19 19:52:27 peter Exp $
|
||||
Software: AVR-GCC 4.1, AVR Libc 1.4
|
||||
Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz
|
||||
License: GNU General Public License
|
||||
Usage: see Doxygen manual
|
||||
|
||||
LICENSE:
|
||||
Copyright (C) 2006 Peter Fleury
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
************************************************************************/
|
||||
|
||||
/**
|
||||
* @defgroup pfleury_uart UART Library
|
||||
* @code #include <uart.h> @endcode
|
||||
*
|
||||
* @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers.
|
||||
*
|
||||
* This library can be used to transmit and receive data through the built in UART.
|
||||
*
|
||||
* An interrupt is generated when the UART has finished transmitting or
|
||||
* receiving a byte. The interrupt handling routines use circular buffers
|
||||
* for buffering received and transmitted data.
|
||||
*
|
||||
* The UART0[1]_RX_BUFFER_SIZE and UART0[1]_TX_BUFFER_SIZE constants define
|
||||
* the size of the circular buffers in bytes. Note that these constants must be a power of 2.
|
||||
* You may need to adapt this constants to your target and your application by adding
|
||||
* CDEFS += -DUART0[1]_RX_BUFFER_SIZE=nn -DUART0[1]_RX_BUFFER_SIZE=nn to your Makefile.
|
||||
*
|
||||
* @note Based on Atmel Application Note AVR306
|
||||
* @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury
|
||||
*/
|
||||
|
||||
/**@{*/
|
||||
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
|
||||
#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
** constants and macros
|
||||
*/
|
||||
|
||||
/** @brief UART Baudrate Expression
|
||||
* @param xtalcpu system clock in Mhz, e.g. 4000000UL for 4Mhz
|
||||
* @param baudrate baudrate in bps, e.g. 1200, 2400, 9600
|
||||
*/
|
||||
#define UART_BAUD_SELECT(baudRate,xtalCpu) (((xtalCpu) + 8UL * (baudRate)) / (16UL * (baudRate)) -1UL)
|
||||
|
||||
/** @brief UART Baudrate Expression for ATmega double speed mode
|
||||
* @param xtalcpu system clock in Mhz, e.g. 4000000UL for 4Mhz
|
||||
* @param baudrate baudrate in bps, e.g. 1200, 2400, 9600
|
||||
*/
|
||||
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) ( ((((xtalCpu) + 4UL * (baudRate)) / (8UL * (baudRate)) -1UL)) | 0x8000)
|
||||
|
||||
|
||||
/** Size of the circular receive buffer UART0, must be power of 2 */
|
||||
#ifndef UART0_RX_BUFFER_SIZE
|
||||
#define UART0_RX_BUFFER_SIZE 32
|
||||
#endif
|
||||
/** Size of the circular transmit buffer UART0, must be power of 2 */
|
||||
#ifndef UART0_TX_BUFFER_SIZE
|
||||
#define UART0_TX_BUFFER_SIZE 32
|
||||
#endif
|
||||
|
||||
/** Size of the circular receive buffer UART1, must be power of 2 */
|
||||
#ifndef UART1_RX_BUFFER_SIZE
|
||||
#define UART1_RX_BUFFER_SIZE 128
|
||||
#endif
|
||||
/** Size of the circular transmit buffer UART1, must be power of 2 */
|
||||
#ifndef UART1_TX_BUFFER_SIZE
|
||||
#define UART1_TX_BUFFER_SIZE 128
|
||||
#endif
|
||||
|
||||
/* test if the size of the circular buffers fits into SRAM */
|
||||
#if ( (UART0_RX_BUFFER_SIZE+UART0_TX_BUFFER_SIZE+UART1_RX_BUFFER_SIZE+UART1_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) )
|
||||
#error "size of UART0[1]_RX_BUFFER_SIZE + UART0[1]_TX_BUFFER_SIZE larger than size of SRAM"
|
||||
#endif
|
||||
|
||||
/*
|
||||
** high byte error return code of uart_getc()
|
||||
*/
|
||||
#define UART_FRAME_ERROR 0x1000 /* Framing Error by UART */
|
||||
#define UART_OVERRUN_ERROR 0x0800 /* Overrun condition by UART */
|
||||
#define UART_PARITY_ERROR 0x0400 /* Parity Error by UART */
|
||||
#define UART_BUFFER_OVERFLOW 0x0200 /* receive ringbuffer overflow */
|
||||
#define UART_NO_DATA 0x0100 /* no receive data available */
|
||||
|
||||
|
||||
/*
|
||||
** function prototypes
|
||||
*/
|
||||
|
||||
/**
|
||||
@brief Initialize UART and set baudrate
|
||||
@param baudrate Specify baudrate using macro UART_BAUD_SELECT()
|
||||
@return none
|
||||
*/
|
||||
extern void uart_init(unsigned int baudrate);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get received byte from ringbuffer
|
||||
*
|
||||
* Returns in the lower byte the received character and in the
|
||||
* higher byte the last receive error.
|
||||
* UART_NO_DATA is returned when no data is available.
|
||||
*
|
||||
* @param void
|
||||
* @return lower byte: received byte from ringbuffer
|
||||
* @return higher byte: last receive status
|
||||
* - \b 0 successfully received data from UART
|
||||
* - \b UART_NO_DATA
|
||||
* <br>no receive data available
|
||||
* - \b UART_BUFFER_OVERFLOW
|
||||
* <br>Receive ringbuffer overflow.
|
||||
* We are not reading the receive buffer fast enough,
|
||||
* one or more received character have been dropped
|
||||
* - \b UART_OVERRUN_ERROR
|
||||
* <br>Overrun condition by UART.
|
||||
* A character already present in the UART UDR register was
|
||||
* not read by the interrupt handler before the next character arrived,
|
||||
* one or more received characters have been dropped.
|
||||
* - \b UART_FRAME_ERROR
|
||||
* <br>Framing Error by UART
|
||||
*/
|
||||
extern unsigned int uart_getc(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put byte to ringbuffer for transmitting via UART
|
||||
* @param data byte to be transmitted
|
||||
* @return none
|
||||
*/
|
||||
extern void uart_putc(unsigned char data);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put string to ringbuffer for transmitting via UART
|
||||
*
|
||||
* The string is buffered by the uart library in a circular buffer
|
||||
* and one character at a time is transmitted to the UART using interrupts.
|
||||
* Blocks if it can not write the whole string into the circular buffer.
|
||||
*
|
||||
* @param s string to be transmitted
|
||||
* @return none
|
||||
*/
|
||||
extern void uart_puts(const char *s );
|
||||
|
||||
|
||||
/**
|
||||
* @brief Put string from program memory to ringbuffer for transmitting via UART.
|
||||
*
|
||||
* The string is buffered by the uart library in a circular buffer
|
||||
* and one character at a time is transmitted to the UART using interrupts.
|
||||
* Blocks if it can not write the whole string into the circular buffer.
|
||||
*
|
||||
* @param s program memory string to be transmitted
|
||||
* @return none
|
||||
* @see uart_puts_P
|
||||
*/
|
||||
extern void uart_puts_p(const char *s );
|
||||
|
||||
/**
|
||||
* @brief Macro to automatically put a string constant into program memory
|
||||
*/
|
||||
#define uart_puts_P(__s) uart_puts_p(PSTR(__s))
|
||||
|
||||
|
||||
|
||||
/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */
|
||||
extern void uart1_init(unsigned int baudrate);
|
||||
/** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */
|
||||
extern unsigned int uart1_getc(void);
|
||||
/** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */
|
||||
extern void uart1_putc(unsigned char data);
|
||||
/** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */
|
||||
extern void uart1_puts(const char *s );
|
||||
/** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */
|
||||
extern void uart1_puts_p(const char *s );
|
||||
/** @brief Macro to automatically put a string constant into program memory */
|
||||
#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))
|
||||
|
||||
/**@}*/
|
||||
|
||||
|
||||
#endif // UART_H
|
||||
|
||||
@ -0,0 +1,327 @@
|
||||
/**
|
||||
* @file userHandler.c
|
||||
* @brief User Control Example
|
||||
* @version 1.0
|
||||
* @date 2014/07/15
|
||||
* @par Revision
|
||||
* 2014/07/15 - 1.0 Release
|
||||
* @author
|
||||
* \n\n @par Copyright (C) 1998 - 2014 WIZnet. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
//#include "board.h"
|
||||
#include "httpUtil.h"
|
||||
#include "userHandler.h"
|
||||
//#include "adcHandler.h"
|
||||
#include "wizchip_conf.h"
|
||||
#include "globals.h"
|
||||
|
||||
/* Unavailable Pins (W5500-EVB component preempted) */
|
||||
// >> UART Rx/Tx : D0 (Rx), D1 (Tx)
|
||||
// >> W5500 SPI(SPI0) : D11 (MOSI), D12 (MISO), D13 (SCK)
|
||||
|
||||
/* On-board Devices */
|
||||
// >> Input : D14 (SW1) / D15 (SW2)
|
||||
// >> Input : AIN (Potentiometer / TEMP.Sensor)
|
||||
// >> Output : D8 (LED R) / D9 (LED G) / D10 (LED B)
|
||||
|
||||
/* NXP LPC11Exx GPIO functions */
|
||||
// GPIO: Pin state
|
||||
//Chip_GPIO_GetPinState(LPC_GPIO, dio_ports[pin], dio_pins[pin]);
|
||||
//Chip_GPIO_SetPinState(LPC_GPIO, dio_ports[pin], dio_pins[pin], true);
|
||||
//Chip_GPIO_SetPinState(LPC_GPIO, dio_ports[pin], dio_pins[pin], false);
|
||||
|
||||
// GPIO: Pin direction
|
||||
//Chip_GPIO_GetPinDIR((LPC_GPIO, dio_ports[pin], dio_pins[pin]);
|
||||
//Chip_GPIO_SetPinDIROutput(LPC_GPIO, dio_ports[pin], dio_pins[pin]);
|
||||
//Chip_GPIO_SetPinDIRInput(LPC_GPIO, dio_ports[pin], dio_pins[pin]);
|
||||
|
||||
// Pre-defined Get CGI functions
|
||||
//void make_json_dio(uint8_t * buf, uint16_t * len, uint8_t pin);
|
||||
void make_json_ain(uint8_t * buf, uint16_t * len, uint8_t pin);
|
||||
void make_json_netinfo(uint8_t * buf, uint16_t * len);
|
||||
void make_json_led1(uint8_t * buf, uint16_t * len);
|
||||
void make_info(uint8_t * buf, uint16_t * len);
|
||||
|
||||
// Pre-defined Set CGI functions
|
||||
int8_t set_diodir(uint8_t * uri);
|
||||
int8_t set_diostate(uint8_t * uri);
|
||||
|
||||
uint8_t predefined_get_cgi_processor(uint8_t * uri_name, uint8_t * buf, uint16_t * len)
|
||||
{
|
||||
//return 0; //Just a stub, not used yet..
|
||||
//uint8_t ret = 1; // ret = 1 means 'uri_name' matched
|
||||
uint8_t ret = 0; // ret = 0 means 'uri_name' not matched
|
||||
uint8_t cgibuf[14] = {0, };
|
||||
int8_t cgi_dio = -1;
|
||||
int8_t cgi_ain = -1;
|
||||
|
||||
uint8_t i;
|
||||
|
||||
if(strcmp_P((const char *)uri_name,PSTR("todo.cgi")) == 0)
|
||||
{
|
||||
// // to do
|
||||
// ;//make_json_todo(buf, len);
|
||||
}
|
||||
else if(strcmp_P((const char *)uri_name,PSTR("get_netinfo.cgi")) == 0)
|
||||
{
|
||||
make_json_netinfo(buf, len);
|
||||
ret = 1; // ret = 1 means 'uri_name' matched
|
||||
}
|
||||
else if(strcmp_P((const char *)uri_name,PSTR("get_led1.cgi")) == 0)
|
||||
{
|
||||
make_json_led1(buf, len);
|
||||
ret = 1; // ret = 1 means 'uri_name' matched
|
||||
}
|
||||
else if(strcmp_P((const char *)uri_name,PSTR("get_info.cgi")) == 0)
|
||||
{
|
||||
make_info(buf, len);
|
||||
ret = 1; // ret = 1 means 'uri_name' matched
|
||||
}
|
||||
else
|
||||
{
|
||||
// // get_dio0.cgi ~ get_dio15.cgi
|
||||
// for(i = 0; i < DIOn; i++)
|
||||
// {
|
||||
// memset(cgibuf, 0x00, 14);
|
||||
// sprintf((char *)cgibuf, "get_dio%d.cgi", i);
|
||||
// if(strcmp((const char *)uri_name, (const char *)cgibuf) == 0)
|
||||
// {
|
||||
// make_json_dio(buf, len, i);
|
||||
// cgi_dio = i;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if(cgi_dio < 0)
|
||||
//Analog Ins reading get_ain0.cgi ~ get_ain7.cgi
|
||||
if(1)
|
||||
{
|
||||
// get_ain0.cgi ~ get_ain5.cgi (A0 - A5), get_ain6.cgi for on-board potentiometer / Temp.Sensor - LPC11Exx
|
||||
//for(i = 0; i < AINn; i++) //for LPC11xx
|
||||
for(i = 0; i < 8; i++) //for AVR Mega1284p, available AIN0..AIN7
|
||||
{
|
||||
memset(cgibuf, 0x00, 14);
|
||||
sprintf((char *)cgibuf, "get_ain%d.cgi", i);
|
||||
if(strcmp((const char *)uri_name, (const char *)cgibuf) == 0)
|
||||
{
|
||||
make_json_ain(buf, len, i);
|
||||
cgi_ain = i;
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if((cgi_dio < 0) && (cgi_ain < 0)) ret = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
uint8_t predefined_set_cgi_processor(uint8_t * uri_name, uint8_t * uri, uint8_t * buf, uint16_t * len)
|
||||
{
|
||||
// return 0; //Just a stub, not used yet..
|
||||
uint8_t ret = 0; // ret = 0 means 'uri_name' not matched
|
||||
// uint8_t ret = 1; // ret = '1' means 'uri_name' matched
|
||||
uint8_t val = 0;
|
||||
|
||||
if(strcmp_P((const char *)uri_name,PSTR("todo.cgi")) == 0)
|
||||
{
|
||||
// to do
|
||||
;//val = todo(uri);
|
||||
//*len = sprintf((char *)buf, "%d", val);
|
||||
}
|
||||
// // Digital I/O; dio_s, dio_d
|
||||
// else if(strcmp_P((const char *)uri_name,PSTR("set_diodir.cgi")) == 0)
|
||||
// {
|
||||
// //val = set_diodir(uri);
|
||||
// //printf_P(PSTR("+++set_diodir.cgi uri_name: %s; uri: %s;\r\n"));
|
||||
// *len = sprintf_P((char *)buf, PSTR("%d"), val);
|
||||
// ret = 1;
|
||||
// }
|
||||
else if(strcmp((const char *)uri_name, "set_diostate.cgi") == 0)
|
||||
{
|
||||
//When uri_name=set_diostate.cgi, and uri HTTP POST request which contains something like:
|
||||
//pin=8&val=1; or pin=8&val=1; (look <dio.html> && <dio.js>)
|
||||
|
||||
/*
|
||||
This is LPC11xx handler
|
||||
val = set_diostate(uri);
|
||||
len = sprintf((char *)buf, "%d", val);
|
||||
len ret = 1;
|
||||
*/
|
||||
|
||||
|
||||
//!!Just for debug
|
||||
PRINTF("\r\n+++set_diostate.cgi uri_name: %s\r\nuri: %s\r\n", uri_name, uri);
|
||||
|
||||
//Parse URI (Very dirty!!)
|
||||
if(strstr_P(uri,PSTR("pin=LED1&val=0")))
|
||||
{
|
||||
led1_low();
|
||||
*len = sprintf_P((char *)buf, PSTR("LED1: OFF"));
|
||||
ret = 1;
|
||||
}
|
||||
else if(strstr_P(uri,PSTR("pin=LED1&val=1")))
|
||||
{
|
||||
led1_high();
|
||||
*len = sprintf_P((char *)buf, PSTR("LED1: ON"));
|
||||
ret = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
//*len = sprintf_P((char *)buf, PSTR("%d"), -1);
|
||||
*len = sprintf_P((char *)buf, PSTR("???"));
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// ret = 0;
|
||||
// }
|
||||
//
|
||||
return ret;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Pre-defined Get CGI functions
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//void make_json_dio(uint8_t * buf, uint16_t * len, uint8_t pin)
|
||||
//{
|
||||
// uint8_t pin_state = Chip_GPIO_GetPinState(LPC_GPIO, dio_ports[pin], dio_pins[pin]);
|
||||
// uint8_t pin_dir = Chip_GPIO_GetPinDIR(LPC_GPIO, dio_ports[pin], dio_pins[pin]);
|
||||
//
|
||||
// *len = sprintf((char *)buf, "DioCallback({\"dio_p\":\"%d\",\
|
||||
// \"dio_s\":\"%d\",\
|
||||
// \"dio_d\":\"%d\"\
|
||||
// });",
|
||||
// pin, // Digital io pin number
|
||||
// pin_state, // Digital io status
|
||||
// pin_dir // Digital io directions
|
||||
// );
|
||||
//}
|
||||
//
|
||||
void make_json_led1(uint8_t * buf, uint16_t * len)
|
||||
{
|
||||
if(led1_read())
|
||||
{
|
||||
*len = sprintf_P((char *)buf,PSTR( "led1Callback({\"led1_txt\":\"LED1: ON\"});")); //Send back LED1 state via call-back function
|
||||
}
|
||||
else
|
||||
{
|
||||
*len = sprintf_P((char *)buf,PSTR( "led1Callback({\"led1_txt\":\"LED1: OFF\"});")); //Send back LED1 state via call-back function
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void make_info(uint8_t * buf, uint16_t * len)
|
||||
{
|
||||
/*
|
||||
* Send program metrics:
|
||||
* Program name
|
||||
* time-date compile
|
||||
* MCU info
|
||||
* free ram info
|
||||
* uptime device
|
||||
*/
|
||||
*len = sprintf_P((char *)buf,PSTR(\
|
||||
"<pre>%S"\
|
||||
"Compiled at: %S %S\r\n"\
|
||||
"MCU is: %S; CLK is: %luHz\r\n"\
|
||||
"Free RAM: %dbytes\r\n"\
|
||||
"Uptime: %lusec\r\n</pre>"),\
|
||||
str_prog_name,\
|
||||
compile_time, compile_date,\
|
||||
str_mcu, F_CPU,\
|
||||
freeRam(),\
|
||||
millis()/1000);
|
||||
}
|
||||
|
||||
void make_json_ain(uint8_t * buf, uint16_t * len, uint8_t pin)
|
||||
{
|
||||
*len = sprintf_P((char *)buf,PSTR( "AinCallback({\"ain_p\":\"%d\",\
|
||||
\"ain_v\":\"%d\"\
|
||||
});"),
|
||||
pin, // ADC input pin number
|
||||
//get_ADC_val(pin) // ADC input value for LPC11xx
|
||||
adc_read(pin) // ADC input value for AVR
|
||||
);
|
||||
}
|
||||
|
||||
void make_json_netinfo(uint8_t * buf, uint16_t * len)
|
||||
{
|
||||
wiz_NetInfo netinfo;
|
||||
ctlnetwork(CN_GET_NETINFO, (void*) &netinfo);
|
||||
|
||||
// DHCP: 1 - Static, 2 - DHCP
|
||||
*len = sprintf_P((char *)buf,PSTR( "NetinfoCallback({\"mac\":\"%.2X:%.2X:%.2X:%.2X:%.2X:%.2X\",\
|
||||
\"ip\":\"%d.%d.%d.%d\",\
|
||||
\"gw\":\"%d.%d.%d.%d\",\
|
||||
\"sn\":\"%d.%d.%d.%d\",\
|
||||
\"dns\":\"%d.%d.%d.%d\",\
|
||||
\"dhcp\":\"%d\"\
|
||||
});"),
|
||||
netinfo.mac[0], netinfo.mac[1], netinfo.mac[2], netinfo.mac[3], netinfo.mac[4], netinfo.mac[5],
|
||||
netinfo.ip[0], netinfo.ip[1], netinfo.ip[2], netinfo.ip[3],
|
||||
netinfo.gw[0], netinfo.gw[1], netinfo.gw[2], netinfo.gw[3],
|
||||
netinfo.sn[0], netinfo.sn[1], netinfo.sn[2], netinfo.sn[3],
|
||||
netinfo.dns[0], netinfo.dns[1], netinfo.dns[2], netinfo.dns[3],
|
||||
netinfo.dhcp
|
||||
);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Pre-defined Set CGI functions
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//int8_t set_diodir(uint8_t * uri)
|
||||
//{
|
||||
// uint8_t * param;
|
||||
// uint8_t pin = 0, val = 0;
|
||||
//
|
||||
// if((param = get_http_param_value((char *)uri, "pin"))) // GPIO; D0 ~ D15
|
||||
// {
|
||||
// pin = (uint8_t)ATOI(param, 10);
|
||||
// if(pin > 15) return -1;
|
||||
//
|
||||
// if((param = get_http_param_value((char *)uri, "val"))) // Direction; NotUsed/Input/Output
|
||||
// {
|
||||
// val = (uint8_t)ATOI(param, 10);
|
||||
// if(val > Output) val = Output;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if(val == Input) Chip_GPIO_SetPinDIRInput(LPC_GPIO, dio_ports[pin], dio_pins[pin]); // Input
|
||||
// else Chip_GPIO_SetPinDIROutput(LPC_GPIO, dio_ports[pin], dio_pins[pin]); // Output
|
||||
//
|
||||
// return pin;
|
||||
//}
|
||||
//
|
||||
//int8_t set_diostate(uint8_t * uri)
|
||||
//{
|
||||
// uint8_t * param;
|
||||
// uint8_t pin = 0, val = 0;
|
||||
//
|
||||
// if((param = get_http_param_value((char *)uri, "pin"))) // GPIO; D0 ~ D15
|
||||
// {
|
||||
// pin = (uint8_t)ATOI(param, 10);
|
||||
// if(pin > 15) return -1;
|
||||
//
|
||||
// if((param = get_http_param_value((char *)uri, "val"))) // State; high(on)/low(off)
|
||||
// {
|
||||
// val = (uint8_t)ATOI(param, 10);
|
||||
// if(val > On) val = On;
|
||||
// }
|
||||
//
|
||||
// if(val == On) Chip_GPIO_SetPinState(LPC_GPIO, dio_ports[pin], dio_pins[pin], true); // High
|
||||
// else Chip_GPIO_SetPinState(LPC_GPIO, dio_ports[pin], dio_pins[pin], false); // Low
|
||||
// }
|
||||
//
|
||||
// return pin;
|
||||
//}
|
||||
@ -0,0 +1,42 @@
|
||||
/**
|
||||
* @file userHandler.h
|
||||
* @brief Header File for User Control Example
|
||||
* @version 1.0
|
||||
* @date 2014/07/15
|
||||
* @par Revision
|
||||
* 2014/07/15 - 1.0 Release
|
||||
* @author
|
||||
* \n\n @par Copyright (C) 1998 - 2014 WIZnet. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __USERHANDLER_H
|
||||
#define __USERHANDLER_H
|
||||
|
||||
#include <stdint.h>
|
||||
//#define _WEB_DEBUG_
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Public Functions
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// to do
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Pre-defined CGI Interface Functions Handler
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
uint8_t predefined_get_cgi_processor(uint8_t * uri_name, uint8_t * buf, uint16_t * len);
|
||||
uint8_t predefined_set_cgi_processor(uint8_t * uri_name, uint8_t * uri, uint8_t * buf, uint16_t * len);
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// HTTP GET Method CGI Functions
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// to do
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// HTTP POST Method CGI Functions
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// to do
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue