|
|
@@ -10,6 +10,7 @@
|
|
|
|
|
|
#include <ppp_device_sim800.h>
|
|
|
#include <ppp_chat.h>
|
|
|
+#include <rtdevice.h>
|
|
|
|
|
|
#define DBG_TAG "ppp.sim800"
|
|
|
|
|
|
@@ -18,13 +19,22 @@
|
|
|
#else
|
|
|
#define DBG_LVL DBG_INFO
|
|
|
#endif
|
|
|
-
|
|
|
#include <rtdbg.h>
|
|
|
|
|
|
+#define SIM800_POWER_ON PIN_HIGH
|
|
|
+#define SIM800_POWER_OFF PIN_LOW
|
|
|
+#ifndef SIM800_POWER_PIN
|
|
|
+#define SIM800_POWER_PIN -1
|
|
|
+#endif
|
|
|
+
|
|
|
+static const struct modem_chat_data rst_mcd[] =
|
|
|
+{
|
|
|
+ {"+++", MODEM_CHAT_RESP_NOT_NEED, 30, 1, RT_TRUE},
|
|
|
+ {"ATH", MODEM_CHAT_RESP_OK, 30, 1, RT_FALSE},
|
|
|
+};
|
|
|
+
|
|
|
static const struct modem_chat_data mcd[] =
|
|
|
{
|
|
|
- {"+++", MODEM_CHAT_RESP_NOT_NEED, 1, 2, RT_TRUE},
|
|
|
- {"ATH", MODEM_CHAT_RESP_OK, 30, 3, RT_FALSE},
|
|
|
{"AT", MODEM_CHAT_RESP_OK, 10, 1, RT_FALSE},
|
|
|
{"ATE0", MODEM_CHAT_RESP_OK, 1, 1, RT_FALSE},
|
|
|
{PPP_APN_CMD, MODEM_CHAT_RESP_OK, 1, 5, RT_FALSE},
|
|
|
@@ -33,6 +43,20 @@ static const struct modem_chat_data mcd[] =
|
|
|
|
|
|
static rt_err_t ppp_sim800_prepare(struct ppp_device *device)
|
|
|
{
|
|
|
+ struct ppp_sim800 *sim800 = (struct ppp_sim800*)device;
|
|
|
+ if (sim800->power_pin >= 0)
|
|
|
+ {
|
|
|
+ rt_pin_write(sim800->power_pin, SIM800_POWER_OFF);
|
|
|
+ rt_thread_mdelay(SIM800_WARTING_TIME_BASE);
|
|
|
+ rt_pin_write(sim800->power_pin, SIM800_POWER_ON);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ rt_err_t err;
|
|
|
+ err = modem_chat(device->uart, rst_mcd, sizeof(rst_mcd) / sizeof(rst_mcd[0]));
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+ }
|
|
|
return modem_chat(device->uart, mcd, sizeof(mcd) / sizeof(mcd[0]));
|
|
|
}
|
|
|
|
|
|
@@ -63,6 +87,13 @@ int ppp_sim800_register(void)
|
|
|
return -RT_ENOMEM;
|
|
|
}
|
|
|
|
|
|
+ sim800->power_pin = SIM800_POWER_PIN;
|
|
|
+ if (sim800->power_pin >= 0)
|
|
|
+ {
|
|
|
+ rt_pin_mode(sim800->power_pin, PIN_MODE_OUTPUT);
|
|
|
+ rt_pin_write(sim800->power_pin, SIM800_POWER_OFF);
|
|
|
+ }
|
|
|
+
|
|
|
ppp_device = &(sim800->device);
|
|
|
ppp_device->ops = &sim800_ops;
|
|
|
|