20190605_jeffrey - silenceuncrio/diary GitHub Wiki
0855
回到 M300 - feature/lighttpd
利用原本的 iweb review 後
目前剩下這些要實做到 jweb
#if !defined(PROSRC_NO_DIDO) && defined(PROSRC_DO_REMOTE)
mg_register_http_endpoint(nc, "/DO_ON", _api_do_on);
mg_register_http_endpoint(nc, "/DO_OFF", _api_do_off);
mg_register_http_endpoint(nc, "/DO_PULSE", _api_do_pulse);
mg_register_http_endpoint(nc, "/RESTORE_DO_ALARM", _api_restore_do_alarm);
#endif
這個每一條需要 lighttpd rewrite rule 轉換到 /cgi-bin/api.cgi
去
不過只需要一條 rule 即可 - "^/(DO_ON|DO_OFF|DO_PULSE|RESTORE_DO_ALARM)$" => "/cgi-bin/api.cgi?act=$1",
修改後的 lighttpd 的 url.rewrite
如下
#### url handling modules (rewrite, redirect, access)
url.rewrite = (
"^/api/([a-zA-Z]+)[0-9a-zA-Z=.?]*$" => "/cgi-bin/api.cgi?act=$1",
"^/(DO_ON|DO_OFF|DO_PULSE|RESTORE_DO_ALARM)$" => "/cgi-bin/api.cgi?act=$1",
)
before and after the url rewrite
before | after |
---|---|
/DO_ON | /cgi-bin/api.cgi?act=DO_ON |
/DO_OFF | cgi-bin/api.cgi?act=DO_OFF |
/DO_PULSE | cgi-bin/api.cgi?act=DO_PULSE |
/RESTORE_DO_ALARM | cgi-bin/api.cgi?act=RESTORE_DO_ALARM |
0930
幫忙準備兩台 M360-PW sample
搭配的 firmware 如下
- uboot - M360-P-06052019.bootloader.img
- image - M360-PW_v1.02_01F500001022E88D.img
利用 uboot 燒錄 uboot 後再燒錄 sysupgrade.bin
燒錄後開機發現 console 顯示的 host name 不對
M360-P login: root
Password:
Login incorrect
M360-P login:
generic 預設的帳密也不對
利用長按 reset button 來恢復出廠預設再看看
M360-PW login: root
Password:
M360-PW#
還要注意到 mgmt info list
M360-PW# mgmt info list
model-name = M360-PW
lan-mac = 00:0C:43:28:80:22
wan-mac = FA:6A:31:A1:9B:78
sn =
smcsv = 01F500001022E88D
hmcsv = 01F400661012E840
bootloader = 1.0
software-version = 3.10.14
firmware-version = 1.02
hardware-version =
modem = EC25JFAR06A04M4G_DCM
IMEI = 865036040154708
uptime = 00:01:25
production = No
M360-PW#
注意到
lan-mac
還沒被指定sn
沒有smcsv
與hmcsv
不 match- 後續不能做 firmware upgrade
hardware-version
沒有production
值為No
- 不會切換 partition
根據 sample 背後的 lable 來寫入所需的資訊
先補 lan-mac
這需要寫入 uboot env - macaddr
bash-4.4# fw_setenv macaddr 00:03:79:05:F0:2C
sn
- fw_setenv serialno BL9U33TL002C
hmcsv
- 寫的跟 smcsv 一樣即可 - fw_setenv hw_mcsv 01F500001022E88D
hardware-version
- fw_setenv hw_ver 1.0
IMEI
跟 LTE module 綁一起 - 已告知 PM 跟 sample 的 lable 不同
production
值由 CLI command - production set the production is done
來設定該 device 已經完成生產
M360-PW/mgmt# production
Set the production is done
M360-PW/mgmt#
檢查一下
M360-PW# mgmt info list
model-name = M360-PW
lan-mac = 00:03:79:05:F0:2C
wan-mac = BE:3A:F5:9F:D6:51
sn = BL9U33TL002C
smcsv = 01F500001022E88D
hmcsv = 01F500001022E88D
bootloader = 1.0
software-version = 3.10.14
firmware-version = 1.02
hardware-version = 1.0
modem = EC25JFAR06A04M4G_DCM
IMEI = 865036040154708
uptime = 00:01:13
production = Yes
M360-PW#
下一台
M360-PW# mgmt info list
model-name = M360-PW
lan-mac = 00:0C:43:28:80:A2
wan-mac = 8E:08:18:86:58:0A
sn =
smcsv = 01F500001022E88D
hmcsv = 01F400661002E776
bootloader = 1.0
software-version = 3.10.14
firmware-version = 1.02
hardware-version =
modem = EC25JFAR06A04M4G_DCM
IMEI =
uptime = 00:00:49
production = Yes
lan-mac
- fw_setenv macaddr 00:03:79:05:F0:54
sn
- fw_setenv serialno BL9U33TL0054
hmcsv
- fw_setenv hw_mcsv 01F500001022E88D
hardware-version
- fw_setenv hw_ver 1.0
production
- production set the production is done
檢查
M360-PW# mgmt info list
model-name = M360-PW
lan-mac = 00:03:79:05:F0:54
wan-mac = EE:A8:4E:3D:4C:90
sn = BL9U33TL0054
smcsv = 01F500001022E88D
hmcsv = 01F500001022E88D
bootloader = 1.0
software-version = 3.10.14
firmware-version = 1.02
hardware-version = 1.0
modem = EC25JFAR06A04M4G_DCM
IMEI = 865036040118331
uptime = 00:00:55
production = Yes
M360-PW#
收工
1045
繼續 M300 - feature/lighttpd
已居剛剛整理的 before and after the url rewrite
表
before | after |
---|---|
/DO_ON | /cgi-bin/api.cgi?act=DO_ON |
/DO_OFF | cgi-bin/api.cgi?act=DO_OFF |
/DO_PULSE | cgi-bin/api.cgi?act=DO_PULSE |
/RESTORE_DO_ALARM | cgi-bin/api.cgi?act=RESTORE_DO_ALARM |
我需要實作出以下 CGI
- /cgi-bin/api.cgi?act=DO_ON
- /cgi-bin/api.cgi?act=DO_OFF
- /cgi-bin/api.cgi?act=DO_PULSE
- /cgi-bin/api.cgi?act=RESTORE_DO_ALARM
先做 /cgi-bin/api.cgi?act=DO_ON
原本 iweb 的 實作如下
static void _api_do_on(struct mg_connection *nc, int ev, void *ev_data)
{
switch (ev)
{
case MG_EV_HTTP_REQUEST:
{
struct http_message *hm = (struct http_message *) ev_data;
//printf("_handler_level_admin: %.*s\n", (int) hm->uri.len, hm->uri.p);
struct session *s = get_session(hm);
/* Ask the user to log in if they did not present a valid cookie. */
if (s == NULL)
{
//printf("_handler_level_admin: send 401 error\n");
//mg_http_send_error(nc, 401, NULL);
mg_http_send_redirect(nc, 302, mg_mk_str("/#/login"), mg_mk_str(NULL));
nc->flags |= MG_F_SEND_AND_CLOSE;
break;
}
int level = _get_user_level_by_name(s->user);
if (level < ATTVAL_SYSTEM_LEVEL2)
{
//printf("_handler_level_normal: send 403 error\n");
mg_http_send_error(nc, 403, NULL);
break;
}
//pio_alarm();
ICOS_msg_sendto(MODULE_WEBUI, MODULE_ALARM, NULL, 0, ICOS_UCAST_REMOTE_DO_ON);
mg_printf(nc,
"HTTP/1.1 200 OK\r\n"
"Content-type: application/json\r\n"
"\r\n"
"{ \"result\": success }\r\n");
nc->flags |= MG_F_SEND_AND_CLOSE;
break;
}
}
}
就是呼叫 ICOS_msg_sendto(MODULE_WEBUI, MODULE_ALARM, NULL, 0, ICOS_UCAST_REMOTE_DO_ON);
前注意一下 user level 即可
1555
commit 16ceb2fa079c1164542d48e2642d07cf31785cdd
Refs: [feature/lighttpd]
Author: jeffrey <[email protected]>
Date: Wed Jun 5 15:54:24 2019 +0800
offer the following CGI
- /cgi-bin/api.cgi?act=DO_ON
- /cgi-bin/api.cgi?act=DO_OFF
- /cgi-bin/api.cgi?act=DO_PULSE
- /cgi-bin/api.cgi?act=RESTORE_DO_ALARM
api.cgi
- jweb.access.filter(ATTVAL_SYSTEM_LEVEL2, _api_do_on);
- jweb.access.filter(ATTVAL_SYSTEM_LEVEL2, _api_do_off);
- jweb.access.filter(ATTVAL_SYSTEM_LEVEL2, _api_do_pulse);
- jweb.access.filter(ATTVAL_SYSTEM_LEVEL2, _api_restore_do_alarm);
proscend/prosrc/webcgi/api.c | 45 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)