/** * @brief Checks if "OK<CR>" is waiting in the buffer * @retval TRUE if "OK<CR>" is received, FALSE otherwise. */ uint8_t XBee_CheckOkResponse(void) { uint8_t ret; Blox_VUSART_Receive(XBEE_VUSART_ID, &ret); if (ret != 'O') { Blox_DebugPat("XBee_CheckOKResponse received %x instead of O\r\n", (char)ret); return FALSE; } Blox_VUSART_Receive(XBEE_VUSART_ID, &ret); if (ret != 'K') { Blox_DebugPat("XBee_CheckOKResponse received %x instead of K\r\n", (char)ret); return FALSE; } Blox_VUSART_Receive(XBEE_VUSART_ID, &ret); if (ret != CR) { Blox_DebugPat("XBee_CheckOKResponse received %x instead of <CR>\r\n", (char)ret); return FALSE; } return TRUE; }
/** * @brief Initializes the pointer to the system variables array * @retval None */ void Blox_System_Init(void) { Blox_Debug_Init(); //sys = (SysVar *)MEM_SYS_VAR_START; if(sys->magic != SYS_MAGIC) { Blox_DebugPat("Blox_System_Init sys magic fails, got:%x\r\n", sys->magic); while(1) ; } numDeInit = 0; }
/** * @brief Registers a new function to be called when the system deInits. * Only adds if it isn't already there. * @param fn: a fn pointer to a module's deinit function * @retval None */ void Blox_System_Register_DeInit(ptrVoidFn fn) { uint32_t i; if (numDeInit == MAX_DEINIT_FN) { Blox_DebugPat("Blox_System_Register_DeInit numDeInit reached max of:%d\r\n", MAX_DEINIT_FN); while(1) ; } for (i = 0; i < numDeInit; i++) { if(deInit[i] == fn) return; } deInit[numDeInit++] = fn; }
/** * @brief Prints out the configuration options of the XBee. * @retval XBEE_OK if successfull, XBEE_INIT_FAIL on failure. */ XBEE_STATUS Blox_XBee_Print(void) { uint8_t garbage; Blox_VUSART_TryReceive(XBEE_VUSART_ID, &garbage); //clear VUSART buffer before send/receive Blox_VUSART_Send(XBEE_VUSART_ID, 'X'); // Junk character to before init SysTick_Wait(1100); Blox_VUSART_SendData(XBEE_VUSART_ID, "+++", 3) ; //Enter Command Mode if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(1100); Blox_VUSART_SendData(XBEE_VUSART_ID, "ATMY\r", 5) ; //Read source address Blox_DebugStr("ATMY:"); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); Blox_DebugPat("%c\r\n", garbage); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); //\r Blox_VUSART_SendData(XBEE_VUSART_ID, "ATDL\r", 5) ; //Read source address Blox_DebugStr("ATDL:"); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); Blox_DebugPat("%c", garbage); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); Blox_DebugPat("%c", garbage); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); Blox_DebugPat("%c", garbage); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); Blox_DebugPat("%c\r\n", garbage); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); //\r Blox_VUSART_SendData(XBEE_VUSART_ID, "ATDH\r", 5) ; //Read source address Blox_DebugStr("ATDH:"); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); Blox_DebugPat("%c\r\n", garbage); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); //\r Blox_VUSART_SendData(XBEE_VUSART_ID, "ATAP\r", 5) ; //Read source address Blox_DebugStr("ATAP:"); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); Blox_DebugPat("%c\r\n", garbage); Blox_VUSART_Receive(XBEE_VUSART_ID, &garbage); //\r Blox_VUSART_SendData(XBEE_VUSART_ID, "ATCN\r", 5) ; //Exit command mode if (XBee_CheckOkResponse() == FALSE) return XBEE_INIT_FAIL; SysTick_Wait(20); return XBEE_OK; }