#include <stdio.h>
#include <stdint.h>
#define SLAVE_TIMEOUT_MS 50
#define MSG_BUF_LEN 80
#define make8(v, b) ((b == 0) ? (uint8_t)(v & 0xFF) : (uint8_t)((v >> 8) & 0xFF))
int main(void)
{
uint16_t timeout_timer;
uint16_t fstat;
uint8_t msgbuf[MSG_BUF_LEN];
uint8_t *mbptr;
uint16_t fifo[] = {
0x6857, 0x6E65, 0x6920, 0x206E, 0x6874, 0x2065, 0x6F63, 0x7275,
0x6573, 0x6F20, 0x2066, 0x7568, 0x616D, 0x206E, 0x7665, 0x6E65,
0x7374, 0x202C, 0x7469, 0x6220, 0x6365, 0x6D6F, 0x7365, 0x6E20,
0x6365, 0x7365, 0x6173, 0x7972, 0x2E20, 0x2E2E, 0x0000, 0xFFFF
};
uint16_t *fptr;
for (timeout_timer = SLAVE_TIMEOUT_MS, mbptr = msgbuf, fptr = fifo; (timeout_timer > 0); )
{
fstat = *fptr;
if (fstat != 0xFFFF)
{
fstat = *fptr++;
*mbptr++ = make8(fstat, 0);
*mbptr = make8(fstat, 1);
if (*mbptr++ == 0)
break;
timeout_timer = SLAVE_TIMEOUT_MS;
}
}
printf("msgbuf: %p mbptr: %p delta = %d strlen = %d\n", msgbuf
, mbptr
, mbptr
- msgbuf
, strlen(msgbuf
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCiNkZWZpbmUgU0xBVkVfVElNRU9VVF9NUwk1MAojZGVmaW5lIE1TR19CVUZfTEVOCQkJODAKCiNkZWZpbmUgbWFrZTgodiwgYikgKChiID09IDApID8gKHVpbnQ4X3QpKHYgJiAweEZGKSA6ICh1aW50OF90KSgodiA+PiA4KSAmIDB4RkYpKQoKaW50IG1haW4odm9pZCkKewoJdWludDE2X3QgdGltZW91dF90aW1lcjsKICAgIHVpbnQxNl90IGZzdGF0OwogICAgdWludDhfdCBtc2didWZbTVNHX0JVRl9MRU5dOwogICAgdWludDhfdCAqbWJwdHI7CiAgICB1aW50MTZfdCBmaWZvW10gPSB7IAogICAgCTB4Njg1NywgMHg2RTY1LCAweDY5MjAsIDB4MjA2RSwgMHg2ODc0LCAweDIwNjUsIDB4NkY2MywgMHg3Mjc1LAogICAgCTB4NjU3MywgMHg2RjIwLCAweDIwNjYsIDB4NzU2OCwgMHg2MTZELCAweDIwNkUsIDB4NzY2NSwgMHg2RTY1LAogICAgCTB4NzM3NCwgMHgyMDJDLCAweDc0NjksIDB4NjIyMCwgMHg2MzY1LCAweDZENkYsIDB4NzM2NSwgMHg2RTIwLAogICAgCTB4NjM2NSwgMHg3MzY1LCAweDYxNzMsIDB4Nzk3MiwgMHgyRTIwLCAweDJFMkUsIDB4MDAwMCwgMHhGRkZGCiAgICB9OwogICAgdWludDE2X3QgKmZwdHI7CgogICAgZm9yICh0aW1lb3V0X3RpbWVyID0gU0xBVkVfVElNRU9VVF9NUywgbWJwdHIgPSBtc2didWYsIGZwdHIgPSBmaWZvOyAodGltZW91dF90aW1lciA+IDApOyApCiAgICB7CiAgICAgICAgZnN0YXQgPSAqZnB0cjsKCiAgICAgICAgaWYgKGZzdGF0ICE9IDB4RkZGRikKICAgICAgICB7CiAgICAgICAgICAgIGZzdGF0ID0gKmZwdHIrKzsKICAgICAgICAgICAgKm1icHRyKysgPSBtYWtlOChmc3RhdCwgMCk7CiAgICAgICAgICAgICptYnB0ciAgID0gbWFrZTgoZnN0YXQsIDEpOwoKICAgICAgICAgICAgaWYgKCptYnB0cisrID09IDApCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIHRpbWVvdXRfdGltZXIgPSBTTEFWRV9USU1FT1VUX01TOwogICAgICAgIH0KICAgIH0KCglwcmludGYoIiVzXG4iLCBtc2didWYpOwoJcHJpbnRmKCJtc2didWY6ICVwICBtYnB0cjogJXAgZGVsdGEgPSAlZCBzdHJsZW4gPSAlZFxuIiwKCQkJbXNnYnVmLCBtYnB0ciwgbWJwdHIgLSBtc2didWYsIHN0cmxlbihtc2didWYpKTsKCglyZXR1cm4gMDsKfQo=