RS232 control for TVOne products

Dependents:   SPK-DVIMXR

Committer:
tobyspark
Date:
Thu Oct 17 15:49:16 2013 +0000
Revision:
24:4eec37b8387e
Parent:
23:46f42462a183
Resolution Timings - bug fixes; Matrox - support for digital and analogue edition timings of 2048x768

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tobyspark 0:533cfae24a1b 1 // *spark audio-visual
tobyspark 0:533cfae24a1b 2 // RS232 Control for TV-One products
tobyspark 0:533cfae24a1b 3 // Good for 1T-C2-750, others will need some extra work
tobyspark 1:349d6da461df 4
tobyspark 1:349d6da461df 5 /* Copyright (c) 2011 Toby Harris, MIT License
tobyspark 1:349d6da461df 6 *
tobyspark 1:349d6da461df 7 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
tobyspark 1:349d6da461df 8 * and associated documentation files (the "Software"), to deal in the Software without restriction,
tobyspark 1:349d6da461df 9 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
tobyspark 1:349d6da461df 10 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
tobyspark 1:349d6da461df 11 * furnished to do so, subject to the following conditions:
tobyspark 1:349d6da461df 12 *
tobyspark 1:349d6da461df 13 * The above copyright notice and this permission notice shall be included in all copies or
tobyspark 1:349d6da461df 14 * substantial portions of the Software.
tobyspark 1:349d6da461df 15 *
tobyspark 1:349d6da461df 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
tobyspark 1:349d6da461df 17 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
tobyspark 1:349d6da461df 18 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
tobyspark 1:349d6da461df 19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
tobyspark 1:349d6da461df 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
tobyspark 1:349d6da461df 21 */
tobyspark 0:533cfae24a1b 22
tobyspark 0:533cfae24a1b 23 #ifndef SPKTVOne_mBed_h
tobyspark 0:533cfae24a1b 24 #define SPKTVOne_mBed_h
tobyspark 0:533cfae24a1b 25
tobyspark 0:533cfae24a1b 26 #include "spk_tvone.h"
tobyspark 0:533cfae24a1b 27 #include "mbed.h"
tobyspark 0:533cfae24a1b 28
tobyspark 0:533cfae24a1b 29 class SPKTVOne
tobyspark 0:533cfae24a1b 30 {
tobyspark 0:533cfae24a1b 31 public:
tobyspark 0:533cfae24a1b 32 SPKTVOne(PinName txPin, PinName rxPin, PinName signWritePin = NC, PinName signErrorPin = NC, Serial *debugSerial = NULL);
tobyspark 0:533cfae24a1b 33
tobyspark 11:90e5a72a0034 34 enum commandType {writeCommandType = 0, readCommandType = 1};
tobyspark 10:5f398fc9b5c1 35 static const int standardAckLength = 20;
tobyspark 10:5f398fc9b5c1 36
tobyspark 0:533cfae24a1b 37 bool command(uint8_t channel, uint8_t window, int32_t func, int32_t payload);
tobyspark 11:90e5a72a0034 38 bool readCommand(uint8_t channel, uint8_t window, int32_t func, int32_t &payload);
tobyspark 14:da403a01f9ef 39
tobyspark 18:d765b0d9271c 40 struct processorType {int version; int productType; int boardType;};
tobyspark 18:d765b0d9271c 41 processorType getProcessorType();
tobyspark 21:2260dde18dfa 42
tobyspark 23:46f42462a183 43 int getResolution(int device = 0);
tobyspark 21:2260dde18dfa 44 int getEDID();
tobyspark 18:d765b0d9271c 45 bool setResolution(int resolution, int edidSlot);
tobyspark 18:d765b0d9271c 46 bool setHDCPOn(bool state);
tobyspark 23:46f42462a183 47
tobyspark 23:46f42462a183 48 enum aspectType { aspectFit = 1, aspectHFill = 2, aspectVFill = 3, aspect1to1 = 4, aspectSPKFill };
tobyspark 23:46f42462a183 49 aspectType getAspect();
tobyspark 23:46f42462a183 50 bool setAspect(aspectType aspect);
tobyspark 18:d765b0d9271c 51
tobyspark 16:ed8d08386034 52 bool uploadEDID(FILE* file, int edidSlotIndex);
tobyspark 16:ed8d08386034 53 bool uploadImage(FILE* file, int sisIndex);
tobyspark 24:4eec37b8387e 54 bool setMatroxResolutions(bool digitalEdition = true);
tobyspark 14:da403a01f9ef 55
tobyspark 18:d765b0d9271c 56 void setCommandTimeoutPeriod(int millis);
tobyspark 20:ebddf3ddb1f6 57 int getCommandTimeoutPeriod();
tobyspark 18:d765b0d9271c 58 void setCommandMinimumPeriod(int millis);
tobyspark 18:d765b0d9271c 59 void increaseCommandPeriods(int millis);
tobyspark 18:d765b0d9271c 60 void resetCommandPeriods();
tobyspark 14:da403a01f9ef 61
tobyspark 14:da403a01f9ef 62 int millisSinceLastCommandSent();
tobyspark 0:533cfae24a1b 63
tobyspark 0:533cfae24a1b 64 private:
tobyspark 18:d765b0d9271c 65 struct processorType processor;
tobyspark 18:d765b0d9271c 66
tobyspark 11:90e5a72a0034 67 bool command(commandType readWrite, int* ackBuffer, int ackLength, uint8_t channel, uint8_t window, int32_t func, int32_t payload);
tobyspark 16:ed8d08386034 68 bool uploadFile(char command, FILE* file, int dataLength, int index);
tobyspark 14:da403a01f9ef 69
tobyspark 23:46f42462a183 70 bool getResolutionParams(int resStoreNumber, int &horizpx, int &vertpx);
tobyspark 23:46f42462a183 71
tobyspark 11:90e5a72a0034 72 bool set1920x480(int resStoreNumber);
tobyspark 11:90e5a72a0034 73 bool set1600x600(int resStoreNumber);
tobyspark 24:4eec37b8387e 74 bool set2048x768(int resStoreNumber, bool digitalEdition);
tobyspark 0:533cfae24a1b 75
tobyspark 9:42c83cac2f6d 76 Serial *serial;
tobyspark 0:533cfae24a1b 77 Serial *debug;
tobyspark 0:533cfae24a1b 78
tobyspark 18:d765b0d9271c 79 int commandTimeoutPeriod;
tobyspark 18:d765b0d9271c 80 int commandMinimumPeriod;
tobyspark 18:d765b0d9271c 81
tobyspark 14:da403a01f9ef 82 Timer timer;
tobyspark 17:68b9bb89da2b 83 Ticker timerCheckTicker;
tobyspark 17:68b9bb89da2b 84 void timerCheck();
tobyspark 14:da403a01f9ef 85
tobyspark 0:533cfae24a1b 86 DigitalOut *writeDO;
tobyspark 0:533cfae24a1b 87 DigitalOut *errorDO;
tobyspark 0:533cfae24a1b 88 Timeout signErrorTimeout;
tobyspark 0:533cfae24a1b 89 void signErrorOff();
tobyspark 0:533cfae24a1b 90 };
tobyspark 0:533cfae24a1b 91
tobyspark 0:533cfae24a1b 92 #endif