Changeset 125 for uKadecot/trunk/kadecot


Ignore:
Timestamp:
Jul 23, 2015, 3:21:02 PM (9 years ago)
Author:
coas-nagasima
Message:

ECHONET Lite規格に準拠していない動作を修正。
WebSocketの接続先URLを/webapi.ashxから/webapiに変更。
DHCPのリトライ処理が行われていなかったのを修正。
DHCPの有効/無効設定を追加し、固定IPアドレスを設定できるよう変更。

Location:
uKadecot/trunk/kadecot
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uKadecot/trunk/kadecot/wamp_dealer.c

    r108 r125  
    569569{
    570570        static const char macAddr[] = "macAddr";
     571        static const char dhcpEnable[] = "dhcpEnable";
     572        static const char ipAddr[] = "ipAddr";
     573        static const char netmask[] = "netmask";
     574        static const char gateway[] = "gateway";
    571575
    572576        switch (state->level) {
     
    579583                                if(strcmp(macAddr, dealer->s->jsn_buf) == 0){
    580584                                        dealer->state = WAMP_DEALER_STATE_MAC_ADDR_VALUE;
    581                                         memset(&dealer->init_params, 0, sizeof(dealer->init_params));
     585                                        dealer->init_params.pos = 0;
     586                                        memset(&dealer->init_params.mac_addr, 0, sizeof(dealer->init_params.mac_addr));
     587                                }
     588                                if(strcmp(dhcpEnable, dealer->s->jsn_buf) == 0){
     589                                        dealer->state = WAMP_DEALER_STATE_DHCP_ENABLE_VALUE;
     590                                        dealer->init_params.dhcp_enable = false;
     591                                }
     592                                if(strcmp(ipAddr, dealer->s->jsn_buf) == 0){
     593                                        dealer->state = WAMP_DEALER_STATE_IP_ADDR_VALUE;
     594                                        dealer->init_params.pos = 0;
     595                                        memset(&dealer->init_params.ip_addr, 0, sizeof(dealer->init_params.ip_addr));
     596                                }
     597                                if(strcmp(netmask, dealer->s->jsn_buf) == 0){
     598                                        dealer->state = WAMP_DEALER_STATE_NETMASK_VALUE;
     599                                        dealer->init_params.pos = 0;
     600                                        memset(&dealer->init_params.netmask, 0, sizeof(dealer->init_params.netmask));
     601                                }
     602                                if(strcmp(gateway, dealer->s->jsn_buf) == 0){
     603                                        dealer->state = WAMP_DEALER_STATE_GATEWAY_VALUE;
     604                                        dealer->init_params.pos = 0;
     605                                        memset(&dealer->init_params.gateway, 0, sizeof(dealer->init_params.gateway));
     606                                }
     607                                break;
     608                        case JSONSL_T_SPECIAL:
     609                                switch(dealer->state){
     610                                case WAMP_DEALER_STATE_DHCP_ENABLE_VALUE:
     611                                        dealer->init_params.dhcp_enable = strcmp("true", dealer->s->jsn_buf) == 0;
     612                                        break;
    582613                                }
    583614                                break;
     
    597628                                case WAMP_DEALER_STATE_MAC_ADDR_VALUE:
    598629                                        dealer->init_params.mac_addr[dealer->init_params.pos++] = atoi(dealer->s->jsn_buf);
     630                                        break;
     631                                case WAMP_DEALER_STATE_IP_ADDR_VALUE:
     632                                        dealer->init_params.ip_addr[dealer->init_params.pos++] = atoi(dealer->s->jsn_buf);
     633                                        break;
     634                                case WAMP_DEALER_STATE_NETMASK_VALUE:
     635                                        dealer->init_params.netmask[dealer->init_params.pos++] = atoi(dealer->s->jsn_buf);
     636                                        break;
     637                                case WAMP_DEALER_STATE_GATEWAY_VALUE:
     638                                        dealer->init_params.gateway[dealer->init_params.pos++] = atoi(dealer->s->jsn_buf);
    599639                                        break;
    600640                                }
     
    17771817        ECN_FBS_SSIZE_T pos = 0;
    17781818        ER ret;
    1779 
    1780         ret = data_flash_write(0, dealer->init_params.mac_addr);
     1819        uint8_t data[32];
     1820
     1821        memset(data, 0, sizeof(data));
     1822        memcpy(&data[0], dealer->init_params.mac_addr, sizeof(dealer->init_params.mac_addr));
     1823        data[6] = dealer->init_params.dhcp_enable ? 1 : 0;
     1824        memcpy(&data[7], dealer->init_params.ip_addr, sizeof(dealer->init_params.ip_addr));
     1825        memcpy(&data[11], dealer->init_params.netmask, sizeof(dealer->init_params.netmask));
     1826        memcpy(&data[15], dealer->init_params.gateway, sizeof(dealer->init_params.gateway));
     1827
     1828        ret = data_flash_write(0, data);
    17811829        if (ret != E_OK) {
    17821830                syslog(LOG_WARNING, "data_flash_write() result = %d", ret);
     
    18041852
    18051853        dealer->error = NULL;
     1854}
     1855
     1856static ER wamp_dealer_write_ip_addr(struct wamp_dealer *dealer, ECN_FBS_ID buf,
     1857        ECN_FBS_SSIZE_T *pos, uint8_t *ip_addr, char *name)
     1858{
     1859        ER ret;
     1860        int i;
     1861
     1862        /* IPアドレス */
     1863        ret = fbs_printf(buf, pos, "\"%s\":[", name);
     1864        if (ret != E_OK) {
     1865                return ret;
     1866        }
     1867
     1868        for (i = 0; i < 4; i++) {
     1869                ret = fbs_printf(buf, pos, "%d,", ip_addr[i]);
     1870                if (ret != E_OK) {
     1871                        return ret;
     1872                }
     1873        }
     1874
     1875        /* 最後の","を消す */
     1876        *pos = *pos - 1;
     1877
     1878        ret = fbs_printf(buf, pos, "],");
     1879        if (ret != E_OK) {
     1880                return ret;
     1881        }
     1882
     1883        return E_OK;
    18061884}
    18071885
     
    18131891        ER ret;
    18141892        int i;
    1815 
    1816         ret = data_flash_read(0, dealer->init_params.mac_addr);
     1893        uint8_t data[32];
     1894
     1895        ret = data_flash_read(0, data);
    18171896        if (ret != E_OK) {
    18181897                syslog(LOG_WARNING, "data_flash_read() result = %d", ret);
     
    18201899        }
    18211900
     1901        memcpy(dealer->init_params.mac_addr, &data[0], sizeof(dealer->init_params.mac_addr));
     1902        dealer->init_params.dhcp_enable = data[6] != 0;
     1903        memcpy(dealer->init_params.ip_addr, &data[7], sizeof(dealer->init_params.ip_addr));
     1904        memcpy(dealer->init_params.netmask, &data[11], sizeof(dealer->init_params.netmask));
     1905        memcpy(dealer->init_params.gateway, &data[15], sizeof(dealer->init_params.gateway));
     1906
    18221907        ret = _ecn_fbs_cre(1, &buf);
    18231908        if (ret != E_OK) {
     
    18261911        }
    18271912
    1828         ret = fbs_printf(buf, &pos, "[50,%d,{},[],{\"macAddr\":[", dealer->requestId);
     1913        ret = fbs_printf(buf, &pos, "[50,%d,{},[],{", dealer->requestId);
     1914        if (ret != E_OK) {
     1915                syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
     1916                _ecn_fbs_del(buf);
     1917                return;
     1918        }
     1919
     1920        /* MACアドレス */
     1921        ret = fbs_printf(buf, &pos, "\"macAddr\":[");
    18291922        if (ret != E_OK) {
    18301923                syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
     
    18451938        pos--;
    18461939
    1847         ret = fbs_printf(buf, &pos, "]}]");
     1940        ret = fbs_printf(buf, &pos, "],");
     1941        if (ret != E_OK) {
     1942                syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
     1943                _ecn_fbs_del(buf);
     1944                return;
     1945        }
     1946
     1947        /* DHCP有効/無効 */
     1948        ret = fbs_printf(buf, &pos, "\"dhcpEnable\":%s,", dealer->init_params.dhcp_enable ? "true" : "false");
     1949        if (ret != E_OK) {
     1950                syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
     1951                _ecn_fbs_del(buf);
     1952                return;
     1953        }
     1954
     1955        /* IPアドレス */
     1956        ret = wamp_dealer_write_ip_addr(dealer, buf, &pos, dealer->init_params.ip_addr, "ipAddr");
     1957        if (ret != E_OK) {
     1958                syslog(LOG_WARNING, "wamp_dealer_write_ip_addr() result = %d", ret);
     1959                _ecn_fbs_del(buf);
     1960                return;
     1961        }
     1962
     1963        /* サブネットマスク */
     1964        ret = wamp_dealer_write_ip_addr(dealer, buf, &pos, dealer->init_params.netmask, "netmask");
     1965        if (ret != E_OK) {
     1966                syslog(LOG_WARNING, "wamp_dealer_write_ip_addr() result = %d", ret);
     1967                _ecn_fbs_del(buf);
     1968                return;
     1969        }
     1970
     1971        /* デフォルトゲートウェイ */
     1972        ret = wamp_dealer_write_ip_addr(dealer, buf, &pos, dealer->init_params.gateway, "gateway");
     1973        if (ret != E_OK) {
     1974                syslog(LOG_WARNING, "wamp_dealer_write_ip_addr() result = %d", ret);
     1975                _ecn_fbs_del(buf);
     1976                return;
     1977        }
     1978
     1979        /* 最後の","を消す */
     1980        pos--;
     1981
     1982        ret = fbs_printf(buf, &pos, "}]");
    18481983        if (ret != E_OK) {
    18491984                syslog(LOG_WARNING, "fbs_printf() result = %d", ret);
  • uKadecot/trunk/kadecot/wamp_dealer.h

    r108 r125  
    5353        WAMP_DEALER_STATE_ANALOG_VALUE,
    5454        WAMP_DEALER_STATE_MAC_ADDR_VALUE,
     55        WAMP_DEALER_STATE_DHCP_ENABLE_VALUE,
     56        WAMP_DEALER_STATE_IP_ADDR_VALUE,
     57        WAMP_DEALER_STATE_NETMASK_VALUE,
     58        WAMP_DEALER_STATE_GATEWAY_VALUE,
    5559} wamp_dealer_state_t;
    5660
     
    110114typedef struct wamp_dealer_init_params{
    111115        int pos;
    112         uint8_t mac_addr[32]; /* DATA FLASHのサイズ分 */
     116        uint8_t mac_addr[6];
     117        bool_t dhcp_enable;
     118        uint8_t ip_addr[4];
     119        uint8_t netmask[4];
     120        uint8_t gateway[4];
    113121} wamp_dealer_init_params_t;
    114122
Note: See TracChangeset for help on using the changeset viewer.