Modified for compatibility with Rev.E. hardware
Fork of AkmSensor by
ap1017ctrl.cpp
- Committer:
- tkstreet
- Date:
- 2017-04-19
- Revision:
- 32:42c6b8fb1922
- Parent:
- 31:8635be9b2e35
- Child:
- 33:d3e1e9eb2ef9
File content as of revision 32:42c6b8fb1922:
#include "ap1017ctrl.h" #include "debug.h" Ap1017Ctrl::Ap1017Ctrl() { ap1017 = NULL; event = false; ticker = NULL; sensorName = ""; interval = 0; } Ap1017Ctrl::~Ap1017Ctrl() { if(ap1017) delete ap1017; } AkmSensor::Status Ap1017Ctrl::init(const uint8_t id, const uint8_t subid) { primaryId = id; subId = subid; interval = 1; // Set timer interrupt interval to 1s switch (subId) { // template for multiple drivers case SUB_ID_AP1017: ap1017 = new AP1017(); // Instantiate AP1017 sensorName = "AP1017"; break; default: return AkmSensor::ERROR; } // Default settings ap1017->setDirection(AP1017::DIRECTION_CW); ap1017->setSpeed(50.0); return AkmSensor::SUCCESS; } bool Ap1017Ctrl::isEvent() { return event; // No feedback: always false } AkmSensor::Status Ap1017Ctrl::startSensor() { ticker.attach(callback(this, &Ap1017Ctrl::timerCallback), interval); return AkmSensor::SUCCESS; } AkmSensor::Status Ap1017Ctrl::startSensor(const float sec) { // Initialize timer interrupt interval = sec; ticker.attach(callback(this, &Ap1017Ctrl::timerCallback), interval); ap1017->start(); // Start motor return AkmSensor::SUCCESS; } AkmSensor::Status Ap1017Ctrl::stopSensor() { ap1017->stop(); // Stop motor return AkmSensor::SUCCESS; } AkmSensor::Status Ap1017Ctrl::readSensorData(Message* msg) { // No sensors to read data from return AkmSensor::SUCCESS; } AkmSensor::Status Ap1017Ctrl::requestCommand(Message* in, Message* out) { AkmSensor::Status status = AkmSensor::SUCCESS; Message::Command cmd = in->getCommand(); // Store command out->setCommand(cmd); // Load command into output switch(cmd) { case Message::CMD_MOTOR_START_MOTOR: { if(ap1017->start() != AP1017::SUCCESS) { MSG("#AP1017: Failed to start motor.\r\n"); return AkmSensor::ERROR; } break; } case Message::CMD_MOTOR_STOP_MOTOR: { if(ap1017->stop() != AP1017::SUCCESS) { MSG("#AP1017: Failed to stop motor.\r\n"); } break; } case Message::CMD_MOTOR_SET_DIRECTION: { if(ap1017->setDirection((AP1017::Rotation)(in->getArgument(0))) != AP1017::SUCCESS) { MSG("#AP1017: Failed to set motor direction.\r\n"); } break; } case Message::CMD_MOTOR_SET_DUTY_CYCLE: { if(ap1017->setSpeed((AP1017::Rotation)(in->getArgument(0))) != AP1017::SUCCESS) { MSG("#AP1017: Failed to set the duty cycle.\r\n"); } break; } default: { MSG("AP1017: Invalid or unimplemented command.\r\n"); status = AkmSensor::ERROR; } } return status; } char* Ap1017Ctrl::getSensorName() { return sensorName; } void Ap1017Ctrl::timerCallback() { ap1017->setDirection(ap1017->getDirection()); ap1017->setSpeed(ap1017->getSpeed()); }