關鍵**如下
enum status ;
int main(int argc, char** argv)
; char interactbuff[50]=;
char outbuff[1024]=;
enum status status = ussdstart;
int fd = open("/dev/ttys0",o_rdwr | o_nonblock);
if(fd == -1)
else
setrawmode(fd);
} writetosimcom(fd, "ate0\r");
if(readsimcomline(fd, outbuff, 5, 0) == 1) }
else
status = ussdtimeout;
while(1)
}else
status = ussdtimeout;
break;
case ussdreply:
if(readsimcomline(fd, outbuff, 5, 0) == 1)
}else
status = ussdtimeout;
break;
case ussdretcode0:
printf("\n%s\n", unpackussdstr(outbuff));
status = ussdend;
break;
case ussdretcode1:
status = ussddisp;
break;
case ussdretcode2://need to atd
writetosimcom(fd, packatdstr(ussdno));
if(readsimcomline(fd, outbuff, 15, 0) == 1)
}else
status = ussdtimeout;
break;
case ussdinteraction:
if(readsimcomline(fd, outbuff, 5, 0) == 1)
}else
status = ussdtimeout;
break;
case ussddisp:
printf("\n%s\n", unpackussdstr(outbuff));
status++;
break;
case ussdsend:
printf(">");
memset(interactbuff, 0, sizeof(interactbuff));
gets(interactbuff);
writetosimcom(fd, packussdstr(interactbuff));
if(readsimcomline(fd, outbuff, 5, 0) == 1)
}else
status = ussdtimeout;
break;
case ussdend:
printf("ussd finished!\n");
exit(0);
break;
case ussdtimeout:
printf("ussd receive timeout!\n");
exit(0);
break;
} }return 0;
}目前存在的疑問
1、不知道如何中斷當前的ussd連線,ath試過是不行的
2、返回+cusd: 0 和 +cusd: 2時不知道如何做通用的處理
sim900 一些有用的指令
at cmgl指令 讀取指定儲存型別的簡訊 rec unread 或者rec read等 注意pdu和文字傳送方式下命令引數的區別。at cmgl rec unread r n 該命令用於讀取sim卡中接收但未讀的簡訊,讀完後簡訊的儲存型別變為 rec read 響應 cmgl 5,rec unre...
linux 下使用sim900打電話發簡訊
gprs模組 sim900 開發板 fl2440 作業系統 linux 3.0 gprs模組,是具有gprs資料傳輸功能的gsm模組。gprs模組就是乙個精簡版的手機,整合gsm通訊的主要功能於一塊電路板上,具有傳送短訊息 通話 資料傳輸等功能。gprs模組相當於手機的核心部分,如果增加鍵盤和螢幕就...
SIM900A英文簡訊的讀取與傳送
一 英文簡訊的傳送 一般分為五步進行簡訊的傳送 1 我們用到at cscs指令來設定te字符集,預設的為gsm7位預設字符集,在傳送英文簡訊時,需要傳送 at cscs gsm 設定為預設字符集即可。2 用指令at cmgf來設定短訊息模式,即為文字模式 text 還是pdu模式,這裡我們傳送at ...