|
|
@@ -116,6 +116,14 @@ static rt_size_t chat_read_until(rt_device_t serial, void *buffer, rt_size_t siz
|
|
|
return rt_device_read(serial, 0, buffer, size);
|
|
|
}
|
|
|
|
|
|
+static void modem_flush_rx(rt_device_t serial)
|
|
|
+{
|
|
|
+ char rdbuf[CHAT_READ_BUF_MAX];
|
|
|
+
|
|
|
+ while (rt_device_read(serial, 0, rdbuf, CHAT_READ_BUF_MAX))
|
|
|
+ {}
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* modem_chat_once , send an order to control modem
|
|
|
*
|
|
|
@@ -134,9 +142,11 @@ static rt_err_t modem_chat_once(rt_device_t serial, const struct modem_chat_data
|
|
|
|
|
|
if (data->transmit)
|
|
|
{
|
|
|
- LOG_D(CHAT_DATA_FMT" transmit --> modem", CHAT_DATA_STR(data));
|
|
|
+ LOG_D(CHAT_DATA_FMT " transmit --> modem", CHAT_DATA_STR(data));
|
|
|
rt_device_write(serial, 0, data->transmit, rt_strlen(data->transmit));
|
|
|
- rt_device_write(serial, 0, "\r", 1);
|
|
|
+
|
|
|
+ if (rt_strncmp("+++", data->transmit, 3) && data->ignore_cr == RT_TRUE)
|
|
|
+ rt_device_write(serial, 0, "\r", 1);
|
|
|
}
|
|
|
|
|
|
if (data->expect == MODEM_CHAT_RESP_NOT_NEED)
|
|
|
@@ -189,6 +199,7 @@ static rt_err_t modem_chat_internal(rt_device_t serial, const struct modem_chat_
|
|
|
LOG_D(CHAT_DATA_FMT" running", CHAT_DATA_STR(&data[i]));
|
|
|
for (retry_time = 0; retry_time < data[i].retries; retry_time++)
|
|
|
{
|
|
|
+ modem_flush_rx(serial);
|
|
|
err = modem_chat_once(serial, &data[i]);
|
|
|
if (err == RT_EOK)
|
|
|
break;
|
|
|
@@ -229,7 +240,6 @@ rt_err_t modem_chat(rt_device_t serial, const struct modem_chat_data *data, rt_s
|
|
|
LOG_E("chat failed");
|
|
|
goto __exit;
|
|
|
}
|
|
|
- LOG_I("chat success");
|
|
|
|
|
|
serial->rx_indicate = old_rx_ind;
|
|
|
__exit:
|