264 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			264 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /****************************************************************************
 | |
| 
 | |
| Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
 | |
| 
 | |
| This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | |
| be copied by any method or incorporated into another program without
 | |
| the express written consent of Aerospace C.Power. This Information or any portion
 | |
| thereof remains the property of Aerospace C.Power. The Information contained herein
 | |
| is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | |
| liability for its use in any way and conveys no license or title under
 | |
| any patent or copyright and makes no representation or warranty that this
 | |
| Information is free from patent or copyright infringement.
 | |
| 
 | |
| ****************************************************************************/
 | |
| 
 | |
| #include "os_utils.h"
 | |
| 
 | |
| #include "mac_init_api.h"
 | |
| #include "cvg_api.h"
 | |
| #include "plc_protocol.h"
 | |
| #include "iot_bitops.h"
 | |
| #include "iot_pkt.h"
 | |
| #include "iot_ipc.h"
 | |
| #include "iot_io.h"
 | |
| #include "plc_const.h"
 | |
| #include "plc_fr.h"
 | |
| #include "phy_rf_chn.h"
 | |
| #include "iot_plc_lib.h"
 | |
| #include "iot_plc_api.h"
 | |
| #include "mac_vdev_api.h"
 | |
| #include "mac_vdev.h"
 | |
| #include "hw_phy_init.h"
 | |
| #include "iot_version.h"
 | |
| #include "iot_share_task.h"
 | |
| #include "iot_rtc.h"
 | |
| #include "iot_socket.h"
 | |
| 
 | |
| #if HW_PLATFORM == HW_PLATFORM_SIMU
 | |
| 
 | |
| #include "iot_uart_h.h"
 | |
| #include "iot_cli.h"
 | |
| #include "iot_dbglog_api.h"
 | |
| #include "iot_pib.h"
 | |
| #include "iot_app.h"
 | |
| #include "phy_chn.h"
 | |
| #include "iot_oem_api.h"
 | |
| #include "iot_plc_led.h"
 | |
| #include "upgrade.h"
 | |
| #include "iot_plc_pm.h"
 | |
| #include "iot_board.h"
 | |
| #include "iot_lwip.h"
 | |
| 
 | |
| // disbable warning 4127: conditional expression is constant
 | |
| // GCC won't report this warning
 | |
| #pragma warning(disable:4127)
 | |
| 
 | |
| extern uint8_t ucIsClientMode;
 | |
| extern uint8_t g_interfaceType;
 | |
| extern uint8_t g_module_type;
 | |
| 
 | |
| /* working mode for fw
 | |
|  * 0 - Mission Mode
 | |
|  * 1 - FTM mode
 | |
|  */
 | |
| extern uint32_t g_fw_mode;
 | |
| 
 | |
| static const iot_pkt_config_t g_pkt_config =
 | |
| {
 | |
|     {
 | |
|         {
 | |
|             PLC_SMALL_BUF_SIZE,
 | |
|             PLC_SMALL_BUF_COUNT + RF_SMALL_BUF_COUNT,
 | |
|             PKT_OWNER_ALL, //PKT_OWNER_PLC
 | |
|         },
 | |
|         /* reserve IOT_SG_UPGRADE_BLOCK block for upgrading */
 | |
|         {
 | |
|             PLC_SHORT_BUF_SIZE,
 | |
|             (PLC_SHORT_BUF_COUNT + IOT_SG_UPGRADE_BLOCK_CNT
 | |
|                 + RF_SHORT_BUF_COUNT),
 | |
|             PKT_OWNER_ALL, //PKT_OWNER_PLC
 | |
|             },
 | |
|         {
 | |
|             PLC_LONG_BUF_SIZE,
 | |
|             PLC_LONG_BUF_COUNT,
 | |
|             PKT_OWNER_ALL, //PKT_OWNER_PLC
 | |
|         },
 | |
|         {
 | |
|             PLC_LARGE_BUF_SIZE,
 | |
|             PLC_LARGE_BUF_COUNT + DBGLOG_MAX_BUFFER_CNT,
 | |
|             PKT_OWNER_ALL, //PKT_OWNER_PLC
 | |
|         },
 | |
|         {
 | |
|             PLC_LIB_MSG_SHORT_BUF_SIZE,
 | |
|             PLC_LIB_MSG_SHORT_BUF_CNT,
 | |
|             PKT_OWNER_ALL,
 | |
|         },
 | |
|         {
 | |
|             PLC_LIB_MSG_LONG_BUF_SIZE,
 | |
|             PLC_LIB_MSG_LONG_BUF_CNT,
 | |
|             PKT_OWNER_ALL,
 | |
|         },
 | |
|         {
 | |
|             PLC_HUGE_BUF_SIZE,
 | |
|             PLC_HUGE_BUF_COUNT,
 | |
|             PKT_OWNER_ALL,
 | |
|         },
 | |
|         {
 | |
|             0,
 | |
|             0,
 | |
|             PKT_OWNER_NONE,
 | |
|         },
 | |
|     }
 | |
| };
 | |
| 
 | |
| void plc_init(void* param) {
 | |
|     uint32_t ret;
 | |
|     {
 | |
|         uint8_t r_crc = 0;
 | |
|         uint8_t w_crc = 0;
 | |
|         (void)param;
 | |
|         /* init common modules */
 | |
|         iot_bitops_init();
 | |
| 
 | |
|         /* init os related modules and utilities */
 | |
|         os_utils_init();
 | |
| 
 | |
|         /* init rtc module */
 | |
|         iot_rtc_init();
 | |
| 
 | |
|         /* init shared background task. It shall be ahead of pib init. */
 | |
|         iot_share_task_init();
 | |
| 
 | |
|         /* init pib module and load pib cfg from file */
 | |
|         ret = iot_pib_init();
 | |
|         if (ret) {
 | |
|             iot_printf("iot_pib_init fail\n");
 | |
|         }
 | |
| 
 | |
|         ret = iot_pib_load(0);
 | |
|         if (ret) {
 | |
|             iot_printf("iot_pib_load fail\n");
 | |
|         } else {
 | |
|             iot_printf("iot_pib_load success\n");
 | |
|         }
 | |
| 
 | |
|         iot_pib_get_crc_status(&r_crc, &w_crc);
 | |
|         iot_printf("pib r_crc:%d w_crc:%d\n", r_crc, w_crc);
 | |
| 
 | |
|         /* use the dev type configured in PIB */
 | |
|         {
 | |
|             uint8_t *secion;
 | |
|             uint8_t pib_type;
 | |
|             ret = iot_pib_get_section(IOT_PIB_HEAD_ID, &secion, &pib_type,
 | |
|                 IOT_PIB_APP_GET_READ_SECTION);
 | |
|             if (ret == ERR_OK) {
 | |
|                 ucIsClientMode = (pib_type == STA_PIB_TYPE);
 | |
|             }
 | |
|             if (ucIsClientMode == 0)
 | |
|                 g_module_type = MODULE_TYPE_CCO;
 | |
|             else if (g_module_type == MODULE_TYPE_CCO)
 | |
|                 g_module_type = MODULE_TYPE_STA_TEST;
 | |
|             switch (g_module_type) {
 | |
|             case MODULE_TYPE_CCO:
 | |
|                 iot_printf("module_type is cco\n");
 | |
|                 break;
 | |
|             case MODULE_TYPE_STA:
 | |
|                 iot_printf("module_type is power meter\n");
 | |
|                 break;
 | |
|             case MODULE_TYPE_3_PHASE_STA:
 | |
|                 iot_printf("module_type is 3 phase power meter\n");
 | |
|                 break;
 | |
|             case MODULE_TYPE_COLLECTOR_II:
 | |
|                 iot_printf("module_type is type II collector\n");
 | |
|                 break;
 | |
|             case MODULE_TYPE_STA_TEST:
 | |
|                 iot_printf("module_type is sta test\n");
 | |
|                 break;
 | |
|             default:
 | |
|                 printf("module_type is unknown\n");
 | |
|                 IOT_ASSERT(0);
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /* load user build info if any */
 | |
|         iot_board_load_user_build_info();
 | |
| 
 | |
|         /* init pkt module */
 | |
|         iot_pkt_init(&g_pkt_config);
 | |
| 
 | |
|         /*init dbglog module*/
 | |
|         iot_dbglog_init();
 | |
| 
 | |
|         iot_printf("test %02x ffs - %d, ffz - %d, cbs - %d, cbz - %d, "
 | |
|             "fls - %d, flz - %d\n", 0xD0,
 | |
|             iot_bitops_ffs(0xD0), iot_bitops_ffz(0xD0),
 | |
|             iot_bitops_cbs(0xD0), iot_bitops_cbz(0xD0),
 | |
|             iot_bitops_fls(0xD0), iot_bitops_flz(0xD0));
 | |
|         iot_printf("test %02x ffs - %d, ffz - %d, cbs - %d, cbz - %d ,"
 | |
|             "fls - %d, flz - %d\n", 0xCF,
 | |
|             iot_bitops_ffs(0xCF), iot_bitops_ffz(0xCF),
 | |
|             iot_bitops_cbs(0xCF), iot_bitops_cbz(0xCF),
 | |
|             iot_bitops_fls(0xCF), iot_bitops_flz(0xCF));
 | |
| 
 | |
|         /* init uart interface */
 | |
|         iot_uart_init(0);
 | |
| 
 | |
|         /* init upgrade module */
 | |
|         iot_upgrade_init();
 | |
| 
 | |
|         /* init ipc module */
 | |
|         iot_ipc_init();
 | |
| 
 | |
|         /* init plc led module */
 | |
|         iot_plc_led_init(0);
 | |
| 
 | |
|         /* init power management module */
 | |
|         iot_plc_pm_init();
 | |
|     }
 | |
| 
 | |
|     {
 | |
|         phy_rf_band_info_init(PHY_RF_BAND_NSG);
 | |
|         /* init phy and mac */
 | |
|         phy_init(PHY_PROTO_TYPE_GET(), \
 | |
|             IOT_PLC_PHY_BAND_DFT, TONE_MASK_ID_NULL, true);
 | |
|         mac_init(PHY_PROTO_TYPE_GET());
 | |
|     }
 | |
| 
 | |
|     {
 | |
|         /* init plc cvg module */
 | |
|         cvg_init((uint8_t)PHY_PROTO_TYPE_GET());
 | |
| 
 | |
|         /* init plc lib */
 | |
|         iot_plc_lib_init((uint8_t)PHY_PROTO_TYPE_GET());
 | |
|     }
 | |
| 
 | |
|     /* init tcpip stack */
 | |
|     iot_lwip_init();
 | |
| 
 | |
|     /* create task for socket to receive data. */
 | |
|     iot_socket_task_init();
 | |
| 
 | |
| #if IOT_BT_EXT_ENABLE
 | |
|     extern uint32_t iot_bt_ext_open(void);
 | |
|     iot_bt_ext_open();
 | |
| #endif
 | |
| 
 | |
| #if IOT_CLI_MODULE_ENABLE
 | |
|     /* init cli module */
 | |
|     iot_cli_init(g_interfaceType, 0);
 | |
| #endif /* IOT_CLI_MODULE_ENABLE */
 | |
| 
 | |
|     /* start applicaiton */
 | |
|     ret = iot_app_start();
 | |
|     if (ret == 0) {
 | |
|         cvg_start_vdev(0, NULL, CVG_VDEV_START_BOOT_UP);
 | |
|     } else if (ret == 1) {
 | |
|         cvg_start_vdev(0, NULL, CVG_VDEV_START_BOOT_UP_CERT_ONLY);
 | |
|     }
 | |
|     return;
 | |
| }
 | |
| 
 | |
| #endif
 |