/** 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); } }
/** Remove one pre-fetched key out of the Raw Data FIFO. @param TerminalDevice Terminal driver private structure. @param Output The key will be removed. @retval TRUE If insert successfully. @retval FLASE If Raw Data FIFO buffer is empty before remove operation. **/ BOOLEAN RawFiFoRemoveOneKey ( TERMINAL_DEV *TerminalDevice, UINT8 *Output ) { UINT8 Head; Head = TerminalDevice->RawFiFo->Head; if (IsRawFiFoEmpty (TerminalDevice)) { // // FIFO is empty // *Output = 0; return FALSE; } *Output = TerminalDevice->RawFiFo->Data[Head]; TerminalDevice->RawFiFo->Head = (UINT8) ((Head + 1) % (RAW_FIFO_MAX_NUMBER + 1)); return TRUE; }