Modified for compatibility with Rev.E. hardware
Fork of AkmSensor by
ap1017ctrl.cpp@31:8635be9b2e35, 2017-04-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |