This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Dependents:   MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more

libMiMic(MiMic library for mbed)は、WebService機能を提供するSDKです。 mbedでWebAPIに対応したネットワークデバイスを簡単に作ることが出来ます。

libMiMicはMiMic projectで開発しています。MiMic projectについてはこちらをご覧ください。 http://nyatla.jp/mimic/wp/

構成

libMiMicはmbedRTOS上で動作し、ユーザアプリケーションにAPIを提供します。コアAPIはC言語で記述されていますが、使用頻度の高いものについてはmbed向けのC++APIが準備されています。

/media/uploads/nyatla/libmimic-sdk.png

※libMiMicはmbedの標準イーサネットドライバをしようしていません。

標準イーサネットドライバと同時に使用することはできません。

  • MiMicIP - IPv4スタックです。レテンシとメモリ消費量を抑えたuipベースのライブラリです。
  • ARP/ICMP/UDP/TCP - 基礎的なソケットAPIを提供します。APIは独自です。
  • HTTP/1.1 Server - HTTP/1.1に対応したサーバです。マルチセッション・Chunked・持続性接続に対応しています。
  • HTTP Modules - HTTP/1.1の機能モジュールです。以下のモジュールがあります。
    • ROM file provider - ROMに格納したファイルイメージを公開します。
    • File system provider - mbedファイルシステムを公開します。
    • Onchip configuration - プログラムフラッシュを利用して設定を保存します。
    • MiMicVM processor - RPCリクエスト(MiMicVM)を処理します。
    • FileUpload - ファイルアップロードを受け取ります。
    • URL decoder - HTTPリクエストを解析します。
    • UPnP handler -UPnPメッセージを処理します。
    • WebSocket - Websocketサーバです。
  • mDNS - マルチキャストDNSサービスです。
  • UPnP - UPnP/1.0の機能を提供します。UPnP handlerと協調して動作します。(現在はデバイス探索(SSDP)・デスクリプション(Description)のみ実装してあります。)
  • DHCP/APIPA - ゼロコンフィギュレーション用のモジュールです。
  • HTTP/1.1 Client
  • mbed C++ class library - mbed向けのC++CPIです。C言語のものより簡単です。

対応機種

  • mbed(mbed LPC1768)
  • LPCXpresso1769

プログラム

Import programMiMicRemoteMCU-for-Mbed

MiMic RemoteMCU for mbed. This program provides MCU control API over REST API. It can control MCU from Javascript,PHP or any HTTP rest client directly. And, The application has self development environment.

Import programMbedFileServer

The program publishes files at local directory and SD filesystem. It is a full-fledged webServer somewhat.

サンプル

Import programMiMicSimpleHttpd

This is a simplest HTTP server made ​​of libMiMic. It will echo back a request path.

Import programUPnPBasicDevice

Simplest UPnP basic device example. This program to run UPnP basic device on the mbed.

Import programWebSocketSample

MiMicSDK Websocket module sample program.

Import programHttpClientSamlpe

A http client sample program.

Import programTcpSocketClientSamlpe

MiMicSDK Tcp client socket sample program.

Import programUdpSocketSamlpe

Udp socket sample program. This program will send back the received packet.

チュートリアル

English

libMiMic(MiMic library for mbed) is SDK which provides Webservice functions. It can be created networking device easily using mbed.

See more MiMic information, See MiMic project website. http://nyatla.jp/mimic/wp/

Structure

libMiMic run on mbed RTOS and provides networking API to user application. This library has C++ class API for the mbed, and low-level C language API.

/media/uploads/nyatla/libmimic-sdk.png

For WebService general, it can be written in a simple C + + API.

libMiMic does not have the standard Ethernet driver of mbed. It is not possible that will be used with the standard Ethernet driver.

  • MiMicIP - IPv4 protocol stack. This is based uip which is reduced memory and latency.
  • ARP / ICMP / UDP / TCP - Those are provide basic IP protocols.
  • HTTP/1.1 Server - The Http server compatible HTTP/1.1. It supports multi-session, chunked transport, persistent connection.
  • HTTP Modules - There are addon-module for HTTP server. The following modules.
    • ROM file module - Publish the file images in ROM.
    • File system module - Publish thefiles in mbed file system.
    • Onchip configuration module - To save the network settings to the program flash via REST.
    • MiMicVM module - To handle the (MiMicVM) RPC request.
    • FileUpload module - Accept a file via HTTP POST.
    • URL dedoce module - A versatility URL decoder.
    • UPnP handle module - To handle UPnP messages.
    • UPnP - This provides UPnP/1.0 device functions. It works together with UPnP handler.
    • Websocket - websocket (version13) server
  • mDNS Service - DNS-SD protocol server.
  • UPnP - This provides UPnP/1.0 device functions which works with UPnP handler. (You have been implemented (SSDP) ? description only (Description) device search now.) It is a module zero configuration for - DHCP / APIPA. mbed C + + class library - C of mbed for + + is the CPI. It is simple than that of the C language.
  • DHCP/APIPA - It support zero-cpnfigulation.
  • mbed C++ class library. Almost APIs for Web applications are available.
  • HTTP/1.1 Client

Supported target

  • mbed(mbed LPC1768)
  • LPCXpresso1769

Application

Import programMiMicRemoteMCU-for-Mbed

MiMic RemoteMCU for mbed. This program provides MCU control API over REST API. It can control MCU from Javascript,PHP or any HTTP rest client directly. And, The application has self development environment.

Import programMbedFileServer

The program publishes files at local directory and SD filesystem. It is a full-fledged webServer somewhat.

Sample

Import programMiMicSimpleHttpd

This is a simplest HTTP server made ​​of libMiMic. It will echo back a request path.

Import programUPnPBasicDevice

Simplest UPnP basic device example. This program to run UPnP basic device on the mbed.

Import programWebSocketSample

MiMicSDK Websocket module sample program.

Import programHttpClientSamlpe

A http client sample program.

Import programTcpSocketClientSamlpe

MiMicSDK Tcp client socket sample program.

Import programUdpSocketSamlpe

Udp socket sample program. This program will send back the received packet.

Tutorial

Committer:
nyatla
Date:
Sun Oct 26 10:19:05 2014 +0000
Revision:
99:875f75e7e63e
Parent:
88:89598b2097fa
Child:
109:18f12ac01097
NetConfig?API??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 3:0a94993be1f6 1 #include "NetConfig.h"
nyatla 11:c82a7b2899b0 2 #include "NyLPC_uip.h"
nyatla 27:eb66b517efe6 3 #include "NyLPC_flash.h"
nyatla 11:c82a7b2899b0 4 #include "NyLPC_uip_ethernet.h"
nyatla 29:e19aab0c4156 5 #include "utils/PlatformInfo.h"
nyatla 13:a71705c5e6fd 6 #include <stdio.h>
nyatla 13:a71705c5e6fd 7 #include <stdlib.h>
nyatla 13:a71705c5e6fd 8 #include "mbed.h"
nyatla 27:eb66b517efe6 9
nyatla 48:00d211aac2ec 10 /**
nyatla 48:00d211aac2ec 11 * Default UPnP Description
nyatla 48:00d211aac2ec 12 */
nyatla 48:00d211aac2ec 13 const static char* UPNP_DEVICE_TYPE ="urn:schemas-upnp-org:device:Basic:1";
nyatla 70:2ed02b798004 14 const static char* UPNP_DEFAULT_FRENDLY_NAME="MiMic Device";
nyatla 51:45d42af201c2 15 const static char* UPNP_DEFAULT_MANUFACTUR_NAME="nyatla.jp";
nyatla 48:00d211aac2ec 16 const static char* UPNP_DEFAULT_MANUFACTUR_URL="http://nyatla.jp/";
nyatla 48:00d211aac2ec 17 const static char* UPNP_DEFAULT_MODEL_NAME="MiMic UPnP device.";
nyatla 48:00d211aac2ec 18 const static char* STR_EMPTY="";
nyatla 48:00d211aac2ec 19 const static char* UPNP_DEFAULT_PRESENTATION_URL="/";
nyatla 50:35e765380772 20 const static char* UPNP_DEFAULT_ICON_MIMETYPE="image/png";
nyatla 50:35e765380772 21 const static char* UPNP_DEFAULT_ICON_URL="./icon.png";
nyatla 48:00d211aac2ec 22
nyatla 48:00d211aac2ec 23
nyatla 48:00d211aac2ec 24 /*
nyatla 48:00d211aac2ec 25 setUPnPFriendlyName
nyatla 48:00d211aac2ec 26 setUPnPManufactur(name,url,description)
nyatla 48:00d211aac2ec 27 setUPnPModel(name,number,url)
nyatla 48:00d211aac2ec 28 setUPnPPresentationUrl(name,number,url)
nyatla 48:00d211aac2ec 29 */
nyatla 48:00d211aac2ec 30
nyatla 48:00d211aac2ec 31
nyatla 37:fc4b4fd6a649 32 //default mdns records
nyatla 37:fc4b4fd6a649 33 const static char* MDNS_SRV_HTTP="_http._tcp\0";
nyatla 48:00d211aac2ec 34 //const static char* MDNS_NAME="LPC176x(MiMic)\0";
nyatla 37:fc4b4fd6a649 35
nyatla 27:eb66b517efe6 36 extern "C" void mbed_mac_address(char *s);
nyatla 37:fc4b4fd6a649 37
nyatla 37:fc4b4fd6a649 38
nyatla 37:fc4b4fd6a649 39 static void overrideMacAddrIfmbed(NyLPC_TcNetConfig& v)
nyatla 27:eb66b517efe6 40 {
nyatla 37:fc4b4fd6a649 41 mbed_mac_address((char*)(v.super.eth_mac.addr));
nyatla 37:fc4b4fd6a649 42 //update default hostname
nyatla 37:fc4b4fd6a649 43 strcpy(v.hostname,"MiMic");
nyatla 48:00d211aac2ec 44 NyLPC_uitoa2(NyLPC_TcIPv4Config_getEtherMac000120203(&(v.super)),v.hostname+ 5,16,8);
nyatla 48:00d211aac2ec 45 NyLPC_uitoa2((NyLPC_TcIPv4Config_getEtherMac0405xxxx(&(v.super))>>16)&0xffff,v.hostname+13,16,4);
nyatla 51:45d42af201c2 46 v.services.flags=NyLPC_TcNetConfig_SERVICE_FLAG_MDNS|NyLPC_TcNetConfig_SERVICE_FLAG_UPNP;
nyatla 37:fc4b4fd6a649 47 }
nyatla 37:fc4b4fd6a649 48
nyatla 37:fc4b4fd6a649 49 static void updateOnchipConfig(NyLPC_TcNetConfig& v)
nyatla 48:00d211aac2ec 50 {
nyatla 48:00d211aac2ec 51 struct NyLPC_TMiMicConfigulation cfg_image;
nyatla 27:eb66b517efe6 52 //パラメータ→ROMイメージ変換
nyatla 27:eb66b517efe6 53 cfg_image.fast_boot=0xffffffff;
nyatla 37:fc4b4fd6a649 54 cfg_image.mac_00_01_02_03=NyLPC_TcIPv4Config_getEtherMac000120203(&(v.super));
nyatla 37:fc4b4fd6a649 55 cfg_image.mac_04_05_xx_xx=NyLPC_TcIPv4Config_getEtherMac0405xxxx(&(v.super));
nyatla 37:fc4b4fd6a649 56 cfg_image.ipv4_addr_net =NyLPC_ntohl(v.super.ip_addr.v);
nyatla 37:fc4b4fd6a649 57 cfg_image.ipv4_mask_net =NyLPC_ntohl(v.super.netmask.v);
nyatla 37:fc4b4fd6a649 58 cfg_image.ipv4_drut_net =NyLPC_ntohl(v.super.dr_addr.v);
nyatla 37:fc4b4fd6a649 59 //additional information
nyatla 37:fc4b4fd6a649 60 cfg_image.ipv4_flags=v.tcp_mode;
nyatla 37:fc4b4fd6a649 61 cfg_image.http_port=v.services.http_port;
nyatla 37:fc4b4fd6a649 62 cfg_image.srv_flags=v.services.flags;
nyatla 37:fc4b4fd6a649 63 strcpy(cfg_image.hostname,v.hostname);
nyatla 27:eb66b517efe6 64 //FreeRTOSの停止
nyatla 27:eb66b517efe6 65 NyLPC_cIsr_enterCritical();
nyatla 27:eb66b517efe6 66 //Flashへの書き込み
nyatla 27:eb66b517efe6 67 NyLPC_cMiMicConfiglation_updateConfigulation(&cfg_image);
nyatla 27:eb66b517efe6 68 //FreeRTOSの復帰
nyatla 27:eb66b517efe6 69 NyLPC_cIsr_exitCritical();
nyatla 27:eb66b517efe6 70 }
nyatla 37:fc4b4fd6a649 71
nyatla 37:fc4b4fd6a649 72
nyatla 3:0a94993be1f6 73 namespace MiMic
nyatla 3:0a94993be1f6 74 {
nyatla 48:00d211aac2ec 75 NetConfig::NetConfig(bool i_is_factory_default)
nyatla 48:00d211aac2ec 76 {
nyatla 48:00d211aac2ec 77 NyLPC_cNetConfig_initialize(&(this->_inst),i_is_factory_default);
nyatla 48:00d211aac2ec 78 this->_ref_custom_dns_record=NULL;
nyatla 48:00d211aac2ec 79 this->_ref_custom_upnp_desc=NULL;
nyatla 27:eb66b517efe6 80
nyatla 48:00d211aac2ec 81 //check mbed
nyatla 88:89598b2097fa 82 if(PlatformInfo::getPlatformType()==PlatformInfo::PF_MBED) {
nyatla 88:89598b2097fa 83 //mbedチップからMACアドレスを取得
nyatla 88:89598b2097fa 84 if(!NyLPC_cMiMicConfiglation_hasUserConfigulation()) {
nyatla 88:89598b2097fa 85 //is 1st read?
nyatla 88:89598b2097fa 86 //mbed override
nyatla 88:89598b2097fa 87 overrideMacAddrIfmbed((this->_inst));
nyatla 88:89598b2097fa 88 //save
nyatla 88:89598b2097fa 89 updateOnchipConfig((this->_inst));
nyatla 88:89598b2097fa 90 } else {
nyatla 88:89598b2097fa 91 //2nd read
nyatla 88:89598b2097fa 92 if(i_is_factory_default) {
nyatla 88:89598b2097fa 93 //mbed override
nyatla 88:89598b2097fa 94 overrideMacAddrIfmbed((this->_inst));
nyatla 88:89598b2097fa 95 } else {
nyatla 88:89598b2097fa 96 //nothing to do
nyatla 88:89598b2097fa 97 }
nyatla 88:89598b2097fa 98 }
nyatla 3:0a94993be1f6 99 }
nyatla 37:fc4b4fd6a649 100
nyatla 48:00d211aac2ec 101 //updateUUID
nyatla 50:35e765380772 102 this->setUPnPUdn(0xe29f7100,0x4ba2,0x01e0,0);
nyatla 48:00d211aac2ec 103 this->_upnp_desc.device_type=UPNP_DEVICE_TYPE;
nyatla 48:00d211aac2ec 104 this->_upnp_desc.frendly_name=UPNP_DEFAULT_FRENDLY_NAME;
nyatla 48:00d211aac2ec 105 this->_upnp_desc.manufacturer=UPNP_DEFAULT_MANUFACTUR_NAME;
nyatla 48:00d211aac2ec 106 this->_upnp_desc.manufacturer_url=UPNP_DEFAULT_MANUFACTUR_URL;
nyatla 48:00d211aac2ec 107 this->_upnp_desc.model_descriprion=STR_EMPTY;
nyatla 48:00d211aac2ec 108 this->_upnp_desc.model_name=UPNP_DEFAULT_MODEL_NAME;
nyatla 48:00d211aac2ec 109 this->_upnp_desc.model_number=NULL;
nyatla 48:00d211aac2ec 110 this->_upnp_desc.model_url=NULL;
nyatla 48:00d211aac2ec 111 this->_upnp_desc.serial_number=STR_EMPTY;
nyatla 50:35e765380772 112 this->_upnp_desc.udn=this->_udn;//pointer
nyatla 48:00d211aac2ec 113 this->_upnp_desc.upc=NULL;
nyatla 50:35e765380772 114 this->_upnp_icon.width=32;
nyatla 50:35e765380772 115 this->_upnp_icon.height=32;
nyatla 50:35e765380772 116 this->_upnp_icon.depth=8;
nyatla 50:35e765380772 117 this->_upnp_icon.mimetype=UPNP_DEFAULT_ICON_MIMETYPE;
nyatla 50:35e765380772 118 this->_upnp_icon.url=UPNP_DEFAULT_ICON_URL;
nyatla 50:35e765380772 119 this->_upnp_desc.icons=&this->_upnp_icon;//pointer
nyatla 48:00d211aac2ec 120 this->_upnp_desc.presentation_url=UPNP_DEFAULT_PRESENTATION_URL;
nyatla 48:00d211aac2ec 121 this->_upnp_desc.number_of_devices=0;
nyatla 48:00d211aac2ec 122 this->_upnp_desc.number_of_service=0;
nyatla 50:35e765380772 123 this->_upnp_desc.number_of_icon=1;
nyatla 48:00d211aac2ec 124 this->_upnp_desc.devices=NULL;
nyatla 48:00d211aac2ec 125 this->_upnp_desc.services=NULL;
nyatla 50:35e765380772 126 //mdns
nyatla 50:35e765380772 127 this->_dns_record.name=UPNP_DEFAULT_FRENDLY_NAME;
nyatla 50:35e765380772 128 this->_dns_record.a=this->_inst.hostname;//pointer
nyatla 50:35e765380772 129 this->_dns_record.num_of_srv=1;
nyatla 50:35e765380772 130 this->_srv_record.protocol=MDNS_SRV_HTTP;
nyatla 50:35e765380772 131 this->_srv_record.port=this->_inst.services.http_port;
nyatla 50:35e765380772 132 this->_dns_record.srv=&(this->_srv_record);
nyatla 50:35e765380772 133
nyatla 48:00d211aac2ec 134 }
nyatla 48:00d211aac2ec 135
nyatla 48:00d211aac2ec 136 NetConfig::~NetConfig()
nyatla 48:00d211aac2ec 137 {
nyatla 48:00d211aac2ec 138 NyLPC_cNetConfig_finalize(&(this->_inst));
nyatla 48:00d211aac2ec 139 }
nyatla 48:00d211aac2ec 140
nyatla 48:00d211aac2ec 141 const struct NyLPC_TUPnPDevDescDevice* NetConfig::refUPnPDevDesc()const
nyatla 48:00d211aac2ec 142 {
nyatla 48:00d211aac2ec 143 return this->_ref_custom_upnp_desc!=NULL?this->_ref_custom_upnp_desc:&this->_upnp_desc;
nyatla 48:00d211aac2ec 144 }
nyatla 48:00d211aac2ec 145 /** internal dns record*/
nyatla 48:00d211aac2ec 146 const struct NyLPC_TDnsRecord* NetConfig::refMdnsRecord()const
nyatla 48:00d211aac2ec 147 {
nyatla 48:00d211aac2ec 148 return this->_ref_custom_dns_record!=NULL?this->_ref_custom_dns_record:&this->_dns_record;
nyatla 48:00d211aac2ec 149 }
nyatla 48:00d211aac2ec 150
nyatla 48:00d211aac2ec 151
nyatla 48:00d211aac2ec 152 void NetConfig::setZeroconf(bool v)
nyatla 48:00d211aac2ec 153 {
nyatla 48:00d211aac2ec 154 this->_inst.tcp_mode=(v?NyLPC_TcNetConfig_IPV4_FLAG_MODE_APIPA:NyLPC_TcNetConfig_IPV4_FLAG_MODE_MANUAL);
nyatla 48:00d211aac2ec 155 }
nyatla 48:00d211aac2ec 156 /**
nyatla 48:00d211aac2ec 157 * Set IPv4 ip address to instance.
nyatla 48:00d211aac2ec 158 */
nyatla 48:00d211aac2ec 159 void NetConfig::setIpAddr(unsigned char ip1,unsigned char ip2,unsigned char ip3,unsigned char ip4)
nyatla 48:00d211aac2ec 160 {
nyatla 48:00d211aac2ec 161 NyLPC_TIPv4Addr_set(&(this->_inst.super.ip_addr),ip1,ip2,ip3,ip4);
nyatla 48:00d211aac2ec 162 }
nyatla 58:03b89038b21a 163
nyatla 58:03b89038b21a 164 void NetConfig::setIpAddr(const IpAddr& i_addr)
nyatla 58:03b89038b21a 165 {
nyatla 58:03b89038b21a 166 this->_inst.super.ip_addr=i_addr.addr.v4;
nyatla 58:03b89038b21a 167 }
nyatla 58:03b89038b21a 168
nyatla 48:00d211aac2ec 169 /**
nyatla 48:00d211aac2ec 170 * Set IPv4 network mask value to instance.
nyatla 48:00d211aac2ec 171 */
nyatla 48:00d211aac2ec 172 void NetConfig::setNetMask(unsigned char ip1,unsigned char ip2,unsigned char ip3,unsigned char ip4)
nyatla 48:00d211aac2ec 173 {
nyatla 48:00d211aac2ec 174 NyLPC_TIPv4Addr_set(&(this->_inst.super.netmask),ip1,ip2,ip3,ip4);
nyatla 48:00d211aac2ec 175 }
nyatla 58:03b89038b21a 176 void NetConfig::setNetMask(const IpAddr& i_mask)
nyatla 58:03b89038b21a 177 {
nyatla 58:03b89038b21a 178 this->_inst.super.netmask=i_mask.addr.v4;
nyatla 58:03b89038b21a 179 }
nyatla 58:03b89038b21a 180
nyatla 48:00d211aac2ec 181 /**
nyatla 48:00d211aac2ec 182 * Set IPv4 default gateway address to instance.
nyatla 48:00d211aac2ec 183 */
nyatla 48:00d211aac2ec 184 void NetConfig::setGateway(unsigned char ip1,unsigned char ip2,unsigned char ip3,unsigned char ip4)
nyatla 48:00d211aac2ec 185 {
nyatla 48:00d211aac2ec 186 NyLPC_TIPv4Addr_set(&(this->_inst.super.dr_addr),ip1,ip2,ip3,ip4);
nyatla 48:00d211aac2ec 187 }
nyatla 58:03b89038b21a 188 void NetConfig::setGateway(const IpAddr& i_addr)
nyatla 58:03b89038b21a 189 {
nyatla 58:03b89038b21a 190 this->_inst.super.dr_addr=i_addr.addr.v4;
nyatla 58:03b89038b21a 191 }
nyatla 58:03b89038b21a 192
nyatla 48:00d211aac2ec 193 /**
nyatla 48:00d211aac2ec 194 * Set ethernet mac address to instance.
nyatla 48:00d211aac2ec 195 */
nyatla 48:00d211aac2ec 196 void NetConfig::setEmac(unsigned char a1,unsigned char a2,unsigned char a3,unsigned char a4,unsigned char a5,unsigned char a6)
nyatla 48:00d211aac2ec 197 {
nyatla 48:00d211aac2ec 198 NyLPC_TEthAddr_set(&(this->_inst.super.eth_mac),a1,a2,a3,a4,a5,a6);
nyatla 48:00d211aac2ec 199 //update only node field
nyatla 48:00d211aac2ec 200 for(NyLPC_TInt16 i=0;i<6;i++){
nyatla 48:00d211aac2ec 201 NyLPC_uitoa2(this->_inst.super.eth_mac.addr[i],&this->_udn[5+24+i*2],16,2);
nyatla 37:fc4b4fd6a649 202 }
nyatla 37:fc4b4fd6a649 203
nyatla 48:00d211aac2ec 204 }
nyatla 48:00d211aac2ec 205 void NetConfig::setSrvHttpPort(unsigned short port)
nyatla 48:00d211aac2ec 206 {
nyatla 50:35e765380772 207 this->_srv_record.port=this->_inst.services.http_port=port;
nyatla 48:00d211aac2ec 208 }
nyatla 48:00d211aac2ec 209 void NetConfig::setSrvMdns(bool i_enable)
nyatla 48:00d211aac2ec 210 {
nyatla 48:00d211aac2ec 211 if(i_enable) {
nyatla 48:00d211aac2ec 212 this->_inst.services.flags|=NyLPC_TcNetConfig_SERVICE_FLAG_MDNS;
nyatla 48:00d211aac2ec 213 } else {
nyatla 48:00d211aac2ec 214 this->_inst.services.flags&=(~NyLPC_TcNetConfig_SERVICE_FLAG_MDNS);
nyatla 48:00d211aac2ec 215 }
nyatla 48:00d211aac2ec 216 }
nyatla 48:00d211aac2ec 217 void NetConfig::setSrvUPnP(bool i_enable)
nyatla 48:00d211aac2ec 218 {
nyatla 48:00d211aac2ec 219 if(i_enable) {
nyatla 48:00d211aac2ec 220 this->_inst.services.flags|=NyLPC_TcNetConfig_SERVICE_FLAG_UPNP;
nyatla 48:00d211aac2ec 221 } else {
nyatla 48:00d211aac2ec 222 this->_inst.services.flags&=(~NyLPC_TcNetConfig_SERVICE_FLAG_UPNP);
nyatla 48:00d211aac2ec 223 }
nyatla 48:00d211aac2ec 224 }
nyatla 48:00d211aac2ec 225
nyatla 48:00d211aac2ec 226 void NetConfig::setHostName(const char* i_hostname)
nyatla 48:00d211aac2ec 227 {
nyatla 48:00d211aac2ec 228 this->setHostName(i_hostname,strlen(i_hostname));
nyatla 48:00d211aac2ec 229 }
nyatla 48:00d211aac2ec 230 void NetConfig::setHostName(const char* i_hostname,int len)
nyatla 48:00d211aac2ec 231 {
nyatla 48:00d211aac2ec 232 int l=(len>(NyLPC_TcNetConfig_HOSTNAME_LEN-1))?NyLPC_TcNetConfig_HOSTNAME_LEN-1:len;
nyatla 48:00d211aac2ec 233 memcpy(this->_inst.hostname,i_hostname,l);
nyatla 48:00d211aac2ec 234 *(this->_inst.hostname+l)='\0';
nyatla 48:00d211aac2ec 235 }
nyatla 99:875f75e7e63e 236 const char* NetConfig::getHostName()
nyatla 99:875f75e7e63e 237 {
nyatla 99:875f75e7e63e 238 return this->_inst.hostname;
nyatla 99:875f75e7e63e 239 }
nyatla 99:875f75e7e63e 240
nyatla 48:00d211aac2ec 241 void NetConfig::setFriendlyName(const char* i_name)
nyatla 48:00d211aac2ec 242 {
nyatla 48:00d211aac2ec 243 this->_dns_record.name=this->_upnp_desc.frendly_name=(i_name==NULL?STR_EMPTY:i_name);
nyatla 48:00d211aac2ec 244 }
nyatla 48:00d211aac2ec 245 void NetConfig::setUPnPManufactur(const char* i_name,const char* i_url)
nyatla 48:00d211aac2ec 246 {
nyatla 48:00d211aac2ec 247 this->_upnp_desc.manufacturer=i_name==NULL?STR_EMPTY:i_name;
nyatla 48:00d211aac2ec 248 this->_upnp_desc.manufacturer_url=i_name==NULL?STR_EMPTY:i_url;
nyatla 48:00d211aac2ec 249 }
nyatla 48:00d211aac2ec 250 void NetConfig::setUPnPModel(const char* i_name,const char* i_number,const char* i_url,const char* i_description)
nyatla 48:00d211aac2ec 251 {
nyatla 48:00d211aac2ec 252 this->_upnp_desc.model_descriprion=i_description==NULL?STR_EMPTY:i_description;
nyatla 48:00d211aac2ec 253 this->_upnp_desc.model_name=i_name==NULL?STR_EMPTY:i_name;
nyatla 48:00d211aac2ec 254 this->_upnp_desc.model_number=i_number;
nyatla 48:00d211aac2ec 255 this->_upnp_desc.model_url=i_url;
nyatla 48:00d211aac2ec 256 }
nyatla 48:00d211aac2ec 257 void NetConfig::setUPnPSerialNumber(const char* i_number)
nyatla 48:00d211aac2ec 258 {
nyatla 48:00d211aac2ec 259 this->_upnp_desc.serial_number=i_number;
nyatla 48:00d211aac2ec 260 }
nyatla 48:00d211aac2ec 261 void NetConfig::setUPnPUdn(unsigned long i_time_l,unsigned short i_time_m,unsigned short i_time_h,unsigned short i_sq)
nyatla 48:00d211aac2ec 262 {
nyatla 48:00d211aac2ec 263 NyLPC_TcUuid_t uuid;
nyatla 48:00d211aac2ec 264 NyLPC_cUuid_initialize(&uuid);
nyatla 48:00d211aac2ec 265 NyLPC_cUuid_setTimeBase(&uuid,i_time_l,(i_time_h<<16)|i_time_m,i_sq,&(this->_inst.super.eth_mac));
nyatla 48:00d211aac2ec 266 strcpy(this->_udn,"uuid:");
nyatla 48:00d211aac2ec 267 NyLPC_cUuid_toString(&uuid,this->_udn+5);
nyatla 49:d4334acc3ec3 268 NyLPC_cUuid_finalize(&uuid);
nyatla 48:00d211aac2ec 269 }
nyatla 50:35e765380772 270 void NetConfig::setUPnPIcon(unsigned short i_width,unsigned short i_height,unsigned short i_depth,const char* i_mimetype,const char* i_url)
nyatla 50:35e765380772 271 {
nyatla 50:35e765380772 272 this->_upnp_icon.width=i_width;
nyatla 50:35e765380772 273 this->_upnp_icon.height=i_height;
nyatla 50:35e765380772 274 this->_upnp_icon.depth=i_depth;
nyatla 50:35e765380772 275 this->_upnp_icon.mimetype=i_mimetype;
nyatla 50:35e765380772 276 this->_upnp_icon.url=i_url;
nyatla 50:35e765380772 277 }
nyatla 48:00d211aac2ec 278
nyatla 48:00d211aac2ec 279 void NetConfig::setUPnPPresentationURL(const char* i_url)
nyatla 48:00d211aac2ec 280 {
nyatla 48:00d211aac2ec 281 this->_upnp_desc.presentation_url=i_url;
nyatla 48:00d211aac2ec 282 }
nyatla 48:00d211aac2ec 283 void NetConfig::setCustomUPnPDescription(const struct NyLPC_TUPnPDevDescDevice* i_ref_description)
nyatla 48:00d211aac2ec 284 {
nyatla 48:00d211aac2ec 285 this->_ref_custom_upnp_desc=i_ref_description;
nyatla 48:00d211aac2ec 286 }
nyatla 48:00d211aac2ec 287 void NetConfig::setCustomMdnsRecord(const struct NyLPC_TDnsRecord* i_ref_record)
nyatla 48:00d211aac2ec 288 {
nyatla 48:00d211aac2ec 289 this->_ref_custom_dns_record=i_ref_record;
nyatla 48:00d211aac2ec 290 }
nyatla 48:00d211aac2ec 291
nyatla 48:00d211aac2ec 292 bool NetConfig::loadFromFile(const char* i_file)
nyatla 48:00d211aac2ec 293 {
nyatla 51:45d42af201c2 294 #define NUMBER_OF_NAME 8
nyatla 48:00d211aac2ec 295 const static char* tbl[]= {
nyatla 48:00d211aac2ec 296 "macaddr", //0
nyatla 48:00d211aac2ec 297 "ipaddr", //1
nyatla 48:00d211aac2ec 298 "netmask", //2
nyatla 48:00d211aac2ec 299 "gateway", //3
nyatla 48:00d211aac2ec 300 "srv_http_port",//4
nyatla 48:00d211aac2ec 301 "srv_mdns",//5
nyatla 51:45d42af201c2 302 "srv_upnp" //6
nyatla 51:45d42af201c2 303 "host",//7
nyatla 48:00d211aac2ec 304 };
nyatla 48:00d211aac2ec 305 char tmp[32];
nyatla 48:00d211aac2ec 306 union {
nyatla 48:00d211aac2ec 307 unsigned char u8[6];
nyatla 48:00d211aac2ec 308 NyLPC_TUInt32 u32;
nyatla 48:00d211aac2ec 309 } v;
nyatla 48:00d211aac2ec 310 const char* p;//pointer to read
nyatla 48:00d211aac2ec 311 const char* key;
nyatla 48:00d211aac2ec 312 const char* t;
nyatla 48:00d211aac2ec 313 int l;
nyatla 48:00d211aac2ec 314 FILE* fp = fopen(i_file,"r");
nyatla 48:00d211aac2ec 315 if(fp==NULL) {
nyatla 48:00d211aac2ec 316 return false;
nyatla 48:00d211aac2ec 317 }
nyatla 48:00d211aac2ec 318 //read from values
nyatla 48:00d211aac2ec 319 while(fgets(tmp,31,fp)) {
nyatla 48:00d211aac2ec 320 p=NyLPC_cFormatTextReader_seekSpace(tmp)+tmp;//skip space
nyatla 48:00d211aac2ec 321 l=NyLPC_cFormatTextReader_readWord(p,&key);
nyatla 51:45d42af201c2 322 for(int i=0; i<NUMBER_OF_NAME; i++) {
nyatla 48:00d211aac2ec 323 if(l>=0 && NyLPC_strnicmp(key,tbl[i],l)==0) {
nyatla 48:00d211aac2ec 324 p+=l;//skip keyname
nyatla 48:00d211aac2ec 325 p=NyLPC_cFormatTextReader_seekSpace(p)+p;//skip space
nyatla 48:00d211aac2ec 326 if(*p!='=') {
nyatla 48:00d211aac2ec 327 break;//check equal
nyatla 48:00d211aac2ec 328 }
nyatla 48:00d211aac2ec 329 p++;
nyatla 48:00d211aac2ec 330 //skip space
nyatla 48:00d211aac2ec 331 p=NyLPC_cFormatTextReader_seekSpace(p)+p;//skip space
nyatla 48:00d211aac2ec 332 switch(i) {
nyatla 37:fc4b4fd6a649 333 case 0://macaddr
nyatla 48:00d211aac2ec 334 if(NyLPC_cFormatTextReader_readMacAddr(p,v.u8)!=0) {
nyatla 37:fc4b4fd6a649 335 this->setEmac(v.u8[0],v.u8[1],v.u8[2],v.u8[3],v.u8[4],v.u8[5]);
nyatla 13:a71705c5e6fd 336 }
nyatla 13:a71705c5e6fd 337 break;
nyatla 37:fc4b4fd6a649 338 case 1://ipaddr
nyatla 48:00d211aac2ec 339 if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) {
nyatla 37:fc4b4fd6a649 340 this->setIpAddr(v.u8[0],v.u8[1],v.u8[2],v.u8[3]);
nyatla 37:fc4b4fd6a649 341 this->setZeroconf(false);
nyatla 48:00d211aac2ec 342 } else {
nyatla 48:00d211aac2ec 343 if(NyLPC_cFormatTextReader_readWord(p,&t)==4) {
nyatla 48:00d211aac2ec 344 if(NyLPC_strnicmp(t,"auto",4)==0) {
nyatla 37:fc4b4fd6a649 345 this->setZeroconf(true);
nyatla 37:fc4b4fd6a649 346 }
nyatla 37:fc4b4fd6a649 347 }
nyatla 13:a71705c5e6fd 348 }
nyatla 13:a71705c5e6fd 349 break;
nyatla 13:a71705c5e6fd 350 case 2:
nyatla 48:00d211aac2ec 351 if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) {
nyatla 37:fc4b4fd6a649 352 this->setNetMask(v.u8[0],v.u8[1],v.u8[2],v.u8[3]);
nyatla 13:a71705c5e6fd 353 }
nyatla 13:a71705c5e6fd 354 break;
nyatla 13:a71705c5e6fd 355 case 3:
nyatla 48:00d211aac2ec 356 if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) {
nyatla 37:fc4b4fd6a649 357 this->setGateway(v.u8[0],v.u8[1],v.u8[2],v.u8[3]);
nyatla 37:fc4b4fd6a649 358 }
nyatla 37:fc4b4fd6a649 359 break;
nyatla 37:fc4b4fd6a649 360 case 4:
nyatla 48:00d211aac2ec 361 if(NyLPC_cFormatTextReader_readUInt(p,&(v.u32))!=0) {
nyatla 37:fc4b4fd6a649 362 this->setSrvHttpPort((unsigned short)v.u32);
nyatla 37:fc4b4fd6a649 363 }
nyatla 37:fc4b4fd6a649 364 break;
nyatla 37:fc4b4fd6a649 365 case 5:
nyatla 37:fc4b4fd6a649 366 l=NyLPC_cFormatTextReader_readWord(p,&t);
nyatla 48:00d211aac2ec 367 if((*t=='y' || *t=='Y')) {
nyatla 37:fc4b4fd6a649 368 this->setSrvMdns(true);
nyatla 48:00d211aac2ec 369 } else if((*t=='n' || *t=='N')) {
nyatla 37:fc4b4fd6a649 370 this->setSrvMdns(false);
nyatla 37:fc4b4fd6a649 371 }
nyatla 37:fc4b4fd6a649 372 break;
nyatla 37:fc4b4fd6a649 373 case 6:
nyatla 37:fc4b4fd6a649 374 l=NyLPC_cFormatTextReader_readWord(p,&t);
nyatla 51:45d42af201c2 375 if((*t=='y' || *t=='Y')) {
nyatla 51:45d42af201c2 376 this->setSrvUPnP(true);
nyatla 51:45d42af201c2 377 } else if((*t=='n' || *t=='N')) {
nyatla 51:45d42af201c2 378 this->setSrvUPnP(false);
nyatla 51:45d42af201c2 379 }
nyatla 51:45d42af201c2 380 break;
nyatla 51:45d42af201c2 381 case 7:
nyatla 51:45d42af201c2 382 l=NyLPC_cFormatTextReader_readWord(p,&t);
nyatla 48:00d211aac2ec 383 if(l>1) {
nyatla 37:fc4b4fd6a649 384 this->setHostName(t,l);
nyatla 13:a71705c5e6fd 385 }
nyatla 13:a71705c5e6fd 386 break;
nyatla 13:a71705c5e6fd 387 default:
nyatla 13:a71705c5e6fd 388 break;
nyatla 13:a71705c5e6fd 389 }
nyatla 13:a71705c5e6fd 390 }
nyatla 13:a71705c5e6fd 391 }
nyatla 37:fc4b4fd6a649 392 }
nyatla 48:00d211aac2ec 393 fclose(fp);
nyatla 48:00d211aac2ec 394 return true;
nyatla 48:00d211aac2ec 395 }
nyatla 88:89598b2097fa 396 };