|
- /*
- * LegoPowerFunctionsTest: LEGO Power Functions Tests
- * Copyright (c) 2016, 2017 Philipp Henkel
- */
-
- #include <ir_Lego_PF_BitStreamEncoder.h>
-
- void setup() {
- Serial.begin(9600);
- delay(1000); // wait for reset triggered by serial connection
- runBitStreamEncoderTests();
- }
-
- void loop() {
- }
-
- void runBitStreamEncoderTests() {
- Serial.println();
- Serial.println("BitStreamEncoder Tests");
- static LegoPfBitStreamEncoder bitStreamEncoder;
- testStartBit(bitStreamEncoder);
- testLowBit(bitStreamEncoder);
- testHighBit(bitStreamEncoder);
- testMessageBitCount(bitStreamEncoder);
- testMessageBitCountRepeat(bitStreamEncoder);
- testMessage407(bitStreamEncoder);
- testMessage407Repeated(bitStreamEncoder);
- testGetChannelId1(bitStreamEncoder);
- testGetChannelId2(bitStreamEncoder);
- testGetChannelId3(bitStreamEncoder);
- testGetChannelId4(bitStreamEncoder);
- testGetMessageLengthAllHigh(bitStreamEncoder);
- testGetMessageLengthAllLow(bitStreamEncoder);
- }
-
- void logTestResult(bool testPassed) {
- if (testPassed) {
- Serial.println("OK");
- }
- else {
- Serial.println("FAIL ############");
- }
- }
-
- void testStartBit(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testStartBit ");
- bitStreamEncoder.reset(0, false);
- int startMark = bitStreamEncoder.getMarkDuration();
- int startPause = bitStreamEncoder.getPauseDuration();
- logTestResult(startMark == 158 && startPause == 1184-158);
- }
-
- void testLowBit(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testLowBit ");
- bitStreamEncoder.reset(0, false);
- bitStreamEncoder.next();
- int lowMark = bitStreamEncoder.getMarkDuration();
- int lowPause = bitStreamEncoder.getPauseDuration();
- logTestResult(lowMark == 158 && lowPause == 421-158);
- }
-
- void testHighBit(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testHighBit ");
- bitStreamEncoder.reset(0xFFFF, false);
- bitStreamEncoder.next();
- int highMark = bitStreamEncoder.getMarkDuration();
- int highPause = bitStreamEncoder.getPauseDuration();
- logTestResult(highMark == 158 && highPause == 711-158);
- }
-
- void testMessageBitCount(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testMessageBitCount ");
- bitStreamEncoder.reset(0xFFFF, false);
- int bitCount = 1;
- while (bitStreamEncoder.next()) {
- bitCount++;
- }
- logTestResult(bitCount == 18);
- }
-
- boolean check(LegoPfBitStreamEncoder& bitStreamEncoder, unsigned long markDuration, unsigned long pauseDuration) {
- bool result = true;
- result = result && bitStreamEncoder.getMarkDuration() == markDuration;
- result = result && bitStreamEncoder.getPauseDuration() == pauseDuration;
- return result;
- }
-
- boolean checkNext(LegoPfBitStreamEncoder& bitStreamEncoder, unsigned long markDuration, unsigned long pauseDuration) {
- bool result = bitStreamEncoder.next();
- result = result && check(bitStreamEncoder, markDuration, pauseDuration);
- return result;
- }
-
- boolean checkDataBitsOfMessage407(LegoPfBitStreamEncoder& bitStreamEncoder) {
- bool result = true;
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 553);
- result = result && checkNext(bitStreamEncoder, 158, 553);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 553);
- result = result && checkNext(bitStreamEncoder, 158, 263);
- result = result && checkNext(bitStreamEncoder, 158, 553);
- result = result && checkNext(bitStreamEncoder, 158, 553);
- result = result && checkNext(bitStreamEncoder, 158, 553);
- return result;
- }
-
- void testMessage407(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testMessage407 ");
- bitStreamEncoder.reset(407, false);
- bool result = true;
- result = result && check(bitStreamEncoder, 158, 1026);
- result = result && checkDataBitsOfMessage407(bitStreamEncoder);
- result = result && checkNext(bitStreamEncoder, 158, 1026);
- result = result && !bitStreamEncoder.next();
- logTestResult(result);
- }
-
- void testMessage407Repeated(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testMessage407Repeated ");
- bitStreamEncoder.reset(407, true);
- bool result = true;
- result = result && check(bitStreamEncoder, 158, 1026);
- result = result && checkDataBitsOfMessage407(bitStreamEncoder);
- result = result && checkNext(bitStreamEncoder, 158, 1026L + 5L * 16000L - 10844L);
- result = result && checkNext(bitStreamEncoder, 158, 1026);
- result = result && checkDataBitsOfMessage407(bitStreamEncoder);
- result = result && checkNext(bitStreamEncoder, 158, 1026L + 5L * 16000L - 10844L);
- result = result && checkNext(bitStreamEncoder, 158, 1026);
- result = result && checkDataBitsOfMessage407(bitStreamEncoder);
- result = result && checkNext(bitStreamEncoder, 158, 1026L + 8L * 16000L - 10844L);
- result = result && checkNext(bitStreamEncoder, 158, 1026);
- result = result && checkDataBitsOfMessage407(bitStreamEncoder);
- result = result && checkNext(bitStreamEncoder, 158, 1026L + 8L * 16000L - 10844L);
- result = result && checkNext(bitStreamEncoder, 158, 1026);
- result = result && checkDataBitsOfMessage407(bitStreamEncoder);
- result = result && checkNext(bitStreamEncoder, 158, 1026);
- result = result && !bitStreamEncoder.next();
- logTestResult(result);
- }
-
- void testMessageBitCountRepeat(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testMessageBitCountRepeat ");
- bitStreamEncoder.reset(0xFFFF, true);
- int bitCount = 1;
- while (bitStreamEncoder.next()) {
- bitCount++;
- }
- logTestResult(bitCount == 5*18);
- }
-
- void testGetChannelId1(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testGetChannelId1 ");
- bitStreamEncoder.reset(407, false);
- logTestResult(bitStreamEncoder.getChannelId() == 1);
- }
-
- void testGetChannelId2(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testGetChannelId2 ");
- bitStreamEncoder.reset(4502, false);
- logTestResult(bitStreamEncoder.getChannelId() == 2);
- }
-
- void testGetChannelId3(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testGetChannelId3 ");
- bitStreamEncoder.reset(8597, false);
- logTestResult(bitStreamEncoder.getChannelId() == 3);
- }
-
- void testGetChannelId4(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testGetChannelId4 ");
- bitStreamEncoder.reset(12692, false);
- logTestResult(bitStreamEncoder.getChannelId() == 4);
- }
-
- void testGetMessageLengthAllHigh(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testGetMessageLengthAllHigh ");
- bitStreamEncoder.reset(0xFFFF, false);
- logTestResult(bitStreamEncoder.getMessageLength() == 13744);
- }
-
- void testGetMessageLengthAllLow(LegoPfBitStreamEncoder& bitStreamEncoder) {
- Serial.print(" testGetMessageLengthAllLow ");
- bitStreamEncoder.reset(0x0, false);
- logTestResult(bitStreamEncoder.getMessageLength() == 9104);
- }
|