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 Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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);