Modified for compatibility with Rev.E. hardware
Fork of AkmSensor by
ap1017ctrl.cpp
- Committer:
- tkstreet
- Date:
- 2017-04-21
- Revision:
- 33:d3e1e9eb2ef9
- Parent:
- 32:42c6b8fb1922
- Child:
- 36:aafd15b3291b
File content as of revision 33:d3e1e9eb2ef9:
#include "ap1017ctrl.h" #include "debug.h" Ap1017Ctrl::Ap1017Ctrl() { MSG("#AP1017: Creating.\r\n"); ap1017 = NULL; event = false; sensorName = ""; interval = 0; MSG("#AP1017: Created.\r\n"); } Ap1017Ctrl::~Ap1017Ctrl() { MSG("#AP1017: Destroying.\r\n"); if(ap1017) delete ap1017; } AkmSensor::Status Ap1017Ctrl::init(const uint8_t id, const uint8_t subid) { MSG("#AP1017: Initializing...\r\n"); 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"; MSG("#AP1017 found.\r\n"); break; default: MSG("#Error: No sensor found.\r\n."); 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() { MSG("#AP1017: Starting sensor, no interval argument.\r\n"); ticker.attach(callback(this, &Ap1017Ctrl::timerCallback), interval); return AkmSensor::SUCCESS; } AkmSensor::Status Ap1017Ctrl::startSensor(const float sec) { MSG("#AP1017: Starting sensor with interval argument.\r\n"); // Initialize timer interrupt interval = sec; ticker.attach(callback(this, &Ap1017Ctrl::timerCallback), interval); ap1017->start(); // Start motor return AkmSensor::SUCCESS; } AkmSensor::Status Ap1017Ctrl::stopSensor() { MSG("#AP1017: Stopping sensor.\r\n"); ap1017->stop(); // Stop motor ticker.detach(); event = false; return AkmSensor::SUCCESS; } AkmSensor::Status Ap1017Ctrl::readSensorData(Message* msg) { MSG("#AP1017: No sensor data to read.\r\n"); event = false; // Reset event flag return AkmSensor::ERROR; } AkmSensor::Status Ap1017Ctrl::requestCommand(Message* in, Message* out) { MSG("#AP1017: Requesting command.\r\n"); 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; } else { MSG("#AP1017: Motor started.\r\n"); } break; } case Message::CMD_MOTOR_STOP_MOTOR: { if(ap1017->stop() != AP1017::SUCCESS) { MSG("#AP1017: Failed to stop motor.\r\n"); } else { MSG("#AP1017: Motor stopped.\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"); } else { MSG("#AP1017: Direction changed.\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"); } else { MSG("#AP1017: Duty cycle changed.\r\n"); } break; } default: { MSG("#AP1017: Invalid or unimplemented command.\r\n"); status = AkmSensor::ERROR; } } return status; } char* Ap1017Ctrl::getSensorName() { MSG("#AP1017: Getting sensor name.\r\n"); return sensorName; } void Ap1017Ctrl::timerCallback() { MSG("#AP1017: timerCallback()\r\n"); ap1017->setDirection(ap1017->getDirection()); ap1017->setSpeed(ap1017->getSpeed()); }