Modified for compatibility with Rev.E. hardware

Fork of AkmSensor by AKM Development Platform

Committer:
tkstreet
Date:
Tue Apr 18 23:05:59 2017 +0000
Revision:
31:8635be9b2e35
Parent:
26:4e436b0cbaf8
Child:
32:42c6b8fb1922
Implemented basic set of functions for AP1017 control class.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tkstreet 25:76c11ab5060e 1 #include "ap1017ctrl.h"
tkstreet 25:76c11ab5060e 2 #include "debug.h"
tkstreet 25:76c11ab5060e 3
tkstreet 25:76c11ab5060e 4 Ap1017Ctrl::Ap1017Ctrl()
tkstreet 25:76c11ab5060e 5 {
tkstreet 25:76c11ab5060e 6 ap1017 = NULL;
tkstreet 25:76c11ab5060e 7 event = false;
tkstreet 26:4e436b0cbaf8 8 ticker = NULL;
tkstreet 25:76c11ab5060e 9 sensorName = "";
tkstreet 25:76c11ab5060e 10 }
tkstreet 25:76c11ab5060e 11
tkstreet 25:76c11ab5060e 12 Ap1017Ctrl::~Ap1017Ctrl()
tkstreet 25:76c11ab5060e 13 {
tkstreet 25:76c11ab5060e 14 if(ap1017)
tkstreet 25:76c11ab5060e 15 delete ap1017;
tkstreet 25:76c11ab5060e 16 }
tkstreet 25:76c11ab5060e 17
tkstreet 25:76c11ab5060e 18 AkmSensor::Status Ap1017Ctrl::init(const uint8_t id, const uint8_t subid)
tkstreet 25:76c11ab5060e 19 {
tkstreet 25:76c11ab5060e 20 primaryId = id;
tkstreet 25:76c11ab5060e 21 subId = subid;
tkstreet 25:76c11ab5060e 22
tkstreet 26:4e436b0cbaf8 23 switch (subId) { // template for multiple drivers
tkstreet 25:76c11ab5060e 24 case SUB_ID_AP1017:
tkstreet 25:76c11ab5060e 25 ap1017 = new AP1017();
tkstreet 25:76c11ab5060e 26 sensorName = "AP1017";
tkstreet 25:76c11ab5060e 27 break;
tkstreet 25:76c11ab5060e 28 default:
tkstreet 25:76c11ab5060e 29 return AkmSensor::ERROR;
tkstreet 25:76c11ab5060e 30 }
tkstreet 25:76c11ab5060e 31
tkstreet 25:76c11ab5060e 32 // TODO: Initialize ap1017
tkstreet 25:76c11ab5060e 33
tkstreet 25:76c11ab5060e 34 return AkmSensor::SUCCESS;
tkstreet 25:76c11ab5060e 35 }
tkstreet 25:76c11ab5060e 36
tkstreet 25:76c11ab5060e 37 bool Ap1017Ctrl::isEvent()
tkstreet 25:76c11ab5060e 38 {
tkstreet 25:76c11ab5060e 39 return event; // No feedback: always false
tkstreet 25:76c11ab5060e 40 }
tkstreet 25:76c11ab5060e 41
tkstreet 25:76c11ab5060e 42 AkmSensor::Status Ap1017Ctrl::startSensor()
tkstreet 25:76c11ab5060e 43 {
tkstreet 31:8635be9b2e35 44 ticker.attach(callback(this, &Ap1017Ctrl::timerCallback), interval);
tkstreet 25:76c11ab5060e 45 return AkmSensor::SUCCESS;
tkstreet 25:76c11ab5060e 46 }
tkstreet 25:76c11ab5060e 47
tkstreet 25:76c11ab5060e 48 AkmSensor::Status Ap1017Ctrl::startSensor(const float sec)
tkstreet 25:76c11ab5060e 49 {
tkstreet 26:4e436b0cbaf8 50 interval = sec;
tkstreet 31:8635be9b2e35 51 ticker.attach(callback(this, &Ap1017Ctrl::timerCallback), interval);
tkstreet 25:76c11ab5060e 52 return AkmSensor::SUCCESS;
tkstreet 25:76c11ab5060e 53 }
tkstreet 25:76c11ab5060e 54
tkstreet 25:76c11ab5060e 55 AkmSensor::Status Ap1017Ctrl::stopSensor()
tkstreet 25:76c11ab5060e 56 {
tkstreet 25:76c11ab5060e 57 return AkmSensor::SUCCESS;
tkstreet 25:76c11ab5060e 58 }
tkstreet 25:76c11ab5060e 59
tkstreet 25:76c11ab5060e 60 AkmSensor::Status Ap1017Ctrl::readSensorData(Message* msg)
tkstreet 25:76c11ab5060e 61 {
tkstreet 25:76c11ab5060e 62 return AkmSensor::SUCCESS;
tkstreet 25:76c11ab5060e 63 }
tkstreet 25:76c11ab5060e 64
tkstreet 25:76c11ab5060e 65 AkmSensor::Status Ap1017Ctrl::requestCommand(Message* in, Message* out)
tkstreet 25:76c11ab5060e 66 {
tkstreet 31:8635be9b2e35 67 AkmSensor::Status status = AkmSensor::SUCCESS;
tkstreet 31:8635be9b2e35 68
tkstreet 31:8635be9b2e35 69 Message::Command cmd = in->getCommand(); // Store command
tkstreet 31:8635be9b2e35 70 out->setCommand(cmd); // Load command into output
tkstreet 31:8635be9b2e35 71
tkstreet 31:8635be9b2e35 72 switch(cmd)
tkstreet 31:8635be9b2e35 73 {
tkstreet 31:8635be9b2e35 74 case Message::CMD_MOTOR_START_MOTOR:
tkstreet 31:8635be9b2e35 75 {
tkstreet 31:8635be9b2e35 76 if(ap1017->startMotor() != AP1017::SUCCESS)
tkstreet 31:8635be9b2e35 77 {
tkstreet 31:8635be9b2e35 78 MSG("#AP1017: Failed to start motor.\r\n");
tkstreet 31:8635be9b2e35 79 return AkmSensor::ERROR;
tkstreet 31:8635be9b2e35 80 }
tkstreet 31:8635be9b2e35 81 break;
tkstreet 31:8635be9b2e35 82 }
tkstreet 31:8635be9b2e35 83 case Message::CMD_MOTOR_STOP_MOTOR:
tkstreet 31:8635be9b2e35 84 {
tkstreet 31:8635be9b2e35 85 if(ap1017->stopMotor() != AP1017::SUCCESS)
tkstreet 31:8635be9b2e35 86 {
tkstreet 31:8635be9b2e35 87 MSG("#AP1017: Failed to stop motor.\r\n");
tkstreet 31:8635be9b2e35 88 }
tkstreet 31:8635be9b2e35 89 break;
tkstreet 31:8635be9b2e35 90 }
tkstreet 31:8635be9b2e35 91 case Message::CMD_MOTOR_SET_DIRECTION:
tkstreet 31:8635be9b2e35 92 {
tkstreet 31:8635be9b2e35 93 if(ap1017->setDirection(in->getArgument(0)) != AP1017::SUCCESS)
tkstreet 31:8635be9b2e35 94 {
tkstreet 31:8635be9b2e35 95 MSG("#AP1017: Failed to set motor direction.\r\n");
tkstreet 31:8635be9b2e35 96 }
tkstreet 31:8635be9b2e35 97 break;
tkstreet 31:8635be9b2e35 98 }
tkstreet 31:8635be9b2e35 99 case Message::CMD_MOTOR_SET_DUTY_CYCLE:
tkstreet 31:8635be9b2e35 100 {
tkstreet 31:8635be9b2e35 101 if(ap1017->setDutyCycle(in->getArgument(0)) != AP1017::SUCCESS)
tkstreet 31:8635be9b2e35 102 {
tkstreet 31:8635be9b2e35 103 MSG("#AP1017: Failed to set the duty cycle.\r\n");
tkstreet 31:8635be9b2e35 104 }
tkstreet 31:8635be9b2e35 105 break;
tkstreet 31:8635be9b2e35 106 }
tkstreet 31:8635be9b2e35 107 default:
tkstreet 31:8635be9b2e35 108 {
tkstreet 31:8635be9b2e35 109 MSG("AP1017: Invalid or unimplemented command.\r\n");
tkstreet 31:8635be9b2e35 110 status = AkmSensor::ERROR;
tkstreet 31:8635be9b2e35 111 }
tkstreet 31:8635be9b2e35 112 }
tkstreet 31:8635be9b2e35 113
tkstreet 31:8635be9b2e35 114 return status;
tkstreet 25:76c11ab5060e 115 }
tkstreet 25:76c11ab5060e 116
tkstreet 25:76c11ab5060e 117 char* Ap1017Ctrl::getSensorName()
tkstreet 25:76c11ab5060e 118 {
tkstreet 26:4e436b0cbaf8 119 return sensorName;
tkstreet 31:8635be9b2e35 120 }
tkstreet 31:8635be9b2e35 121
tkstreet 31:8635be9b2e35 122 void Ap1017Ctrl::timerCallback()
tkstreet 31:8635be9b2e35 123 {
tkstreet 31:8635be9b2e35 124 // Timer interrupt handling
tkstreet 25:76c11ab5060e 125 }