20160808_jeffrey - silenceuncrio/diary GitHub Wiki

Index

  • 0925 - review
  • 1000 - 整理 GitHub Index
  • 1030 - engineering notebook
  • 1055 - VirtualBox scp
  • 1410 - CGI Class 101 - cgi_1
  • 1450 - CGI Class 101 - cgi_2
  • 1505 - m300 webui
  • 1530 - bootstrap template
  • 1735 - MfgTool 多 USB Port 被 否決

0925

review

1000

整理上禮拜 GitHub 的 Index

1030

寫 engineering notebook

1055

VirtualBox m300_ubuntu_15 - 關機後修改網路的設定

  • 介面卡 3
    • 附加到 橋接介面卡
    • 名稱 - DM9621 USB To Fast Ethernet Adapter(KMDF)

開機

jeffrey@jeffrey-VirtualBox:~$ ifconfig

enp0s9    Link encap:Ethernet  HWaddr 08:00:27:c1:5a:32  
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fec1:5a32/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1795 (1.7 KB)  TX bytes:9920 (9.9 KB)

這樣我的 m300_ubuntu_15 便可以直接透過 USB 網卡 利用 scp 將 build 好的 cgi 傳到 M300 去

jeffrey@jeffrey-VirtualBox:~/M300/fsl-release-bsp/proscend/prosrc/webcgi$ scp class_101.cgi [email protected]:/www/cgi-bin
[email protected]'s password: 
class_101.cgi                                 100%   10KB  10.4KB/s   00:00    
jeffrey@jeffrey-VirtualBox:~/M300/fsl-release-bsp/proscend/prosrc/webcgi$ 

效率高了不少

1410

CGI Class 101 目前進度如下

Makefile



################################################################################
#   CGI Class 101
################################################################################
CLASS_101 :=
CLASS_101 += class_101.cgi_1 class_102.cgi_1 class_103.cgi_1 class_104.cgi_1

CLASS_201 :=
CLASS_201 += class_201.cgi_2 class_202.cgi_2 class_203.cgi_2

cgi_1: $(CLASS_101) 

cgi_2: $(CLASS_201) 

%.cgi_1: %.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -licos -lcgi -ljson-c 
	$(STRIP) $@

%.cgi_2: %.o class_lib.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< class_lib.o -licos -lcgi -ljson-c 
	$(STRIP) $@

clean_class:
	@rm -f *~ *.o *.map *.bak
	@rm -rf *.cgi_1 *.cgi_2

先從最基本的 cgi_1 開始

class_101.c

最基本的 printf output

注意 HTML Header 與 content 之間需要 2 個 \r\n

#include <stdio.h>
int main(void) {
    printf("Content-Type: text/html\n\n");
    printf("<h1>Hello M300 Team</h1>\n");
    return 0;
}

###class_102.c 認識基本的 CGI 環境變數

#include <stdio.h>
extern char **environ;
int main() {
    char **p = environ;
    printf("Content-Type: text/html\r\n\r\n");
    printf("<html> <head>\n");
    printf("<title>CGI Environment</title>\n");
    printf("</head>\n");
    printf("<body>\n");
    printf("<h1>CGI Environment</h1>\n");
    while(*p != NULL) {
        printf("%s<br>\n",*p++);
    }
    printf("</body> </html>\n");
    return 0;
}

###class_103.c 學習使用 CGI Library - LibCGI

#include <stdio.h>
#include <cgi.h>
s_cgi *cgi;
int main(void) {
    cgi = cgiInit();
    cgiHeader();
    printf("<h1>Hello M300 Team - with cgi library</h1>\n");
    cgiFree(cgi);
    return 0;
}

###class_104.c 學習使用 JSON Library - JSON-C

#include <stdio.h>
#include <cgi.h>
#include <json-c/json.h>
s_cgi       *cgi;
json_object *jobj;
int main(void) {
    cgi = cgiInit();
    cgiSetType("application/json");
    cgiHeader();
    jobj = json_object_new_object();
    json_object_object_add(jobj, "info", json_object_new_string("Hello M300 Team"));
    printf("%s", json_object_to_json_string(jobj));
    json_object_put(jobj);
    cgiFree (cgi);
    return 0;
}

1450

cgi_2 開始導入 class_lib.c 希望把比較共通的 function 整理在一起

###class_201.c 需要 include 的 header 統一整理在 class_lib.h

#include "class_lib.h"
int main(void) {
    init();
    json_object_object_add(jobj, "info", json_object_new_string("Hello M300 Team"));
    printf("%s", json_object_to_json_string(jobj));
    done();
}

class_201.c 便是使用 class_libclass_104.c

###class_202.c base on class_201.c 更進一步化簡 JSON-C library 的使用方式

#include "class_lib.h"
int main(void) {
    init();
    in_string("info", "Hello M300 Team");
    out_done();
}

###class_203.c 使用 icos API 得到一個 LTE_CONN 結構的資訊 轉成適當的 JSON format 再作輸出

#include "class_lib.h"
int main() {
    init();
    LTE_CONN *lte_shm = ICOS_shm_status_getPtr(SHM_LTE);
    in_int("main_sim", lte_shm->main_sim);
    in_int("roaming_switch", lte_shm->roaming_switch);
    in_int("data_exceed_idx", lte_shm->data_exceed_idx);
    in_string("modem_firmware", lte_shm->modem_firmware);
    out_done();
}

未來就是希望用這樣的形式來將 icos API 封裝成 RESTful API 的形式提供 web 或 mobile APP使用

1505

試著參考 m300_webui.pdf 先來做個 status

有點想要挑戰一下不用 frameset 來實作 m300 的 web

1530

google bootstrap template

一堆範本可以用

google bootstrap admin

一堆免費的可以參考

好好抓著 bootstrap 吧

1735

ariel 告知為了 MfgTool 燒錄 code 要多一個 USB Port 這件事被 上層 否決了

明天再找 winston 聊一下看看怎麼讓複雜的燒錄動作變簡單吧

⚠️ **GitHub.com Fallback** ⚠️