94 lines
2.1 KiB
C
94 lines
2.1 KiB
C
|
/*********************************************************************************************
|
||
|
* Filename : config_transport.h
|
||
|
|
||
|
* Description : Config Interface
|
||
|
|
||
|
* Author : Bingquan
|
||
|
|
||
|
* Email : bingquan_cai@zh-jieli.com
|
||
|
|
||
|
* Last modifiled : 2019-01-07 14:33
|
||
|
|
||
|
* Copyright:(c)JIELI 2011-2017 @ , All Rights Reserved.
|
||
|
*********************************************************************************************/
|
||
|
#ifndef _CI_TRANSPORT_H
|
||
|
#define _CI_TRANSPORT_H
|
||
|
|
||
|
#include "typedef.h"
|
||
|
|
||
|
/* CI packet types */
|
||
|
typedef struct {
|
||
|
/**
|
||
|
* transport name
|
||
|
*/
|
||
|
const char *name;
|
||
|
|
||
|
/**
|
||
|
* init transport
|
||
|
* @param transport_config
|
||
|
*/
|
||
|
void (*init)(const void *transport_config);
|
||
|
|
||
|
/**
|
||
|
* open transport connection
|
||
|
*/
|
||
|
int (*open)(void);
|
||
|
|
||
|
/**
|
||
|
* close transport connection
|
||
|
*/
|
||
|
int (*close)(void);
|
||
|
|
||
|
/**
|
||
|
* register packet handler for CI packets
|
||
|
*/
|
||
|
void (*register_packet_handler)(void (*handler)(const u8 *packet, int size));
|
||
|
|
||
|
/**
|
||
|
* support async transport layers, e.g. IRQ driven without buffers
|
||
|
*/
|
||
|
int (*can_send_packet_now)(uint8_t packet_type);
|
||
|
|
||
|
/**
|
||
|
* send packet
|
||
|
*/
|
||
|
int (*send_packet)(const u8 *packet, int size);
|
||
|
|
||
|
/**
|
||
|
* extension for UART transport implementations
|
||
|
*/
|
||
|
int (*set_baudrate)(uint32_t baudrate);
|
||
|
} ci_transport_t;
|
||
|
|
||
|
typedef enum {
|
||
|
CI_TRANSPORT_CONFIG_UART,
|
||
|
CI_TRANSPORT_CONFIG_USB,
|
||
|
CI_TRANSPORT_CONFIG_BLE,
|
||
|
} ci_transport_config_type_t;
|
||
|
|
||
|
typedef struct {
|
||
|
ci_transport_config_type_t type;
|
||
|
} ci_transport_config_t;
|
||
|
|
||
|
typedef struct {
|
||
|
ci_transport_config_type_t type; // == CI_TRANSPORT_CONFIG_UART
|
||
|
uint32_t baudrate_init; // initial baud rate
|
||
|
uint32_t baudrate_main; // = 0: same as initial baudrate
|
||
|
int flowcontrol; //
|
||
|
const char *device_name;
|
||
|
} ci_transport_config_uart_t;
|
||
|
|
||
|
typedef struct {
|
||
|
//head
|
||
|
u16 id;
|
||
|
u16 length;
|
||
|
|
||
|
u8 payload[0];
|
||
|
} _GNU_PACKED_ ci_packet_t;
|
||
|
|
||
|
#define CI_FORMAT_HEAD sizeof(ci_packet_t)
|
||
|
|
||
|
const ci_transport_t *ci_transport_uart_instance(void);
|
||
|
|
||
|
#endif
|