CSI ? 12 h enables text-cursor blinking; CSI ? 12 l makes the cursor steady (no blink). This is the 'att610' cursor-blink private mode popularized by xterm. It controls blink only; the cursor SHAPE is set by DECSCUSR (CSI Ps SP q), and the two can conflict.
CSI ? 12 l turns OFF blinking, giving a steady cursor.
gotchas
Mode 12 controls BLINK ONLY; the cursor SHAPE (block/underline/bar) comes from DECSCUSR (CSI Ps SP q). The two interact: DECSCUSR's odd values also imply blink, so they can fight mode 12.
This is the 'att610' (AT&T 610) blink convention; not all terminals map mode 12 the same way, and some honor only DECSCUSR.
Some terminals invert the meaning or ignore mode 12 in favor of a user preference for cursor blink.
Restore the user's preferred blink state on exit rather than forcing it.
Cursor blink is sometimes globally disabled by the OS/terminal for accessibility; your ?12h may have no visible effect.