• Main Page
  • Classes
  • Files
  • File List

GenericBinaryInputSynapse.h

00001 /*
00002  * GenericBinaryInputSynapse.h
00003  *
00004  *  Created on: Jul 24, 2012
00005  *      Author: dejan
00006  */
00007 
00008 #ifndef GENERICBINARYINPUTSYNAPSE_H_
00009 #define GENERICBINARYINPUTSYNAPSE_H_
00010 
00011 
00012 #include "globals.h"
00013 #include "SimContext.h"
00014 
00015 
00016 template<class BaseSyn>
00017 class GenericBinaryInputSynapse : public BaseSyn {
00018 
00019 public:
00020         GenericBinaryInputSynapse(float psr_level_hi = 5,
00021                                                           float psr_level_lo = 0,
00022                                                           bool isActive = true) {
00023                 this->psr_level_hi = psr_level_hi;
00024                 this->psr_level_lo = psr_level_lo;
00025                 this->isActive = isActive;
00026         }
00027 
00028         float psr_level_hi;
00029 
00030         float psr_level_lo;
00031 
00032         bool isActive;
00033 
00034         virtual ~GenericBinaryInputSynapse() {}
00035 
00036         virtual void reset(SimContext &sim_ctxt);
00037 
00038         virtual void eventHit(SimContext & sim_ctxt, Time time, port_id_t port);
00039 
00040 protected:
00041         enum { lvl_hi, lvl_lo } last_level;
00042 
00043 };
00044 
00045 template<class BaseSyn>
00046 void GenericBinaryInputSynapse<BaseSyn>::eventHit(SimContext & sim_ctxt, Time time, port_id_t port)
00047 {
00048         if (port == 0) {
00049                 last_level = lvl_lo;
00050                 if (isActive) {
00051                         BaseSyn::updatePSR(psr_level_lo, time);
00052                 }
00053         }
00054         else if (port == 1) {
00055                 last_level = lvl_hi;
00056                 if (isActive) {
00057                         BaseSyn::updatePSR(psr_level_hi, time);
00058                 }
00059         }
00060         else if (port == 2) {
00061                 if (!isActive) {
00062                         BaseSyn::updatePSR((last_level == lvl_hi) ? psr_level_hi : psr_level_lo, time);
00063                         isActive = true;
00064                 }
00065 
00066         }
00067         else if (port == 3) {
00068                 if (isActive) {
00069                         BaseSyn::updatePSR(0, time);
00070                         isActive = false;
00071                 }
00072         }
00073         else if (port == 4) {
00074                 if (isActive) {
00075                         isActive = false;
00076                         BaseSyn::updatePSR(0, time);
00077                 }
00078                 else {
00079                         isActive = true;
00080                         BaseSyn::updatePSR((last_level == lvl_hi) ? psr_level_hi : psr_level_lo, time);
00081                 }
00082         }
00083 }
00084 
00085 
00086 template<class BaseSyn>
00087 void GenericBinaryInputSynapse<BaseSyn>::reset(SimContext &sim_ctxt)
00088 {
00089         BaseSyn::resetPSRs();
00090 }
00091 
00092 #endif /* GENERICBINARYINPUTSYNAPSE_H_ */

Generated on Wed Sep 18 2013 11:25:40 for NEVESIM by  doxygen 1.7.1