SIM900的USSD測試小程式

2021-06-01 20:54:56 字數 1833 閱讀 2663

關鍵**如下

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 ...