Esempio n. 1
0
File: main.c Progetto: wuwx/simba
static int test_read_unescape(struct harness_t *harness_p)
{
    struct xbee_frame_t frame;
    uint8_t buf[] = {
        0x7e, 0x00, 0x02, 0x23, 0x7d, 0x31, 0xcb
    };

    /* Prepare a frame from the XBee module where 0x7d 0x31 will be
       unescaped to 0x11. */
    harness_mock_write("chan_read(): return (buf_p)", &buf[0], 1);
    harness_mock_write("chan_read(): return (buf_p)", &buf[1], 1);
    harness_mock_write("chan_read(): return (buf_p)", &buf[2], 1);
    harness_mock_write("chan_read(): return (buf_p)", &buf[3], 1);
    harness_mock_write("chan_read(): return (buf_p)", &buf[4], 1);
    harness_mock_write("chan_read(): return (buf_p)", &buf[5], 1);
    harness_mock_write("chan_read(): return (buf_p)", &buf[6], 1);

    BTASSERT(xbee_read(&xbee, &frame) == 0);

    /* Validate the read frame. */
    BTASSERTI(frame.type, ==, 0x23);
    BTASSERTI(frame.data.buf[0], ==, 0x11);
    BTASSERTI(frame.data.size, ==, 1);

    return (0);
}
Esempio n. 2
0
int main(int argc, char ** argv)
{
	xbee_open((char *)PORT);

	//char * buf =  "\x7E\x00\x04\x08\x01\x4D\x59\x50";

	//char * buf = "\x7E\x00\x10\x10\x01\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x22\x44\x8A";
	//char * buf = "\x7E\x00\x04\x08\x01\x4A\x4E\x5E";
	//char * buf = "\x7E\x00\x04\x08\x01\x57\x52\x4D";
	//write(xbee->fd, buf, 8); 
	//
	//xbee_send_data("\x22", 1, 0, 0);
	
	//struct at_command * at = malloc(sizeof(struct xbee_atcommand));
	//at->at_cmd = "MY";
	//at->at_cmd = 0x4D59;

	xbee_send_atcommand("MY", "", 0);
	//xbee_send_atwr(xbee->fd, "JN", "\x01", 0);

	struct xbee_rawframe * frame = malloc(sizeof(struct xbee_rawframe));
	xbee_read(frame);

	xbee_print_frame((uint8_t *)frame);

	free(frame);
	
	
	/* Closing file descriptor */
	xbee_close();
	return 0;
}
Esempio n. 3
0
int xbee_api_read_frame(int fd)
{
	fprintf(stderr, "xbee_api_read_frame\n");
	uint8_t * buf = (uint8_t *)malloc(65535);
	
	struct xbee_api_head * api_head = (struct xbee_api_head *)buf;
	api_head->start_delim = 0x00;	
	int ret = 0;
	bool read_correct_frame = false;
	
	while(!read_correct_frame)
	{

		fprintf(stderr, "Trying to read correct frame\n");
		while(api_head->start_delim != 0x7e)
		{
			ret = xbee_read(fd, (uint8_t *)&(api_head->start_delim), 1);
			fprintf(stderr, "Read start delimiter %02x\n", api_head->start_delim);
		}
		fprintf(stderr, "Read start delimiter\n");

	
		ret = xbee_read(fd, (uint8_t *)&(api_head->length), sizeof(api_head->length));
		uint16_t payload_length = be16toh(api_head->length);
		fprintf(stderr, "Read %d length\n", payload_length);
		
		ret = xbee_read(fd, (uint8_t  *)&(api_head->type), payload_length);
		fprintf(stderr, "Read payload\n");
	
		uint8_t * payload = (uint8_t *)(buf + sizeof(struct xbee_api_head));
		struct xbee_api_checksum * api_checksum = (struct xbee_api_checksum *)(buf + sizeof(struct xbee_api_head) + payload_length);
		ret = xbee_read(fd, (uint8_t *)&(api_checksum), sizeof(struct xbee_api_checksum));
		fprintf(stderr, "Read checksum\n");

		uint8_t my_checksum = xbee_api_calc_checksum(&(api_head->type), payload_length + 1);

		if(my_checksum == api_checksum->checksum)
		{
			fprintf(stderr, "Checksum incorrect!\n");
			continue;
		}
		read_correct_frame = true;

		if(api_head->type == xbee_frametype_tx_status)
		{
			xbee_api_tx_status(fd, payload, payload_length - 1);
		}	
		else if(api_head->type == xbee_frametype_rx_packet)
		{
			xbee_api_rx_packet(fd, payload, payload_length - 1);
		}
		else if(api_head->type == xbee_frametype_at_cmd_response)
		{
			xbee_api_at_cmd_response(fd, payload, payload_length -1);
		}
		else
		{
			fprintf(stderr, "Read unknown frame of type %02x\n", api_head->type);
			read_correct_frame = false;
		
		}
	}
	return 0;		
}