void LedFont_Scroller(void *pdata) { INT8U err; char *p; short x, xStart; (void)pdata; /* avoid compiler warning */ OSFlagPost(LedFont_Flags, LEDFONT_FLAG_READY, OS_FLAG_SET, &err); /* announce that we are ready */ for(;;) { /* forever */ while (LedFont_Text[0] == '\0') { /* no text */ LedFont_Stop(); } for(xStart=GDisp1_GetWidth()-1;;xStart--) { GDisp1_Clear(); p = &LedFont_Text[0]; /* get character */ x = xStart; while(*p != '\0') { /* go through the text */ x += LedFont_PutChar(*p, x); p++; /* next character */ x++; /* add a space between characters */ } GDisp1_UpdateFull(); if (x <= 0) { /* reached end of text to scroll: start over again */ LedFont_Stop(); break; /* start again */ } (void)OSTimeDlyHMSM(0,0,0,60); /* delay specifies the scrolling speed */ if (OSFlagQuery(LedFont_Flags, &err)&LEDFONT_FLAG_QUIT) { /* E8 pressed: quit */ OSFlagPost(LedFont_Flags, LEDFONT_FLAG_QUIT, OS_FLAG_CLR, &err); /* clear flag */ LedFont_Stop(); break; /* start again */ } } /* for */ } }
void LedFont_ScrollText(char *text, bool scrollOnce, bool waitForFinish) { INT8U err; UTIL1_strcpy((uint8_t*)LedFont_Text, sizeof(LedFont_Text), (const unsigned char*)text); LedFont_ScrollOnce = scrollOnce; while (!(OSFlagQuery(LedFont_Flags, &err)&LEDFONT_FLAG_READY)) { (void)OSTimeDlyHMSM(0,0,0,100); /* wait task to be ready */ } OSTaskResume(TASK_PRIO_SCROLLER); if (scrollOnce && waitForFinish) { while (!(OSFlagQuery(LedFont_Flags, &err)&LEDFONT_FLAG_FINISHED_SCROLLING)) { (void)OSTimeDlyHMSM(0,0,0,100); /* wait for scrolling to be finished */ } OSFlagPost(LedFont_Flags, LEDFONT_FLAG_FINISHED_SCROLLING, OS_FLAG_CLR, &err); /* clear flag */ } }
/*FUNCTION********************************************************************** * * Function Name : OSA_EventGetFlags * Description : Get event flags status. * Return current event flags. * *END**************************************************************************/ event_flags_t OSA_EventGetFlags(event_t *pEvent) { INT8U err; return OSFlagQuery(pEvent->pGroup, &err); }