105 lines
3.4 KiB
C
105 lines
3.4 KiB
C
/**
|
||
* @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; /* 数据包自动回ack,0自动,非零不自动*/
|
||
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);
|