Ç°ÃæÊý´ÎÁ¬ÔØÎÒÃÇÒԽϳ¤µÄƪ·ù½²½âÁË´®¿ÚͨÐŵÄÓ²¼þÔÀí¡¢DOSƽ̨¿ØÖÆÒÔ¼°»ùÓÚWIN32 API¡¢¿Ø¼þºÍµÚÈý·½ÀàµÄ´®¿Ú±à³Ì¡£×÷Ϊ±¾ÏµÁÐÎÄÕµÄ×îºóÒ»´ÎÁ¬ÔØ£¬±¾Õ½«¸ø³öÒ»¸öµäÐ͵ÄÓ¦ÓÃʵÀý£ºÎ÷ÃÅ×Ó¶ÌÐÅ·þÎñÄ£¿éTC35µÄ´®¿Ú¿ØÖÆ¡£
¡¡¡¡1.¶ÌÐÅ¿ØÖÆÖÕ¶Ë
¡¡¡¡×÷Ϊ¶ÌÐÅ (Short Message Service£¬SMS)Ò»×壬Ïë±ØÄãÓÐÕâÑùµÄÌå»á£ºÓÃÊÖ»ú±à¼¶ÌÐÅϢʮ·Ö²»±ã¡¢ÈÝÒ׳ö´í£¬¶øÇÒÐ޸ķÑʱ£¬ÈôÄÜÓüÆËã»úÀ´ÊÕ·¢¶ÌÐÅÔò·½±ãÐí¶à¡£×¢Ò⣬±¾ÎÄËù˵µÄÓüÆËã»úÊÕ·¢¶ÌÐŲ¢²»ÊÇ˵ͨ¹ý"ÍøÒ׶ÌÐÅÍõ"µÈ·½Ê½ÔÚInternetÉÏÊÕ·¢¶ÌÐÅ£¬¶øÊÇÖ±½ÓÓüÆËã»ú¿ØÖÆÔËÐÐÁËGSMͨÐÅϵͳµÄ¶ÌÐÅÖն˽øÐÐÊÕ·¢£¬Òò¶øÆäÊÕ·¢¶ÌÐŵÄÔÀíÓëÊÖ»úÊDZ¾ÖÊÏàͬµÄ¡£
¡¡¡¡Êµ¼ÊÉÏ£¬Ò»´ó¶ÑµÄÀ¬»ø¶ÌÐÅÒ²ÊDzÉÓÃÕâÖÖ¶ÌÐÅÖն˷¢³öÀ´µÄ£¡
¡¡¡¡ÎÒÃÇÀ´½éÉÜÒ»¿îGSMÄ£¿é£¬Ëü¾ÍÊÇÎ÷ÃÅ×Ó¹«Ë¾µÄTC35£¬ËüÓÉGSM»ù´ø´¦ÀíÆ÷¡¢µçԴרÓü¯³Éµç·¡¢ÉäƵµç·ºÍÉÁËÙ´æ´¢Æ÷µÈ²¿·Ö×é³É£¬¸ºÔð´¦ÀíGSM·äÎÑÉ豸ÖеÄÒôƵ¡¢Êý¾ÝºÍÐźţ¬ÄÚǶµÄÈí¼þ²¿·ÖÖ´ÐÐÓ¦ÓýӿںÍËùÓÐGSMÐÒéÕ»µÄ¹¦ÄÜ¡£TC35Ö§³ÖÖÐÎĶÌÐÅÏ¢£¬¹¤×÷ÔÚEGSM900ºÍGSM1800˫Ƶ¶Î£¬µçÔ´·¶Î§Îª3.3~5.5V£¬¿É´«ÊäÓïÒôºÍÊý¾ÝÐźţ¬ÏûºÄ¹¦ÂÊÔÚEGSM900(4Àà)ºÍGSM1800(1Àà)·Ö±ðΪ2WºÍ1W£¬Í¨¹ý½Ó¿ÚÁ¬½ÓÆ÷ºÍÌìÏßÁ¬½ÓÆ÷·Ö±ðÁ¬½ÓSIM¿¨¶Á¿¨Æ÷ºÍÌìÏß¡£TC35µÄÊý¾Ý½Ó¿Ú(CMOSµçƽ)ͨ¹ýATÃüÁî¿ÉË«Ïò´«ÊäÖ¸ÁîºÍÊý¾Ý£¬¿ÉÑ¡²¨ÌØÂÊΪ 300bit/s~115kbit/s£¬×Ô¶¯²¨ÌØÂÊΪ1.2k~115kbit/s¡£ËüÖ§³ÖÎı¾ºÍPDU¸ñʽµÄ£¬¿Éͨ¹ýATÃüÁî»ò¹Ø¶ÏÐźÅʵÏÖÖØÆôºÍ¹ÊÕϻָ´¡£
¡¡¡¡ÎÒÃÇÐèÒªÀûÓÃÒÔTC35Ä£¿éΪÖ÷µÄÓ²¼þ×é³ÉÒ»¸öTC35ÖÕ¶ËÉ豸£¬²¢ÓëµçÄÔͨ¹ýRS-232C´®¿ÚÏàÁ¬£¬²¢×ÔÐбàÖÆÔÚPCÉÏÔËÐеĶÌÐÅÏ¢ÊÕ·¢Èí¼þ£¬¾Í¿ÉÒÔ×é³ÉÒ»¸ö¶ÌÐÅÊÕ·¢ÏµÍ³¡£TC35Öն˵ç·ÈçÏÂͼËùʾ£º
¡¡¡¡TC35µÄ¿ØÖÆÖ÷Òª°üº¬Èçϼ¸ÀàÖ¸Á
¡¡¡¡£¨1£©³õʼ»¯Ö¸Áî
¡¡¡¡ÉèÖöÌÏûÏ¢·¢Ë͸ñʽAT+CMGF=1£¬ÉèÖÃ1´ú±íPDUģʽ£¬Êǻسµ·ûºÅ£¬Ò²¾ÍÊÇ0x0d£¬Ö¸ÁîÕýÈ·ÔòÄ£¿é·µ»ØOK£¬Êǻسµ»»ÐзûºÅ¡£
¡¡¡¡£¨2£©ÉèÖÃ/¶ÁÈ¡¶ÌÏûÏ¢ÖÐÐÄ
¡¡¡¡¶ÌÏûÏ¢ÖÐÐĺÅÂëÓÉÒƶ¯ÔËÓªÉÌÌṩ¡£
¡¡¡¡ÉèÖöÌÏûÏ¢ÖÐÐĵÄÖ¸Áî¸ñʽΪ£º
¡¡¡¡AT+CSCA=¡å+8613800531500¡å(¶ÌÏûÏ¢ÖÐÐÄ)
¡¡¡¡ÉèÖÃÕýÈ·ÔòÄ£¿é·µ»ØOK¡£
¶ÁÈ¡¶ÌÏûÏ¢·þÎñÖÐÐÄÔòʹÓÃÃüÁ
AT+CSCA=?
¡¡¡¡TC35Ä£¿éÓ¦¸Ã·µ»Ø£º
+CSCA:¡å8613800531500¡å¡£
¡¡¡¡£¨3£©ÉèÖöÌÏûÏ¢µ½´ï×Ô¶¯Ìáʾ
¡¡¡¡ÉèÖöÌÏûÏ¢µ½´ï×Ô¶¯ÌáʾµÄÖ¸Áî¸ñʽΪ£º
AT+CNMI=1,1,0,0,1
¡¡¡¡ÉèÖÃÕýÈ·ÔòTC35Ä£¿é·µ»Ø£º
OK¡£
¡¡¡¡ÉèÖôËÃüÁî¿Éʹģ¿éÔÚ¶ÌÏûÏ¢µ½´ïºóÏò´®¿Ú·¢ËÍÖ¸Á
+CMTI:¡åSM¡å,INDEX(ÐÅÏ¢´æ´¢Î»ÖÃ)¡£
¡¡¡¡Í¨¹ýTC35·¢ËͶÌÏûÏ¢µÄ·½·¨Îª£º
¡¡¡¡PCÉϵĿØÖÆÈí¼þ°´ÕÕPDUµÄ¸ñʽ·¢ËͺͽÓÊÕÊý¾Ý£¬¶ÌÏûÏ¢µÄÄÚÈÝ¿ÉÒÔÊÇÖÐÎÄ»òÕßÆäËû×Ö·û¡£ÔÚPDUģʽ£¬Èç¹û·¢ËͶÌÏûÏ¢£¬ÔòÊ×ÏÈ·¢ËͶÌÏûÏ¢Êý¾ÝµÄ³¤¶È£º
AT+CMGS=
¡¡¡¡µÈ´ýTC35Ä£¿é·µ»ØASCII×Ö·û">"£¬Ôò¿ÉÒÔ½«PDUÊý¾ÝÊäÈ룬PDUÊý¾ÝÒÔ(Ò²¾ÍÊÇ0x1a)×÷Ϊ½áÊø·û¡£¶ÌÏûÏ¢·¢Ëͳɹ¦£¬Ä£¿é·µ»Ø£º
OK
¡¡¡¡Í¨¹ýTC35½ÓÊÕ¶ÌÏûÏ¢µÄ·½·¨Îª£º
¡¡¡¡¶ÌÏûÏ¢µ½À´ºó£¬´®¿ÚÉÏ»á½ÓÊÕµ½Ö¸Áî
+CMTI:¡åSM¡å,INDEX(ÐÅÏ¢´æ´¢Î»ÖÃ)
¡¡¡¡PCÉϵĿØÖÆÈí¼þͨ¹ý¶ÁÈ¡PDUÊý¾ÝµÄATÃüÁî
AT+CMGR=INDEX
½«TC35Ä£¿éÖÐPDU¸ñʽµÄ¶ÌÏûÏ¢ÄÚÈݶÁ³ö¡£Èç¹ûÓÃ+CMGL´úÌæ+CMGR£¬Ôò¿ÉÒ»´ÎÐÔ¶Á³öÈ«²¿¶ÌÏûÏ¢¡£
¡¡¡¡Í¨¹ýTC35ɾ³ý¶ÌÏûÏ¢µÄ·½·¨Îª£º
¡¡¡¡PCÉϵĿØÖÆÈí¼þÊÕµ½Ò»Ìõ¶ÌÏûÏ¢²¢´¦Àíºó£¬ÐèÒª½«ÆäÔÚSIM¿¨ÉÏɾ³ý£¬ÒÔ·ÀÖ¹SIM¿¨±¥ºÍ¡£É¾³ý¶ÌÏûÏ¢µÄÖ¸ÁîΪ£º
AT+CMGD=INDEX
¡¡¡¡É¾³ýºóÄ£¿é·µ»Ø
OK
2.³ÌÐòʵÀý
¡¡¡¡ÓÉÓÚ±¾ÎĵÄ×ÚÖ¼ÔÚÓÚ½²½â´®¿ÚͨÐÅ£¬Òò´Ë£¬ÎÒÃÇÆÁ±ÎͼÐÎÓû§½çÃæµÄϸ½Ú£¬ÖÆ×÷Ò»¸ö¼òµ¥µÄ¶ÌÐÅÊÕ·¢Èí¼þ£¬Ëü°üº¬ÁË¿ØÖƶÌÐÅÖն˵ÄËùÓд®¿ÚͨÐÅÄÚÈÝ¡£Êµ¼ÊÉÏ£¬Ò»¸öÀíÏëµÄ¶ÌÐÅÊÕ·¢Èí¼þµÄ½çÃæÓ¦ÀàËÆÓÚOutlook»òFoxmail£¬°üº¬ÊÕ¼þÏä¡¢·¢¼þÏä¡¢ÒÑ·¢ËͶÌÐÅÏäµÈÄÚÈÝ£¬µ«ÊÇÕâЩ¶«Î÷¶¼ÓëÎÒÃÇÒª½éÉܵĴ®¿ÚͨÐÅÎ޹أ¬Òò´Ë£¬ÏÂÃæµÄÈí¼þ½çÃæËä"°ÜÐõÆäÍâ"£¬µ«ÈԿɳƵÃÉÏ"½ðÓñÆäÖÐ"£º
¡¡¡¡¹ØÓÚ½çÃæÉϿؼþµÄÃèÊöÈçÏ£º
BEGIN
¡¡EDITTEXT IDC_SMSCONTENT_EDIT,39,61,242,38,ES_AUTOHSCROLL
¡¡PUSHBUTTON "·¢ËÍ",IDC_SEND_BUTTON,316,80,45,18
¡¡GROUPBOX "½ÓÊÕ¶ÌÏûÏ¢",IDC_STATIC,28,124,361,167
¡¡LTEXT "¶Ô·½ÊÖ»úºÅ",IDC_STATIC,41,35,42,11
¡¡EDITTEXT IDC_PHONENUM_EDIT,88,30,192,17,ES_AUTOHSCROLL
¡¡PUSHBUTTON "Çå³ý",IDC_CLEAR_BUTTON,316,30,45,18
¡¡GROUPBOX "·¢ËͶÌÏûÏ¢",IDC_STATIC,29,19,361,95
¡¡LISTBOX IDC_RECVSMS_LIST,43,137,331,127,LBS_SORT |
¡¡LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
¡¡PUSHBUTTON "½ÓÊÕ",IDC_RECV_BUTTON,77,269,55,16
¡¡PUSHBUTTON "Çå¿Õ",IDC_DELETEALL_BUTTON,273,268,45,14
END
¡¡¡¡¶Ô»°¿òÀàµÄÏûÏ¢Ó³ÉäΪ£º
BEGIN_MESSAGE_MAP(CSMSControlDlg, CDialog)
//{{AFX_MSG_MAP(CSMSControlDlg)
¡¡ON_WM_SYSCOMMAND()
¡¡ON_WM_PAINT()
¡¡ON_WM_QUERYDRAGICON()
¡¡ON_BN_CLICKED(IDC_CLEAR_BUTTON, OnClearButton)
¡¡ON_BN_CLICKED(IDC_SEND_BUTTON, OnSendButton)
¡¡ON_BN_CLICKED(IDC_RECV_BUTTON, OnRecvButton)
¡¡ON_BN_CLICKED(IDC_DELETEALL_BUTTON, OnDeleteallButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
¸Ðл¡¶Í¨¹ý´®¿ÚÊÕ·¢¶ÌÏûÏ¢¡·Ò»ÎĵÄ×÷Õßbhw98£¬ËûΪÎÒÃDZàдÁËÊý¸ö¶ÀÁ¢ÓÚ²Ù×÷ϵͳƽ̨µÄCº¯Êý£¬Ê¹µÃÎÒÃÇ¿ÉÒÔÔÚÓ¦ÓóÌÐòÖÐÖ±½Ó¶ÔÕâЩº¯Êý½øÐе÷Óá£ÔÚ±¾¿ØÖÆÈí¼þÖУ¬Ò²¶ÔÕâЩº¯Êý½øÐÐÁ˳ä·ÖÀûÓá£
ÏÂÃæÊǶԱ¾Àý³ÌÈí¼þµÄÖ÷ÒªÊý¾Ý½á¹¹ºÍºËÐĺ¯ÊýµÄ½éÉÜ£º
¡¡¡¡Êý¾Ý½á¹¹
// Óû§ÐÅÏ¢±àÂ뷽ʽ
#define GSM_7BIT 0
#define GSM_8BIT 4
#define GSM_UCS2 8
// ¶ÌÏûÏ¢²ÎÊý½á¹¹£¬±àÂë/½âÂë¹²ÓÃ
// ÆäÖУ¬×Ö·û´®ÒÔ0½áβ
typedef struct
{
¡¡char SCA[16]; // ¶ÌÏûÏ¢·þÎñÖÐÐĺÅÂë(SMSCµØÖ·)
¡¡char TPA[16]; // Ä¿±êºÅÂë»ò»Ø¸´ºÅÂë(TP-DA»òTP-RA)
¡¡char TP_PID; // Óû§ÐÅÏ¢ÐÒé±êʶ(TP-PID)
¡¡char TP_DCS; // Óû§ÐÅÏ¢±àÂ뷽ʽ(TP-DCS)
¡¡char TP_SCTS[16]; // ·þÎñʱ¼ä´Á×Ö·û´®(TP_SCTS), ½ÓÊÕʱÓõ½
¡¡char TP_UD[161]; // ÔʼÓû§ÐÅÏ¢(±àÂëÇ°»ò½âÂëºóµÄTP-UD)
¡¡char index; // ¶ÌÏûÏ¢ÐòºÅ£¬ÔÚ¶ÁȡʱÓõ½
} SM_PARAM;
¡¡¡¡·¢ËͶÌÏûÏ¢
¡¡¡¡·¢ËÍ°´Å¥¶ÔÓ¦µÄº¯ÊýΪCSMSControlDlg::OnSendButton£¬Ëü¶ÁÈ¡Óû§Êä³ö²¢¸ù¾ÝÄ¿±êµç»°ºÅÂëºÍ¶ÌÐÅÏ¢ÄÚÈÝÐγÉSM_PARAM(Ô´PDU²ÎÊý)µÄÄÚÈÝ£¬½Ó׎øÐз¢ËÍ£º
void CSMSControlDlg::OnSendButton()
{
¡¡// TODO: Add your control notification handler code here
¡¡//»ñµÃÓû§ÊäÈë
¡¡CString desPhoneNum;
¡¡CString smsContent;
¡¡GetDlgItemText(IDC_PHONENUM_EDIT,desPhoneNum);
¡¡GetDlgItemText(IDC_SMSCONTENT_EDIT,smsContent);
¡¡//Ìî³äSM_PARAM½á¹¹ÌåÄÚÈÝ
¡¡SM_PARAM smParam;
¡¡smParam = CreateSMPARAMStruct(desPhoneNum,smsContent);
¡¡//·¢ËͶÌÐÅÏ¢
¡¡gsmSendMessage(smParam);
}
ÆäÖе÷ÓõÄgsmSendMessageº¯ÊýÌåÏÖÁË´®¿ÚͨÐŵĺËÐÄÄÚÈÝ£¬Ëü°´ÕÕµÚ1½Ú²ûÊöµÄGSMÄ£¿é·¢ËͶÌÏûÏ¢µÄ´®¿Ú¿ØÖÆÁ÷³Ì½øÐжÌÐŵķ¢ËÍ£º
BOOL gsmSendMessage(const SM_PARAM *pSrc // pSrc: Ô´PDU²ÎÊýÖ¸Õë)
{
¡¡int nPduLength; // PDU´®³¤¶È
¡¡unsigned char nSmscLength; // SMSC´®³¤¶È
¡¡int nLength; // ´®¿ÚÊÕµ½µÄÊý¾Ý³¤¶È
¡¡char cmd[16]; // ÃüÁî´®
¡¡char pdu[512]; // PDU´®
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡char ans[128]; // Ó¦´ð´®
¡¡nPduLength = gsmEncodePdu(pSrc, pdu); // ¸ù¾ÝPDU²ÎÊý£¬±àÂëPDU´®
¡¡strcat(pdu, "\x01a"); // ÒÔCtrl-Z½áÊø
¡¡gsmString2Bytes(pdu, &nSmscLength, 2); // È¡PDU´®ÖеÄSMSCÐÅÏ¢³¤¶È
¡¡nSmscLength++; // ¼ÓÉϳ¤¶È×Ö½Ú±¾Éí
¡¡// ÃüÁîÖеij¤¶È£¬²»°üÀ¨SMSCÐÅÏ¢³¤¶È£¬ÒÔÊý¾Ý×Ö½Ú¼Æ
¡¡sprintf(cmd, "AT+CMGS=%d\r", nPduLength / 2-nSmscLength); // Éú³ÉÃüÁî
¡¡WriteComm(cmd, strlen(cmd)); // ÏÈÊä³öÃüÁî´®
¡¡nLength = ReadComm(ans, 128); // ¶ÁÓ¦´ðÊý¾Ý
¡¡
¡¡// ¸ù¾ÝÄÜ·ñÕÒµ½"\r\n> "¾ö¶¨³É¹¦Óë·ñ
¡¡if (nLength == 4 && strncmp(ans, "\r\n> ", 4) == 0)
¡¡{
¡¡¡¡WriteComm(pdu, strlen(pdu)); // µÃµ½¿Ï¶¨»Ø´ð£¬¼ÌÐøÊä³öPDU´®
¡¡¡¡nLength = ReadComm(ans, 128); // ¶ÁÓ¦´ðÊý¾Ý
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡// ¸ù¾ÝÄÜ·ñÕÒµ½"+CMS ERROR"¾ö¶¨³É¹¦Óë·ñ
¡¡¡¡if (nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
¡¡¡¡{
¡¡¡¡¡¡return TRUE;
¡¡¡¡}
¡¡}
¡¡return FALSE;
}
¶ÁÈ¡¶ÌÏûÏ¢
¡¡¡¡µã»÷"½ÓÊÕ"°´Å¥»áͨ¹ýgsmReadMessageº¯ÊýµÄµ÷ÓûñµÃËùÓжÌÏûÏ¢£¬×îºóÔÚÁбí¿Ø¼þÖÐÏÔʾËùÓжÌÐÅ£º
void CSMSControlDlg::OnRecvButton()
{
¡¡// TODO: Add your control notification handler code here
¡¡SM_PARAM smParam[100];//¶ÌÐÅ»º³åÇø
¡¡int smsNum;//¶ÌÐÅÌõÊý
¡¡smsNum = gsmReadMessage(smParam);//¶ÁÈ¡¶ÌÐÅ
¡¡//ÏÔʾ¶ÌÐÅ
¡¡for(int i=0;i
¡¡{
¡¡¡¡m_recvlist.AddString(CString(smsNum[i].TPA)+smsNum[i].TP_UD);
¡¡}
}
¡¡¡¡ÆäÖе÷ÓõÄgsmReadMessageº¯ÊýÍê³É×îºËÐĵĶÌÐŽÓÊÕ¹¦ÄÜ£¬Ëü°´ÕÕµÚ1½Ú²ûÊöµÄGSMÄ£¿é½ÓÊÕ¶ÌÏûÏ¢µÄ´®¿Ú¿ØÖÆÁ÷³Ì½øÐжÌÐŵĽÓÊÕ£º
// ²ÎÊý£ºpMsg ¶ÌÏûÏ¢»º³åÇø£¬±ØÐë×ã¹»´ó
// ·µ»Ø£º¶ÌÏûÏ¢ÌõÊý
int gsmReadMessage(SM_PARAM* pMsg)
{
¡¡int nLength; // ´®¿ÚÊÕµ½µÄÊý¾Ý³¤¶È
¡¡int nMsg; // ¶ÌÏûÏ¢¼ÆÊýÖµ
¡¡char* ptr; // ÄÚ²¿ÓõÄÊý¾ÝÖ¸Õë
¡¡char cmd[16]; // ÃüÁî´®
¡¡char ans[1024]; // Ó¦´ð´®
¡¡nMsg = 0;
¡¡ptr = ans;
¡¡sprintf(cmd, "AT+CMGL\r"); // Éú³ÉÃüÁÓÃ+CMGL¿ÉÒ»´ÎÐÔ¶Á³öÈ«²¿¶ÌÏûÏ¢
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡WriteComm(cmd, strlen(cmd)); // Êä³öÃüÁî´®
¡¡nLength = ReadComm(ans, 1024); // ¶ÁÓ¦´ðÊý¾Ý
¡¡// ¸ù¾ÝÄÜ·ñÕÒµ½"+CMS ERROR"¾ö¶¨³É¹¦Óë·ñ
¡¡if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
¡¡{
¡¡¡¡// Ñ»·¶ÁȡÿһÌõ¶ÌÏûÏ¢, ÒÔ"+CMGL:"¿ªÍ·
¡¡¡¡while((ptr = strstr(ptr, "+CMGL:")) != NULL)
¡¡¡¡{
¡¡¡¡¡¡ptr += 6; // Ìø¹ý"+CMGL:"
¡¡¡¡¡¡sscanf(ptr, "%d", &pMsg->index); // ¶ÁÈ¡ÐòºÅ
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡ptr = strstr(ptr, "\r\n"); // ÕÒÏÂÒ»ÐÐ
¡¡¡¡¡¡ptr += 2; // Ìø¹ý"\r\n"
¡¡¡¡¡¡gsmDecodePdu(ptr, pMsg); // PDU´®½âÂë
¡¡¡¡¡¡pMsg++; // ×¼±¸¶ÁÏÂÒ»Ìõ¶ÌÏûÏ¢
¡¡¡¡¡¡nMsg++; // ¶ÌÏûÏ¢¼ÆÊý¼Ó1
¡¡¡¡}
¡¡}
¡¡¡¡return nMsg;
}
ɾ³ý¶ÌÏûÏ¢
¡¡¡¡ÎÒÃÇ¿ÉÒÔÔÚ¶ÁÈ¡ÍêËùÓжÌÐÅÏ¢ºóµ÷ÓÃgsmDeleteMessageº¯ÊýÔÚGSMÄ£¿éÉÏɾ³ýÄÇЩÒѾ±»½ÓÊÕµ½PCÉϵĶÌÐÅÏ¢£¬Ëü°´ÕÕµÚ1½Ú²ûÊöµÄGSMÄ£¿éɾ³ý¶ÌÏûÏ¢µÄ´®¿Ú¿ØÖÆÁ÷³Ì½øÐжÌÐŵÄɾ³ý£º
// index: ¶ÌÏûÏ¢ÐòºÅ£¬´Ó1¿ªÊ¼
BOOL gsmDeleteMessage(const int index)
{
¡¡int nLength; // ´®¿ÚÊÕµ½µÄÊý¾Ý³¤¶È
¡¡char cmd[16]; // ÃüÁî´®
¡¡char ans[128]; // Ó¦´ð´®
¡¡sprintf(cmd, "AT+CMGD=%d\r", index); // Éú³ÉÃüÁî
¡¡// Êä³öÃüÁî´®
¡¡WriteComm(cmd, strlen(cmd));
¡¡// ¶ÁÓ¦´ðÊý¾Ý
¡¡nLength = ReadComm(ans, 128);
¡¡// ¸ù¾ÝÄÜ·ñÕÒµ½"+CMS ERROR"¾ö¶¨³É¹¦Óë·ñ
¡¡if (nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
¡¡{
¡¡¡¡return TRUE;
¡¡}
¡¡return FALSE;
}
¡¡¡¡ÔÚPC¿ØÖÆÈí¼þµÄ¶ÌÐÅÁбí¿òÖÐɾ³ýËùÓжÌÏûÏ¢µÄ"Çå¿Õ"°´Å¥º¯ÊýΪ£º
void CSMSControlDlg::OnDeleteallButton()
{
¡¡// TODO: Add your control notification handler code here
¡¡m_recvlist.ResetContent();
}
¡¡¡¡ÉèÖÃ/¶Á/д´®¿Ú
¡¡¡¡ÔÚÓ¦ÓóÌÐòÆô¶¯ÓëÍ˳ö¼°gsmSendMessage¡¢gsmReadMessageºÍgsmDeleteMessageº¯ÊýÖй㷺ʹÓõĴ®¿ÚÏà¹Øº¯ÊýÓÃWIN32 APIʵÏÖ£º
// ´®¿ÚÉ豸¾ä±ú
HANDLE hComm;
// ´ò¿ª´®¿Ú
// pPort: ´®¿ÚÃû³Æ»òÉ豸·¾¶£¬¿ÉÓÃ"COM1"»ò"\\.\COM1"Á½ÖÖ·½Ê½£¬½¨ÒéÓúóÕß
// nBaudRate: ²¨ÌØÂÊ
// nParity: ÆæżУÑé
// nByteSize: Êý¾Ý×Ö½Ú¿í¶È
// nStopBits: ֹͣλ
BOOL OpenComm(const char *pPort, int nBaudRate, int nParity, int nByteSize, int
nStopBits)
{
¡¡DCB dcb; // ´®¿Ú¿ØÖÆ¿é
¡¡COMMTIMEOUTS timeouts =
¡¡{
¡¡¡¡// ´®¿Ú³¬Ê±¿ØÖƲÎÊý
¡¡¡¡100, // ¶Á×Ö·û¼ä¸ô³¬Ê±Ê±¼ä: 100 ms
¡¡¡¡1, // ¶Á²Ù×÷ʱÿ×Ö·ûµÄʱ¼ä: 1 ms (n¸ö×Ö·û×ܹ²Îªn ms)
¡¡¡¡500, // »ù±¾µÄ(¶îÍâµÄ)¶Á³¬Ê±Ê±¼ä: 500 ms
¡¡¡¡1, // д²Ù×÷ʱÿ×Ö·ûµÄʱ¼ä: 1 ms (n¸ö×Ö·û×ܹ²Îªn ms)
¡¡¡¡100
¡¡}; // »ù±¾µÄ(¶îÍâµÄ)д³¬Ê±Ê±¼ä: 100 ms
¡¡hComm = CreateFile(pPort, // ´®¿ÚÃû³Æ»òÉ豸·¾¶
¡¡¡¡GENERIC_READ | GENERIC_WRITE, // ¶Áд·½Ê½
¡¡¡¡0, // ¹²Ïí·½Ê½£º¶ÀÕ¼
¡¡¡¡NULL, // ĬÈϵݲȫÃèÊö·û
¡¡¡¡OPEN_EXISTING, // ´´½¨·½Ê½
¡¡¡¡0, // ²»ÐèÉèÖÃÎļþÊôÐÔ
¡¡¡¡NULL); // ²»Ðè²ÎÕÕÄ£°åÎļþ
¡¡if (hComm == INVALID_HANDLE_VALUE)
¡¡¡¡return FALSE;
¡¡// ´ò¿ª´®¿Úʧ°Ü
¡¡GetCommState(hComm, &dcb); // È¡DCB
¡¡dcb.BaudRate = nBaudRate;
¡¡dcb.ByteSize = nByteSize;
¡¡dcb.Parity = nParity;
¡¡dcb.StopBits = nStopBits;
¡¡SetCommState(hComm, &dcb); // ÉèÖÃDCB
¡¡
¡¡SetupComm(hComm, 4096, 1024); // ÉèÖÃÊäÈëÊä³ö»º³åÇø´óС
¡¡SetCommTimeouts(hComm, &timeouts); // ÉèÖó¬Ê±
¡¡return TRUE;
}
// ¹Ø±Õ´®¿Ú
BOOL CloseComm()
{
¡¡return CloseHandle(hComm);
}
// д´®¿Ú
// pData: ´ýдµÄÊý¾Ý»º³åÇøÖ¸Õë
// nLength: ´ýдµÄÊý¾Ý³¤¶È
void WriteComm(void *pData, int nLength)
{
¡¡DWORD dwNumWrite; // ´®¿Ú·¢³öµÄÊý¾Ý³¤¶È
¡¡WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}
// ¶Á´®¿Ú
// pData: ´ý¶ÁµÄÊý¾Ý»º³åÇøÖ¸Õë
// nLength: ´ý¶ÁµÄ×î´óÊý¾Ý³¤¶È
// ·µ»Ø: ʵ¼Ê¶ÁÈëµÄÊý¾Ý³¤¶È
int ReadComm(void *pData, int nLength)
{
¡¡DWORD dwNumRead; // ´®¿ÚÊÕµ½µÄÊý¾Ý³¤¶È
¡¡ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
¡¡return (int)dwNumRead;
}
±à/½âÂëGSM¶ÌÏûÏ¢
¡¡¡¡ÏÝÓÚ±¾ÎĵÄƪ·ù£¬ÕâÀïÖ»¸ø³ö±à½âÂ뺯ÊýµÄÔÐÍ£¬¾ßÌåÇë²Î¿´GSM±ê×¼¼°¡¶Í¨¹ý´®¿ÚÊÕ·¢¶ÌÏûÏ¢¡·Ò»ÎÄ¡£
// UCS2±àÂë ·µ»Ø: Ä¿±ê±àÂë´®³¤¶È
int gsmEncodeUcs2(const char *pSrc, // Ô´×Ö·û´®Ö¸Õë
¡¡unsigned char *pDst, // pDst: Ä¿±ê±àÂë´®Ö¸Õë
¡¡int nSrcLength // nSrcLength: Ô´×Ö·û´®³¤¶È
);
// UCS2½âÂë ·µ»Ø: Ä¿±ê×Ö·û´®³¤¶È
int gsmDecodeUcs2(const unsigned char *pSrc, //Ô´±àÂë´®Ö¸Õë
char *pDst, // pDst: Ä¿±ê×Ö·û´®Ö¸Õë
int nSrcLength // nSrcLength: Ô´±àÂë´®³¤¶È
);
//¿É´òÓ¡×Ö·û´®×ª»»Îª×Ö½ÚÊý¾Ý ·µ»Ø: Ä¿±êÊý¾Ý³¤¶È
//È磺"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
int gsmString2Bytes(const char *pSrc, // pSrc: Ô´×Ö·û´®Ö¸Õë
unsigned char *pDst, // pDst: Ä¿±êÊý¾ÝÖ¸Õë
int nSrcLength // nSrcLength: Ô´×Ö·û´®³¤¶È
);
// ×Ö½ÚÊý¾Ýת»»Îª¿É´òÓ¡×Ö·û´® ·µ»Ø: Ä¿±ê×Ö·û´®³¤¶È
// È磺{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"
int gsmBytes2String(const unsigned char *pSrc, // pSrc: Ô´Êý¾ÝÖ¸Õë
char *pDst, // pDst: Ä¿±ê×Ö·û´®Ö¸Õë
int nSrcLength // nSrcLength: Ô´Êý¾Ý³¤¶È
);
¡¡¡¡3.×ܽá
¡¡¡¡´®¿Ú±à³ÌµÄºËÐÄÔÚÓÚ´®¿ÚͨÐÅ·½Ê½£¨·¢ËÍ¡¢½ÓÊÕºÍÎÕÊÖ£©µÄ¿ØÖÆ£¬¶ø¾ßÌåµÄÓ¦ÓÃÁìÓò·´¶øÊÇ´ÎÒªµÄ¡£ÕÆÎÕÁ˸ù±¾µÄÔÀí£¬¾Í¿ÉÒÔÁé»îµØ½«ÆäÓ¦ÓÃÓÚÈÎÒâÁìÓò£¬×ÛºÏʵÀýÖеÄÀý×Ó"¶ÌÐÅ¿ØÖÆÖÕ¶Ë"Ö»ÊDZùɽһ½Ç¡£