annotate core/Utilities.cpp @ 85:91e1a3a220d4

Suppressed the no screen found warnings
author Giulio Moro <giuliomoro@yahoo.it>
date Fri, 17 Jul 2015 23:12:09 +0100
parents 8bd351ca8b46
children f1012082f142
rev   line source
andrewm@0 1 /*
andrewm@0 2 * Utilities.cpp
andrewm@0 3 *
andrewm@0 4 * Created on: Oct 27, 2014
andrewm@0 5 * Author: parallels
andrewm@0 6 */
andrewm@0 7
andrewm@0 8 #include "../include/Utilities.h"
andrewm@0 9
andrewm@45 10 // analogReadFrame()
andrewm@45 11 //
andrewm@45 12 // Returns the value of the given analog input at the given frame number.
andrewm@52 13 float analogReadFrame(BeagleRTContext *context, int frame, int channel) {
andrewm@45 14 return context->analogIn[frame * context->analogChannels + channel];
andrewm@45 15 }
andrewm@45 16
andrewm@45 17 // analogWriteFrame()
andrewm@45 18 //
andrewm@45 19 // Sets a given channel to a value for the current frame and, if persistent outputs are
andrewm@45 20 // enabled, for all subsequent frames
andrewm@52 21 void analogWriteFrame(BeagleRTContext *context, int frame, int channel, float value) {
andrewm@45 22 if(context->flags & BEAGLERT_FLAG_ANALOG_OUTPUTS_PERSIST) {
andrewm@45 23 for(unsigned int f = frame; f < context->analogFrames; f++)
andrewm@45 24 context->analogOut[frame * context->analogChannels + channel] = value;
andrewm@45 25 }
andrewm@45 26 else
andrewm@45 27 context->analogOut[frame * context->analogChannels + channel] = value;
andrewm@45 28 }
andrewm@45 29
andrewm@45 30 // analogWriteFrameOnce()
andrewm@45 31 //
andrewm@45 32 // Sets a given channel to a value for only the current frame
andrewm@52 33 void analogWriteFrameOnce(BeagleRTContext *context, int frame, int channel, float value) {
andrewm@45 34 context->analogOut[frame * context->analogChannels + channel] = value;
andrewm@45 35 }
andrewm@45 36
andrewm@45 37 // digitalReadFrame()
andrewm@45 38 //
andrewm@45 39 // Returns the value of a given digital input at the given frame number
andrewm@52 40 int digitalReadFrame(BeagleRTContext *context, int frame, int channel) {
andrewm@45 41 return getBit(context->digital[frame], channel + 16);
andrewm@45 42 }
andrewm@45 43
andrewm@45 44 // digitalWriteFrame()
andrewm@45 45 //
andrewm@45 46 // Sets a given digital output channel to a value for the current frame and all subsequent frames
andrewm@52 47 void digitalWriteFrame(BeagleRTContext *context, int frame, int channel, int value) {
andrewm@45 48 for(unsigned int f = frame; f < context->digitalFrames; f++) {
andrewm@45 49 if(value)
andrewm@45 50 context->digital[f] |= 1 << (channel + 16);
andrewm@45 51 else
andrewm@45 52 context->digital[f] &= ~(1 << (channel + 16));
andrewm@45 53 }
andrewm@45 54 }
andrewm@45 55
andrewm@45 56 // digitalWriteFrameOnce()
andrewm@45 57 //
andrewm@45 58 // Sets a given digital output channel to a value for the current frame only
andrewm@52 59 void digitalWriteFrameOnce(BeagleRTContext *context, int frame, int channel, int value) {
andrewm@45 60 if(value)
andrewm@45 61 context->digital[frame] |= 1 << (channel + 16);
andrewm@45 62 else
andrewm@45 63 context->digital[frame] &= ~(1 << (channel + 16));
andrewm@45 64 }
andrewm@45 65
andrewm@45 66 // pinModeFrame()
andrewm@45 67 //
andrewm@45 68 // Sets the direction of a digital pin for the current frame and all subsequent frames
andrewm@52 69 void pinModeFrame(BeagleRTContext *context, int frame, int channel, int mode) {
andrewm@45 70 for(unsigned int f = frame; f < context->digitalFrames; f++) {
giuliomoro@75 71 if(mode == INPUT)
andrewm@45 72 context->digital[f] |= (1 << channel);
andrewm@45 73 else
andrewm@45 74 context->digital[f] &= ~(1 << channel);
andrewm@45 75 }
andrewm@45 76 }
andrewm@45 77
andrewm@45 78 // pinModeFrameOnce()
andrewm@45 79 //
andrewm@45 80 // Sets the direction of a digital pin for the current frame only
andrewm@52 81 void pinModeFrameOnce(BeagleRTContext *context, int frame, int channel, int mode) {
giuliomoro@75 82 if(mode == INPUT)
andrewm@45 83 context->digital[frame] |= (1 << channel);
andrewm@45 84 else
andrewm@45 85 context->digital[frame] &= ~(1 << channel);
andrewm@45 86 }
andrewm@45 87
andrewm@0 88 // map()
andrewm@0 89 //
andrewm@0 90 // Scale an input value from one range to another. Works like its Wiring language equivalent.
andrewm@0 91 // x is the value to scale; in_min and in_max are the input range; out_min and out_max
andrewm@0 92 // are the output range.
andrewm@0 93
andrewm@52 94 float map(float x, float in_min, float in_max, float out_min, float out_max)
andrewm@0 95 {
andrewm@0 96 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
andrewm@0 97 }
andrewm@0 98
andrewm@0 99 // constrain()
andrewm@0 100 //
andrewm@0 101 // Clips an input value to be between two end points
andrewm@0 102 // x is the value to constrain; min_val and max_val are the range
andrewm@0 103
andrewm@52 104 float constrain(float x, float min_val, float max_val)
andrewm@0 105 {
andrewm@0 106 if(x < min_val) return min_val;
andrewm@0 107 if(x > max_val) return max_val;
andrewm@0 108 return x;
andrewm@0 109 }