#include "os_types.h" #include "os_task.h" #include "os_mem.h" #include "dbg_io.h" #include "iot_diag.h" #include "iot_io.h" //#include #include "iot_system_api.h" #include "iot_config.h" //#include "iot_gptmr.h" #include "iot_system.h" //#include "os_mem.h" //#include "cpu.h" //#include "os_task.h" #include "platform.h" #include "encoding.h" //#include "sec_glb.h" //#include "ahb.h" //#include "intc.h" #include "bits.h" #include "iso7816_sim_rf.h" #include "apb_glb0_reg.h" #include "hw_reg_api.h" #include "os_utils.h" #include "iso7816.h" #include "gpio_mtx.h" //#define RF0 0 #define RF 1 static int32_t iot__platform_init() { /*platform intialization*/ platform_init(); //resource initializations; // system_clock_init(); // system_uart_init(); dbg_uart_init(); // dbg_uart_stage1_init(); // iot_led_init(); return 0; } #define GMTX_SIM0_DATA_in 57 #define GMTX_SIM1_DATA_in 58 #define GMTX_SIM1_DATA_out 90 #define GMTX_SIM1_CLK_out 91 #define GMTX_SIM1_RST_out 92 #define GMTX_SIM0_DATA_out 87 #define GMTX_SIM0_CLK_out 88 #define GMTX_SIM0_RST_out 89 uint8_t sim_gpio_sel(uint8_t port, uint8_t data, uint8_t clk, uint8_t rst) { if(SIM_INVALID(port)) return 1; gpio_mtx_enable(); uint8_t data_func = 0; uint8_t clk_func = 0; uint8_t rst_func = 0; gpio_sig_info_t info = {0}; data_func = gpio_pin_func_get(data); clk_func = gpio_pin_func_get(clk); rst_func = gpio_pin_func_get(rst); info.CFG[0].type = IO_TYPE_IO; info.CFG[0].func = data_func; info.CFG[0].gpio = data; info.CFG[1].type = IO_TYPE_OUT; info.CFG[1].func = clk_func; info.CFG[1].gpio = clk; info.CFG[2].type = IO_TYPE_OUT; info.CFG[2].func = rst_func; info.CFG[2].gpio = rst; if (port == 0) { info.sig_type = 3; info.CFG[0].inid = GMTX_SIM0_DATA_in; info.CFG[0].outid = GMTX_SIM0_DATA_out; info.CFG[1].inid = 0xff; info.CFG[1].outid = GMTX_SIM0_CLK_out; info.CFG[2].inid = 0xff; info.CFG[2].outid = GMTX_SIM0_RST_out; } else if (port == 1){ info.sig_type = 3; info.CFG[0].inid = GMTX_SIM1_DATA_in; info.CFG[0].outid = GMTX_SIM1_DATA_out; info.CFG[1].inid = 0xff; info.CFG[1].outid = GMTX_SIM1_CLK_out; info.CFG[2].inid = 0xff; info.CFG[2].outid = GMTX_SIM1_RST_out; } gpio_module_pin_select(&info); gpio_module_sig_select(&info, GPIO_MTX_MODE_MATRIX); return 0; } void user_task_1() { uint32_t value=0; uint8_t i =0; sim_gpio_sel(1, 3, 4, 5); //tmode0 tx test // iso7816_controller_reset(RF); // iso7816_tmode_init(RF); // iso7816_tmode_set_mode0(RF); // iso7816_cold_reset(RF); // iso7816_set_tx_mode(RF); // iso7816_tx(RF1,0x68660055); // iso7816_tx(RF1,0x686600aa); // os_delay(400); //tmode1 tx test // iso7816_controller_reset(RF); // iso7816_tmode_init(RF); // iso7816_tmode_set_mode1(RF); // iso7816_cold_reset(RF); // iso7816_set_tx_mode(RF); // iso7816_tx(RF1,0x68660055); // iso7816_tx(RF1,0x686600aa); // os_delay(400); //tmode0 atr test iso7816_controller_reset(RF); iso7816_tmode_init(RF); iso7816_cold_reset(RF); iso7816_set_rx_mode(RF); if(0==iso7816_rx_fifo_empty_check(RF)){ i =0; while(0==iso7816_rx_fifo_empty_check(RF)){ value = iso7816_rx(RF); iot_printf("recieve data %d = %x \n",i,value); i++; } } //tmode1 9bit tx and rx test iso7816_rx_fifo_clear(RF); os_delay(400); iso7816_tmode_set_mode1(RF); iso7816_set_tx_mode(RF); iso7816_tx(RF,0x68660000); iso7816_tx(RF,0x686600A4); iso7816_tx(RF,0x68660004); iso7816_tx(RF,0x68660000); iso7816_tx(RF,0x6866000E); iso7816_wait_for_tx_done(RF); iso7816_set_rx_mode(RF); os_delay(400); if(0==iso7816_rx_fifo_empty_check(RF)){ value = iso7816_rx(RF); iot_printf("data received data = %x!\n",value); } else{ iot_printf("no data received\n"); } //de-active test iso7816_rx_fifo_clear(RF); os_delay(400); iso7816_card_release(RF); os_delay(400); iso7816_cold_reset(RF); //iso7816_warm_reset(RF); if(0==iso7816_rx_fifo_empty_check(RF)){ iot_printf("iso7816 rf%d card release successfully !\n",RF); iso7816_set_rx_mode(RF); i =0; while(0==iso7816_rx_fifo_empty_check(RF)){ value = iso7816_rx(RF); iot_printf("recieve data %d = %x \n",i,value); i++; } } else{ iot_printf("iso7816 rf%d card release failed !\n",RF); } while(1) { iot_printf("user_task_1....\n"); os_delay(400); } } int32_t iot__task_init() { os_task_h handle; handle = os_create_task(user_task_1, NULL, 9); //create the tasks; if(handle != NULL) { iot_printf("task 1 init successfully...\n"); } return 0; } int32_t iot__module_init(void) { //platform intialization; iot__platform_init(); //create all the tasks; iot__task_init(); iot_printf("starting...\n"); return 0; } int32_t iot__task_start() { //start the tasks; os_start_kernel(); return 0; } int32_t iot__module_start(void) { int32_t res = 0; res = iot__task_start(); return res; } int main(void) { //module init; iot__module_init(); //module start; iot__module_start(); return 0; }