2012-01-19  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.2.0:

	- improved support for get(), especially for large arrays.

	Data for waveform arrays will normally be converted to
	numpy arrays, which is now faster.  If numpy is not
	available, the data will no longer be converted to a list
	(which is very, very slow), but left as raw ctypes Array.

	- ca.AUTOMONITOR_LENGTH is increased to 65536

	- pv.get(as_numpy=True/False) now works better.

	- epics.ca.get(chid, count=0) now works better, returning 
	the true array size (as of the most recent put)

2011-11-08  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.1.4:

	- fixed support for both python 3.2 and 2.5

2011-11-04  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.1.4rc1:

	- major overhaul to ca.get() in two ways:
	 a) use libca.ca_array_get_callback() and an internal callback to
	 fecth value.  This was motivated by the need to better handle
	 "large data / slow network" situations, but was a change made for
	 all ca.get()s

	 b) gracefully handle NOT getting (either deliberately or because
	 of a timeout) data in ca.get().   This was partially to handle
	 the case of wanting to connect to a huge number of PVs quickly.

	- ca.get() now has timeout keyword, as does PV.get() and caget().
	These all set the max time (in second) to wait before returning
	None.   When this happens, a subsequent call to get() or
	get_cached_value() may work, if the callback simply hadn't
	completed in the first ca.get().

	- ca.get() has unpack keyword to return immediately after issuing
	ca_array_get_callback() -- the value can be fetched later with a
	call to ca.get_cached_value()

	- added ca.cached_value() to retrieve from a "previously
	incomplete" ca.get() (either because unpack=True or because the
	get() timed out).

	- added auto_cb to ca.create_channel() to allow not having
	connection callback.

	- callback arg to PV.__init__() can now be a list or tuple of
	callback functions -- all will be added.

	- added "run_now" argument (default False) to PV.add_callback(),
	which will (when True) call the added callback function
	immediately.

	- removed apps folder, moving these example apps to the epicsapps
	repository.

	- count arg to pv.get() will now explitcly call ca.get() with that
	count to allow limited count.

	- added count arg to devices.get()

	- better tracebacks for CA Exceptions

	- make sure strings as CHAR waveforms are padded with NULLs, even
	with NORD/NELM difference.

	- added use_complete to device.put()

	- added device.scan for scan record support.

	- several minor bug fixes, improvement to Setup/simulator.py

2011-08-09  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.1.3:

	- ca.find_libca() added PYEPICS_LIBCA as preferred way to
	explicitly set where libca.so is found

	- Added ca.DEFAULT_SUBSCRIPTION_MASK for subscriptions, which is
	set to    DBE_VALUE | DBE_ALARM    (not DBE_LOG)
	- ca.create_subscription() now has a mask argument.

	- For PVs, the auto_monitor argument can be set to the subscription
	mask, or True, or False, or None.

	- put() (ca.py and PV) for waveform now puts only the array size
	of the data passed in, so that the '.NORD' field is kept as the
	length of the input array.

	- PV.count reports the 'NORD' field (number of elements actually
	entered into the array), while PV.nelm contains the maximum length
	that can be held in the waveform.

	- many wx improvements, including PVCollaplsiblePane, and other
	improvements mostly from Angus Gratton

	- added some example epics applications in the apps folder.

	- many minor bug, typo fixes.

2011-04-25  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.1.2:

	- changed threading defaults, so that a single main context is the
	default threading model.  Add ca.CAThread class to set initial
	context on entering a Thread target

	- ca/pv: multiple user-level connection callbacks now supported.

	- wx: refactored so that pvText is now named PVText, and similarly
  	      for all PV-enabled widgets (PVMixin, etc).
	- wx: connection callbacks now Enables/Disables wx Widget.
	- wx: Many other small tweaks and improvements.

2011-03-24  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.1.1:

	- changed package name from epics to pyepics (better tarball names)

	- changed PV.put() so that:
	     * a normal ca_put() is the default
	     * wait=True will hang until completion
	     * use_complete=True will use a builtin callback that sets
	       the .put_complete attribute
	     * a general purpose callback can be specified.

2011-03-23  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.1.0:

	- added Angus Gratton's wx enhanced widgets

	- added Angus Gratton's autosave module

	- move main repository to github.com/pyepics/pyepics

	- dynamic subarrays supported.

	- upgraded win32 dlls to be 3.14.12, so that dynamic arrays work.

	- string arrays now correctly handled.

	- several small bug fixes to MotoDetailFrame.py (thanks to Mark Vigder)

	- dramatically improved testing framework, with dedicated
	  epics database (tests/Setup/pydebug.db) that can be loaded
	  and manipulated for testing

	- PV nows have a 'put_complete' field that indicates when
	  a put() has completed.

	- better handling of connection callbacks when a channel or PV
	  tries to connect several times in rapid succession.

	- fixed some bugs related to array values, being stepped on and
	  corrupted by subsequent calls.


2011-01-11  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.11:

	- improvements for devices, especially motor, scaler, and struck.
	- added wx MiniMotorPanel to wx.MotorPanel to provide a smaller,
     	simpler motor panel.

	- fixed configuration for build on Solaris (from T. Mooney)

	- added 'with_ctrlvars' option (default True) to
	PV.add_callback(). This will try to make sure that accurate
	control information is passed into a callback.

	- changed conversion of data from ctypes to numpy to use
	   numpy.ctypeslib.as_array(data)
	for waveforms, including CHAR arrays. The as_string=True
	option still works for CHAR arrays.

	Since numpy.ctypeslib.as_array() is much faster than numpy.array(),
	all array data is now converted to numpy arrays (if numpy is
	available and as_numpy is not explicitly set False) without
	looking at ca.AUTOMONITOR_LENGTH.

	- improved support and performance for getting partial arrays in
  	ca.py and pv.py, and in caget(), which now has 'count' and
	'as_numpy' keyword options.

2010-10-21  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.10:

 	- improved devices to use attributes in addition to get()/put()
	methods, so that
	   a = device('XX:m1', delim='.')
	   print a.VAL
	is equivalent to  print a.get('VAL').  Case is preserved, and
	device.get(attr, as_string=True) is still the only way to get
	the string representation.

	- several improvements to Motor and MotorPanel to use this new
  	device interface.

	- synchronous groupns now work.

	- epicsPV now works correctly.

	- added a 'count=' argument to ca.get() and PV.get() to limit
	(really!) the number of array elements fetched for array data.

	- fixed bug in handling very large char waveform for images.

	- better coverage and testing

2010-10-02  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.9:
 	- many fixes to ca.py to avoid errors on 64-bit linux (no other
	64-bit systems available for testing at this time).  Two separat
	errors were found:
	-- incorrect mapping of "DBR_LONG" (should be	ctypes.c_int)
	-- use of args.chid as a Channel ID in 'connection' and 'get'
	callbacks:  The issue is that the Python callback receives
	args.chid as a Python int, and this must be cast to a
	dbr.chid_t (a ctypes.c_long) for use by any ca function.
	Oddly, using the Python int worked on 32 bit systems.

	- simplified approach to reconnection attempts for un-connected
	channels.  The "force" keyword has been eliminated (it never
	really forced a connection, just retried).

	- fixed bug that prevented getting array data on systems without
	numpy installed.

	- added tests, tested on more systems with more variations.


2010-09-17  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.8:
 	- fixed fetching of ctrl and time variants of array data, due
	to a patch from Glen Wright (<Glen.Wright@lightsource.ca>)!

	- improvement for connections on slow networks:
	moved setting of monitor reference to pv.on_connect, and
	postponing setting self.connection until pv.on_connect is
	complete.  This prevents a main thread from seeing
	self.connected = True and plowing ahead while the connection
	callback is still being run.  Connections are now much
	more reliable over slow networks (say, over a VPN and DSL
	line from home -- it works!)

	- set EPICS_CA_MAX_ARRAY_BYTES to 2**24 if not already set.

	- many fixes to wx.MotorPanel and related GUI components, so
	that scripts/wx_motor.py now works much better.

	- small improvements to motor device.

	- added replace_printf_hanlder to ca.py: having difficulty with
	"fork a daemon process" with ca library.

	- doc improvements and updates

2010-08-31  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.7:
	- improved connection speed when connecting to many PVs
	(especially if some are not connected)

	- improved reliability of get(as_string=True) actually returning
	the "proper" string value of the PV (enum name, doubles formatted
	according to precision field, etc).

	- added CA Severity Exception, which is then ignored pend_io, so
	as to avoid unnecessary crashes.

	- added several tests.

	- documentation improvements

2010-06-10  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.6:
	- added working connection callbacks for PVs: users supply
	a function that is called on changes to connection status.

2010-05-25  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.5:
	- set EPICS_CA_MAX_ARRAY_BYTES to 2**31 prior to loading the
  	libca DLL, if EPICS_CA_MAX_ARRAY_BYTES is not already set.

	- use ca.AUTOMONITOR_MAXLENGTH (default = 16384) to improve
	performance for large array / waveform data, in two ways:
	   1. a PV with an element count > ca.AUTOMONITOR_MAXLENGTH will
	NOT be automatically monitored, so that explicit get() calls are
	needed.  To override this,  use  auto_monitor=True when creating
	the PV.  Smaller arrays will still be automatically monitored
	(which can be turned off with auto_monitor=False).  This does not
	have a direct impact on the ca interface.

	  2.  PVs and ca channels with element count >
	ca.AUTOMONITOR_MAXLENGTH will NOT be implicitly converted to numpy
	arrays unless explicitly asked for with get(..., as_numpy=True).

	- fixed PV's char_value field in info paragraph, especially for
	"fresh" PVs where the precision value may not have been correctly
	fetched when info is called.

2010-05-18  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.4:
	fixed some performance bottlenecks for large arrays, as from
	areaDetector.

2010-05-02  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.3:
	fixed some threading issues

2010-04-20  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.2:

	- improved method to "locate CA dll" (or .so or .dylib) at run
	time, using ctypes.util.find_lib().  On Unix (including linux, Mac
	OSX), if the "usual system approach" of finding a DLL is not
	successful, the enviroment variables PATH and LD_LIBRARY_PATH (and
	DYLD_LIBRARY_PATH on Mac OSX) will be searched for the appropriate
	DLL.

	- improved functionality for Python Threads.   The _cache data in
	ca.py now stores Channel IDs with CA "context", so that use of
	Python threads (as from threading.Thread) work, allowing, gets(),
	puts(), and callbacks in separately running threads.


2010-04-08  Matt Newville  <newville@cars.uchicago.edu>

	* Version 3.0.1:
	inital release of version 3.0.1

	This is a dramatic change from the 2.1 series.  Please consult
	documentation.


