DragonProbe/src/t/tstest.c

68 lines
1.5 KiB
C

#define DBOARD_HAS_TEMPSENSOR
#define VERY_FAKE
#include <stdint.h>
static inline void tempsense_dev_init(void) { }
static inline int16_t tempsense_dev_get_temp(void) { return 42 << 4; }
static inline int16_t tempsense_dev_get_lower(void) { return 0 << 4; }
static inline int16_t tempsense_dev_get_upper(void) { return 75 << 4; }
static inline int16_t tempsense_dev_get_crit (void) { return 80 << 4; }
#include "../tempsensor.c"
static int do_pkt(uint8_t cmd, bool read, uint16_t addr, uint16_t len, uint8_t* buf) {
int rv;
if (cmd & 1) tempsense_do_start();
if (read) {
rv = tempsense_do_read(len, buf);
} else {
rv = tempsense_do_write(len, buf);
}
if (cmd & 2) tempsense_do_stop();
printf("-> %d: %s\n", rv, (rv < 0 || rv != len) ? "nak" : "ack");
return rv;
}
static void pbuf(size_t len, const uint8_t* buf) {
printf("--> ");
size_t i;
for (i = 0; i < len; ++i) {
printf("%02x ", buf[i]);
if ((i & 0xf) == 0xf) printf("%c", '\n');
}
if ((i & 0xf) != 0x0) printf("%c", '\n');
}
int main(int argc, char* argv[]) {
tempsense_init();
tempsense_set_addr(0x18);
// initial probe
uint8_t pk1[1] = {0}; do_pkt(0x05, false, 0x18, 1, pk1);
uint8_t pk2[2]; do_pkt(0x06, true , 0x18, 2, pk2); pbuf(2, pk2);
uint8_t pk3[1] = {1}; do_pkt(0x05, false, 0x18, 1, pk3);
uint8_t pk4[2]; do_pkt(0x06, true , 0x18, 2, pk4); pbuf(2, pk4);
// sensor data get
// out 0x05 cmd5
// in 2byte cmd6
// out 0x04 cmd5
// in 2byte cmd6
// out 0x03 cmd5
// in 2byte cmd6
// out 0x02 cmd5
// in 2byte cmd6
}