Generic object parameters are never considered static for a number of reasons. One is that this way, the compiler can emit object code for the generic unit only once, making the object parameter an internal pointer value. Another one is that you can instantiate generic units within subprograms, using parameters of those subprograms as actual values for the generic object parameters, which makes them de facto non-static.
That does not mean that they are useless. You just cannot use them in a case statement or for any other purpose which requires a static value but you can of course still use them like any non-static value. For example, you can translate the case statement into an if
cascade. That will not allow the same level of optimization in the compiler as a case
statement, but that level will not be possible anyway because of the way generics are defined in Ada.
Edit: If you want to have truly static parameters, don't use generics. Use a code generator that replaces a placeholder in your code with the actual value. This Ada Gem has some pointers if your are using GPRBuild. This approach allows you to generate code for each instantiation, basically putting your „generic“ code on the same level as C++ templates.