示例#1
0
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++;
}
示例#2
0
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
}
示例#3
0
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++;
}
示例#4
0
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);
}