/* * rs485_test.c * * Change Logs: * Date Author Notes * 2020-06-08 qiyongzhong first version * 2020-12-17 qiyongzhong add config function * 2020-12-18 qiyongzhong add send_then_recv */ #include #include #include #include #ifdef RS485_USING_TEST #ifndef RS485_TEST_SERIAL #define RS485_TEST_SERIAL "uart1" //default test serial #endif #ifndef RS485_TEST_BAUDRATE #define RS485_TEST_BAUDRATE 9600 //defalut test baudrate #endif #ifndef RS485_TEST_PARITY #define RS485_TEST_PARITY 0 //defalut test parity #endif #ifndef RS485_TEST_PIN #define RS485_TEST_PIN GET_PIN(A, 0) //default test ctrl pin #endif #ifndef RS485_TEST_LEVEL #define RS485_TEST_LEVEL 1 //default test send mode level #endif #ifndef RS485_TEST_BUF_SIZE #define RS485_TEST_BUF_SIZE 1024 //default test buffer size #endif #ifndef RS485_TEST_RECV_TMO #define RS485_TEST_RECV_TMO 30000 //default test recicve timeout #endif static rs485_inst_t * test_hinst = RT_NULL; static char test_buf[RS485_TEST_BUF_SIZE]; static const char *cmd_info[] = { "Usage: \n", "rs485 create [serial] [baudrate] [parity] [pin] [level] - create rs485 instance.\n", "rs485 destory - destory rs485 instance.\n", "rs485 set_recv_tmo [tmo_ms] - set recieve timeout.\n", "rs485 set_byte_tmo [tmo_ms] - set byte timeout.\n", "rs485 connect - open rs485 connect.\n", "rs485 disconn - close rs485 connect.\n", "rs485 recv [size] - receive from rs485.\n", "rs485 send [size] - send to rs485.\n", "rs485 cfg [baudrate] [databits] [parity] [stopbits] - config rs485.\n", "rs485 send_then_recv [send_size] [recv_size] - send to rs485 and then receive from rs485.\n", "\n" }; static void show_cmd_info(void) { for(int i=0; i= 3) { serial = argv[2]; } if ( argc >= 4) { baudrate = atoi(argv[3]); } if (argc >= 5) { parity = atoi(argv[4]); } if (argc >= 6) { pin = atoi(argv[5]); } if (argc >= 7) { level = atoi(argv[6]); } test_hinst = rs485_create(serial, baudrate, parity, pin, level); if (test_hinst != NULL) { rt_kprintf("rs485 instance create success.\n"); rt_kprintf("rs485 serial : %s \n", serial); rt_kprintf("rs485 baudrate : %d \n", baudrate); rt_kprintf("rs485 parity : %d \n", parity); rt_kprintf("rs485 control pin : %d \n", pin); rt_kprintf("rs485 send mode level : %d \n", level); rs485_set_recv_tmo(test_hinst, RS485_TEST_RECV_TMO); rt_kprintf("rs485 receive timeout : %d \n", RS485_TEST_RECV_TMO); } return; } if (strcmp(argv[1], "destory") == 0) { rs485_destory(test_hinst); test_hinst = NULL; return; } if (strcmp(argv[1], "set_recv_tmo") == 0) { int tmo_ms = RS485_TEST_RECV_TMO; if (argc >= 3) { tmo_ms = atoi(argv[2]); } rs485_set_recv_tmo(test_hinst, tmo_ms); return; } if (strcmp(argv[1], "set_byte_tmo") == 0) { int tmo_ms = 0; if (argc >= 3) { tmo_ms = atoi(argv[2]); } rs485_set_byte_tmo(test_hinst, tmo_ms); return; } if (strcmp(argv[1], "connect") == 0) { if (test_hinst == NULL) { rt_kprintf("the test instance is NULL, please create first.\n"); return; } if (rs485_connect(test_hinst) == RT_EOK) { rt_kprintf("rs485 instance connect success.\n"); } else { rt_kprintf("rs485 instance connect fail.\n"); } return; } if (strcmp(argv[1], "disconn") == 0) { rs485_disconn(test_hinst); return; } if (strcmp(argv[1], "recv") == 0) { int size = RS485_TEST_BUF_SIZE; int len = 0; if (test_hinst == NULL) { rt_kprintf("the test instance is NULL, please create first.\n"); return; } if (argc >= 3) { size = atoi(argv[2]); if (size > RS485_TEST_BUF_SIZE) { size = RS485_TEST_BUF_SIZE; } } rt_kprintf("rs485 start receiving, max length : %d .\n", size); len = rs485_recv(test_hinst, test_buf, size); if (len == 0) { rt_kprintf("rs485 receive timeout.\n"); return; } rt_kprintf("rs485 received %d datas (hex) : ", len); for (int i=0; i= 3) { size = atoi(argv[2]); if (size > RS485_TEST_BUF_SIZE) { size = RS485_TEST_BUF_SIZE; } } for (int i=0; i= 3) { baudrate = atoi(argv[2]); } if ( argc >= 4) { databits = atoi(argv[3]); } if (argc >= 5) { parity = atoi(argv[4]); } if (argc >= 6) { stopbits = atoi(argv[5]); } rs485_config(test_hinst, baudrate, databits, parity, stopbits); return; } if (strcmp(argv[1], "send_then_recv") == 0) { int send_size = RS485_TEST_BUF_SIZE; int recv_size = RS485_TEST_BUF_SIZE; int len = 0; if (test_hinst == NULL) { rt_kprintf("the test instance is NULL, please create first.\n"); return; } if (argc >= 3) { send_size = atoi(argv[2]); } if (argc >= 4) { recv_size = atoi(argv[3]); } for (int i=0; i