Modified for compatibility with Rev.E. hardware

Fork of AkmSensor by AKM Development Platform

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?

UserRevisionLine numberNew 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 }