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:
Wed Aug 07 16:43:32 2013 +0000
Revision:
49:d4334acc3ec3
Parent:
48:00d211aac2ec
Child:
50:35e765380772
backup; fix uuid writer overflow; ?????; Notify??????Net?????????????modUPnP??????????

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 48:00d211aac2ec 14 const static char* UPNP_DEFAULT_FRENDLY_NAME="MiMic Device(LPC176x)";
nyatla 48:00d211aac2ec 15 const static char* UPNP_DEFAULT_MANUFACTUR_NAME="MiMicProject@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 48:00d211aac2ec 20
nyatla 48:00d211aac2ec 21
nyatla 48:00d211aac2ec 22 /*
nyatla 48:00d211aac2ec 23 setUPnPFriendlyName
nyatla 48:00d211aac2ec 24 setUPnPManufactur(name,url,description)
nyatla 48:00d211aac2ec 25 setUPnPModel(name,number,url)
nyatla 48:00d211aac2ec 26 setUPnPPresentationUrl(name,number,url)
nyatla 48:00d211aac2ec 27 */
nyatla 48:00d211aac2ec 28
nyatla 48:00d211aac2ec 29
nyatla 37:fc4b4fd6a649 30 //default mdns records
nyatla 37:fc4b4fd6a649 31 const static char* MDNS_SRV_HTTP="_http._tcp\0";
nyatla 48:00d211aac2ec 32 //const static char* MDNS_NAME="LPC176x(MiMic)\0";
nyatla 37:fc4b4fd6a649 33
nyatla 27:eb66b517efe6 34 extern "C" void mbed_mac_address(char *s);
nyatla 37:fc4b4fd6a649 35
nyatla 37:fc4b4fd6a649 36
nyatla 37:fc4b4fd6a649 37 static void overrideMacAddrIfmbed(NyLPC_TcNetConfig& v)
nyatla 27:eb66b517efe6 38 {
nyatla 37:fc4b4fd6a649 39 mbed_mac_address((char*)(v.super.eth_mac.addr));
nyatla 37:fc4b4fd6a649 40 //update default hostname
nyatla 37:fc4b4fd6a649 41 strcpy(v.hostname,"MiMic");
nyatla 48:00d211aac2ec 42 NyLPC_uitoa2(NyLPC_TcIPv4Config_getEtherMac000120203(&(v.super)),v.hostname+ 5,16,8);
nyatla 48:00d211aac2ec 43 NyLPC_uitoa2((NyLPC_TcIPv4Config_getEtherMac0405xxxx(&(v.super))>>16)&0xffff,v.hostname+13,16,4);
nyatla 37:fc4b4fd6a649 44 v.services.flags=NyLPC_TcNetConfig_SERVICE_FLAG_MDNS;
nyatla 37:fc4b4fd6a649 45 }
nyatla 37:fc4b4fd6a649 46
nyatla 37:fc4b4fd6a649 47 static void updateOnchipConfig(NyLPC_TcNetConfig& v)
nyatla 48:00d211aac2ec 48 {
nyatla 48:00d211aac2ec 49 struct NyLPC_TMiMicConfigulation cfg_image;
nyatla 27:eb66b517efe6 50 //パラメータ→ROMイメージ変換
nyatla 27:eb66b517efe6 51 cfg_image.fast_boot=0xffffffff;
nyatla 37:fc4b4fd6a649 52 cfg_image.mac_00_01_02_03=NyLPC_TcIPv4Config_getEtherMac000120203(&(v.super));
nyatla 37:fc4b4fd6a649 53 cfg_image.mac_04_05_xx_xx=NyLPC_TcIPv4Config_getEtherMac0405xxxx(&(v.super));
nyatla 37:fc4b4fd6a649 54 cfg_image.ipv4_addr_net =NyLPC_ntohl(v.super.ip_addr.v);
nyatla 37:fc4b4fd6a649 55 cfg_image.ipv4_mask_net =NyLPC_ntohl(v.super.netmask.v);
nyatla 37:fc4b4fd6a649 56 cfg_image.ipv4_drut_net =NyLPC_ntohl(v.super.dr_addr.v);
nyatla 37:fc4b4fd6a649 57 //additional information
nyatla 37:fc4b4fd6a649 58 cfg_image.ipv4_flags=v.tcp_mode;
nyatla 37:fc4b4fd6a649 59 cfg_image.http_port=v.services.http_port;
nyatla 37:fc4b4fd6a649 60 cfg_image.srv_flags=v.services.flags;
nyatla 37:fc4b4fd6a649 61 strcpy(cfg_image.hostname,v.hostname);
nyatla 27:eb66b517efe6 62 //FreeRTOSの停止
nyatla 27:eb66b517efe6 63 NyLPC_cIsr_enterCritical();
nyatla 27:eb66b517efe6 64 //Flashへの書き込み
nyatla 27:eb66b517efe6 65 NyLPC_cMiMicConfiglation_updateConfigulation(&cfg_image);
nyatla 27:eb66b517efe6 66 //FreeRTOSの復帰
nyatla 27:eb66b517efe6 67 NyLPC_cIsr_exitCritical();
nyatla 27:eb66b517efe6 68 }
nyatla 37:fc4b4fd6a649 69
nyatla 37:fc4b4fd6a649 70
nyatla 3:0a94993be1f6 71 namespace MiMic
nyatla 3:0a94993be1f6 72 {
nyatla 48:00d211aac2ec 73 NetConfig::NetConfig(bool i_is_factory_default)
nyatla 48:00d211aac2ec 74 {
nyatla 48:00d211aac2ec 75 NyLPC_cNetConfig_initialize(&(this->_inst),i_is_factory_default);
nyatla 48:00d211aac2ec 76 this->_ref_custom_dns_record=NULL;
nyatla 48:00d211aac2ec 77 this->_ref_custom_upnp_desc=NULL;
nyatla 27:eb66b517efe6 78
nyatla 48:00d211aac2ec 79 //check mbed
nyatla 48:00d211aac2ec 80 if(PlatformInfo::getPlatformType()!=PlatformInfo::PF_MBED) {
nyatla 48:00d211aac2ec 81 return;
nyatla 3:0a94993be1f6 82 }
nyatla 37:fc4b4fd6a649 83
nyatla 48:00d211aac2ec 84 if(!NyLPC_cMiMicConfiglation_hasUserConfigulation()) {
nyatla 48:00d211aac2ec 85 //is 1st read?
nyatla 48:00d211aac2ec 86 //mbed override
nyatla 48:00d211aac2ec 87 overrideMacAddrIfmbed((this->_inst));
nyatla 48:00d211aac2ec 88 //save
nyatla 48:00d211aac2ec 89 updateOnchipConfig((this->_inst));
nyatla 48:00d211aac2ec 90 } else {
nyatla 48:00d211aac2ec 91 //2nd read
nyatla 48:00d211aac2ec 92 if(i_is_factory_default) {
nyatla 48:00d211aac2ec 93 //mbed override
nyatla 48:00d211aac2ec 94 overrideMacAddrIfmbed((this->_inst));
nyatla 48:00d211aac2ec 95 } else {
nyatla 48:00d211aac2ec 96 //nothing to do
nyatla 37:fc4b4fd6a649 97 }
nyatla 37:fc4b4fd6a649 98 }
nyatla 48:00d211aac2ec 99 //updateUUID
nyatla 48:00d211aac2ec 100 this->setUPnPUdn(0,0,0,0);
nyatla 48:00d211aac2ec 101 //update mdns informations
nyatla 48:00d211aac2ec 102 this->_syncServiceInfo();
nyatla 48:00d211aac2ec 103 //update UPnP informations
nyatla 48:00d211aac2ec 104 }
nyatla 48:00d211aac2ec 105 void NetConfig::_syncServiceInfo()
nyatla 48:00d211aac2ec 106 {
nyatla 48:00d211aac2ec 107 //update DNS record
nyatla 48:00d211aac2ec 108 this->_dns_record.name=UPNP_DEFAULT_FRENDLY_NAME;
nyatla 48:00d211aac2ec 109 this->_dns_record.a=this->_inst.hostname;
nyatla 48:00d211aac2ec 110 this->_dns_record.num_of_srv=1;
nyatla 48:00d211aac2ec 111 this->_srv_record.protocol=MDNS_SRV_HTTP;
nyatla 48:00d211aac2ec 112 this->_srv_record.port=this->_inst.services.http_port;
nyatla 48:00d211aac2ec 113 this->_dns_record.srv=&(this->_srv_record);
nyatla 48:00d211aac2ec 114
nyatla 48:00d211aac2ec 115 //update UPnP record
nyatla 48:00d211aac2ec 116 this->_upnp_desc.device_type=UPNP_DEVICE_TYPE;
nyatla 48:00d211aac2ec 117 this->_upnp_desc.frendly_name=UPNP_DEFAULT_FRENDLY_NAME;
nyatla 48:00d211aac2ec 118 this->_upnp_desc.manufacturer=UPNP_DEFAULT_MANUFACTUR_NAME;
nyatla 48:00d211aac2ec 119 this->_upnp_desc.manufacturer_url=UPNP_DEFAULT_MANUFACTUR_URL;
nyatla 48:00d211aac2ec 120 this->_upnp_desc.model_descriprion=STR_EMPTY;
nyatla 48:00d211aac2ec 121 this->_upnp_desc.model_name=UPNP_DEFAULT_MODEL_NAME;
nyatla 48:00d211aac2ec 122 this->_upnp_desc.model_number=NULL;
nyatla 48:00d211aac2ec 123 this->_upnp_desc.model_url=NULL;
nyatla 48:00d211aac2ec 124 this->_upnp_desc.serial_number=STR_EMPTY;
nyatla 48:00d211aac2ec 125 this->_upnp_desc.udn=this->_udn;//AUTO GENERATE
nyatla 48:00d211aac2ec 126 this->_upnp_desc.upc=NULL;
nyatla 48:00d211aac2ec 127 this->_upnp_desc.presentation_url=UPNP_DEFAULT_PRESENTATION_URL;
nyatla 48:00d211aac2ec 128 this->_upnp_desc.number_of_devices=0;
nyatla 48:00d211aac2ec 129 this->_upnp_desc.number_of_service=0;
nyatla 48:00d211aac2ec 130 this->_upnp_desc.number_of_icon=0;
nyatla 48:00d211aac2ec 131 this->_upnp_desc.devices=NULL;
nyatla 48:00d211aac2ec 132 this->_upnp_desc.services=NULL;
nyatla 48:00d211aac2ec 133 this->_upnp_desc.icons=NULL;
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 48:00d211aac2ec 163 /**
nyatla 48:00d211aac2ec 164 * Set IPv4 network mask value to instance.
nyatla 48:00d211aac2ec 165 */
nyatla 48:00d211aac2ec 166 void NetConfig::setNetMask(unsigned char ip1,unsigned char ip2,unsigned char ip3,unsigned char ip4)
nyatla 48:00d211aac2ec 167 {
nyatla 48:00d211aac2ec 168 NyLPC_TIPv4Addr_set(&(this->_inst.super.netmask),ip1,ip2,ip3,ip4);
nyatla 48:00d211aac2ec 169 }
nyatla 48:00d211aac2ec 170 /**
nyatla 48:00d211aac2ec 171 * Set IPv4 default gateway address to instance.
nyatla 48:00d211aac2ec 172 */
nyatla 48:00d211aac2ec 173 void NetConfig::setGateway(unsigned char ip1,unsigned char ip2,unsigned char ip3,unsigned char ip4)
nyatla 48:00d211aac2ec 174 {
nyatla 48:00d211aac2ec 175 NyLPC_TIPv4Addr_set(&(this->_inst.super.dr_addr),ip1,ip2,ip3,ip4);
nyatla 48:00d211aac2ec 176 }
nyatla 48:00d211aac2ec 177 /**
nyatla 48:00d211aac2ec 178 * Set ethernet mac address to instance.
nyatla 48:00d211aac2ec 179 */
nyatla 48:00d211aac2ec 180 void NetConfig::setEmac(unsigned char a1,unsigned char a2,unsigned char a3,unsigned char a4,unsigned char a5,unsigned char a6)
nyatla 48:00d211aac2ec 181 {
nyatla 48:00d211aac2ec 182 NyLPC_TEthAddr_set(&(this->_inst.super.eth_mac),a1,a2,a3,a4,a5,a6);
nyatla 48:00d211aac2ec 183 //update only node field
nyatla 48:00d211aac2ec 184 for(NyLPC_TInt16 i=0;i<6;i++){
nyatla 48:00d211aac2ec 185 NyLPC_uitoa2(this->_inst.super.eth_mac.addr[i],&this->_udn[5+24+i*2],16,2);
nyatla 37:fc4b4fd6a649 186 }
nyatla 37:fc4b4fd6a649 187
nyatla 48:00d211aac2ec 188 }
nyatla 48:00d211aac2ec 189 void NetConfig::setSrvHttpPort(unsigned short port)
nyatla 48:00d211aac2ec 190 {
nyatla 48:00d211aac2ec 191 this->_inst.services.http_port=port;
nyatla 48:00d211aac2ec 192 }
nyatla 48:00d211aac2ec 193 void NetConfig::setSrvMdns(bool i_enable)
nyatla 48:00d211aac2ec 194 {
nyatla 48:00d211aac2ec 195 if(i_enable) {
nyatla 48:00d211aac2ec 196 this->_inst.services.flags|=NyLPC_TcNetConfig_SERVICE_FLAG_MDNS;
nyatla 48:00d211aac2ec 197 } else {
nyatla 48:00d211aac2ec 198 this->_inst.services.flags&=(~NyLPC_TcNetConfig_SERVICE_FLAG_MDNS);
nyatla 48:00d211aac2ec 199 }
nyatla 48:00d211aac2ec 200 }
nyatla 48:00d211aac2ec 201 void NetConfig::setSrvUPnP(bool i_enable)
nyatla 48:00d211aac2ec 202 {
nyatla 48:00d211aac2ec 203 if(i_enable) {
nyatla 48:00d211aac2ec 204 this->_inst.services.flags|=NyLPC_TcNetConfig_SERVICE_FLAG_UPNP;
nyatla 48:00d211aac2ec 205 } else {
nyatla 48:00d211aac2ec 206 this->_inst.services.flags&=(~NyLPC_TcNetConfig_SERVICE_FLAG_UPNP);
nyatla 48:00d211aac2ec 207 }
nyatla 48:00d211aac2ec 208 }
nyatla 48:00d211aac2ec 209
nyatla 48:00d211aac2ec 210 void NetConfig::setHostName(const char* i_hostname)
nyatla 48:00d211aac2ec 211 {
nyatla 48:00d211aac2ec 212 this->setHostName(i_hostname,strlen(i_hostname));
nyatla 48:00d211aac2ec 213 }
nyatla 48:00d211aac2ec 214 void NetConfig::setHostName(const char* i_hostname,int len)
nyatla 48:00d211aac2ec 215 {
nyatla 48:00d211aac2ec 216 int l=(len>(NyLPC_TcNetConfig_HOSTNAME_LEN-1))?NyLPC_TcNetConfig_HOSTNAME_LEN-1:len;
nyatla 48:00d211aac2ec 217 memcpy(this->_inst.hostname,i_hostname,l);
nyatla 48:00d211aac2ec 218 *(this->_inst.hostname+l)='\0';
nyatla 48:00d211aac2ec 219 }
nyatla 48:00d211aac2ec 220 void NetConfig::setFriendlyName(const char* i_name)
nyatla 48:00d211aac2ec 221 {
nyatla 48:00d211aac2ec 222 this->_dns_record.name=this->_upnp_desc.frendly_name=(i_name==NULL?STR_EMPTY:i_name);
nyatla 48:00d211aac2ec 223 }
nyatla 48:00d211aac2ec 224 void NetConfig::setUPnPManufactur(const char* i_name,const char* i_url)
nyatla 48:00d211aac2ec 225 {
nyatla 48:00d211aac2ec 226 this->_upnp_desc.manufacturer=i_name==NULL?STR_EMPTY:i_name;
nyatla 48:00d211aac2ec 227 this->_upnp_desc.manufacturer_url=i_name==NULL?STR_EMPTY:i_url;
nyatla 48:00d211aac2ec 228 }
nyatla 48:00d211aac2ec 229 void NetConfig::setUPnPModel(const char* i_name,const char* i_number,const char* i_url,const char* i_description)
nyatla 48:00d211aac2ec 230 {
nyatla 48:00d211aac2ec 231 this->_upnp_desc.model_descriprion=i_description==NULL?STR_EMPTY:i_description;
nyatla 48:00d211aac2ec 232 this->_upnp_desc.model_name=i_name==NULL?STR_EMPTY:i_name;
nyatla 48:00d211aac2ec 233 this->_upnp_desc.model_number=i_number;
nyatla 48:00d211aac2ec 234 this->_upnp_desc.model_url=i_url;
nyatla 48:00d211aac2ec 235 }
nyatla 48:00d211aac2ec 236 void NetConfig::setUPnPSerialNumber(const char* i_number)
nyatla 48:00d211aac2ec 237 {
nyatla 48:00d211aac2ec 238 this->_upnp_desc.serial_number=i_number;
nyatla 48:00d211aac2ec 239 }
nyatla 48:00d211aac2ec 240 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 241 {
nyatla 48:00d211aac2ec 242 NyLPC_TcUuid_t uuid;
nyatla 48:00d211aac2ec 243 NyLPC_cUuid_initialize(&uuid);
nyatla 48:00d211aac2ec 244 NyLPC_cUuid_setTimeBase(&uuid,i_time_l,(i_time_h<<16)|i_time_m,i_sq,&(this->_inst.super.eth_mac));
nyatla 48:00d211aac2ec 245 strcpy(this->_udn,"uuid:");
nyatla 48:00d211aac2ec 246 NyLPC_cUuid_toString(&uuid,this->_udn+5);
nyatla 49:d4334acc3ec3 247 NyLPC_cUuid_finalize(&uuid);
nyatla 48:00d211aac2ec 248 }
nyatla 48:00d211aac2ec 249
nyatla 48:00d211aac2ec 250 void NetConfig::setUPnPPresentationURL(const char* i_url)
nyatla 48:00d211aac2ec 251 {
nyatla 48:00d211aac2ec 252 this->_upnp_desc.presentation_url=i_url;
nyatla 48:00d211aac2ec 253 }
nyatla 48:00d211aac2ec 254 void NetConfig::setCustomUPnPDescription(const struct NyLPC_TUPnPDevDescDevice* i_ref_description)
nyatla 48:00d211aac2ec 255 {
nyatla 48:00d211aac2ec 256 this->_ref_custom_upnp_desc=i_ref_description;
nyatla 48:00d211aac2ec 257 }
nyatla 48:00d211aac2ec 258 void NetConfig::setCustomMdnsRecord(const struct NyLPC_TDnsRecord* i_ref_record)
nyatla 48:00d211aac2ec 259 {
nyatla 48:00d211aac2ec 260 this->_ref_custom_dns_record=i_ref_record;
nyatla 48:00d211aac2ec 261 }
nyatla 48:00d211aac2ec 262
nyatla 48:00d211aac2ec 263 bool NetConfig::loadFromFile(const char* i_file)
nyatla 48:00d211aac2ec 264 {
nyatla 48:00d211aac2ec 265 const static char* tbl[]= {
nyatla 48:00d211aac2ec 266 "macaddr", //0
nyatla 48:00d211aac2ec 267 "ipaddr", //1
nyatla 48:00d211aac2ec 268 "netmask", //2
nyatla 48:00d211aac2ec 269 "gateway", //3
nyatla 48:00d211aac2ec 270 "srv_http_port",//4
nyatla 48:00d211aac2ec 271 "srv_mdns",//5
nyatla 48:00d211aac2ec 272 "host",//6
nyatla 48:00d211aac2ec 273 };
nyatla 48:00d211aac2ec 274 char tmp[32];
nyatla 48:00d211aac2ec 275 union {
nyatla 48:00d211aac2ec 276 unsigned char u8[6];
nyatla 48:00d211aac2ec 277 NyLPC_TUInt32 u32;
nyatla 48:00d211aac2ec 278 } v;
nyatla 48:00d211aac2ec 279 const char* p;//pointer to read
nyatla 48:00d211aac2ec 280 const char* key;
nyatla 48:00d211aac2ec 281 const char* t;
nyatla 48:00d211aac2ec 282 int l;
nyatla 48:00d211aac2ec 283 FILE* fp = fopen(i_file,"r");
nyatla 48:00d211aac2ec 284 if(fp==NULL) {
nyatla 48:00d211aac2ec 285 return false;
nyatla 48:00d211aac2ec 286 }
nyatla 48:00d211aac2ec 287 //read from values
nyatla 48:00d211aac2ec 288 while(fgets(tmp,31,fp)) {
nyatla 48:00d211aac2ec 289 p=NyLPC_cFormatTextReader_seekSpace(tmp)+tmp;//skip space
nyatla 48:00d211aac2ec 290 l=NyLPC_cFormatTextReader_readWord(p,&key);
nyatla 48:00d211aac2ec 291 for(int i=0; i<7; i++) {
nyatla 48:00d211aac2ec 292 if(l>=0 && NyLPC_strnicmp(key,tbl[i],l)==0) {
nyatla 48:00d211aac2ec 293 p+=l;//skip keyname
nyatla 48:00d211aac2ec 294 p=NyLPC_cFormatTextReader_seekSpace(p)+p;//skip space
nyatla 48:00d211aac2ec 295 if(*p!='=') {
nyatla 48:00d211aac2ec 296 break;//check equal
nyatla 48:00d211aac2ec 297 }
nyatla 48:00d211aac2ec 298 p++;
nyatla 48:00d211aac2ec 299 //skip space
nyatla 48:00d211aac2ec 300 p=NyLPC_cFormatTextReader_seekSpace(p)+p;//skip space
nyatla 48:00d211aac2ec 301 switch(i) {
nyatla 37:fc4b4fd6a649 302 case 0://macaddr
nyatla 48:00d211aac2ec 303 if(NyLPC_cFormatTextReader_readMacAddr(p,v.u8)!=0) {
nyatla 37:fc4b4fd6a649 304 this->setEmac(v.u8[0],v.u8[1],v.u8[2],v.u8[3],v.u8[4],v.u8[5]);
nyatla 13:a71705c5e6fd 305 }
nyatla 13:a71705c5e6fd 306 break;
nyatla 37:fc4b4fd6a649 307 case 1://ipaddr
nyatla 48:00d211aac2ec 308 if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) {
nyatla 37:fc4b4fd6a649 309 this->setIpAddr(v.u8[0],v.u8[1],v.u8[2],v.u8[3]);
nyatla 37:fc4b4fd6a649 310 this->setZeroconf(false);
nyatla 48:00d211aac2ec 311 } else {
nyatla 48:00d211aac2ec 312 if(NyLPC_cFormatTextReader_readWord(p,&t)==4) {
nyatla 48:00d211aac2ec 313 if(NyLPC_strnicmp(t,"auto",4)==0) {
nyatla 37:fc4b4fd6a649 314 this->setZeroconf(true);
nyatla 37:fc4b4fd6a649 315 }
nyatla 37:fc4b4fd6a649 316 }
nyatla 13:a71705c5e6fd 317 }
nyatla 13:a71705c5e6fd 318 break;
nyatla 13:a71705c5e6fd 319 case 2:
nyatla 48:00d211aac2ec 320 if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) {
nyatla 37:fc4b4fd6a649 321 this->setNetMask(v.u8[0],v.u8[1],v.u8[2],v.u8[3]);
nyatla 13:a71705c5e6fd 322 }
nyatla 13:a71705c5e6fd 323 break;
nyatla 13:a71705c5e6fd 324 case 3:
nyatla 48:00d211aac2ec 325 if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) {
nyatla 37:fc4b4fd6a649 326 this->setGateway(v.u8[0],v.u8[1],v.u8[2],v.u8[3]);
nyatla 37:fc4b4fd6a649 327 }
nyatla 37:fc4b4fd6a649 328 break;
nyatla 37:fc4b4fd6a649 329 case 4:
nyatla 48:00d211aac2ec 330 if(NyLPC_cFormatTextReader_readUInt(p,&(v.u32))!=0) {
nyatla 37:fc4b4fd6a649 331 this->setSrvHttpPort((unsigned short)v.u32);
nyatla 37:fc4b4fd6a649 332 }
nyatla 37:fc4b4fd6a649 333 break;
nyatla 37:fc4b4fd6a649 334 case 5:
nyatla 37:fc4b4fd6a649 335 l=NyLPC_cFormatTextReader_readWord(p,&t);
nyatla 48:00d211aac2ec 336 if((*t=='y' || *t=='Y')) {
nyatla 37:fc4b4fd6a649 337 this->setSrvMdns(true);
nyatla 48:00d211aac2ec 338 } else if((*t=='n' || *t=='N')) {
nyatla 37:fc4b4fd6a649 339 this->setSrvMdns(false);
nyatla 37:fc4b4fd6a649 340 }
nyatla 37:fc4b4fd6a649 341 break;
nyatla 37:fc4b4fd6a649 342 case 6:
nyatla 37:fc4b4fd6a649 343 l=NyLPC_cFormatTextReader_readWord(p,&t);
nyatla 48:00d211aac2ec 344 if(l>1) {
nyatla 37:fc4b4fd6a649 345 this->setHostName(t,l);
nyatla 13:a71705c5e6fd 346 }
nyatla 13:a71705c5e6fd 347 break;
nyatla 13:a71705c5e6fd 348 default:
nyatla 13:a71705c5e6fd 349 break;
nyatla 13:a71705c5e6fd 350 }
nyatla 13:a71705c5e6fd 351 }
nyatla 13:a71705c5e6fd 352 }
nyatla 37:fc4b4fd6a649 353 }
nyatla 48:00d211aac2ec 354 fclose(fp);
nyatla 48:00d211aac2ec 355 this->_syncServiceInfo();
nyatla 48:00d211aac2ec 356 return true;
nyatla 48:00d211aac2ec 357 }
nyatla 3:0a94993be1f6 358 };