Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

cellular.call answer not implemented #43

Open
ahmadmicro opened this issue Mar 15, 2020 · 4 comments
Open

cellular.call answer not implemented #43

ahmadmicro opened this issue Mar 15, 2020 · 4 comments
Labels
API porting API which is not yet accessible newbies welcome Can be fixed with a minimal knowledge of mpy/port

Comments

@ahmadmicro
Copy link

There is no way to answer an incoming call.

@pulkin pulkin added API porting API which is not yet accessible newbies welcome Can be fixed with a minimal knowledge of mpy/port labels Mar 15, 2020
@pulkin
Copy link
Owner

pulkin commented Mar 15, 2020

I think it is easy enough to be implemented by someone else.

  1. Go to micropython docs and familiarize yourself with module layout.
  2. Go to modcellular.c and look at, for example, modcellular_get_imsi. Something similar has to be implemented here.

STATIC mp_obj_t modcellular_get_imsi(void) {
// ========================================
// Retrieves IMSI number.
// Returns:
// IMSI number as a string.
// ========================================
char imsi[21];
memset(imsi, 0, sizeof(imsi));
if (SIM_GetIMSI((uint8_t*)imsi))
return mp_obj_new_str(imsi, strlen(imsi));
else {
mp_raise_CellularError("No IMSI data available");
return mp_const_none;
}
}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(modcellular_get_imsi_obj, modcellular_get_imsi);

  1. Copy-paste the function. Remove the body and rename all modcellular_get_imsi into modcellular_answer (I suggest to name this function cellular.answer).
  2. In the function body just run Call_Answer as described in API docs.
  3. Raise a CellularError if it returns False. Otherwise just return None.
  4. Register the function as a part of cellular module by adding a new line in the dict in the basement.

STATIC const mp_map_elem_t mp_module_cellular_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_cellular) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_CellularError), (mp_obj_t)MP_ROM_PTR(&mp_type_CellularError) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SMS), (mp_obj_t)MP_ROM_PTR(&modcellular_sms_type) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_imei), (mp_obj_t)&modcellular_get_imei_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_signal_quality), (mp_obj_t)&modcellular_get_signal_quality_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_network_status_changed), (mp_obj_t)&modcellular_network_status_changed_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_poll_network_exception), (mp_obj_t)&modcellular_poll_network_exception_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_network_status), (mp_obj_t)&modcellular_get_network_status_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_is_sim_present), (mp_obj_t)&modcellular_is_sim_present_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_is_network_registered), (mp_obj_t)&modcellular_is_network_registered_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_is_roaming), (mp_obj_t)&modcellular_is_roaming_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_iccid), (mp_obj_t)&modcellular_get_iccid_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_get_imsi), (mp_obj_t)&modcellular_get_imsi_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_flight_mode), (mp_obj_t)&modcellular_flight_mode_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_bands), (mp_obj_t)&modcellular_set_bands_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_gprs), (mp_obj_t)&modcellular_gprs_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_scan), (mp_obj_t)&modcellular_scan_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_register), (mp_obj_t)&modcellular_register_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_call), (mp_obj_t)&modcellular_call_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_dial), (mp_obj_t)&modcellular_dial_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_stations), (mp_obj_t)&modcellular_stations_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_agps_station_data), (mp_obj_t)&modcellular_agps_station_data_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_reset), (mp_obj_t)&modcellular_reset_obj },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_FREQ_BAND_GSM_900P), MP_ROM_INT(NETWORK_FREQ_BAND_GSM_900P) },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_FREQ_BAND_GSM_900E), MP_ROM_INT(NETWORK_FREQ_BAND_GSM_900E) },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_FREQ_BAND_GSM_850), MP_ROM_INT(NETWORK_FREQ_BAND_GSM_850) },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_FREQ_BAND_DCS_1800), MP_ROM_INT(NETWORK_FREQ_BAND_DCS_1800) },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_FREQ_BAND_PCS_1900), MP_ROM_INT(NETWORK_FREQ_BAND_PCS_1900) },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_FREQ_BANDS_ALL), MP_ROM_INT(BANDS_ALL) },
{ MP_ROM_QSTR(MP_QSTR_OPERATOR_STATUS_UNKNOWN), MP_ROM_INT(0) },
{ MP_ROM_QSTR(MP_QSTR_OPERATOR_STATUS_AVAILABLE), MP_ROM_INT(1) },
{ MP_ROM_QSTR(MP_QSTR_OPERATOR_STATUS_CURRENT), MP_ROM_INT(2) },
{ MP_ROM_QSTR(MP_QSTR_OPERATOR_STATUS_DISABLED), MP_ROM_INT(3) },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_MODE_MANUAL), MP_ROM_INT(NETWORK_REGISTER_MODE_MANUAL) },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_MODE_AUTO), MP_ROM_INT(NETWORK_REGISTER_MODE_AUTO) },
{ MP_ROM_QSTR(MP_QSTR_NETWORK_MODE_MANUAL_AUTO), MP_ROM_INT(NETWORK_REGISTER_MODE_MANUAL_AUTO) },
};

  1. Build, flash and test whether it works on your module.
  2. Add function description to port README.md.

Total changes are around 10 lines in a single file.

@pulkin pulkin pinned this issue Mar 15, 2020
@ahmadmicro
Copy link
Author

Looks like something I should be able to do. Thanks.

@drhisham343
Copy link

Sorry for being a beginner. How can I build flash after making the nessesary changes using microsoft windows. I noticed that the Makefile having some refferance to csdtk42-linux. I tried to use make command on cmd but it didn`t work. can you help?

@camp-easy
Copy link

Sorry for being a beginner. How can I build flash after making the nessesary changes using microsoft windows. I noticed that the Makefile having some refferance to csdtk42-linux. I tried to use make command on cmd but it didn`t work. can you help?

just try with linux bro

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
API porting API which is not yet accessible newbies welcome Can be fixed with a minimal knowledge of mpy/port
Projects
None yet
Development

No branches or pull requests

4 participants