void send_server_data(ota_domain_t domain_id, addr_mode_t addr_mode, uint8_t *addr, uint8_t msg_id, uint8_t *msg, uint16_t len) { uint8_t fcs = 0; uint8_t total_len; uint8_t addr_size; if(NATIVE_ADDR_MODE == addr_mode) { addr_size = NATIVE_ADDR_SIZE; } else { addr_size = EXTENDED_ADDR_SIZE; } total_len = len + 5 + 1 + addr_size; //Seq no + stack id + Domain + command id + msg_id sio2host_putchar(SOF); sio2host_putchar(0x80); //AREQ/ARSP sio2host_putchar((uint8_t)total_len); sio2host_putchar((uint8_t)total_len >> 8); sio2host_putchar(tx_seq_no); sio2host_putchar(STACK_ID); sio2host_putchar(domain_id); sio2host_putchar(0x00); sio2host_putchar(msg_id); sio2host_putchar(addr_mode); sio2host_tx(addr, addr_size); fcs = tx_seq_no ^ STACK_ID ^ domain_id ^ 0x00 ^ msg_id ^ addr_mode; for(uint8_t index = 0; index < addr_size; index++) { fcs ^= *(addr + index); } if(len) { sio2host_tx(msg, len); for(uint8_t index = 0; index < len; index++) { fcs ^= *(msg + index); } } sio2host_putchar(fcs); tx_seq_no++; }
static void send_ack(uint8_t seq_no, uint8_t state) { sio2host_putchar(SOF); sio2host_putchar(state & 0x3F); sio2host_putchar(0x02); sio2host_putchar(0x00); sio2host_putchar(seq_no); sio2host_putchar(STACK_ID); sio2host_putchar(seq_no ^ STACK_ID); //for FCS }
void send_pc_data(ota_domain_t domain_id, uint8_t msg_id, uint8_t *msg, uint16_t len) { uint8_t fcs = 0; uint8_t total_len = len + 5; //Seq no + stack id + Domain + command id + msg_id sio2host_putchar(SOF); sio2host_putchar(0x80); //AREQ/ARSP sio2host_putchar((uint8_t)total_len); sio2host_putchar((uint8_t)total_len >> 8); sio2host_putchar(tx_seq_no); //constant sequence number as of now... sio2host_putchar(STACK_ID); sio2host_putchar(domain_id); sio2host_putchar(COMMON); sio2host_putchar(msg_id); fcs = tx_seq_no ^ STACK_ID ^ domain_id ^ COMMON ^ msg_id; sio2host_tx(msg, len); for(uint8_t index = 0; index < len; index++) { fcs ^= *(msg + index); } sio2host_putchar(fcs); tx_seq_no++; }
static void appSendMessage(uint8_t *data, uint8_t size) { uint8_t cs = 0; sio2host_putchar(0x10); sio2host_putchar(0x02); for (uint8_t i = 0; i < size; i++) { if (data[i] == 0x10) { sio2host_putchar(0x10); cs += 0x10; } sio2host_putchar(data[i]); cs += data[i]; } sio2host_putchar(0x10); sio2host_putchar(0x03); cs += 0x10 + 0x02 + 0x10 + 0x03; sio2host_putchar(cs); }