Statistics
| Branch: | Revision:

root / tests / tmp105-test.c @ f53ec699

History | View | Annotate | Download (1.7 kB)

1
/*
2
 * QTest testcase for the TMP105 temperature sensor
3
 *
4
 * Copyright (c) 2012 Andreas Färber
5
 *
6
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
7
 * See the COPYING file in the top-level directory.
8
 */
9
#include "libqtest.h"
10
#include "libqos/i2c.h"
11
#include "hw/misc/tmp105_regs.h"
12

    
13
#include <glib.h>
14

    
15
#define OMAP2_I2C_1_BASE 0x48070000
16

    
17
#define N8X0_ADDR 0x48
18

    
19
static I2CAdapter *i2c;
20
static uint8_t addr;
21

    
22
static void send_and_receive(void)
23
{
24
    uint8_t cmd[3];
25
    uint8_t resp[2];
26

    
27
    cmd[0] = TMP105_REG_TEMPERATURE;
28
    i2c_send(i2c, addr, cmd, 1);
29
    i2c_recv(i2c, addr, resp, 2);
30
    g_assert_cmpuint(((uint16_t)resp[0] << 8) | resp[1], ==, 0);
31

    
32
    cmd[0] = TMP105_REG_CONFIG;
33
    cmd[1] = 0x0; /* matches the reset value */
34
    i2c_send(i2c, addr, cmd, 2);
35
    i2c_recv(i2c, addr, resp, 1);
36
    g_assert_cmphex(resp[0], ==, cmd[1]);
37

    
38
    cmd[0] = TMP105_REG_T_LOW;
39
    cmd[1] = 0x12;
40
    cmd[2] = 0x34;
41
    i2c_send(i2c, addr, cmd, 3);
42
    i2c_recv(i2c, addr, resp, 2);
43
    g_assert_cmphex(resp[0], ==, cmd[1]);
44
    g_assert_cmphex(resp[1], ==, cmd[2]);
45

    
46
    cmd[0] = TMP105_REG_T_HIGH;
47
    cmd[1] = 0x42;
48
    cmd[2] = 0x31;
49
    i2c_send(i2c, addr, cmd, 3);
50
    i2c_recv(i2c, addr, resp, 2);
51
    g_assert_cmphex(resp[0], ==, cmd[1]);
52
    g_assert_cmphex(resp[1], ==, cmd[2]);
53
}
54

    
55
int main(int argc, char **argv)
56
{
57
    QTestState *s = NULL;
58
    int ret;
59

    
60
    g_test_init(&argc, &argv, NULL);
61

    
62
    s = qtest_start("-display none -machine n800");
63
    i2c = omap_i2c_create(OMAP2_I2C_1_BASE);
64
    addr = N8X0_ADDR;
65

    
66
    qtest_add_func("/tmp105/tx-rx", send_and_receive);
67

    
68
    ret = g_test_run();
69

    
70
    if (s) {
71
        qtest_quit(s);
72
    }
73
    g_free(i2c);
74

    
75
    return ret;
76
}