Publishing for Biomimetics.

Dependencies:   CRC MODDMA MODSERIAL MPU6050IMU PID QEI mbed-rtos mbed-src

Committer:
abuchan
Date:
Tue May 31 17:04:59 2016 +0000
Revision:
0:8cfa73bb68e4
Publishing for Biomimetics.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abuchan 0:8cfa73bb68e4 1 #ifndef PACKET_PARSER_H
abuchan 0:8cfa73bb68e4 2 #define PACKET_PARSER_H
abuchan 0:8cfa73bb68e4 3
abuchan 0:8cfa73bb68e4 4 #include "mbed.h"
abuchan 0:8cfa73bb68e4 5
abuchan 0:8cfa73bb68e4 6 #include "MODDMA.h"
abuchan 0:8cfa73bb68e4 7 #include "MODSERIAL.h"
abuchan 0:8cfa73bb68e4 8 #include "rtos.h"
abuchan 0:8cfa73bb68e4 9 #include "lib_crc.h"
abuchan 0:8cfa73bb68e4 10
abuchan 0:8cfa73bb68e4 11 #include "protocol.h"
abuchan 0:8cfa73bb68e4 12
abuchan 0:8cfa73bb68e4 13 /**
abuchan 0:8cfa73bb68e4 14 * Defines the number of packets in the incoming and outgoing buffers.
abuchan 0:8cfa73bb68e4 15 */
abuchan 0:8cfa73bb68e4 16 #define PACKET_BUFFER_LENGTH 4
abuchan 0:8cfa73bb68e4 17
abuchan 0:8cfa73bb68e4 18 /**
abuchan 0:8cfa73bb68e4 19 * Thread flag to start work.
abuchan 0:8cfa73bb68e4 20 */
abuchan 0:8cfa73bb68e4 21 #define START_THREAD_FLAG (1<<0)
abuchan 0:8cfa73bb68e4 22 #define DMA_COMPLETE_FLAG (1<<1)
abuchan 0:8cfa73bb68e4 23
abuchan 0:8cfa73bb68e4 24 class PacketParser {
abuchan 0:8cfa73bb68e4 25
abuchan 0:8cfa73bb68e4 26 public:
abuchan 0:8cfa73bb68e4 27
abuchan 0:8cfa73bb68e4 28 /**
abuchan 0:8cfa73bb68e4 29 * Constructor.
abuchan 0:8cfa73bb68e4 30 *
abuchan 0:8cfa73bb68e4 31 * Creates a packet parsing protocol on the USB serial connection.
abuchan 0:8cfa73bb68e4 32 *
abuchan 0:8cfa73bb68e4 33 */
abuchan 0:8cfa73bb68e4 34 PacketParser(uint32_t baudrate, PinName tx_pin, PinName rx_pin, PinName tx_led, PinName rx_led);
abuchan 0:8cfa73bb68e4 35
abuchan 0:8cfa73bb68e4 36 /**
abuchan 0:8cfa73bb68e4 37 * Get a pointer to the next received packet, or NULL if there is no packet.
abuchan 0:8cfa73bb68e4 38 */
abuchan 0:8cfa73bb68e4 39 packet_union_t* get_received_packet(void);
abuchan 0:8cfa73bb68e4 40
abuchan 0:8cfa73bb68e4 41 /**
abuchan 0:8cfa73bb68e4 42 * Return a received packet to the packet pool. Must be called after using
abuchan 0:8cfa73bb68e4 43 * a packet from get_received_packet.
abuchan 0:8cfa73bb68e4 44 *
abuchan 0:8cfa73bb68e4 45 * @param packet - pointer to packet to be freed.
abuchan 0:8cfa73bb68e4 46 */
abuchan 0:8cfa73bb68e4 47 void free_received_packet(packet_union_t* packet);
abuchan 0:8cfa73bb68e4 48
abuchan 0:8cfa73bb68e4 49 /**
abuchan 0:8cfa73bb68e4 50 * Get a pointer to a packet to be sent. Will return NULL if there are no
abuchan 0:8cfa73bb68e4 51 * available outgoing packets.
abuchan 0:8cfa73bb68e4 52 */
abuchan 0:8cfa73bb68e4 53 packet_union_t* get_send_packet(void);
abuchan 0:8cfa73bb68e4 54
abuchan 0:8cfa73bb68e4 55 /**
abuchan 0:8cfa73bb68e4 56 * Send the packet returned by get_send_packet.
abuchan 0:8cfa73bb68e4 57 *
abuchan 0:8cfa73bb68e4 58 * @param packet - pointer to packet to be sent.
abuchan 0:8cfa73bb68e4 59 */
abuchan 0:8cfa73bb68e4 60 void send_packet(packet_union_t* packet);
abuchan 0:8cfa73bb68e4 61
abuchan 0:8cfa73bb68e4 62 private:
abuchan 0:8cfa73bb68e4 63
abuchan 0:8cfa73bb68e4 64 MODSERIAL pc_;
abuchan 0:8cfa73bb68e4 65 MODDMA dma_;
abuchan 0:8cfa73bb68e4 66
abuchan 0:8cfa73bb68e4 67 DigitalOut tx_led_;
abuchan 0:8cfa73bb68e4 68 uint32_t tx_sequence_;
abuchan 0:8cfa73bb68e4 69
abuchan 0:8cfa73bb68e4 70 Mail<packet_union_t, PACKET_BUFFER_LENGTH> out_box_;
abuchan 0:8cfa73bb68e4 71 packet_union_t* out_pkt_;
abuchan 0:8cfa73bb68e4 72
abuchan 0:8cfa73bb68e4 73 static void thread_starter(void const *p);
abuchan 0:8cfa73bb68e4 74 Thread send_thread_;
abuchan 0:8cfa73bb68e4 75
abuchan 0:8cfa73bb68e4 76 void send_worker(void);
abuchan 0:8cfa73bb68e4 77 void send_complete(MODSERIAL_IRQ_INFO *q);
abuchan 0:8cfa73bb68e4 78
abuchan 0:8cfa73bb68e4 79 DigitalOut rx_led_;
abuchan 0:8cfa73bb68e4 80 Mail<packet_union_t, PACKET_BUFFER_LENGTH> in_box_;
abuchan 0:8cfa73bb68e4 81
abuchan 0:8cfa73bb68e4 82 packet_union_t* in_pkt_;
abuchan 0:8cfa73bb68e4 83 uint32_t in_pkt_idx_;
abuchan 0:8cfa73bb68e4 84 uint32_t in_pkt_len_;
abuchan 0:8cfa73bb68e4 85 uint8_t in_pkt_crc_;
abuchan 0:8cfa73bb68e4 86
abuchan 0:8cfa73bb68e4 87 void receive_callback(MODSERIAL_IRQ_INFO *q);
abuchan 0:8cfa73bb68e4 88 };
abuchan 0:8cfa73bb68e4 89
abuchan 0:8cfa73bb68e4 90 #endif