I've worked on several projects where I had to use some sensors and chips accompanied by datasheets that contain timing diagrams and descriptions on how to program the device. In particular, I've worked with the Pololu MinIMU-9 (accelerometer), MAX7221, and more recently the nRF24L01 radio frequency transceiver.
Since I'm a newbie to software development, I was wondering if software developers distinguish between code that tell the hardware what to do to implement higher level functions, and the code that allow users to use the same device without having to program the hardware.
Do they call the latter "device drivers"? Are they of the same type as the software that one would need to install when, say you change a graphics card and must install the graphics card "driver"?
For instance, there is a library called Parola out there that implements functions to display text animation. The creator of that library also created a library called MD_Max72xx. In it, it seems he has written functions that sends bit via SPI to program the chip. The Parola library itself seems to be an abstraction. That library is just a collection of .cpp files that each implement a different text effect (scrolling, scan, etc.).
When hardware developers create the sensors/chips do they already have an idea of what kind of driver code should be written? Do they write any code? It seems like they would be the most qualified to write a hardware library, being the designers and manufacturers of their product.
It seems the hardware designers leave it (very) open to the programmers to write the device drivers so that it is up to the programmers to determine what features of the hardware to use. The data sheets I've seen don't include ANY code at all -- just register maps, timing diagrams, ... info needed to program the hardware to implement features that the hardware designers propose that the device can implement.