/**************************************************************************** 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 "hal_rx.h" #include "tx_entry.h" #include "iot_config.h" #include "iot_io_api.h" #include "iot_config_api.h" #include "phy_chn.h" #include "phy_phase.h" #include "phy_txrx_pwr.h" #include "iot_pt_func.h" #include "mp_mode.h" #include "phy_tools.h" #include "plc_protocol.h" #include "plc_mpdu_header.h" #include "iot_cli.h" #include "iot_pt_rf_func.h" #include "iot_gpio_api.h" #include "iot_board_api.h" #include "iot_cal_data.h" #include "iot_crc.h" #if IOT_CLI_IC_TOOL_EN #include "cli_ic_tool.h" #include "cli_rf_ic_tool.h" #endif uint8_t mp_pt_golden_nid_config() { uint8_t gold_nid = 0; uint8_t gold_nid_gpio_0 = 0, gold_nid_gpio_0_val = 0; uint8_t gold_nid_gpio_1 = 0, gold_nid_gpio_1_val = 0; uint8_t gold_nid_gpio_2 = 0, gold_nid_gpio_2_val = 0; uint8_t gold_nid_gpio_3 = 0, gold_nid_gpio_3_val = 0; uint8_t gold_nid_gpio_4 = 0, gold_nid_gpio_4_val = 0; gold_nid_gpio_0 = iot_board_get_gpio(GPIO_PLC_EVENT); iot_gpio_open_as_input(gold_nid_gpio_0); gold_nid_gpio_0_val = iot_gpio_value_get(gold_nid_gpio_0); gold_nid_gpio_1 = iot_board_get_gpio(GPIO_GOLDEN_SET); iot_gpio_open_as_input(gold_nid_gpio_1); gold_nid_gpio_1_val = iot_gpio_value_get(gold_nid_gpio_1); gold_nid_gpio_2 = iot_board_get_gpio(GPIO_GOLDEN_RXD0); iot_gpio_open_as_input(gold_nid_gpio_2); gold_nid_gpio_2_val = iot_gpio_value_get(gold_nid_gpio_2); gold_nid_gpio_3 = iot_board_get_gpio(GPIO_STA_OUT); iot_gpio_open_as_input(gold_nid_gpio_3); gold_nid_gpio_3_val = iot_gpio_value_get(gold_nid_gpio_3); gold_nid_gpio_4 = iot_board_get_gpio(GPIO_GOLDEN_TXD0); iot_gpio_open_as_input(gold_nid_gpio_4); gold_nid_gpio_4_val = iot_gpio_value_get(gold_nid_gpio_4); iot_printf("Golden Nid GPIO Status(txd0/staout/rxd0/set/event): " "%d/%d/%d/%d/%d.\n", gold_nid_gpio_4_val, gold_nid_gpio_3_val, gold_nid_gpio_2_val, gold_nid_gpio_1_val, gold_nid_gpio_0_val); gold_nid = (gold_nid_gpio_0_val | (gold_nid_gpio_1_val << 1) | (gold_nid_gpio_2_val << 2) | (gold_nid_gpio_3_val << 3) | (gold_nid_gpio_4_val << 4)); return gold_nid; } void iot_init_mp_mode_entry() { #if IOT_MP_MODE_DIRECT_ENABLE g_phy_cpu_share_ctxt.pt_mode_entry = 1; rx_common_init(IOT_PLC_PHY_MP_BAND); mp_pt_golden_unit_rx(); #endif #if IOT_MP_TX_MODE_ENABLE rx_common_init(IOT_PLC_PHY_MP_BAND); tx_common_init(IOT_PLC_PHY_MP_BAND); mac_tx_handle(PHY_PHASE_OVR_A, \ PLC_PROTO_TYPE_SG, FC_DELIM_SOF, \ PT_TX_NO_BREAK_NUM, false); #endif #if (IOT_FLASH_SIZE >= 2 && IOT_MP_RX_MODE_ENABLE) rx_common_init(IOT_PLC_PHY_MP_BAND); mac_rx_single_mode(false); #endif #if IOT_MP_AUTO_TONE_TX iot_printf("\nthis is auto tone tx mode entering...\n"); phy_auto_tone_tx_start(&g_phy_ctxt.indep.tx_tone); #endif #if IOT_MP_RF_MODE_DIRECT_ENABLE mp_rf_golden_unit_main(MP_RF_GOLDEN_DEF_OPTION, MP_RF_GOLDEN_DEF_CHANNEL); #endif #if IOT_CLI_IC_TOOL_EN register_ic_tool_recv_cb(iot_ic_tool_op); register_ic_rf_tool_recv_cb(iot_ic_rf_tool_op); #endif } #if (IOT_CLI_IC_TOOL_EN && HPLC_RF_DEV_SUPPORT) /* static mp_rf_gu_tx_tone_pwr_info_t g_rf_tone_pwr_info[] = { {11, 0x7d, 23, 420}, {-13, 0x7b, 9, 300}, {-40, 0x3f, 8, 280}}; */ static mp_rf_gu_cali_t *g_rf_gu_cali = NULL; uint8_t mp_pt_rf_gu_cali_load(mp_rf_gu_cali_t **cali_data) { iot_cal_data_cfg_t *calcfg; uint32_t size, ret = ERR_OK; uint16_t crc16 = 0; uint8_t* pbuf; if (g_rf_gu_cali == NULL) { ret = iot_cal_data_get_cfg(&calcfg); pbuf = calcfg->gu_cali.data; size = sizeof(calcfg->gu_cali.data); BUILD_BUG_ON(sizeof(mp_rf_gu_cali_t) <= size); if (ret == ERR_OK) { /* validate crc16 */ crc16 = iot_getcrc16(pbuf, size, IOT_CRC16_TYPE_BT); if (crc16 != calcfg->gu_cali.crc) { os_mem_set(pbuf, 0, size); } g_rf_gu_cali = (mp_rf_gu_cali_t *)pbuf; *cali_data = g_rf_gu_cali; } else { os_mem_set(pbuf, 0, size); } } else { *cali_data = g_rf_gu_cali; } return ret; } uint8_t mp_pt_rf_gu_cali_commit() { iot_cal_data_cfg_t *calcfg; uint32_t size, ret; uint16_t crc16 = 0; uint8_t* pbuf; if (g_rf_gu_cali == NULL) { IOT_ASSERT(0); } iot_cal_data_get_cfg(&calcfg); pbuf = (uint8_t*)&calcfg->gu_cali.data; size = sizeof(calcfg->gu_cali.data); /* validate crc16 */ crc16 = iot_getcrc16(pbuf, size, IOT_CRC16_TYPE_BT); calcfg->gu_cali.crc = crc16; ret = iot_cal_data_set_cfg(calcfg); return ret; } #else uint8_t mp_pt_rf_gu_cali_load(mp_rf_gu_cali_t **cali_data) { (void)cali_data; return ERR_INVAL; } uint8_t mp_pt_rf_gu_cali_commit() { return ERR_INVAL; } #endif