Update test cases for X52 library

pull/7/head
nirenjan 2015-11-28 10:04:12 -08:00
parent b5d33226c5
commit 0a541e18ba
2 changed files with 223 additions and 26 deletions

View File

@ -90,6 +90,7 @@ int libx52_set_text(libx52_device *x52, uint8_t line, const char *text, uint8_t
length = X52_MFD_LINE_SIZE;
}
memset(x52->line[line].text, ' ', X52_MFD_LINE_SIZE);
memcpy(x52->line[line].text, text, length);
x52->line[line].length = length;
set_bit(&x52->update_mask, X52_BIT_MFD_LINE1 + line);

View File

@ -7,44 +7,240 @@
#include "libx52.h"
typedef void (*test_func)(libx52_device *dev, int step);
/* Run test initializations */
static void test_cleanup(libx52_device *dev)
{
libx52_set_brightness(dev, 1, 127);
libx52_set_brightness(dev, 0, 127);
/* Set the default LED states */
libx52_set_led(dev, X52_LED_FIRE, 1);
libx52_set_led(dev, X52_LED_A_RED, 0);
libx52_set_led(dev, X52_LED_A_GREEN, 1);
libx52_set_led(dev, X52_LED_B_RED, 0);
libx52_set_led(dev, X52_LED_B_GREEN, 1);
libx52_set_led(dev, X52_LED_D_RED, 0);
libx52_set_led(dev, X52_LED_D_GREEN, 1);
libx52_set_led(dev, X52_LED_E_RED, 0);
libx52_set_led(dev, X52_LED_E_GREEN, 1);
libx52_set_led(dev, X52_LED_T1_RED, 0);
libx52_set_led(dev, X52_LED_T1_GREEN, 1);
libx52_set_led(dev, X52_LED_T2_RED, 0);
libx52_set_led(dev, X52_LED_T2_GREEN, 1);
libx52_set_led(dev, X52_LED_T3_RED, 0);
libx52_set_led(dev, X52_LED_T3_GREEN, 1);
libx52_set_led(dev, X52_LED_POV_RED, 0);
libx52_set_led(dev, X52_LED_POV_GREEN, 1);
libx52_set_led(dev, X52_LED_I_RED, 0);
libx52_set_led(dev, X52_LED_I_GREEN, 1);
libx52_set_led(dev, X52_LED_THROTTLE, 1);
/* Shift/Blink Off */
libx52_set_shift(dev, 0);
libx52_set_blink(dev, 0);
/* Default Text */
libx52_set_text(dev, 0, " Saitek X52 Pro", 15);
libx52_set_text(dev, 1, " Flight ", 15);
libx52_set_text(dev, 2, " Control System", 15);
}
static void test_mfd_display(libx52_device *dev, int step)
{
uint32_t j;
char str[16];
char c;
libx52_set_text(dev, 1, "0123456789ABCDEF", 16);
/* Print line 0 - the hex of the step number */
c = step;
c += (c < 10) ? 0x30 : 0x37;
for (j = 0; j < 16; j++) {
str[j] = c;
}
libx52_set_text(dev, 0, str, 16);
for (j = 0; j < 16; j++) {
str[j] = (step << 4) + j;
}
libx52_set_text(dev, 2, str, 16);
}
/* Test the LEDs on the panel */
static void test_leds(libx52_device *dev, int step)
{
int led;
const char *state_map[] = {
NULL,
"A",
"B",
"D",
"E",
"T1",
"T2",
"T3",
"POV",
"I"
};
switch (step) {
case 0:
/* Turn off Fire LED */
libx52_set_text(dev, 0, "LED Test", 8);
libx52_set_text(dev, 1, "Fire", 4);
libx52_set_text(dev, 2, "OFF", 3);
libx52_set_led(dev, X52_LED_FIRE, 0);
break;
case 1:
/* Turn on Fire LED */
libx52_set_text(dev, 1, "Fire", 4);
libx52_set_text(dev, 2, "ON", 2);
libx52_set_led(dev, X52_LED_FIRE, 1);
break;
case 2:
/* Turn off Throttle LED */
libx52_set_text(dev, 1, "Throttle", 8);
libx52_set_text(dev, 2, "OFF", 3);
libx52_set_led(dev, X52_LED_THROTTLE, 0);
break;
case 3:
/* Turn on Throttle LED */
libx52_set_text(dev, 1, "Throttle", 8);
libx52_set_text(dev, 2, "ON", 2);
libx52_set_led(dev, X52_LED_THROTTLE, 1);
break;
default: {
led = step / 4;
libx52_set_text(dev, 1, state_map[led], strlen(state_map[led]));
led = led * 2;
switch (step % 4) {
case 0:
libx52_set_text(dev, 2, "OFF", 3);
libx52_set_led(dev, led, 0);
libx52_set_led(dev, led + 1, 0);
break;
case 1:
libx52_set_text(dev, 2, "RED", 3);
libx52_set_led(dev, led, 1);
break;
case 2:
libx52_set_text(dev, 2, "AMBER", 5);
libx52_set_led(dev, led + 1, 1);
break;
case 3:
libx52_set_text(dev, 2, "GREEN", 5);
libx52_set_led(dev, led, 0);
break;
}
}
}
}
static void test_blinkenlichts(libx52_device *dev, int step)
{
switch (step) {
case 0:
libx52_set_text(dev, 0, "Blinkenlichts", 13);
libx52_set_text(dev, 1, "Shift Indicator", 15);
libx52_set_text(dev, 2, "ON", 2);
libx52_set_shift(dev, 1);
break;
case 1:
libx52_set_text(dev, 2, "OFF", 3);
libx52_set_shift(dev, 0);
break;
case 2:
libx52_set_text(dev, 1, "Blink Indicator", 15);
libx52_set_text(dev, 2, "ON", 2);
libx52_set_blink(dev, 1);
break;
case 3:
libx52_set_text(dev, 2, "OFF", 3);
libx52_set_blink(dev, 0);
break;
}
}
static void test_brightness(libx52_device *dev, int step)
{
char line1[16];
char line2[16];
int len1;
int len2;
if (step == 0) {
libx52_set_text(dev, 0, "Brightness", 10);
}
len1 = snprintf(line1, sizeof(line1), "MFD: %d", step);
len2 = snprintf(line2, sizeof(line2), "LED: %d", step);
libx52_set_text(dev, 1, line1, len1);
libx52_set_text(dev, 2, line2, len2);
libx52_set_brightness(dev, 0, step);
libx52_set_brightness(dev, 1, step);
}
struct test_case {
test_func test;
int test_steps;
};
static struct test_case cases[] = {
{ test_mfd_display, 16 },
{ test_leds, 40 },
{ test_blinkenlichts, 4 },
{ test_brightness, 129 },
{ NULL, 0 } /* Must be the last entry */
};
int main()
{
uint32_t i;
uint32_t j;
char str[16];
char c;
char c;
struct test_case *tc;
libx52_device *dev;
dev = libx52_init();
libx52_set_brightness(dev, 1, 127);
libx52_set_brightness(dev, 0, 127);
libx52_set_led(dev, X52_LED_FIRE, 1);
libx52_set_text(dev, 1, "0123456789ABCDEF", 16);
for (i = 0; i < 256; i+=16) {
c = i >> 4;
c += (c < 10) ? 0x30 : 0x37;
for (j = 0; j < 16; j++) {
str[j] = c;
tc = &cases[0];
do {
for (i = 0; i < tc->test_steps; i++) {
if (tc->test) {
(*tc->test)(dev, i);
}
libx52_update(dev);
usleep(250000);
}
libx52_set_text(dev, 0, str, 16);
for (j = 0; j < 16; j++) {
str[j] = i + j;
}
libx52_set_text(dev, 2, str, 16);
tc++;
/* Reset the X52 */
test_cleanup(dev);
libx52_update(dev);
sleep(1);
}
libx52_set_text(dev, 0, " Saitek X52 Pro ", 16);
libx52_set_text(dev, 1, " Flight ", 16);
libx52_set_text(dev, 2, " Control System ", 16);
libx52_update(dev);
} while (tc->test);
libx52_exit(dev);
return 0;