the param[in] param[out] stuff is a bit confusing
The in and out designation simply defines whether the variable is an input to or an output from the function.
The intended use of the param[] stuff is by doxygen, not by us mere mortals.
but the BUF (first param) says its a pointer to the location that will receive the data... is there where you got it can be an array type
Exactly. Pointers and arrays are very closely linked concepts. A pointer is simply an address, as is the array. When a function takes an array, one can pass a pointer, instead. When a function takes a pointer, one can sometimes pass an array instead.