/* * Kanta SMS * Author: Davide Cantaluppi */ #include #include #include #include #include #include #define TX_BUF 400 #define RX_BUF 50 #define TEXT_BUF 370 #define PHONE_BUF 20 #define K_DEV "/dev/ttyACM0" //#define K_DEV "/dev/null" // Global variable int smsdev; int main(int argc, char *argv[]) { int ret; int sms_ptr = 0; unsigned char tx_String[TX_BUF]; unsigned char rx_String[RX_BUF]; unsigned char text_string[TEXT_BUF]; unsigned char phone_num_string[PHONE_BUF]; unsigned char sms_num[20]; char *nptr; char az[1]; smsdev = open(K_DEV, O_RDWR|O_NONBLOCK); if(smsdev == -1) { perror(K_DEV); exit(errno); } fprintf(stdout, "smsdev Opened successfully!\n"); // Need Ioctl ? // ioctl(smsdev, ISR_HW_TYPE, &hw); ret = lseek(smsdev, 0, SEEK_SET); if(argc != 3) { close(smsdev); fprintf(stdout, "too few argument to main!\n"); return -1; } // fprintf(stdout, "argc: %d\n",argc); // fprintf(stdout, "argv1: %s\n",argv[1]); // fprintf(stdout, "argv2: %s\n",argv[2]); // ********** Inizio sequenza invio comandi AT strcpy(tx_String, "at+cpms=\"MT\"\r\n"); write(smsdev, tx_String, strlen(tx_String)); fprintf(stdout, "sended: %s\n",tx_String); read(smsdev, &rx_String[0], 50); fprintf(stdout, "received: %s\n",rx_String); strcpy(tx_String, "at+cscs=\"ASCII\"\r\n"); write(smsdev, tx_String, strlen(tx_String)); fprintf(stdout, "sended: %s\n",tx_String); read(smsdev, &rx_String[0], 50); fprintf(stdout, "received: %s\n",rx_String); strcpy(tx_String, "at+cmgw=\""); strcat(tx_String, argv[1]); strcat(tx_String, "\"\r\n"); write(smsdev, tx_String, strlen(tx_String)); fprintf(stdout, "sended: %s\n",tx_String); sleep(1); // read(smsdev, &rx_String[0], 50); fprintf(stdout, "wait for prompt-received: %s\n",rx_String); strcpy(tx_String, argv[2]); strcat(tx_String, "\r\n"); //sleep(10); write(smsdev, tx_String, strlen(tx_String)); fprintf(stdout, "sended: %s\n",tx_String); sleep(1); // read(smsdev, &rx_String[0], 50); // strcpy(tx_String, ""); // strcpy(tx_String, "^Z"); // strcpy(tx_String, "\26"); // az[0] = 0x1A; strcpy(tx_String, "\x1A"); write(smsdev, tx_String, strlen(tx_String)); fprintf(stdout, "sended: %s\n",tx_String); sleep(1); read(smsdev, &rx_String[0], 50); // ONLY FOR RECEIVE TEST // strcpy(rx_String, "+CMGW: 6969\r\nOK\r\n"); fprintf(stdout, "received: %s\n",rx_String); //parsing x ottenere sms_ptr nptr = strchr(rx_String, ':'); if(nptr != NULL) { // fprintf(stdout, "strchr: %s\n",nptr); strncpy(sms_num, nptr+1, 5); // fprintf(stdout, "sms num=%s=\n",sms_num); sms_ptr = atoi(sms_num); } else fprintf(stdout, "parsing error on +CMGW:xxx!\n"); sprintf(tx_String, "at+cmss=%d\r\n",sms_ptr); write(smsdev, tx_String, strlen(tx_String)); fprintf(stdout, "sended: %s\n",tx_String); read(smsdev, &rx_String[0], 50); fprintf(stdout, "received: %s\n",rx_String); sleep (10); sprintf(tx_String, "at+cmgd=%d\r\n",sms_ptr); write(smsdev, tx_String, strlen(tx_String)); fprintf(stdout, "sended: %s\n",tx_String); read(smsdev, &rx_String[0], 50); fprintf(stdout, "received: %s\n",rx_String); // ********** Fine sequenza invio comandi AT close(smsdev); fprintf(stdout, "smsdev Closed successfully!\n"); return 0; }