When new events arrive on a synaptic channel that has been taken over by hsolve, there is a possibility that the event must be scheduled before any other pending event i.e. the new event is the first one in the sorted list of events. As a consequence the internal counter that tracks the occurrence of the next synaptic event for that channel must be updated. A synaptic channel receiving a new first event, notifies hsolve of this situation by calling the hsolve element with an HSEVENT action. The arguments to this action describe the synaptic channel at which the event arrives with a unique identifier and the time when the event will be scheduled. Hsolve uses this information to update the internal counter for the synaptic channel. The unique identifier is determined by hsolve during SETUP time and can be found in the solve_index field of the synaptic channel. The hsolve element that has taken over the synaptic channel is found in the hsolve field of the channel.
NOTE: For the outgoing spike events hsolve uses a message loop on the messages of the spikegen element that produces the spikes. There is nothing really fancy about this except for the fact that hsolve uses memory that is supposed to be private to the spikegen element. This way the events arrive automatically at the wright synchan element, and that element will in turn notify an hsolve element if needed by means of an HSEVENT action. This also guarantees that there is no interference with pgenesis. |