This repository has been archived on 2023-07-17. You can view files and clone it, but cannot push or open issues or pull requests.
bl_mcu_sdk/examples/audio_cube/data_protocol.h

105 lines
3.4 KiB
C
Raw Normal View History

/**
* @file ips.h
* @brief
*
* Copyright (c) 2021 Bouffalolab team
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
*/
#include "bflb_platform.h"
//#include "drv_list.h"
typedef enum {
FILE_START = 0x50,
FILE_DATA = 0X51,
FILE_END = 0X52,
CMD_PLAY_START = 0X40,
CMD_PLAY_PAUSE = 0X41,
CMD_PLAY_STOP = 0X42,
CMD_VOLUME_INCREASE = 0x43,
CMD_VOLUME_DECREASE = 0x44,
CMD_VOLUME_SET = 0x45,
CMD_VOLUME_GET = 0x46,
CMD_SAMPLING_RATE = 0x47,
CMD_CHANNEL_NUM = 0X48,
CMD_RECORD_START = 0x49,
CMD_RECORD_STOP = 0x4A,
} isp_cmd_id_t;
typedef enum {
DATA_UVVV = 0X53,
DATA_VUVV = 0X54,
} isp_file_type_t;
typedef enum {
REPLY_SUCCES = 0x4B4Fu,
REPLY_ERROR = 0x4552u,
} ips_reply_t;
/* 内部状态类型 */
typedef enum {
NO_TASK = 0,
SEND_DATA = 1, /* 发数据中 */
RECEIVE_DATA, /* 接收数据中 */
SEND_WAIT_ACK, /* 发送后等待 ack */
RECEIVE_WAIT_ACK, /* 接收后对方在等待 ack */
OTHER_STATE, /*其他状态,一般是接收数据或命令的帧头过程中 */
} isp_state_mode_t;
typedef struct {
isp_state_mode_t isp_state_mode; /* 单帧状态 */
uint8_t already_steps; /* 状态机控制 */
uint16_t buff_length_max; /* buff 最大长度 */
ips_reply_t ips_reply; /* ack 状态 */
uint16_t receive_length; /* 已经接收数量 */
} isp_status_t;
/* 回调触发原因 */
typedef enum {
ISP_CALLBACK_SEND_SUCCES_ACK, /* 发送后收到正确的ACK */
ISP_CALLBACK_SEND_ERROR_ACK, /* 发送后收到错误的ACK */
ISP_CALLBACK_RECEIVE_ACK_WAIT, /* 数据已经收到,校验正确对方在等待ACK */
ISP_CALLBACK_RECEIVE_NACK_WAIT, /* 数据已经收到,校验错误对方在等待NACK */
ISP_CALLBACK_SEND_ACK_WAIT, /* 数据已经发出等待对面ACK */
ISP_CALLBACK_CMD_, /* 收到命令,对方在等待ACK */
} isp_callback_reason_t;
typedef struct __attribute__((packed)) isp_obj_struct {
isp_cmd_id_t cmd_id;
uint8_t check;
uint16_t length;
isp_file_type_t file_type;
uint8_t *file_data;
uint8_t auot_ack; /* 数据包自动回ack0自动非零不自动*/
uint32_t time_out;
isp_status_t status; /* 中间变量,用以状态机控制 */
void (*isp_callback)(struct isp_obj_struct *isp_obj, isp_callback_reason_t isp_callback_reason);
} isp_obj_t;
int isp_uart_send_data(isp_obj_t *isp_obj_uart);
uint8_t isp_uart_init(isp_obj_t *isp_obj);
int isp_uart_send_ack(isp_obj_t *isp_obj_uart, ips_reply_t ips_reply);