diff --git a/yasnd-gammu.c b/yasnd-gammu.c index 883d841..f2dce8b 100644 --- a/yasnd-gammu.c +++ b/yasnd-gammu.c @@ -109,3 +109,64 @@ bool gammu_send_sms(const char* message) } return true; } + +bool gammu_read_sms() +{ + GSM_MultiSMSMessage sms; + + // Variable for SMS sender number + char sender_number[20]; + memset(&sender_number, 0, sizeof(sender_number)); + + /* Connect to phone */ + /* 1 means number of replies you want to wait for */ + error = GSM_InitConnection(state_machine, 1); + if (!check_gammu_error(error)) + return false; + + /* Prepare for reading message */ + error = ERR_NONE; + sms.Number = 0; + sms.SMS[0].Location = 0; + sms.SMS[0].Folder = 0; + + log_debug("Trying to read SMS...",DEBUG_ALL); + + error = GSM_GetNextSMS(state_machine, &sms, TRUE); + if (error == ERR_EMPTY) return true; + if (!check_gammu_error(error)) + return false; + + // Now we can do something with the message + for (int i = 0; i < sms.Number; i++) + { + strncpy(sender_number,DecodeUnicodeConsole(sms.SMS[i].Number),19); + char dbg_tmp[100]; + sprintf(dbg_tmp,"Number: '%s'", sender_number); + log_debug(dbg_tmp,DEBUG_ALL); + + // special hack for Motorola L7 + sms.SMS[i].Location-=100000; + + if (sms.SMS[i].Coding == SMS_Coding_8bit) { + log_event("gammu sms error: 8-bit message, can not read"); + // remove SMS + GSM_DeleteSMS(state_machine,&sms.SMS[i]); + return false; + } else { + sprintf(dbg_tmp,"Text: \"%s\"\n", DecodeUnicodeConsole(sms.SMS[i].Text)); + log_debug(dbg_tmp,DEBUG_ALL); + } + + // remove SMS after reading + error = GSM_DeleteSMS(state_machine,&sms.SMS[i]); + if (!check_gammu_error(error)) + return false; + } + + /* Terminate connection */ + error = GSM_TerminateConnection(state_machine); + if (!check_gammu_error(error)) + return false; + return true; +}