firmware: Factor out directory reading
firmware: Create helper function for USB reading
firmware: Allow text rendering directly from progmem
firmware: Let user select a file