@@ -653,3 +653,71 @@ static int handle_at_ipr(enum at_parser_cmd_type cmd_type, struct at_parser *par
653653
654654 return - SILENT_AT_COMMAND_RET ;
655655}
656+ SM_AT_CMD_CUSTOM (ifc , "AT+IFC" , handle_at_ifc );
657+ static int handle_at_ifc (enum at_parser_cmd_type cmd_type , struct at_parser * parser ,
658+ uint32_t param_count )
659+ {
660+ int err ;
661+ struct uart_config cfg ;
662+ uint16_t flow_ctrl ;
663+
664+ err = uart_config_get (sm_uart_dev , & cfg );
665+ if (err ) {
666+ LOG_ERR ("uart_config_get: %d" , err );
667+ return err ;
668+ }
669+
670+ if (cmd_type == AT_PARSER_CMD_TYPE_READ ) {
671+ rsp_send ("\r\n+IFC: %u\r\n" , cfg .flow_ctrl & UART_CFG_FLOW_CTRL_RTS_CTS ? 2 : 0 );
672+ return 0 ;
673+ }
674+
675+ if (cmd_type == AT_PARSER_CMD_TYPE_TEST ) {
676+ rsp_send ("\r\n+IFC: (0,2)\r\n" );
677+ return 0 ;
678+ }
679+
680+ if (cmd_type != AT_PARSER_CMD_TYPE_SET || param_count != 2 ) {
681+ return - EINVAL ;
682+ }
683+
684+ if (sm_cmux_is_started ()) {
685+ LOG_ERR ("Cannot change flow control while CMUX is active." );
686+ return - EBUSY ;
687+ }
688+
689+ err = at_parser_num_get (parser , 1 , & flow_ctrl );
690+ if (err ) {
691+ return err ;
692+ }
693+
694+ /* Convert standard AT values of 0 and 2 to the right definition */
695+ if (flow_ctrl == 0 ) {
696+ cfg .flow_ctrl = UART_CFG_FLOW_CTRL_NONE ;
697+ } else if (flow_ctrl == 2 ) {
698+ cfg .flow_ctrl = UART_CFG_FLOW_CTRL_RTS_CTS ;
699+ } else {
700+ LOG_ERR ("Unsupported flow control: %u" , flow_ctrl );
701+ return - EINVAL ;
702+ }
703+
704+ rsp_send_ok ();
705+
706+ err = modem_pipe_close (& sm_pipe .pipe , K_SECONDS (1 ));
707+ if (err ) {
708+ LOG_ERR ("modem_pipe_close: %d" , err );
709+ return err ;
710+ }
711+ err = uart_configure (sm_uart_dev , & cfg );
712+ if (err ) {
713+ LOG_ERR ("uart_configure: %d" , err );
714+ return err ;
715+ }
716+ err = modem_pipe_open (& sm_pipe .pipe , K_SECONDS (1 ));
717+ if (err ) {
718+ LOG_ERR ("modem_pipe_open: %d" , err );
719+ return err ;
720+ }
721+
722+ return - SILENT_AT_COMMAND_RET ;
723+ }
0 commit comments