20181213_jeffrey - silenceuncrio/diary GitHub Wiki

1000

早上睡過頭

昨晚安撫我們家寶貝大女兒

從半夜三點到清晨六點 - 其實我也只是撐著打電動

0815 的鬧鐘根本聽不見

1030

ariel 幫我 update 一下 M300 Wizard 的情報

Wizard 的流程如下

Wizard Flow:
(1) Management → Administration
(2) Wan Priority →
	ETH Only: 
	  (2.1) WAN → Ethernet
	ETH First / LTE First:
          (2.1) LTE → Dual SIM
          (2.2) WAN → Ethernet
        LTE Only:
          (2.1) LTE → Dual SIM
(3) LAN → Ipv4
(4) System → Time and Date

不過 Wizard 希望是在 Firmware Upgrade 過後只出現一次

不管使用者需要或不需要 Wizard 的幫忙

出現過一次後 就不再出現

而且透過 Wizard 導覽的每個功能希望都能顯示 online manual

1040

昨天 DQA 抱怨 M360 一上電 power led 沒有點亮

Mitrastar 已經根據我們的需求給出如何在 uboot 點燈的範例

void ledInit(void)
{
	u32 value = 0;
	
	/* set uartf_share_mode share pin to gpio mode */
	value = le32_to_cpu(*(volatile u_long *)RT2880_GPIOMODE_REG);
#if !defined (RT2880_ASIC_BOARD)
	value &= ~0x1C;  //clear bit[2:4]UARTF_SHARE_MODE
#endif
#if defined (MT7620_ASIC_BOARD)
	value &= ~0x2000;  //clear bit[13] WLAN_LED
#endif
	value |= RALINK_GPIOMODE_DFT;
	*(volatile u_long *)(RT2880_GPIOMODE_REG) = cpu_to_le32(value);
}

void ledCtrl(unsigned char pin, unsigned char state)
{
	u32 value = 0;
	if (pin <= 21) {
		value = le32_to_cpu(*(volatile u_long *)RT2880_REG_PIODIR);
		value |= (1 << pin);
		*(volatile u_long *)(RT2880_REG_PIODIR) = cpu_to_le32(value);

		value = le32_to_cpu(*(volatile u_long *)RT2880_REG_PIODATA);
		if (0 == state) {
			value &= ~(1 << pin);
		}
		else {
			value |= (1 << pin);
		}
		*(volatile u_long *)(RT2880_REG_PIODATA) = cpu_to_le32(value);
	}
}

今天換個心情先來做 M360 吧

1145

參考 20180926_jeffrey

利用下面的 command 進入該 container

docker exec -it -u user build-uboot-m360 /bin/bash

1310

mitratar 提供的範例 compile 會出錯

趕緊 mail 問一下

順道問一下 GPIO 22 這顆 SIM 燈怎麼控制

由 source code 看來是沒辦法透過 ledCtrl() 來控制

1350

剛剛找 ariel 聊一下 DMVPN 這件事

讓她知道一下 NHRP 只是 Cisco 提的 DMVPN 當中的一環罷了

1410

我們當初買一台 Robustel 就有提供 DMVPN 的功能

找時間拿來跟 Cisco 對測一下

不過目前先以 M360 為優先

mitrastar 的 peter 回信了

套了他給的 rt2880.h 後

我修改了 board.c 如下

diff --git a/lib_mips/board.c b/lib_mips/board.c
index e11bf36..f6287c0 100644
--- a/lib_mips/board.c
+++ b/lib_mips/board.c
@@ -1386,6 +1386,79 @@ int check_image_validation(void)
 #endif


+
+
+
+
+#define _LED_GPIO_INTERNET    17
+#define _LED_GPIO_LAN         18
+#define _LED_GPIO_POWER       16
+#define _LED_GPIO_SIGNAL_LOW  13
+#define _LED_GPIO_SIGNAL_HIGH 14
+#define _LED_GPIO_SIGNAL_MID  15
+#define _LED_GPIO_SIM         22
+
+
+
+void ledInit(void)
+{
+       u32 value = 0;
+
+       /* set uartf_share_mode share pin to gpio mode */
+       value = le32_to_cpu(*(volatile u_long *)RT2880_GPIOMODE_REG);
+#if !defined (RT2880_ASIC_BOARD)
+       value &= ~0x1C;  //clear bit[2:4]UARTF_SHARE_MODE
+#endif
+#if defined (MT7620_ASIC_BOARD)
+       value &= ~0x2000;  //clear bit[13] WLAN_LED
+#endif
+       value |= RALINK_GPIOMODE_DFT;
+       *(volatile u_long *)(RT2880_GPIOMODE_REG) = cpu_to_le32(value);
+}
+
+
+
+void ledCtrl(unsigned char pin, unsigned int active_high, unsigned char onoff )
+{
+       unsigned char state = (active_high == onoff) ? 1 : 0;
+
+#if defined (MT7621_FPGA_BOARD) || defined (MT7621_ASIC_BOARD) || \
+    defined (MT7628_FPGA_BOARD) || defined (MT7628_ASIC_BOARD)
+       if ((0 <= pin) && (pin < 32))
+#else
+       if ((0 <= pin) && (pin <= 21))
+#endif
+       {
+               RALINK_REG(RT2880_REG_PIODIR) |= (1 << pin);
+               if (0 == state) {
+                       printf("GPIO#%d=low\n", pin);
+                       RALINK_REG(RT2880_REG_PIODATA) &= ~(1 << pin);
+               }
+               else {
+                       printf("GPIO#%d=high\n", pin);
+                       RALINK_REG(RT2880_REG_PIODATA) |= (1 << pin);
+               }
+       }
+
+#if defined (MT7621_FPGA_BOARD) || defined (MT7621_ASIC_BOARD) || \

+    defined (MT7628_FPGA_BOARD) || defined (MT7628_ASIC_BOARD)
+       else if ((32 <= pin) && (pin < 64))
+       {
+               RALINK_REG(RT2880_REG_PIODIR+0x4) |= (1 << pin-32);
+               if (0 == state) {
+                       //printf("GPIO#%d=low\n", pin);
+                       RALINK_REG(RT2880_REG_PIODATA+0x4) &= ~(1 << pin-32);
+               }
+               else {
+                       //printf("GPIO#%d=high\n", pin);
+                       RALINK_REG(RT2880_REG_PIODATA+0x4) |= (1 << pin-32);
+               }
+       }
+#endif
+}
+
+
+
 /************************************************************************
  *
  * This is the next part if the initialization sequence: we are now
@@ -2048,6 +2121,26 @@ __attribute__((nomips16)) void board_init_r (gd_t *id, ulong dest_addr)
 #ifdef DUAL_IMAGE_SUPPORT
        check_image_validation();
 #endif
+
+
+
+
+
+
+printf("ledInit()\n");
+ledInit();
+
+printf("ledCtrl(_LED_GPIO_POWER, 0, 0);\n");
+ledCtrl(_LED_GPIO_POWER, 0, 0);
+
+printf("ledCtrl(_LED_GPIO_INTERNET, 0, 1);\n");
+ledCtrl(_LED_GPIO_INTERNET, 0, 1);
+
+
+
+
+
+
+
+
 /*config bootdelay via environment parameter: bootdelay */
        {
            char * s;
(END)

結果還是沒能控制到 power 燈

趕緊整理一下情報再問一下 peter