From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51619) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUjUT-0006vf-E9 for qemu-devel@nongnu.org; Mon, 31 Mar 2014 17:11:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WUjUB-0006J7-Fu for qemu-devel@nongnu.org; Mon, 31 Mar 2014 17:11:33 -0400 Received: from cantor2.suse.de ([195.135.220.15]:49331 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WUjUB-0006Ij-5R for qemu-devel@nongnu.org; Mon, 31 Mar 2014 17:11:15 -0400 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Mon, 31 Mar 2014 23:11:02 +0200 Message-Id: <1396300262-10430-17-git-send-email-afaerber@suse.de> In-Reply-To: <1396300262-10430-1-git-send-email-afaerber@suse.de> References: <1396300262-10430-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL for-2.0 16/16] tmp105-test: Test QOM property and precision List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?UTF-8?q?Andreas=20F=C3=A4rber?= From: Paolo Bonzini This adds a regression test for commit efdf6a56a7c73753dd135ed085a223a119b5d805 (tmp105: Read temperature in milli-celsius). Signed-off-by: Paolo Bonzini Signed-off-by: Andreas F=C3=A4rber --- tests/tmp105-test.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++= ++++-- 1 file changed, 76 insertions(+), 3 deletions(-) diff --git a/tests/tmp105-test.c b/tests/tmp105-test.c index 4e640b4..15ddaf3 100644 --- a/tests/tmp105-test.c +++ b/tests/tmp105-test.c @@ -20,6 +20,14 @@ =20 static I2CAdapter *i2c; =20 +static uint16_t tmp105_get8(I2CAdapter *i2c, uint8_t addr, uint8_t reg) +{ + uint8_t resp[1]; + i2c_send(i2c, addr, ®, 1); + i2c_recv(i2c, addr, resp, 1); + return resp[0]; +} + static uint16_t tmp105_get16(I2CAdapter *i2c, uint8_t addr, uint8_t reg) { uint8_t resp[2]; @@ -56,16 +64,81 @@ static void tmp105_set16(I2CAdapter *i2c, uint8_t add= r, uint8_t reg, g_assert_cmphex(resp[1], =3D=3D, cmd[2]); } =20 +static int qmp_tmp105_get_temperature(const char *id) +{ + QDict *response; + int ret; =20 + response =3D qmp("{ 'execute': 'qom-get', 'arguments': { 'path': '%s= ', " + "'property': 'temperature' } }", id); + g_assert(qdict_haskey(response, "return")); + ret =3D qdict_get_int(response, "return"); + QDECREF(response); + return ret; +} + +static void qmp_tmp105_set_temperature(const char *id, int value) +{ + QDict *response; + + response =3D qmp("{ 'execute': 'qom-set', 'arguments': { 'path': '%s= ', " + "'property': 'temperature', 'value': %d } }", id, val= ue); + g_assert(qdict_haskey(response, "return")); + QDECREF(response); +} + +#define TMP105_PRECISION (1000/16) static void send_and_receive(void) { uint16_t value; =20 - value =3D tmp105_get16(i2c, TMP105_TEST_ADDR, TMP105_REG_TEMPERATURE= ); + value =3D qmp_tmp105_get_temperature(TMP105_TEST_ID); g_assert_cmpuint(value, =3D=3D, 0); =20 - /* reset */ - tmp105_set8(i2c, TMP105_TEST_ADDR, TMP105_REG_CONFIG, 0); + value =3D tmp105_get16(i2c, TMP105_TEST_ADDR, TMP105_REG_TEMPERATURE= ); + g_assert_cmphex(value, =3D=3D, 0); + + qmp_tmp105_set_temperature(TMP105_TEST_ID, 20000); + value =3D qmp_tmp105_get_temperature(TMP105_TEST_ID); + g_assert_cmpuint(value, =3D=3D, 20000); + + value =3D tmp105_get16(i2c, TMP105_TEST_ADDR, TMP105_REG_TEMPERATURE= ); + g_assert_cmphex(value, =3D=3D, 0x1400); + + qmp_tmp105_set_temperature(TMP105_TEST_ID, 20938); /* 20 + 15/16 */ + value =3D qmp_tmp105_get_temperature(TMP105_TEST_ID); + g_assert_cmpuint(value, >=3D, 20938 - TMP105_PRECISION/2); + g_assert_cmpuint(value, <, 20938 + TMP105_PRECISION/2); + + /* Set config */ + tmp105_set8(i2c, TMP105_TEST_ADDR, TMP105_REG_CONFIG, 0x60); + value =3D tmp105_get8(i2c, TMP105_TEST_ADDR, TMP105_REG_CONFIG); + g_assert_cmphex(value, =3D=3D, 0x60); + + value =3D tmp105_get16(i2c, TMP105_TEST_ADDR, TMP105_REG_TEMPERATURE= ); + g_assert_cmphex(value, =3D=3D, 0x14f0); + + /* Set precision to 9, 10, 11 bits. */ + tmp105_set8(i2c, TMP105_TEST_ADDR, TMP105_REG_CONFIG, 0x00); + value =3D tmp105_get16(i2c, TMP105_TEST_ADDR, TMP105_REG_TEMPERATURE= ); + g_assert_cmphex(value, =3D=3D, 0x1480); + + tmp105_set8(i2c, TMP105_TEST_ADDR, TMP105_REG_CONFIG, 0x20); + value =3D tmp105_get16(i2c, TMP105_TEST_ADDR, TMP105_REG_TEMPERATURE= ); + g_assert_cmphex(value, =3D=3D, 0x14c0); + + tmp105_set8(i2c, TMP105_TEST_ADDR, TMP105_REG_CONFIG, 0x40); + value =3D tmp105_get16(i2c, TMP105_TEST_ADDR, TMP105_REG_TEMPERATURE= ); + g_assert_cmphex(value, =3D=3D, 0x14e0); + + /* stored precision remains the same */ + value =3D qmp_tmp105_get_temperature(TMP105_TEST_ID); + g_assert_cmpuint(value, >=3D, 20938 - TMP105_PRECISION/2); + g_assert_cmpuint(value, <, 20938 + TMP105_PRECISION/2); + + tmp105_set8(i2c, TMP105_TEST_ADDR, TMP105_REG_CONFIG, 0x60); + value =3D tmp105_get16(i2c, TMP105_TEST_ADDR, TMP105_REG_TEMPERATURE= ); + g_assert_cmphex(value, =3D=3D, 0x14f0); =20 tmp105_set16(i2c, TMP105_TEST_ADDR, TMP105_REG_T_LOW, 0x1234); tmp105_set16(i2c, TMP105_TEST_ADDR, TMP105_REG_T_HIGH, 0x4231); --=20 1.8.4.5