Ejemplo n.º 1
0
static void ICACHE_FLASH_ATTR
protoCompletedCb()
{
	uint16_t crc = 0, argc, len, resp_crc, argn = 0;
	uint8_t *data_ptr;
	PACKET_CMD *packet;
	packet = (PACKET_CMD*)protoRxBuf;

	data_ptr = (uint8_t*)&packet->args ;
	crc = crc16_data((uint8_t*)&packet->cmd, 12, crc);
	argc = packet->argc;

	INFO("CMD: %d, cb: %d, ret: %d, argc: %d\r\n", packet->cmd, packet->callback, packet->_return, packet->argc);

	while(argc--){
		len = *((uint16_t*)data_ptr);
		INFO("Arg[%d], len: %d:", argn++, len);
		crc = crc16_data(data_ptr, 2, crc);
		data_ptr += 2;
		crc = crc16_data(data_ptr, len, crc);
		while(len --){
		  INFO("%02X-", *data_ptr);
		  data_ptr ++;
		}
		INFO("\r\n\r\n");
	}
	resp_crc =  *(uint16_t*)data_ptr;
	INFO("Read CRC: %04X, calculated crc: %04X\r\n", resp_crc, crc);

	if(crc != resp_crc) {

		INFO("ESP: Invalid CRC\r\n");

		INFO("");
		return;
	}
	CMD_Exec(commands, packet);
}
Ejemplo n.º 2
0
// Parse a packet and print info about it
void ICACHE_FLASH_ATTR
CMD_parse_packet(uint8_t *buf, short len) {
  // minimum command length
  if (len < 12) return;

  // init pointers into buffer
  CmdPacket *packet = (CmdPacket*)buf;
  uint8_t *data_ptr = (uint8_t*)&packet->args;
  uint8_t *data_limit = data_ptr+len;
#ifdef CMD_DBG
  uint16_t argn = 0;
  os_printf("CMD: cmd=%d(%s) argc=%d cb=%p ret=%lu\n",
      packet->cmd, cmd_names[packet->cmd], packet->argc, (void *)packet->callback, packet->_return);
#endif

#if 0
  // print out arguments
  uint16_t argc = packet->argc;
  while (data_ptr+2 < data_limit && argc--) {
    short l = *(uint16_t*)data_ptr;
    os_printf("CMD: arg[%d] len=%d:", argn++, l);
    data_ptr += 2;
    while (data_ptr < data_limit && l--) {
      os_printf(" %02X", *data_ptr++);
    }
    os_printf("\n");
  }
#endif

  if (data_ptr <= data_limit) {
    CMD_Exec(commands, packet);
  } else {
#ifdef CMD_DBG
    os_printf("CMD: packet length overrun, parsing arg %d\n", argn-1);
#endif
  }
}