INT8U BT_INIT(const char * pNAME, INT32U BAUD, INT8U ROLE, INT32U PSWD){ INT8U OS_ERR = OS_ERR_NONE; INT8U BT_ERR = BT_ERR_NONE; INT8U RETRY = 0; BOOLEAN F_SET = FALSE; BOOLEAN F_BOOT = FALSE; char *MAIL; // Ç¿ÖÆÖØÆô½øÈëATģʽ BT_PWR_SET(0); _delay_ms(25); BT_DAT_MOD_SET(DAT_MOD_AT); BT_PWR_SET(1); _delay_ms(25); /* È·¶¨À¶ÑÀ½øÈëATģʽ *************************************************************/ if(BT_ERR == BT_ERR_NONE) { for(RETRY=25; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT\r\n"); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT\r\n"); // printf("%s\r\n", mail); if(strstr(MAIL, "OK")) { BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT -> ERROR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } /* »ñÈ¡±¾»úÀ¶ÑÀµØÖ· *****************************************************************/ if(BT_ERR == BT_ERR_NONE) { for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+ADDR?\r\n"); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+ADDR?\r\n"); // printf("%s\r\n", mail); if(strstr((char *)MAIL, "ADDR")) { ADDR_PARSE(MAIL, (INT32U *)&BT_API.MAC); BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->ADDR : ERR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } /* ½«À¶ÑÀÉèÖÃΪÖ÷»ú/´Ó»úģʽ *************************************************************/ if(BT_ERR == BT_ERR_NONE) { for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+ROLE?\r\n"); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+ROLE?\r\n"); // printf("%s\r\n", mail); if(ROLE == HOST) { if(strstr(MAIL, "ROLE:1")) { F_SET = FALSE; BT_ERR = BT_ERR_NONE; break; } else if(strstr(MAIL, "ROLE:0")) { F_SET = TRUE; F_BOOT = TRUE; BT_ERR = BT_ERR_NONE; break; } } else { if(strstr(MAIL, "ROLE:0")) { F_SET = FALSE; BT_ERR = BT_ERR_NONE; break; } else if(strstr(MAIL, "ROLE:1")) { F_SET = TRUE; F_BOOT = TRUE; BT_ERR = BT_ERR_NONE; break; } } } else { // debug info... // printf("BT->ROLE? -> OS_ERR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } if(BT_ERR==BT_ERR_NONE && F_SET==TRUE) { F_SET = FALSE; for(RETRY=5; RETRY>0; RETRY--) { if(ROLE == HOST) { xfprintf(BT_OUT, "AT+ROLE=1\r\n"); } else { xfprintf(BT_OUT, "AT+ROLE=0\r\n"); } MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+ROLE=x\r\n"); // printf("%s\r\n", mail); if(strstr(MAIL, "OK")) { BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT_ROLE->ERROR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } /* ²éѯºÍÉèÖÃÀ¶ÑÀ²¨ÌØÂÊ *************************************************************/ if(BT_ERR == BT_ERR_NONE) { for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+UART?\r\n"); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+UART?\r\n"); // printf("%s\r\n", mail); if(strstr(MAIL, "OK") && strstr(MAIL, "UART")) { char *pnum = strchr(MAIL, ':'); if(pnum) { pnum++; if(atoi(pnum) != BAUD) { F_SET = TRUE; F_BOOT = TRUE; } else { F_SET = FALSE; } } BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT_BAUD? -> ERROR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } if(BT_ERR==BT_ERR_NONE && F_SET==TRUE) { F_SET = FALSE; for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+UART=%d,0,0\r\n", BAUD); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+UART=%d,0,0\r\n", BAUD); // printf("%s\r\n", mail); if(strstr(MAIL, "OK")) { BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT_BAUD=xxxxxx -> ERROR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } /* ²éѯ/ÉèÖÃ-Åä¶ÔÂë **************************************************************/ if(BT_ERR == BT_ERR_NONE) { for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+PSWD?\r\n"); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+PSWD?\r\n"); // printf("%s\r\n", mail); if(strstr(MAIL, "PSWD") && strstr(MAIL, "OK")) { char * pnum = strchr(MAIL, ':'); if(pnum) { pnum++; if(atoi(pnum) == PSWD) { F_SET = FALSE; } else { F_SET = TRUE; F_BOOT = TRUE; } } BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT+PSWD? -> ERROR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } if(BT_ERR==BT_ERR_NONE && F_SET==TRUE) { F_SET = FALSE; for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+PSWD=%04d\r\n", PSWD); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+PSWD=%d\r\n", PSWD); // printf("%s\r\n", mail); if(strstr(MAIL, "OK")) { BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT+PSWD=xxxx -> ERROR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } /* ²éѯ/ÉèÖÃÖ÷»úÃû³Æ **************************************************************/ if(BT_ERR == BT_ERR_NONE) { for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+NAME?\r\n"); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+NAME?\r\n"); // printf("%s\r\n", mail); if(strstr(MAIL, "NAME")) { BT_ERR = BT_ERR_NONE; if(strstr(MAIL, pNAME)) { F_SET = FALSE; } else { F_SET = TRUE; F_BOOT = TRUE; } break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT+NAME? : ERR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } if(F_SET == TRUE) { if(BT_ERR == BT_ERR_NONE) { for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+NAME=%s\r\n", pNAME); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+NAME=%s\r\n", pNAME); // printf("%s\r\n", mail); if(strstr(MAIL, "OK")) { BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT+NAME=xxxx : ERR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } } // ½«À¶ÑÀÈí¸´Î»£¬ÉúЧ¸ü¸Ä if(F_BOOT == TRUE) { if(BT_ERR == BT_ERR_NONE) { for(RETRY=5; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT+RESET\r\n"); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT+RESET=1\r\n"); // printf("%s\r\n", mail); if(strstr(MAIL, "OK")) { BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT+RESET : ERR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } // µÈ´ýÀ¶ÑÀ¸´Î»³É¹¦ if(BT_ERR == BT_ERR_NONE) { for(RETRY=25; RETRY>0; RETRY--) { xfprintf(BT_OUT, "AT\r\n"); MAIL = (char *)OSMboxPend(BT_MEvent, OS_TICKS_PER_SEC/10, &OS_ERR); if(OS_ERR == OS_ERR_NONE) { // debug info... // printf("AT\r\n"); // printf("%s\r\n", mail); if(strstr(MAIL, "OK")) { BT_ERR = BT_ERR_NONE; break; } else { BT_ERR = BT_ERR_RES; } } else { // debug info... // printf("BT->AT -> ERROR!\r\n"); _delay_ms(25); } } if(RETRY==0) BT_ERR = BT_ERR_OS; } } return BT_ERR;}