ºìÁªLinuxÃÅ»§
Linux°ïÖú

VC++´®¿Ú±à³ÌÖ®¶ÌÐÅÓ¦Óÿª·¢

·¢²¼Ê±¼ä:2006-05-03 12:08:27À´Ô´:ºìÁª×÷Õß:°®µÄ±ßÔµ
Ç°ÃæÊý´ÎÁ¬ÔØÎÒÃÇÒԽϳ¤µÄƪ·ù½²½âÁË´®¿ÚͨÐŵÄÓ²¼þÔ­Àí¡¢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ùɽһ½Ç¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ