/** Insert one pre-fetched key into the Unicode FIFO buffer. @param TerminalDevice Terminal driver private structure. @param Input The key will be input. @retval TRUE If insert successfully. @retval FLASE If Unicode FIFO buffer is full before key insertion, and the key is lost. **/ BOOLEAN UnicodeFiFoInsertOneKey ( TERMINAL_DEV *TerminalDevice, UINT16 Input ) { UINT8 Tail; Tail = TerminalDevice->UnicodeFiFo->Tail; ASSERT (Tail < FIFO_MAX_NUMBER + 1); if (IsUnicodeFiFoFull (TerminalDevice)) { // // Unicode FIFO is full // return FALSE; } TerminalDevice->UnicodeFiFo->Data[Tail] = Input; TerminalDevice->UnicodeFiFo->Tail = (UINT8) ((Tail + 1) % (FIFO_MAX_NUMBER + 1)); return TRUE; }
/** Translate all raw data in the Raw FIFO into unicode, and insert them into Unicode FIFO. @param TerminalDevice The terminal device. **/ VOID AnsiRawDataToUnicode ( IN TERMINAL_DEV *TerminalDevice ) { UINT8 RawData; // // pop the raw data out from the raw fifo, // and translate it into unicode, then push // the unicode into unicode fifo, until the raw fifo is empty. // while (!IsRawFiFoEmpty (TerminalDevice) && !IsUnicodeFiFoFull (TerminalDevice)) { RawFiFoRemoveOneKey (TerminalDevice, &RawData); UnicodeFiFoInsertOneKey (TerminalDevice, (UINT16) RawData); } }