static void _uartCallback(uint8 port, uint8 event) { #ifdef HAL_UART_RX_WAKEUP // UART woken up. This happens in the interrupt handler so we really // don't want to do anything else. if (event == HAL_UART_RX_WAKEUP) { return; } #endif if (port == HAL_UART_PORT_0) { while (serial[0].onread && Hal_UART_RxBufLen(HAL_UART_PORT_0) > 0) { interpreter_run(serial[0].onread, 1); } if (serial[0].onwrite && Hal_UART_TxBufLen(HAL_UART_PORT_0) > 0) { interpreter_run(serial[0].onwrite, 1); } } }
/********************************************************************* * @fn BlueBasic_ProcessEvent * * @brief Blue Basic Application Task event processor. This function * is called to process all events for the task. Events * include timers, messages and any other user defined events. * * @param task_id - The OSAL assigned task ID. * @param events - events to process. This is a bit map and can * contain more than one event. * * @return events not processed */ uint16 BlueBasic_ProcessEvent( uint8 task_id, uint16 events ) { unsigned char i; VOID task_id; // OSAL required parameter that isn't used in this function if ( events & SYS_EVENT_MSG ) { uint8 *pMsg; if ( (pMsg = osal_msg_receive( blueBasic_TaskID )) != NULL ) { // Release the OSAL message VOID osal_msg_deallocate( pMsg ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } if ( events & BLUEBASIC_START_DEVICE_EVT ) { // Start the Device VOID GAPRole_StartDevice( &blueBasic_PeripheralCBs ); #ifdef GAP_BOND_MGR // Start Bond Manager VOID GAPBondMgr_Register( &blueBasic_BondMgrCBs ); #endif // Start monitoring links VOID linkDB_Register( blueBasic_HandleConnStatusCB ); #ifdef ENABLE_BLE_CONSOLE GATTServApp_InitCharCfg(INVALID_CONNHANDLE, consoleProfileCharCfg); GATTServApp_RegisterService(consoleProfile, GATT_NUM_ATTRS(consoleProfile), &consoleProfileCB); #endif // Start Interpreter interpreter_setup(); return ( events ^ BLUEBASIC_START_DEVICE_EVT ); } #ifdef ENABLE_BLE_CONSOLE if ( events & BLUEBASIC_CONNECTION_EVENT ) { while (io.writein != io.writeout) { uint8* save = io.writeout; if (GATTServApp_ProcessCharCfg(consoleProfileCharCfg, io.write, FALSE, consoleProfile, GATT_NUM_ATTRS(consoleProfile), INVALID_TASK_ID) != SUCCESS) { io.writeout = save; break; } } return ( events ^ BLUEBASIC_CONNECTION_EVENT ); } #endif if ( events & BLUEBASIC_INPUT_AVAILABLE ) { interpreter_loop(); return (events ^ BLUEBASIC_INPUT_AVAILABLE); } if ( events & BLUEBASIC_EVENT_INTERRUPTS ) { for (i = 0; i < OS_MAX_INTERRUPT; i++) { if (blueBasic_interrupts[i].linenum && (events & (BLUEBASIC_EVENT_INTERRUPT << i))) { interpreter_run(blueBasic_interrupts[i].linenum, 1); } } return (events ^ (events & BLUEBASIC_EVENT_INTERRUPTS)); } if ( events & BLUEBASIC_EVENT_TIMERS ) { for (i = 0; i < OS_MAX_TIMER; i++) { if (blueBasic_timers[i].linenum && (events & (BLUEBASIC_EVENT_TIMER << i))) { interpreter_run(blueBasic_timers[i].linenum, i == DELAY_TIMER ? 0 : 1); } } return (events ^ (events & BLUEBASIC_EVENT_TIMERS)); } if ( events & BLUEBASIC_EVENT_SERIAL ) { if (serial[0].onread && Hal_UART_RxBufLen(HAL_UART_PORT_0) > 0) { interpreter_run(serial[0].onread, 1); } if (serial[0].onwrite && Hal_UART_TxBufLen(HAL_UART_PORT_0) > 0) { interpreter_run(serial[0].onwrite, 1); } return (events ^ BLUEBASIC_EVENT_SERIAL); } // Discard unknown events return 0; }