Modified for compatibility with Rev.E. hardware
Fork of AkmSensor by
ap1017ctrl.cpp@33:d3e1e9eb2ef9, 2017-04-21 (annotated)
- Committer:
- tkstreet
- Date:
- Fri Apr 21 20:23:24 2017 +0000
- Revision:
- 33:d3e1e9eb2ef9
- Parent:
- 32:42c6b8fb1922
- Child:
- 36:aafd15b3291b
Added Motor Driver case. Added AP1017 functions. Included debugging MSG commands at various points. Updated some comments.
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 | 33:d3e1e9eb2ef9 | 6 | MSG("#AP1017: Creating.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 7 | |
tkstreet | 25:76c11ab5060e | 8 | ap1017 = NULL; |
tkstreet | 25:76c11ab5060e | 9 | event = false; |
tkstreet | 25:76c11ab5060e | 10 | sensorName = ""; |
tkstreet | 32:42c6b8fb1922 | 11 | interval = 0; |
tkstreet | 33:d3e1e9eb2ef9 | 12 | |
tkstreet | 33:d3e1e9eb2ef9 | 13 | MSG("#AP1017: Created.\r\n"); |
tkstreet | 25:76c11ab5060e | 14 | } |
tkstreet | 25:76c11ab5060e | 15 | |
tkstreet | 25:76c11ab5060e | 16 | Ap1017Ctrl::~Ap1017Ctrl() |
tkstreet | 25:76c11ab5060e | 17 | { |
tkstreet | 33:d3e1e9eb2ef9 | 18 | MSG("#AP1017: Destroying.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 19 | |
tkstreet | 25:76c11ab5060e | 20 | if(ap1017) |
tkstreet | 25:76c11ab5060e | 21 | delete ap1017; |
tkstreet | 25:76c11ab5060e | 22 | } |
tkstreet | 25:76c11ab5060e | 23 | |
tkstreet | 25:76c11ab5060e | 24 | AkmSensor::Status Ap1017Ctrl::init(const uint8_t id, const uint8_t subid) |
tkstreet | 25:76c11ab5060e | 25 | { |
tkstreet | 33:d3e1e9eb2ef9 | 26 | MSG("#AP1017: Initializing...\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 27 | |
tkstreet | 25:76c11ab5060e | 28 | primaryId = id; |
tkstreet | 25:76c11ab5060e | 29 | subId = subid; |
tkstreet | 32:42c6b8fb1922 | 30 | interval = 1; // Set timer interrupt interval to 1s |
tkstreet | 25:76c11ab5060e | 31 | |
tkstreet | 26:4e436b0cbaf8 | 32 | switch (subId) { // template for multiple drivers |
tkstreet | 25:76c11ab5060e | 33 | case SUB_ID_AP1017: |
tkstreet | 32:42c6b8fb1922 | 34 | ap1017 = new AP1017(); // Instantiate AP1017 |
tkstreet | 25:76c11ab5060e | 35 | sensorName = "AP1017"; |
tkstreet | 33:d3e1e9eb2ef9 | 36 | MSG("#AP1017 found.\r\n"); |
tkstreet | 25:76c11ab5060e | 37 | break; |
tkstreet | 25:76c11ab5060e | 38 | default: |
tkstreet | 33:d3e1e9eb2ef9 | 39 | MSG("#Error: No sensor found.\r\n."); |
tkstreet | 25:76c11ab5060e | 40 | return AkmSensor::ERROR; |
tkstreet | 25:76c11ab5060e | 41 | } |
tkstreet | 25:76c11ab5060e | 42 | |
tkstreet | 32:42c6b8fb1922 | 43 | // Default settings |
tkstreet | 32:42c6b8fb1922 | 44 | ap1017->setDirection(AP1017::DIRECTION_CW); |
tkstreet | 32:42c6b8fb1922 | 45 | ap1017->setSpeed(50.0); |
tkstreet | 25:76c11ab5060e | 46 | |
tkstreet | 25:76c11ab5060e | 47 | return AkmSensor::SUCCESS; |
tkstreet | 25:76c11ab5060e | 48 | } |
tkstreet | 25:76c11ab5060e | 49 | |
tkstreet | 25:76c11ab5060e | 50 | bool Ap1017Ctrl::isEvent() |
tkstreet | 33:d3e1e9eb2ef9 | 51 | { |
tkstreet | 25:76c11ab5060e | 52 | return event; // No feedback: always false |
tkstreet | 25:76c11ab5060e | 53 | } |
tkstreet | 25:76c11ab5060e | 54 | |
tkstreet | 25:76c11ab5060e | 55 | AkmSensor::Status Ap1017Ctrl::startSensor() |
tkstreet | 25:76c11ab5060e | 56 | { |
tkstreet | 33:d3e1e9eb2ef9 | 57 | MSG("#AP1017: Starting sensor, no interval argument.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 58 | |
tkstreet | 31:8635be9b2e35 | 59 | ticker.attach(callback(this, &Ap1017Ctrl::timerCallback), interval); |
tkstreet | 25:76c11ab5060e | 60 | return AkmSensor::SUCCESS; |
tkstreet | 25:76c11ab5060e | 61 | } |
tkstreet | 25:76c11ab5060e | 62 | |
tkstreet | 25:76c11ab5060e | 63 | AkmSensor::Status Ap1017Ctrl::startSensor(const float sec) |
tkstreet | 25:76c11ab5060e | 64 | { |
tkstreet | 33:d3e1e9eb2ef9 | 65 | MSG("#AP1017: Starting sensor with interval argument.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 66 | |
tkstreet | 32:42c6b8fb1922 | 67 | // Initialize timer interrupt |
tkstreet | 26:4e436b0cbaf8 | 68 | interval = sec; |
tkstreet | 31:8635be9b2e35 | 69 | ticker.attach(callback(this, &Ap1017Ctrl::timerCallback), interval); |
tkstreet | 32:42c6b8fb1922 | 70 | |
tkstreet | 32:42c6b8fb1922 | 71 | ap1017->start(); // Start motor |
tkstreet | 32:42c6b8fb1922 | 72 | |
tkstreet | 25:76c11ab5060e | 73 | return AkmSensor::SUCCESS; |
tkstreet | 25:76c11ab5060e | 74 | } |
tkstreet | 25:76c11ab5060e | 75 | |
tkstreet | 25:76c11ab5060e | 76 | AkmSensor::Status Ap1017Ctrl::stopSensor() |
tkstreet | 25:76c11ab5060e | 77 | { |
tkstreet | 33:d3e1e9eb2ef9 | 78 | MSG("#AP1017: Stopping sensor.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 79 | |
tkstreet | 32:42c6b8fb1922 | 80 | ap1017->stop(); // Stop motor |
tkstreet | 33:d3e1e9eb2ef9 | 81 | ticker.detach(); |
tkstreet | 33:d3e1e9eb2ef9 | 82 | event = false; |
tkstreet | 32:42c6b8fb1922 | 83 | |
tkstreet | 25:76c11ab5060e | 84 | return AkmSensor::SUCCESS; |
tkstreet | 25:76c11ab5060e | 85 | } |
tkstreet | 25:76c11ab5060e | 86 | |
tkstreet | 25:76c11ab5060e | 87 | AkmSensor::Status Ap1017Ctrl::readSensorData(Message* msg) |
tkstreet | 25:76c11ab5060e | 88 | { |
tkstreet | 33:d3e1e9eb2ef9 | 89 | MSG("#AP1017: No sensor data to read.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 90 | |
tkstreet | 33:d3e1e9eb2ef9 | 91 | event = false; // Reset event flag |
tkstreet | 33:d3e1e9eb2ef9 | 92 | |
tkstreet | 33:d3e1e9eb2ef9 | 93 | return AkmSensor::ERROR; |
tkstreet | 25:76c11ab5060e | 94 | } |
tkstreet | 25:76c11ab5060e | 95 | |
tkstreet | 25:76c11ab5060e | 96 | AkmSensor::Status Ap1017Ctrl::requestCommand(Message* in, Message* out) |
tkstreet | 25:76c11ab5060e | 97 | { |
tkstreet | 33:d3e1e9eb2ef9 | 98 | MSG("#AP1017: Requesting command.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 99 | |
tkstreet | 31:8635be9b2e35 | 100 | AkmSensor::Status status = AkmSensor::SUCCESS; |
tkstreet | 31:8635be9b2e35 | 101 | |
tkstreet | 31:8635be9b2e35 | 102 | Message::Command cmd = in->getCommand(); // Store command |
tkstreet | 31:8635be9b2e35 | 103 | out->setCommand(cmd); // Load command into output |
tkstreet | 31:8635be9b2e35 | 104 | |
tkstreet | 31:8635be9b2e35 | 105 | switch(cmd) |
tkstreet | 31:8635be9b2e35 | 106 | { |
tkstreet | 31:8635be9b2e35 | 107 | case Message::CMD_MOTOR_START_MOTOR: |
tkstreet | 31:8635be9b2e35 | 108 | { |
tkstreet | 32:42c6b8fb1922 | 109 | if(ap1017->start() != AP1017::SUCCESS) |
tkstreet | 31:8635be9b2e35 | 110 | { |
tkstreet | 31:8635be9b2e35 | 111 | MSG("#AP1017: Failed to start motor.\r\n"); |
tkstreet | 31:8635be9b2e35 | 112 | return AkmSensor::ERROR; |
tkstreet | 31:8635be9b2e35 | 113 | } |
tkstreet | 33:d3e1e9eb2ef9 | 114 | else |
tkstreet | 33:d3e1e9eb2ef9 | 115 | { |
tkstreet | 33:d3e1e9eb2ef9 | 116 | MSG("#AP1017: Motor started.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 117 | } |
tkstreet | 31:8635be9b2e35 | 118 | break; |
tkstreet | 31:8635be9b2e35 | 119 | } |
tkstreet | 31:8635be9b2e35 | 120 | case Message::CMD_MOTOR_STOP_MOTOR: |
tkstreet | 31:8635be9b2e35 | 121 | { |
tkstreet | 32:42c6b8fb1922 | 122 | if(ap1017->stop() != AP1017::SUCCESS) |
tkstreet | 31:8635be9b2e35 | 123 | { |
tkstreet | 31:8635be9b2e35 | 124 | MSG("#AP1017: Failed to stop motor.\r\n"); |
tkstreet | 31:8635be9b2e35 | 125 | } |
tkstreet | 33:d3e1e9eb2ef9 | 126 | else |
tkstreet | 33:d3e1e9eb2ef9 | 127 | { |
tkstreet | 33:d3e1e9eb2ef9 | 128 | MSG("#AP1017: Motor stopped.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 129 | } |
tkstreet | 31:8635be9b2e35 | 130 | break; |
tkstreet | 31:8635be9b2e35 | 131 | } |
tkstreet | 31:8635be9b2e35 | 132 | case Message::CMD_MOTOR_SET_DIRECTION: |
tkstreet | 31:8635be9b2e35 | 133 | { |
tkstreet | 32:42c6b8fb1922 | 134 | if(ap1017->setDirection((AP1017::Rotation)(in->getArgument(0))) != AP1017::SUCCESS) |
tkstreet | 31:8635be9b2e35 | 135 | { |
tkstreet | 31:8635be9b2e35 | 136 | MSG("#AP1017: Failed to set motor direction.\r\n"); |
tkstreet | 31:8635be9b2e35 | 137 | } |
tkstreet | 33:d3e1e9eb2ef9 | 138 | else |
tkstreet | 33:d3e1e9eb2ef9 | 139 | { |
tkstreet | 33:d3e1e9eb2ef9 | 140 | MSG("#AP1017: Direction changed.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 141 | } |
tkstreet | 31:8635be9b2e35 | 142 | break; |
tkstreet | 31:8635be9b2e35 | 143 | } |
tkstreet | 31:8635be9b2e35 | 144 | case Message::CMD_MOTOR_SET_DUTY_CYCLE: |
tkstreet | 31:8635be9b2e35 | 145 | { |
tkstreet | 32:42c6b8fb1922 | 146 | if(ap1017->setSpeed((AP1017::Rotation)(in->getArgument(0))) != AP1017::SUCCESS) |
tkstreet | 31:8635be9b2e35 | 147 | { |
tkstreet | 31:8635be9b2e35 | 148 | MSG("#AP1017: Failed to set the duty cycle.\r\n"); |
tkstreet | 31:8635be9b2e35 | 149 | } |
tkstreet | 33:d3e1e9eb2ef9 | 150 | else |
tkstreet | 33:d3e1e9eb2ef9 | 151 | { |
tkstreet | 33:d3e1e9eb2ef9 | 152 | MSG("#AP1017: Duty cycle changed.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 153 | } |
tkstreet | 31:8635be9b2e35 | 154 | break; |
tkstreet | 31:8635be9b2e35 | 155 | } |
tkstreet | 31:8635be9b2e35 | 156 | default: |
tkstreet | 31:8635be9b2e35 | 157 | { |
tkstreet | 33:d3e1e9eb2ef9 | 158 | MSG("#AP1017: Invalid or unimplemented command.\r\n"); |
tkstreet | 31:8635be9b2e35 | 159 | status = AkmSensor::ERROR; |
tkstreet | 31:8635be9b2e35 | 160 | } |
tkstreet | 31:8635be9b2e35 | 161 | } |
tkstreet | 31:8635be9b2e35 | 162 | |
tkstreet | 31:8635be9b2e35 | 163 | return status; |
tkstreet | 25:76c11ab5060e | 164 | } |
tkstreet | 25:76c11ab5060e | 165 | |
tkstreet | 25:76c11ab5060e | 166 | char* Ap1017Ctrl::getSensorName() |
tkstreet | 25:76c11ab5060e | 167 | { |
tkstreet | 33:d3e1e9eb2ef9 | 168 | MSG("#AP1017: Getting sensor name.\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 169 | |
tkstreet | 26:4e436b0cbaf8 | 170 | return sensorName; |
tkstreet | 31:8635be9b2e35 | 171 | } |
tkstreet | 31:8635be9b2e35 | 172 | |
tkstreet | 31:8635be9b2e35 | 173 | void Ap1017Ctrl::timerCallback() |
tkstreet | 31:8635be9b2e35 | 174 | { |
tkstreet | 33:d3e1e9eb2ef9 | 175 | MSG("#AP1017: timerCallback()\r\n"); |
tkstreet | 33:d3e1e9eb2ef9 | 176 | |
tkstreet | 32:42c6b8fb1922 | 177 | ap1017->setDirection(ap1017->getDirection()); |
tkstreet | 32:42c6b8fb1922 | 178 | ap1017->setSpeed(ap1017->getSpeed()); |
tkstreet | 25:76c11ab5060e | 179 | } |