Modified for compatibility with Rev.E. hardware
Fork of AkmSensor by
akmhallswitch.cpp@49:c8f8946129b6, 2018-05-01 (annotated)
- Committer:
- tkstreet
- Date:
- Tue May 01 21:31:15 2018 +0000
- Revision:
- 49:c8f8946129b6
- Parent:
- 43:45225713cd58
Modified for Rev.E. compatibility.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
masahikofukasawa | 0:7a00359e701e | 1 | #include "akmhallswitch.h" |
masahikofukasawa | 0:7a00359e701e | 2 | |
masahikofukasawa | 0:7a00359e701e | 3 | /////////////////////////////////////////////////////////////////////////////////// |
masahikofukasawa | 0:7a00359e701e | 4 | // Interface implementation |
masahikofukasawa | 0:7a00359e701e | 5 | /////////////////////////////////////////////////////////////////////////////////// |
masahikofukasawa | 0:7a00359e701e | 6 | /** |
masahikofukasawa | 0:7a00359e701e | 7 | * Constructor. |
masahikofukasawa | 0:7a00359e701e | 8 | * |
masahikofukasawa | 0:7a00359e701e | 9 | */ |
masahikofukasawa | 27:41aa9fb23a2f | 10 | AkmHallSwitch::AkmHallSwitch() : AkmSensor(){ |
masahikofukasawa | 0:7a00359e701e | 11 | sw0 = NULL; |
masahikofukasawa | 0:7a00359e701e | 12 | sw1 = NULL; |
masahikofukasawa | 0:7a00359e701e | 13 | d0 = DigitalIn(DIGITAL_D0); |
masahikofukasawa | 0:7a00359e701e | 14 | d1 = DigitalIn(DIGITAL_D1); |
masahikofukasawa | 0:7a00359e701e | 15 | } |
masahikofukasawa | 0:7a00359e701e | 16 | |
masahikofukasawa | 0:7a00359e701e | 17 | /** |
masahikofukasawa | 0:7a00359e701e | 18 | * Destructor. |
masahikofukasawa | 0:7a00359e701e | 19 | * |
masahikofukasawa | 0:7a00359e701e | 20 | */ |
masahikofukasawa | 0:7a00359e701e | 21 | AkmHallSwitch::~AkmHallSwitch(){ |
masahikofukasawa | 0:7a00359e701e | 22 | sw1->rise(0); |
masahikofukasawa | 0:7a00359e701e | 23 | sw1->fall(0); |
masahikofukasawa | 0:7a00359e701e | 24 | sw0->rise(0); |
masahikofukasawa | 0:7a00359e701e | 25 | sw0->fall(0); |
masahikofukasawa | 0:7a00359e701e | 26 | |
masahikofukasawa | 0:7a00359e701e | 27 | if(sw0) delete sw0; |
masahikofukasawa | 0:7a00359e701e | 28 | if(sw1) delete sw1; |
masahikofukasawa | 0:7a00359e701e | 29 | } |
masahikofukasawa | 0:7a00359e701e | 30 | |
masahikofukasawa | 0:7a00359e701e | 31 | AkmSensor::Status AkmHallSwitch::init(const uint8_t id, const uint8_t subid){ |
masahikofukasawa | 0:7a00359e701e | 32 | primaryId = id; |
masahikofukasawa | 0:7a00359e701e | 33 | subId = subid; |
masahikofukasawa | 0:7a00359e701e | 34 | |
masahikofukasawa | 13:d008249f0359 | 35 | if(primaryId == AKM_PRIMARY_ID_UNIPOLAR && subId == AkmHallSwitch::SUB_ID_EM1771) sensorName = "EM-1771"; |
masahikofukasawa | 13:d008249f0359 | 36 | else if(primaryId == AKM_PRIMARY_ID_UNIPOLAR && subId == AkmHallSwitch::SUB_ID_EW453) sensorName = "EW-453"; |
masahikofukasawa | 13:d008249f0359 | 37 | else if(primaryId == AKM_PRIMARY_ID_UNIPOLAR && subId == AkmHallSwitch::SUB_ID_EW652B) sensorName = "EW-652B"; |
masahikofukasawa | 13:d008249f0359 | 38 | else if(primaryId == AKM_PRIMARY_ID_UNIPOLAR && subId == AkmHallSwitch::SUB_ID_EW6672) sensorName = "EW-6672"; |
masahikofukasawa | 13:d008249f0359 | 39 | else if(primaryId == AKM_PRIMARY_ID_OMNIPOLAR && subId == AkmHallSwitch::SUB_ID_EM1781) sensorName = "EM-1781"; |
masahikofukasawa | 13:d008249f0359 | 40 | else if(primaryId == AKM_PRIMARY_ID_OMNIPOLAR && subId == AkmHallSwitch::SUB_ID_AK8788A) sensorName = "AK8788A"; |
masahikofukasawa | 13:d008249f0359 | 41 | else if(primaryId == AKM_PRIMARY_ID_OMNIPOLAR && subId == AkmHallSwitch::SUB_ID_EM6781) sensorName = "EM-6781"; |
masahikofukasawa | 13:d008249f0359 | 42 | else if(primaryId == AKM_PRIMARY_ID_LATCH && subId == AkmHallSwitch::SUB_ID_AK8771) sensorName = "AK8771"; |
masahikofukasawa | 13:d008249f0359 | 43 | else if(primaryId == AKM_PRIMARY_ID_LATCH && subId == AkmHallSwitch::SUB_ID_EW432) sensorName = "EW-432"; |
masahikofukasawa | 13:d008249f0359 | 44 | else if(primaryId == AKM_PRIMARY_ID_LATCH && subId == AkmHallSwitch::SUB_ID_EZ470) sensorName = "EZ-470"; |
masahikofukasawa | 13:d008249f0359 | 45 | else if(primaryId == AKM_PRIMARY_ID_LATCH && subId == AkmHallSwitch::SUB_ID_EZ471) sensorName = "EZ-471"; |
masahikofukasawa | 13:d008249f0359 | 46 | else if(primaryId == AKM_PRIMARY_ID_LATCH && subId == AkmHallSwitch::SUB_ID_EW612B) sensorName = "EW-612B"; |
masahikofukasawa | 13:d008249f0359 | 47 | else if(primaryId == AKM_PRIMARY_ID_LATCH && subId == AkmHallSwitch::SUB_ID_EW632) sensorName = "EW-632"; |
masahikofukasawa | 13:d008249f0359 | 48 | else if(primaryId == AKM_PRIMARY_ID_DUAL_OUTPUT && subId == AkmHallSwitch::SUB_ID_EM1791) sensorName = "EM-1791"; |
masahikofukasawa | 13:d008249f0359 | 49 | else if(primaryId == AKM_PRIMARY_ID_DUAL_OUTPUT && subId == AkmHallSwitch::SUB_ID_AK8789) sensorName = "AK8789"; |
masahikofukasawa | 13:d008249f0359 | 50 | else if(primaryId == AKM_PRIMARY_ID_ONECHIP_ENCODER && subId == AkmHallSwitch::SUB_ID_AK8775) sensorName = "AK8775"; |
masahikofukasawa | 13:d008249f0359 | 51 | else if(primaryId == AKM_PRIMARY_ID_ONECHIP_ENCODER && subId == AkmHallSwitch::SUB_ID_AK8776) sensorName = "AK8776"; |
masahikofukasawa | 13:d008249f0359 | 52 | else if(primaryId == AKM_PRIMARY_ID_ONECHIP_ENCODER && subId == AkmHallSwitch::SUB_ID_AK8779A) sensorName = "AK8779A"; |
masahikofukasawa | 13:d008249f0359 | 53 | else if(primaryId == AKM_PRIMARY_ID_ONECHIP_ENCODER && subId == AkmHallSwitch::SUB_ID_AK8779B) sensorName = "AK8779B"; |
masahikofukasawa | 13:d008249f0359 | 54 | |
masahikofukasawa | 0:7a00359e701e | 55 | sw0 = new InterruptIn(DIGITAL_D0); |
masahikofukasawa | 0:7a00359e701e | 56 | sw1 = new InterruptIn(DIGITAL_D1); |
masahikofukasawa | 0:7a00359e701e | 57 | |
masahikofukasawa | 0:7a00359e701e | 58 | sw1->rise(0); |
masahikofukasawa | 0:7a00359e701e | 59 | sw1->fall(0); |
masahikofukasawa | 0:7a00359e701e | 60 | sw0->rise(0); |
masahikofukasawa | 0:7a00359e701e | 61 | sw0->fall(0); |
masahikofukasawa | 0:7a00359e701e | 62 | |
masahikofukasawa | 0:7a00359e701e | 63 | return AkmSensor::SUCCESS; |
masahikofukasawa | 0:7a00359e701e | 64 | } |
masahikofukasawa | 0:7a00359e701e | 65 | |
masahikofukasawa | 0:7a00359e701e | 66 | void AkmHallSwitch::riseEventD0(){ |
masahikofukasawa | 0:7a00359e701e | 67 | d0 = 1; |
masahikofukasawa | 29:b488d2c89fba | 68 | AkmSensor::setEvent(); |
masahikofukasawa | 0:7a00359e701e | 69 | } |
masahikofukasawa | 0:7a00359e701e | 70 | void AkmHallSwitch::fallEventD0(){ |
masahikofukasawa | 0:7a00359e701e | 71 | d0 = 0; |
masahikofukasawa | 29:b488d2c89fba | 72 | AkmSensor::setEvent(); |
masahikofukasawa | 0:7a00359e701e | 73 | } |
masahikofukasawa | 0:7a00359e701e | 74 | void AkmHallSwitch::riseEventD1(){ |
masahikofukasawa | 0:7a00359e701e | 75 | d1 = 1; |
masahikofukasawa | 29:b488d2c89fba | 76 | AkmSensor::setEvent(); |
masahikofukasawa | 0:7a00359e701e | 77 | } |
masahikofukasawa | 0:7a00359e701e | 78 | |
masahikofukasawa | 0:7a00359e701e | 79 | void AkmHallSwitch::fallEventD1(){ |
masahikofukasawa | 0:7a00359e701e | 80 | d1 = 0; |
masahikofukasawa | 29:b488d2c89fba | 81 | AkmSensor::setEvent(); |
masahikofukasawa | 0:7a00359e701e | 82 | } |
masahikofukasawa | 0:7a00359e701e | 83 | |
masahikofukasawa | 0:7a00359e701e | 84 | AkmSensor::Status AkmHallSwitch::startSensor(){ |
masahikofukasawa | 16:d85be9bafb80 | 85 | sw1->rise(callback(this, &AkmHallSwitch::riseEventD1)); |
masahikofukasawa | 16:d85be9bafb80 | 86 | sw1->fall(callback(this, &AkmHallSwitch::fallEventD1)); |
masahikofukasawa | 0:7a00359e701e | 87 | if(primaryId == AkmSensor::AKM_PRIMARY_ID_DUAL_OUTPUT || primaryId == AkmSensor::AKM_PRIMARY_ID_ONECHIP_ENCODER) |
masahikofukasawa | 0:7a00359e701e | 88 | { |
masahikofukasawa | 16:d85be9bafb80 | 89 | sw0->rise(callback(this, &AkmHallSwitch::riseEventD0)); |
masahikofukasawa | 16:d85be9bafb80 | 90 | sw0->fall(callback(this, &AkmHallSwitch::fallEventD0)); |
masahikofukasawa | 0:7a00359e701e | 91 | } |
masahikofukasawa | 29:b488d2c89fba | 92 | MSG("#Start sensor %s.\r\n",sensorName); |
masahikofukasawa | 0:7a00359e701e | 93 | return AkmSensor::SUCCESS; |
masahikofukasawa | 0:7a00359e701e | 94 | } |
masahikofukasawa | 0:7a00359e701e | 95 | |
masahikofukasawa | 0:7a00359e701e | 96 | AkmSensor::Status AkmHallSwitch::startSensor(const float sec){ |
masahikofukasawa | 11:cef8dc1cf010 | 97 | return AkmSensor::ERROR; |
masahikofukasawa | 0:7a00359e701e | 98 | } |
masahikofukasawa | 0:7a00359e701e | 99 | |
masahikofukasawa | 0:7a00359e701e | 100 | AkmSensor::Status AkmHallSwitch::stopSensor(){ |
masahikofukasawa | 0:7a00359e701e | 101 | sw1->rise(0); |
masahikofukasawa | 0:7a00359e701e | 102 | sw1->fall(0); |
masahikofukasawa | 0:7a00359e701e | 103 | sw0->rise(0); |
masahikofukasawa | 0:7a00359e701e | 104 | sw0->fall(0); |
masahikofukasawa | 0:7a00359e701e | 105 | return AkmSensor::SUCCESS; |
masahikofukasawa | 0:7a00359e701e | 106 | } |
masahikofukasawa | 0:7a00359e701e | 107 | |
masahikofukasawa | 0:7a00359e701e | 108 | AkmSensor::Status AkmHallSwitch::readSensorData(Message* msg){ |
masahikofukasawa | 29:b488d2c89fba | 109 | AkmSensor::clearEvent(); |
masahikofukasawa | 0:7a00359e701e | 110 | |
masahikofukasawa | 0:7a00359e701e | 111 | msg->setCommand(Message::CMD_START_MEASUREMENT); |
masahikofukasawa | 0:7a00359e701e | 112 | msg->setArgument( 0, d1 ? 1 : 0 ); |
masahikofukasawa | 0:7a00359e701e | 113 | if(primaryId == AkmSensor::AKM_PRIMARY_ID_DUAL_OUTPUT || primaryId == AkmSensor::AKM_PRIMARY_ID_ONECHIP_ENCODER) |
masahikofukasawa | 0:7a00359e701e | 114 | { |
masahikofukasawa | 0:7a00359e701e | 115 | msg->setArgument( 1, d0 ? 1 : 0 ); |
masahikofukasawa | 0:7a00359e701e | 116 | } |
masahikofukasawa | 0:7a00359e701e | 117 | return AkmSensor::SUCCESS; |
masahikofukasawa | 0:7a00359e701e | 118 | } |
masahikofukasawa | 0:7a00359e701e | 119 | |
masahikofukasawa | 0:7a00359e701e | 120 | AkmSensor::Status AkmHallSwitch::requestCommand(Message* in, Message* out){ |
masahikofukasawa | 15:1238993fd75f | 121 | return AkmSensor::ERROR; |
masahikofukasawa | 0:7a00359e701e | 122 | } |