forked from espressif/esp-idf
Move typedef with private resource into esp_modem_dce.h
Signed-off-by: Jonathan Dreyer <jonathan.dreyer@cleanenergie.ch> Signed-off-by: Liu Han <liuhan@espressif.com>
This commit is contained in:
@@ -23,6 +23,7 @@ extern "C" {
|
|||||||
|
|
||||||
typedef struct modem_dce modem_dce_t;
|
typedef struct modem_dce modem_dce_t;
|
||||||
typedef struct modem_dte modem_dte_t;
|
typedef struct modem_dte modem_dte_t;
|
||||||
|
typedef struct esp_modem_dce esp_modem_dce_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Result Code from DCE
|
* @brief Result Code from DCE
|
||||||
@@ -96,6 +97,15 @@ struct modem_dce {
|
|||||||
esp_err_t (*deinit)(modem_dce_t *dce); /*!< Deinitialize */
|
esp_err_t (*deinit)(modem_dce_t *dce); /*!< Deinitialize */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ESP Modem with private resource
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct esp_modem_dce {
|
||||||
|
void *priv_resource; /*!< Private resource */
|
||||||
|
modem_dce_t parent; /*!< DCE parent class */
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -26,12 +26,3 @@
|
|||||||
goto goto_tag; \
|
goto goto_tag; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief BG96 Modem
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
void *priv_resource; /*!< Private resource */
|
|
||||||
modem_dce_t parent; /*!< DCE parent class */
|
|
||||||
} bg96_modem_dce_t;
|
|
||||||
|
@@ -118,52 +118,52 @@ err:
|
|||||||
*/
|
*/
|
||||||
static esp_err_t bg96_deinit(modem_dce_t *dce)
|
static esp_err_t bg96_deinit(modem_dce_t *dce)
|
||||||
{
|
{
|
||||||
bg96_modem_dce_t *bg96_dce = __containerof(dce, bg96_modem_dce_t, parent);
|
esp_modem_dce_t *esp_modem_dce = __containerof(dce, esp_modem_dce_t, parent);
|
||||||
if (dce->dte) {
|
if (dce->dte) {
|
||||||
dce->dte->dce = NULL;
|
dce->dte->dce = NULL;
|
||||||
}
|
}
|
||||||
free(bg96_dce);
|
free(esp_modem_dce);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
modem_dce_t *bg96_init(modem_dte_t *dte)
|
modem_dce_t *bg96_init(modem_dte_t *dte)
|
||||||
{
|
{
|
||||||
DCE_CHECK(dte, "DCE should bind with a DTE", err);
|
DCE_CHECK(dte, "DCE should bind with a DTE", err);
|
||||||
/* malloc memory for bg96_dce object */
|
/* malloc memory for esp_modem_dce object */
|
||||||
bg96_modem_dce_t *bg96_dce = calloc(1, sizeof(bg96_modem_dce_t));
|
esp_modem_dce_t *esp_modem_dce = calloc(1, sizeof(esp_modem_dce_t));
|
||||||
DCE_CHECK(bg96_dce, "calloc bg96_dce failed", err);
|
DCE_CHECK(esp_modem_dce, "calloc bg96_dce failed", err);
|
||||||
/* Bind DTE with DCE */
|
/* Bind DTE with DCE */
|
||||||
bg96_dce->parent.dte = dte;
|
esp_modem_dce->parent.dte = dte;
|
||||||
dte->dce = &(bg96_dce->parent);
|
dte->dce = &(esp_modem_dce->parent);
|
||||||
/* Bind methods */
|
/* Bind methods */
|
||||||
bg96_dce->parent.handle_line = NULL;
|
esp_modem_dce->parent.handle_line = NULL;
|
||||||
bg96_dce->parent.sync = esp_modem_dce_sync;
|
esp_modem_dce->parent.sync = esp_modem_dce_sync;
|
||||||
bg96_dce->parent.echo_mode = esp_modem_dce_echo;
|
esp_modem_dce->parent.echo_mode = esp_modem_dce_echo;
|
||||||
bg96_dce->parent.store_profile = esp_modem_dce_store_profile;
|
esp_modem_dce->parent.store_profile = esp_modem_dce_store_profile;
|
||||||
bg96_dce->parent.set_flow_ctrl = esp_modem_dce_set_flow_ctrl;
|
esp_modem_dce->parent.set_flow_ctrl = esp_modem_dce_set_flow_ctrl;
|
||||||
bg96_dce->parent.define_pdp_context = esp_modem_dce_define_pdp_context;
|
esp_modem_dce->parent.define_pdp_context = esp_modem_dce_define_pdp_context;
|
||||||
bg96_dce->parent.hang_up = esp_modem_dce_hang_up;
|
esp_modem_dce->parent.hang_up = esp_modem_dce_hang_up;
|
||||||
bg96_dce->parent.get_signal_quality = esp_modem_dce_get_signal_quality;
|
esp_modem_dce->parent.get_signal_quality = esp_modem_dce_get_signal_quality;
|
||||||
bg96_dce->parent.get_battery_status = esp_modem_dce_get_battery_status;
|
esp_modem_dce->parent.get_battery_status = esp_modem_dce_get_battery_status;
|
||||||
bg96_dce->parent.get_operator_name = esp_modem_dce_get_operator_name;
|
esp_modem_dce->parent.get_operator_name = esp_modem_dce_get_operator_name;
|
||||||
bg96_dce->parent.set_working_mode = bg96_set_working_mode;
|
esp_modem_dce->parent.set_working_mode = bg96_set_working_mode;
|
||||||
bg96_dce->parent.power_down = bg96_power_down;
|
esp_modem_dce->parent.power_down = bg96_power_down;
|
||||||
bg96_dce->parent.deinit = bg96_deinit;
|
esp_modem_dce->parent.deinit = bg96_deinit;
|
||||||
/* Sync between DTE and DCE */
|
/* Sync between DTE and DCE */
|
||||||
DCE_CHECK(esp_modem_dce_sync(&(bg96_dce->parent)) == ESP_OK, "sync failed", err_io);
|
DCE_CHECK(esp_modem_dce_sync(&(esp_modem_dce->parent)) == ESP_OK, "sync failed", err_io);
|
||||||
/* Close echo */
|
/* Close echo */
|
||||||
DCE_CHECK(esp_modem_dce_echo(&(bg96_dce->parent), false) == ESP_OK, "close echo mode failed", err_io);
|
DCE_CHECK(esp_modem_dce_echo(&(esp_modem_dce->parent), false) == ESP_OK, "close echo mode failed", err_io);
|
||||||
/* Get Module name */
|
/* Get Module name */
|
||||||
DCE_CHECK(esp_modem_dce_get_module_name(&(bg96_dce->parent)) == ESP_OK, "get module name failed", err_io);
|
DCE_CHECK(esp_modem_dce_get_module_name(&(esp_modem_dce->parent)) == ESP_OK, "get module name failed", err_io);
|
||||||
/* Get IMEI number */
|
/* Get IMEI number */
|
||||||
DCE_CHECK(esp_modem_dce_get_imei_number(&(bg96_dce->parent)) == ESP_OK, "get imei failed", err_io);
|
DCE_CHECK(esp_modem_dce_get_imei_number(&(esp_modem_dce->parent)) == ESP_OK, "get imei failed", err_io);
|
||||||
/* Get IMSI number */
|
/* Get IMSI number */
|
||||||
DCE_CHECK(esp_modem_dce_get_imsi_number(&(bg96_dce->parent)) == ESP_OK, "get imsi failed", err_io);
|
DCE_CHECK(esp_modem_dce_get_imsi_number(&(esp_modem_dce->parent)) == ESP_OK, "get imsi failed", err_io);
|
||||||
/* Get operator name */
|
/* Get operator name */
|
||||||
DCE_CHECK(esp_modem_dce_get_operator_name(&(bg96_dce->parent)) == ESP_OK, "get operator name failed", err_io);
|
DCE_CHECK(esp_modem_dce_get_operator_name(&(esp_modem_dce->parent)) == ESP_OK, "get operator name failed", err_io);
|
||||||
return &(bg96_dce->parent);
|
return &(esp_modem_dce->parent);
|
||||||
err_io:
|
err_io:
|
||||||
free(bg96_dce);
|
free(esp_modem_dce);
|
||||||
err:
|
err:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@@ -30,15 +30,6 @@ static const char *DCE_TAG = "dce_service";
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief ESP Modem
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
void *priv_resource; /*!< Private resource */
|
|
||||||
modem_dce_t parent; /*!< DCE parent class */
|
|
||||||
} esp_modem_dce_t;
|
|
||||||
|
|
||||||
esp_err_t esp_modem_dce_handle_response_default(modem_dce_t *dce, const char *line)
|
esp_err_t esp_modem_dce_handle_response_default(modem_dce_t *dce, const char *line)
|
||||||
{
|
{
|
||||||
esp_err_t err = ESP_FAIL;
|
esp_err_t err = ESP_FAIL;
|
||||||
|
@@ -30,14 +30,14 @@ static const char *DCE_TAG = "sim7600";
|
|||||||
static esp_err_t sim7600_handle_cbc(modem_dce_t *dce, const char *line)
|
static esp_err_t sim7600_handle_cbc(modem_dce_t *dce, const char *line)
|
||||||
{
|
{
|
||||||
esp_err_t err = ESP_FAIL;
|
esp_err_t err = ESP_FAIL;
|
||||||
bg96_modem_dce_t *bg96_dce = __containerof(dce, bg96_modem_dce_t, parent);
|
esp_modem_dce_t *esp_modem_dce = __containerof(dce, esp_modem_dce_t, parent);
|
||||||
if (strstr(line, MODEM_RESULT_CODE_SUCCESS)) {
|
if (strstr(line, MODEM_RESULT_CODE_SUCCESS)) {
|
||||||
err = esp_modem_process_command_done(dce, MODEM_STATE_SUCCESS);
|
err = esp_modem_process_command_done(dce, MODEM_STATE_SUCCESS);
|
||||||
} else if (strstr(line, MODEM_RESULT_CODE_ERROR)) {
|
} else if (strstr(line, MODEM_RESULT_CODE_ERROR)) {
|
||||||
err = esp_modem_process_command_done(dce, MODEM_STATE_FAIL);
|
err = esp_modem_process_command_done(dce, MODEM_STATE_FAIL);
|
||||||
} else if (!strncmp(line, "+CBC", strlen("+CBC"))) {
|
} else if (!strncmp(line, "+CBC", strlen("+CBC"))) {
|
||||||
/* store value of bcs, bcl, voltage */
|
/* store value of bcs, bcl, voltage */
|
||||||
int32_t **cbc = bg96_dce->priv_resource;
|
int32_t **cbc = esp_modem_dce->priv_resource;
|
||||||
int32_t volts = 0, fraction = 0;
|
int32_t volts = 0, fraction = 0;
|
||||||
/* +CBC: <voltage in Volts> V*/
|
/* +CBC: <voltage in Volts> V*/
|
||||||
sscanf(line, "+CBC: %d.%dV", &volts, &fraction);
|
sscanf(line, "+CBC: %d.%dV", &volts, &fraction);
|
||||||
@@ -82,9 +82,9 @@ static esp_err_t sim7600_handle_cpof(modem_dce_t *dce, const char *line)
|
|||||||
static esp_err_t sim7600_get_battery_status(modem_dce_t *dce, uint32_t *bcs, uint32_t *bcl, uint32_t *voltage)
|
static esp_err_t sim7600_get_battery_status(modem_dce_t *dce, uint32_t *bcs, uint32_t *bcl, uint32_t *voltage)
|
||||||
{
|
{
|
||||||
modem_dte_t *dte = dce->dte;
|
modem_dte_t *dte = dce->dte;
|
||||||
bg96_modem_dce_t *bg96_dce = __containerof(dce, bg96_modem_dce_t, parent);
|
esp_modem_dce_t *esp_modem_dce = __containerof(dce, esp_modem_dce_t, parent);
|
||||||
uint32_t *resource[3] = {bcs, bcl, voltage};
|
uint32_t *resource[3] = {bcs, bcl, voltage};
|
||||||
bg96_dce->priv_resource = resource;
|
esp_modem_dce->priv_resource = resource;
|
||||||
dce->handle_line = sim7600_handle_cbc;
|
dce->handle_line = sim7600_handle_cbc;
|
||||||
DCE_CHECK(dte->send_cmd(dte, "AT+CBC\r", MODEM_COMMAND_TIMEOUT_DEFAULT) == ESP_OK, "send command failed", err);
|
DCE_CHECK(dte->send_cmd(dte, "AT+CBC\r", MODEM_COMMAND_TIMEOUT_DEFAULT) == ESP_OK, "send command failed", err);
|
||||||
DCE_CHECK(dce->state == MODEM_STATE_SUCCESS, "inquire battery status failed", err);
|
DCE_CHECK(dce->state == MODEM_STATE_SUCCESS, "inquire battery status failed", err);
|
||||||
|
@@ -34,15 +34,6 @@ static const char *DCE_TAG = "sim800";
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief SIM800 Modem
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef struct {
|
|
||||||
void *priv_resource; /*!< Private resource */
|
|
||||||
modem_dce_t parent; /*!< DCE parent class */
|
|
||||||
} sim800_modem_dce_t;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Handle response from AT+CPOWD=1
|
* @brief Handle response from AT+CPOWD=1
|
||||||
*/
|
*/
|
||||||
@@ -138,52 +129,52 @@ err:
|
|||||||
*/
|
*/
|
||||||
static esp_err_t sim800_deinit(modem_dce_t *dce)
|
static esp_err_t sim800_deinit(modem_dce_t *dce)
|
||||||
{
|
{
|
||||||
sim800_modem_dce_t *sim800_dce = __containerof(dce, sim800_modem_dce_t, parent);
|
esp_modem_dce_t *esp_modem_dce = __containerof(dce, esp_modem_dce_t, parent);
|
||||||
if (dce->dte) {
|
if (dce->dte) {
|
||||||
dce->dte->dce = NULL;
|
dce->dte->dce = NULL;
|
||||||
}
|
}
|
||||||
free(sim800_dce);
|
free(esp_modem_dce);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
modem_dce_t *sim800_init(modem_dte_t *dte)
|
modem_dce_t *sim800_init(modem_dte_t *dte)
|
||||||
{
|
{
|
||||||
DCE_CHECK(dte, "DCE should bind with a DTE", err);
|
DCE_CHECK(dte, "DCE should bind with a DTE", err);
|
||||||
/* malloc memory for sim800_dce object */
|
/* malloc memory for esp_modem_dce object */
|
||||||
sim800_modem_dce_t *sim800_dce = calloc(1, sizeof(sim800_modem_dce_t));
|
esp_modem_dce_t *esp_modem_dce = calloc(1, sizeof(esp_modem_dce_t));
|
||||||
DCE_CHECK(sim800_dce, "calloc sim800_dce failed", err);
|
DCE_CHECK(esp_modem_dce, "calloc esp_modem_dce_t failed", err);
|
||||||
/* Bind DTE with DCE */
|
/* Bind DTE with DCE */
|
||||||
sim800_dce->parent.dte = dte;
|
esp_modem_dce->parent.dte = dte;
|
||||||
dte->dce = &(sim800_dce->parent);
|
dte->dce = &(esp_modem_dce->parent);
|
||||||
/* Bind methods */
|
/* Bind methods */
|
||||||
sim800_dce->parent.handle_line = NULL;
|
esp_modem_dce->parent.handle_line = NULL;
|
||||||
sim800_dce->parent.sync = esp_modem_dce_sync;
|
esp_modem_dce->parent.sync = esp_modem_dce_sync;
|
||||||
sim800_dce->parent.echo_mode = esp_modem_dce_echo;
|
esp_modem_dce->parent.echo_mode = esp_modem_dce_echo;
|
||||||
sim800_dce->parent.store_profile = esp_modem_dce_store_profile;
|
esp_modem_dce->parent.store_profile = esp_modem_dce_store_profile;
|
||||||
sim800_dce->parent.set_flow_ctrl = esp_modem_dce_set_flow_ctrl;
|
esp_modem_dce->parent.set_flow_ctrl = esp_modem_dce_set_flow_ctrl;
|
||||||
sim800_dce->parent.define_pdp_context = esp_modem_dce_define_pdp_context;
|
esp_modem_dce->parent.define_pdp_context = esp_modem_dce_define_pdp_context;
|
||||||
sim800_dce->parent.hang_up = esp_modem_dce_hang_up;
|
esp_modem_dce->parent.hang_up = esp_modem_dce_hang_up;
|
||||||
sim800_dce->parent.get_signal_quality = esp_modem_dce_get_signal_quality;
|
esp_modem_dce->parent.get_signal_quality = esp_modem_dce_get_signal_quality;
|
||||||
sim800_dce->parent.get_battery_status = esp_modem_dce_get_battery_status;
|
esp_modem_dce->parent.get_battery_status = esp_modem_dce_get_battery_status;
|
||||||
sim800_dce->parent.get_operator_name = esp_modem_dce_get_operator_name;
|
esp_modem_dce->parent.get_operator_name = esp_modem_dce_get_operator_name;
|
||||||
sim800_dce->parent.set_working_mode = sim800_set_working_mode;
|
esp_modem_dce->parent.set_working_mode = sim800_set_working_mode;
|
||||||
sim800_dce->parent.power_down = sim800_power_down;
|
esp_modem_dce->parent.power_down = sim800_power_down;
|
||||||
sim800_dce->parent.deinit = sim800_deinit;
|
esp_modem_dce->parent.deinit = sim800_deinit;
|
||||||
/* Sync between DTE and DCE */
|
/* Sync between DTE and DCE */
|
||||||
DCE_CHECK(esp_modem_dce_sync(&(sim800_dce->parent)) == ESP_OK, "sync failed", err_io);
|
DCE_CHECK(esp_modem_dce_sync(&(esp_modem_dce->parent)) == ESP_OK, "sync failed", err_io);
|
||||||
/* Close echo */
|
/* Close echo */
|
||||||
DCE_CHECK(esp_modem_dce_echo(&(sim800_dce->parent), false) == ESP_OK, "close echo mode failed", err_io);
|
DCE_CHECK(esp_modem_dce_echo(&(esp_modem_dce->parent), false) == ESP_OK, "close echo mode failed", err_io);
|
||||||
/* Get Module name */
|
/* Get Module name */
|
||||||
DCE_CHECK(esp_modem_dce_get_module_name(&(sim800_dce->parent)) == ESP_OK, "get module name failed", err_io);
|
DCE_CHECK(esp_modem_dce_get_module_name(&(esp_modem_dce->parent)) == ESP_OK, "get module name failed", err_io);
|
||||||
/* Get IMEI number */
|
/* Get IMEI number */
|
||||||
DCE_CHECK(esp_modem_dce_get_imei_number(&(sim800_dce->parent)) == ESP_OK, "get imei failed", err_io);
|
DCE_CHECK(esp_modem_dce_get_imei_number(&(esp_modem_dce->parent)) == ESP_OK, "get imei failed", err_io);
|
||||||
/* Get IMSI number */
|
/* Get IMSI number */
|
||||||
DCE_CHECK(esp_modem_dce_get_imsi_number(&(sim800_dce->parent)) == ESP_OK, "get imsi failed", err_io);
|
DCE_CHECK(esp_modem_dce_get_imsi_number(&(esp_modem_dce->parent)) == ESP_OK, "get imsi failed", err_io);
|
||||||
/* Get operator name */
|
/* Get operator name */
|
||||||
DCE_CHECK(esp_modem_dce_get_operator_name(&(sim800_dce->parent)) == ESP_OK, "get operator name failed", err_io);
|
DCE_CHECK(esp_modem_dce_get_operator_name(&(esp_modem_dce->parent)) == ESP_OK, "get operator name failed", err_io);
|
||||||
return &(sim800_dce->parent);
|
return &(esp_modem_dce->parent);
|
||||||
err_io:
|
err_io:
|
||||||
free(sim800_dce);
|
free(esp_modem_dce);
|
||||||
err:
|
err:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user