handleC0_(dtvccPacket, controlCode, pts) {
    // All these commands pertain to the current window, so ensure it exists.
    if (!this.currentWindow_) {
      return [];
    }

    if (controlCode == 0x18) {
      const firstByte = dtvccPacket.readByte().value;
      const secondByte = dtvccPacket.readByte().value;

      const toHexString = (byteArray) => {
        return byteArray.map((byte) => {
          return ('0' + (byte & 0xFF).toString(16)).slice(-2);
        }).join('');
      };
      const unicode = toHexString([firstByte, secondByte]);
      // Takes a unicode hex string and creates a single character.
      const char = String.fromCharCode(parseInt(unicode, 16));
      this.currentWindow_.setCharacter(char);
      return [];
    }

    const window = this.currentWindow_;
    let parsedClosedCaption = null;

    // Note: This decoder ignores the "ETX" (end of text) control code. Since
    // this is JavaScript, a '\0' is not needed to terminate a string.
    switch (controlCode) {
      case shaka.cea.Cea708Service.ASCII_BACKSPACE:
        window.backspace();
        break;
      case shaka.cea.Cea708Service.ASCII_CARRIAGE_RETURN:
        // Force out the buffer, since the top row could be lost.
        if (window.isVisible()) {
          parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);
        }
        window.carriageReturn();
        break;
      case shaka.cea.Cea708Service.ASCII_HOR_CARRIAGE_RETURN:
        // Force out the buffer, a row will be erased.
        if (window.isVisible()) {
          parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);
        }
        window.horizontalCarriageReturn();
        break;
      case shaka.cea.Cea708Service.ASCII_FORM_FEED:
        // Clear window and move pen to (0,0).
        // Force emit if the window is visible.
        if (window.isVisible()) {
          parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);
        }
        window.resetMemory();
        window.setPenLocation(0, 0);
        break;
    }
    return parsedClosedCaption ? [parsedClosedCaption] : [];
  }
Handles C0 group data.
@param {!shaka.cea.DtvccPacket} dtvccPacket
@param {number} controlCode
@param {number} pts
@return {!Array<shaka.extern.ICaptionDecoder.ClosedCaption>}
@private