ctypes.POINTER() allocates memory which does not get reclaimed by gc to over time this leaks memory if multiple
instances of the connection class get created.  To avoid this once the device path has been discovered cache
the value and resuse that for every future invocation.