Modified for compatibility with Rev.E. hardware

Fork of AkmSensor by AKM Development Platform

Committer:
masahikofukasawa
Date:
Fri Mar 17 23:29:20 2017 +0000
Revision:
29:b488d2c89fba
Parent:
27:41aa9fb23a2f
Child:
43:45225713cd58
Modified for multi sensor demo.

Who changed what in which revision?

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