Я правильно понимаю, что в inbuf мы кладем 5 байт адреса, вместе с клиентским, из пакета? Т.е. 0x5444086f41 ?Выше неверно - биты не в ту сторону LSB...MSB
C:unit16_t decode_sn(uint16_t s) { int i = 7; uint16_t x = 0; s >>= 1; while(i--) { x <<= 1; x |= s & 1; s >>= 1; } s >>= 1; i = 7; while(i--) { x <<= 1; x |= s & 1; s >>= 1; } return x; }
uint8_t inpbuf[5] = {0x54, 0x44, 0x08, 0x6f, 0x41};
OTA mode disabled. MCU boot from address: 0x8000
hhdlc: 0x112A, lhdlc: 0x3B10, cladr: 0x100
0x5444=101010001000100{0x54, 0x44, 0x08, 0x6f, 0x41}
А мне не это нужно Как разложить число в пакете я разберусь, там в принципе ничего заумного. Мне нужно понять, как они преобразовывают серийный номер 21021839 (dec) к двум числам 5410 (dec) и 567 (dec).В примере (на картинке) дан код UHDLC: 0x1234=0001001000110100b
Младшие 7 бит: 0110100b
Старшие 7 бит: 0100100b
Собираем: к каждым 7 битам добавим 1 бит равный 0 справа:
Итого: 0100100001101000b
Получаем аналогичный итог с картинкой.
А это неизвестно - что угодно может быть Может его ХОR с чем-тоА мне не это нужно Как разложить число в пакете я разберусь, там в принципе ничего заумного. Мне нужно понять, как они преобразовывают серийный номер 21021839 (dec) к двум числам 5410 (dec) и 567 (dec).
unit8_t inpbuf[5];
unit8_t *p = inpbuf;
unit16_t x;
unit16_t hhdlc, lhdlc, cladr;
hhdlc = ((*p++)>>1)<<7;
hhdlc |= (*p++)>>1;
lhdlc = ((*p++)>>1)<<7;
lhdlc |= (*p++)>>1;
cladr = (*p)>>1;
Ну и хрен с ним. Хотел все по феншую, будет как обычно )А это неизвестно - что угодно может быть Может его ХОR с чем-то
А буфер примерно так:
C:unit8_t inpbuf[5]; unit8_t *p = inpbuf; unit16_t x; unit16_t hhdlc, lhdlc, cladr; hhdlc = ((*p++)>>1)<<7; hhdlc |= (*p++)>>1; lhdlc = ((*p++)>>1)<<7; lhdlc |= (*p++)>>1; cladr = (*p)>>1;
Я в этом не очень ...Есть же какая-то программа - в disasm её...
_attribute_ram_code_ __attribute__((optimize("-Os"))) int read_sensor_cb(void) {
uint32_t _temp, i = 10;
uint8_t reg_data[4];
if (sensor_i2c_addr != 0) {
while(i--) {
if (read_i2c_bytes(sensor_i2c_addr, reg_data, sizeof(reg_data)) == 0) {
_temp = (reg_data[0] << 8) | reg_data[1];
measured_data.temp = ((uint32_t)(_temp * 16500) >> 16) - 4000 + cfg.temp_offset * 10; // x 0.01 C
_temp = (reg_data[2] << 8) | reg_data[3];
measured_data.humi = ((uint32_t)(_temp * 10000) >> 16) + cfg.humi_offset * 10; // x 0.01 %
if (measured_data.humi < 0) measured_data.humi = 0;
else if (measured_data.humi > 9999) measured_data.humi = 9999;
send_i2c_byte(sensor_i2c_addr, CHT8305_REG_TMP); // start measure T/H
return 1;
}
}
}
return 0;
}
Прошил на прошлой неделе 3001-0102 с TelinkMiFlasher.html. Уже появились обновления.Zigbee прошивка для Xiaomi LYWSD03MMC почти готова (включена в TelinkMiFlasher.html).
А от куда он возьмет файл для прошивки?По zigbee при попытке обновления НА говорит " No image available for imageType `522` "