优化延时函数为中断延时,关闭总中断则为普通延时
        优化ips114屏幕的初始化时间,移除不必要的延时
        修复串口错误中断的串口号异常的问题
        追加更新:
            新增逐飞助手组件支持
            修复fifo高频读写的冲突问题
This commit is contained in:
SEEKFREE_BUDING
2023-12-20 11:49:54 +08:00
parent 0b61a0a0c6
commit 4a415c9976
365 changed files with 16083 additions and 17124 deletions

View File

@@ -20,7 +20,7 @@
<targetPlatform archList="all" binaryParser="com.tasking.managedbuilder.TASKING_ELF" id="com.infineon.aurix.buildsystem.managed.tasking.targetPlatform.983834169" isAbstract="false" osList="all" superClass="com.infineon.aurix.buildsystem.managed.tasking.targetPlatform"/>
<builder buildPath="${workspace_loc:/E15_fft_demo}/Debug" id="com.infineon.aurix.buildsystem.managed.tasking.builder.2145844482" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.infineon.aurix.buildsystem.managed.tasking.builder"/>
<tool id="com.infineon.aurix.buildsystem.managed.tool.c.compiler.tasking.debug.705721940" name="TASKING C/C++ Compiler" superClass="com.infineon.aurix.buildsystem.managed.tool.c.compiler.tasking.debug">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.include.1255529901" name="Include paths" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.include" valueType="includePath">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.include.1255529901" name="Include paths (-I)" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.include" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries/infineon_libraries}&quot;"/>
@@ -87,16 +87,17 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries/infineon_libraries/iLLD/TC26B/Tricore/_Lib/DataHandling}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries/infineon_libraries/iLLD/TC26B/Tricore/_PinMap}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries/zf_common}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries/zf_components}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries/zf_device}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries/zf_driver}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/user}&quot;"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.preprocessor.definedSymbols.968491594" name="Defined symbols" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.preprocessor.definedSymbols" valueType="definedSymbols">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.preprocessor.definedSymbols.968491594" name="Defined symbols (-D)" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.preprocessor.definedSymbols" valueType="definedSymbols">
<listOptionValue builtIn="false" value="__CPU__=tc26xb"/>
</option>
<option id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.tradeoff.1099986582" name="Trade-off between speed and size:" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.tradeoff" useByScannerDiscovery="false" value="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.tradeoff.4" valueType="enumerated"/>
<option id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.level.debug.925611446" name="Optimization level:" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.level.debug" useByScannerDiscovery="false" value="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.level.0" valueType="enumerated"/>
<option id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.fpmodel.316131961" name="Floating-point model:" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.fpmodel" useByScannerDiscovery="false" value="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.fpmodel.fastSingle" valueType="enumerated"/>
<option id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.tradeoff.1099986582" name="Trade-off between speed and size: (--tradeoff=)" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.tradeoff" useByScannerDiscovery="false" value="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.tradeoff.4" valueType="enumerated"/>
<option id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.level.debug.925611446" name="Optimization level: (-Ox)" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.level.debug" useByScannerDiscovery="false" value="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.optimization.level.0" valueType="enumerated"/>
<option id="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.fpmodel.316131961" name="Floating-point model: (--fp-model=)" superClass="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.fpmodel" useByScannerDiscovery="false" value="com.infineon.aurix.buildsystem.managed.c.compiler.tasking.fpmodel.fastSingle" valueType="enumerated"/>
<inputType id="com.infineon.aurix.buildsystem.managed.tool.c.compiler.tasking.input.cpp.1003247724" name="C++" superClass="com.infineon.aurix.buildsystem.managed.tool.c.compiler.tasking.input.cpp"/>
<inputType id="com.infineon.aurix.buildsystem.managed.tool.c.compiler.tasking.input.90086057" name="C" superClass="com.infineon.aurix.buildsystem.managed.tool.c.compiler.tasking.input"/>
</tool>
@@ -104,7 +105,7 @@
<inputType id="com.infineon.aurix.buildsystem.managed.tool.c.assembler.tasking.input.1059808323" superClass="com.infineon.aurix.buildsystem.managed.tool.c.assembler.tasking.input"/>
</tool>
<tool id="com.infineon.aurix.buildsystem.managed.tool.c.linker.tasking.1265474075" name="TASKING Linker" superClass="com.infineon.aurix.buildsystem.managed.tool.c.linker.tasking">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.infineon.aurix.buildsystem.managed.tool.c.linker.tasking.libraries.libraries.1395469003" name="Libraries" superClass="com.infineon.aurix.buildsystem.managed.tool.c.linker.tasking.libraries.libraries" useByScannerDiscovery="false" valueType="stringList">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.infineon.aurix.buildsystem.managed.tool.c.linker.tasking.libraries.libraries.1395469003" name="Libraries (${value})" superClass="com.infineon.aurix.buildsystem.managed.tool.c.linker.tasking.libraries.libraries" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/libraries/zf_device/zf_device_config.a}&quot;"/>
</option>
</tool>

View File

@@ -1,7 +1,10 @@
V3.2.4
<20>Ż<EFBFBD><C5BB><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>Ϊ<EFBFBD><CEAA>ͨ<EFBFBD><CDA8>ʱ
<20>Ż<EFBFBD>ips114<31><34>Ļ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʱ
<20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>жϵĴ<CFB5><C4B4>ں<EFBFBD><DABA><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>жϵĴ<CFB5><C4B4>ں<EFBFBD><DABA><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
׷<>Ӹ<EFBFBD><D3B8>£<EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>
<20>޸<EFBFBD>fifo<66><6F>Ƶ<EFBFBD><C6B5>д<EFBFBD>ij<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>
V3.2.3
<20>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>SPIͨ<49><CDA8><EFBFBD><EFBFBD>Ļ(OLED<45><44><EFBFBD><EFBFBD>)<29><>ͨ<EFBFBD>ŷ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20>޸Ĵ<DEB8><C4B4>ڵ<EFBFBD>Ĭ<EFBFBD><C4AC>ͨ<EFBFBD>ŷ<EFBFBD>ʽ
@@ -11,7 +14,6 @@ V3.2.1
flash<73><68><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰҳ<C7B0><D2B3><EFBFBD>ж<EFBFBD> <20><>ֹ<EFBFBD>û<EFBFBD><C3BB><EFBFBD>ʹ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD><E6B7B6><EFBFBD><EFBFBD>flashʹ<68>ñ<EFBFBD><C3B1><EFBFBD>
V3.2.0
<20><><EFBFBD><EFBFBD>wifi spiģ<69><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
<20><><EFBFBD><EFBFBD>detector<6F><72>λ<EFBFBD><CEBB>API<50>ӿ<EFBFBD>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߱<EFBFBD><DFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD><D1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6>Ա<EFBFBD><D4B1><EFBFBD>
zf_device_type <20><><EFBFBD><EFBFBD> ToF <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD> ToF ģ<><C4A3> DL1B

View File

@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug uart <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 debug_uart_data;
fifo_struct debug_uart_fifo;
fifo_obj_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------

View File

@@ -30,9 +30,11 @@
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2022-08-10 Teternal first version
* 2023-12-06 Teternal <20><><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD>߼<EFBFBD> <20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡʱ<C8A1><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
//-------------------------------------------------------------------------------------------------------------------
@@ -43,7 +45,7 @@
// ʹ<><CAB9>ʾ<EFBFBD><CABE> fifo_head_offset(fifo, 1);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -61,7 +63,7 @@ static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> fifo_end_offset(fifo, 1);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -78,34 +80,28 @@ static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> fifo_clear(fifo);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>յ<EFBFBD>ǰ FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
fifo_state_enum fifo_clear (fifo_struct *fifo)
fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
{
fifo_state_enum return_state = FIFO_SUCCESS;
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
do
{
if(FIFO_CLEAR & fifo->execution)
{
return_state = FIFO_CLEAR_UNDO;
break;
}
fifo->execution |= FIFO_CLEAR;
fifo->head = 0;
fifo->end = 0;
fifo->size = fifo->max;
// if(FIFO_IDLE != fifo->execution) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>ǰ FIFO <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
// {
// return_state = FIFO_RESET_UNDO; // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
// break;
// }
fifo->execution |= FIFO_RESET; // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>λ
fifo->head = 0; // <20><><EFBFBD><EFBFBD> FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ
fifo->end = 0; // <20><><EFBFBD><EFBFBD> FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ
fifo->size = fifo->max; // <20><><EFBFBD><EFBFBD> FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ
switch(fifo->type)
{
case FIFO_DATA_8BIT:
memset(fifo->buffer, 0, fifo->max);
break;
case FIFO_DATA_16BIT:
memset(fifo->buffer, 0, fifo->max * 2);
break;
case FIFO_DATA_32BIT:
memset(fifo->buffer, 0, fifo->max * 4);
break;
case FIFO_DATA_8BIT: memset(fifo->buffer, 0, fifo->max); break;
case FIFO_DATA_16BIT: memset(fifo->buffer, 0, fifo->max * 2); break;
case FIFO_DATA_32BIT: memset(fifo->buffer, 0, fifo->max * 4); break;
}
fifo->execution &= ~FIFO_CLEAR;
fifo->execution = FIFO_IDLE; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>λ
}while(0);
return return_state;
}
@@ -117,9 +113,10 @@ fifo_state_enum fifo_clear (fifo_struct *fifo)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint32 len = fifo_used(fifo);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 fifo_used (fifo_struct *fifo)
uint32 fifo_used (fifo_obj_struct *fifo)
{
return (fifo->max - fifo->size);
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // <20><><EFBFBD>ص<EFBFBD>ǰ FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
}
//-------------------------------------------------------------------------------------------------------------------
@@ -130,41 +127,36 @@ uint32 fifo_used (fifo_struct *fifo)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
{
fifo_state_enum return_state = FIFO_SUCCESS;
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
do
{
if(FIFO_WRITE & fifo->execution)
if((FIFO_RESET | FIFO_WRITE) & fifo->execution) // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EBBEBA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return_state = FIFO_WRITE_UNDO;
return_state = FIFO_WRITE_UNDO; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
break;
}
fifo->execution |= FIFO_WRITE;
fifo->execution |= FIFO_WRITE; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
if(1 <= fifo->size) // ʣ<><CAA3><EFBFBD>ռ<EFBFBD><D5BC>㹻װ<E3B9BB>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
switch(fifo->type)
{
case FIFO_DATA_8BIT:
((uint8 *)fifo->buffer)[fifo->head] = dat & 0xFF;
break;
case FIFO_DATA_16BIT:
((uint16 *)fifo->buffer)[fifo->head] = dat & 0xFFFF;
break;
case FIFO_DATA_32BIT:
((uint32 *)fifo->buffer)[fifo->head] = dat;
break;
case FIFO_DATA_8BIT: ((uint8 *)fifo->buffer)[fifo->head] = (uint8)dat; break;
case FIFO_DATA_16BIT: ((uint16 *)fifo->buffer)[fifo->head] = (uint16)dat; break;
case FIFO_DATA_32BIT: ((uint32 *)fifo->buffer)[fifo->head] = dat; break;
}
fifo_head_offset(fifo, 1); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
fifo->size -= 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD>ȼ<EFBFBD>С
}
else
{
return_state = FIFO_SPACE_NO_ENOUGH;
return_state = FIFO_SPACE_NO_ENOUGH; // <20><>ǰ FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؿռ<D5BC><E4B2BB>
}
fifo->execution &= ~FIFO_WRITE;
fifo->execution &= ~FIFO_WRITE; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}while(0);
return return_state;
@@ -179,26 +171,27 @@ fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
{
fifo_state_enum return_state = FIFO_SUCCESS;
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
uint32 temp_length = 0;
do
{
if(NULL == dat)
{
return_state = FIFO_BUFFER_NULL;
return_state = FIFO_BUFFER_NULL; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
if(FIFO_WRITE & fifo->execution)
if((FIFO_RESET | FIFO_WRITE) & fifo->execution) // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EBBEBA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return_state = FIFO_WRITE_UNDO;
return_state = FIFO_WRITE_UNDO; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
break;
}
fifo->execution |= FIFO_WRITE;
fifo->execution |= FIFO_WRITE; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
if(length <= fifo->size) // ʣ<><CAA3><EFBFBD>ռ<EFBFBD><D5BC>㹻װ<E3B9BB>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(length <= fifo->size) // ʣ<><CAA3><EFBFBD>ռ<EFBFBD><D5BC>㹻װ<E3B9BB>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
temp_length = fifo->max - fifo->head; // <20><><EFBFBD><EFBFBD>ͷָ<CDB7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
@@ -207,6 +200,7 @@ fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
switch(fifo->type)
{
case FIFO_DATA_8BIT:
{
memcpy(
&(((uint8 *)fifo->buffer)[fifo->head]),
dat, temp_length); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -216,8 +210,9 @@ fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
&(((uint8 *)dat)[temp_length]),
length - temp_length); // <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fifo_head_offset(fifo, length - temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
break;
}break;
case FIFO_DATA_16BIT:
{
memcpy(
&(((uint16 *)fifo->buffer)[fifo->head]),
dat, temp_length * 2); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -227,8 +222,9 @@ fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
&(((uint16 *)dat)[temp_length]),
(length - temp_length) * 2); // <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fifo_head_offset(fifo, length - temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
break;
}break;
case FIFO_DATA_32BIT:
{
memcpy(
&(((uint32 *)fifo->buffer)[fifo->head]),
dat, temp_length * 4); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -238,7 +234,7 @@ fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
&(((uint32 *)dat)[temp_length]),
(length - temp_length) * 4); // <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fifo_head_offset(fifo, length - temp_length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
break;
}break;
}
}
else
@@ -246,35 +242,36 @@ fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
switch(fifo->type)
{
case FIFO_DATA_8BIT:
{
memcpy(
&(((uint8 *)fifo->buffer)[fifo->head]),
dat, length); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
fifo_head_offset(fifo, length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
break;
}break;
case FIFO_DATA_16BIT:
{
memcpy(
&(((uint16 *)fifo->buffer)[fifo->head]),
dat, length * 2); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
fifo_head_offset(fifo, length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
break;
}break;
case FIFO_DATA_32BIT:
{
memcpy(
&(((uint32 *)fifo->buffer)[fifo->head]),
dat, length * 4); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
fifo_head_offset(fifo, length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
break;
}break;
}
// memcpy(&fifo->buffer[fifo->head], dat, length); // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
// fifo_head_offset(fifo, length); // ͷָ<CDB7><D6B8>ƫ<EFBFBD><C6AB>
}
fifo->size -= length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD>ȼ<EFBFBD>С
}
else
{
return_state = FIFO_SPACE_NO_ENOUGH;
return_state = FIFO_SPACE_NO_ENOUGH; // <20><>ǰ FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؿռ<D5BC><E4B2BB>
}
fifo->execution &= ~FIFO_WRITE;
fifo->execution &= ~FIFO_WRITE; // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}while(0);
return return_state;
@@ -289,51 +286,54 @@ fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
{
fifo_state_enum return_state = FIFO_SUCCESS;
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
do
{
if(NULL == dat)
{
return_state = FIFO_BUFFER_NULL;
break;
return_state = FIFO_BUFFER_NULL; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
fifo->execution |= FIFO_READ;
if(1 > fifo_used(fifo))
else
{
return_state = FIFO_DATA_NO_ENOUGH; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD>
}
switch(fifo->type)
{
case FIFO_DATA_8BIT:
*((uint8 *)dat) = ((uint8 *)fifo->buffer)[fifo->end];
break;
case FIFO_DATA_16BIT:
*((uint16 *)dat) = ((uint16 *)fifo->buffer)[fifo->end];
break;
case FIFO_DATA_32BIT:
*((uint32 *)dat) = ((uint32 *)fifo->buffer)[fifo->end];
break;
}
if(flag == FIFO_READ_AND_CLEAN) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
{
if(FIFO_CLEAR & fifo->execution)
if((FIFO_RESET | FIFO_CLEAR) & fifo->execution) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>ǰ FIFO <20>Ƿ<EFBFBD><C7B7><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
{
return_state = FIFO_CLEAR_UNDO;
return_state = FIFO_READ_UNDO; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
break;
}
fifo->execution |= FIFO_CLEAR;
if(1 > fifo_used(fifo))
{
return_state = FIFO_DATA_NO_ENOUGH; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD>
break; // ֱ<><D6B1><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
}
fifo->execution |= FIFO_READ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
switch(fifo->type)
{
case FIFO_DATA_8BIT: *((uint8 *)dat) = ((uint8 *)fifo->buffer)[fifo->end]; break;
case FIFO_DATA_16BIT: *((uint16 *)dat) = ((uint16 *)fifo->buffer)[fifo->end]; break;
case FIFO_DATA_32BIT: *((uint32 *)dat) = ((uint32 *)fifo->buffer)[fifo->end]; break;
}
fifo->execution &= ~FIFO_READ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}
if(FIFO_READ_AND_CLEAN == flag) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
{
if((FIFO_RESET | FIFO_CLEAR | FIFO_READ) == fifo->execution) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȡ ״̬ <20><><EFBFBD><EFBFBD><EFBFBD>
{
return_state = FIFO_CLEAR_UNDO; // <20><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
break;
}
fifo->execution |= FIFO_CLEAR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
fifo_end_offset(fifo, 1); // <20>ƶ<EFBFBD> FIFO ͷָ<CDB7><D6B8>
fifo->size += 1;
fifo->execution &= ~FIFO_CLEAR;
fifo->size += 1; // <20>ͷŶ<CDB7>Ӧ<EFBFBD><D3A6><EFBFBD>ȿռ<C8BF>
fifo->execution &= ~FIFO_CLEAR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}
}while(0);
fifo->execution &= FIFO_READ;
return return_state;
}
@@ -348,75 +348,89 @@ fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
fifo_state_enum return_state = FIFO_SUCCESS;
uint32 temp_length;
zf_assert(NULL != fifo);
zf_assert(NULL != length);
fifo_state_enum return_state = FIFO_SUCCESS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
uint32 temp_length = 0;
uint32 fifo_data_length = 0;
do
{
if(NULL == dat)
{
return_state = FIFO_BUFFER_NULL;
break;
}
fifo->execution |= FIFO_READ;
if(*length > fifo_used(fifo))
{
*length = (fifo->max - fifo->size); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
return_state = FIFO_DATA_NO_ENOUGH; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
}
temp_length = fifo->max - fifo->end; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
if(*length <= temp_length) // <20>һ<E3B9BB><D2BB><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
{
switch(fifo->type)
{
case FIFO_DATA_8BIT:
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->end]), *length);
break;
case FIFO_DATA_16BIT:
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->end]), *length * 2);
break;
case FIFO_DATA_32BIT:
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->end]), *length * 4);
break;
}
}
else
{
switch(fifo->type)
if((FIFO_RESET | FIFO_CLEAR) & fifo->execution) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>ǰ FIFO <20>Ƿ<EFBFBD><C7B7><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
{
case FIFO_DATA_8BIT:
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->end]), temp_length);
memcpy(&(((uint8 *)dat)[temp_length]), fifo->buffer, *length - temp_length);
break;
case FIFO_DATA_16BIT:
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->end]), temp_length * 2);
memcpy(&(((uint16 *)dat)[temp_length]), fifo->buffer, (*length - temp_length) * 2);
break;
case FIFO_DATA_32BIT:
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->end]), temp_length * 4);
memcpy(&(((uint32 *)dat)[temp_length]), fifo->buffer, (*length - temp_length) * 4);
break;
}
}
if(flag == FIFO_READ_AND_CLEAN) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
{
if(FIFO_CLEAR & fifo->execution)
{
return_state = FIFO_CLEAR_UNDO;
*length = fifo_data_length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
return_state = FIFO_READ_UNDO; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
break;
}
fifo->execution |= FIFO_CLEAR;
fifo_data_length = fifo_used(fifo); // <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
if(*length > fifo_data_length) // <20>жϳ<D0B6><CFB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>
{
*length = fifo_data_length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
return_state = FIFO_DATA_NO_ENOUGH; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
if(0 == fifo_data_length) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
{
fifo->execution &= ~FIFO_READ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
break;
}
}
fifo->execution |= FIFO_READ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
temp_length = fifo->max - fifo->end; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
if(*length <= temp_length) // <20>һ<E3B9BB><D2BB><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
{
switch(fifo->type)
{
case FIFO_DATA_8BIT: memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->end]), *length); break;
case FIFO_DATA_16BIT: memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->end]), *length * 2); break;
case FIFO_DATA_32BIT: memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->end]), *length * 4); break;
}
}
else
{
switch(fifo->type)
{
case FIFO_DATA_8BIT:
{
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->end]), temp_length);
memcpy(&(((uint8 *)dat)[temp_length]), fifo->buffer, *length - temp_length);
}break;
case FIFO_DATA_16BIT:
{
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->end]), temp_length * 2);
memcpy(&(((uint16 *)dat)[temp_length]), fifo->buffer, (*length - temp_length) * 2);
}break;
case FIFO_DATA_32BIT:
{
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->end]), temp_length * 4);
memcpy(&(((uint32 *)dat)[temp_length]), fifo->buffer, (*length - temp_length) * 4);
}break;
}
}
fifo->execution &= ~FIFO_READ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}
if(FIFO_READ_AND_CLEAN == flag) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
{
if((FIFO_RESET | FIFO_CLEAR | FIFO_READ) == fifo->execution) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȡ ״̬ <20><><EFBFBD><EFBFBD><EFBFBD>
{
return_state = FIFO_CLEAR_UNDO; // <20><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
break;
}
fifo->execution |= FIFO_CLEAR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
fifo_end_offset(fifo, *length); // <20>ƶ<EFBFBD> FIFO ͷָ<CDB7><D6B8>
fifo->size += *length;
fifo->execution &= ~FIFO_CLEAR;
fifo->size += *length; // <20>ͷŶ<CDB7>Ӧ<EFBFBD><D3A6><EFBFBD>ȿռ<C8BF>
fifo->execution &= ~FIFO_CLEAR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}
}while(0);
fifo->execution &= FIFO_READ;
return return_state;
}
@@ -433,75 +447,86 @@ fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length,
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> FIFO_READ_AND_CLEAN <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1B6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> FIFO_READ_AND_CLEAN <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1B6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO
//-------------------------------------------------------------------------------------------------------------------
fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
fifo_state_enum return_state = FIFO_SUCCESS;
uint32 temp_length;
zf_assert(NULL != fifo);
zf_assert(NULL != length);
fifo_state_enum return_state = FIFO_SUCCESS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
uint32 temp_length = 0;
uint32 fifo_data_length = 0;
do
{
if(NULL == dat)
{
return_state = FIFO_BUFFER_NULL;
break;
}
fifo->execution |= FIFO_READ;
if(*length > fifo_used(fifo))
{
*length = (fifo->max - fifo->size); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
return_state = FIFO_DATA_NO_ENOUGH; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
}
if((fifo->head > fifo->end) || (fifo->head >= *length))
{
switch(fifo->type)
{
case FIFO_DATA_8BIT:
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->head - *length]), *length);
break;
case FIFO_DATA_16BIT:
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->head - *length]), *length * 2);
break;
case FIFO_DATA_32BIT:
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->head - *length]), *length * 4);
break;
}
}
else
{
temp_length = *length - fifo->head; // <20><><EFBFBD><EFBFBD>βָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>ٿռ<EFBFBD>
switch(fifo->type)
if((FIFO_RESET | FIFO_CLEAR | FIFO_WRITE) & fifo->execution) // <20>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ǰ FIFO <20>Ƿ<EFBFBD><C7B7><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
{
case FIFO_DATA_8BIT:
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->max - temp_length]), temp_length);
memcpy(&(((uint8 *)dat)[temp_length]), &(((uint8 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length));
break;
case FIFO_DATA_16BIT:
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->max - temp_length]), temp_length * 2);
memcpy(&(((uint16 *)dat)[temp_length]), &(((uint16 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length) * 2);
break;
case FIFO_DATA_32BIT:
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->max - temp_length]), temp_length * 4);
memcpy(&(((uint32 *)dat)[temp_length]), &(((uint32 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length) * 4);
break;
}
}
if(flag == FIFO_READ_AND_CLEAN) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
{
if(FIFO_CLEAR & fifo->execution)
{
return_state = FIFO_CLEAR_UNDO;
*length = fifo_data_length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
return_state = FIFO_READ_UNDO; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
break;
}
fifo->execution |= FIFO_CLEAR;
fifo_end_offset(fifo, (fifo->max - fifo->size));
fifo->size = fifo->max;
fifo->execution &= ~FIFO_CLEAR;
fifo_data_length = fifo_used(fifo); // <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
if(*length > fifo_data_length) // <20>жϳ<D0B6><CFB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>
{
*length = fifo_data_length; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
return_state = FIFO_DATA_NO_ENOUGH; // <20><>־<EFBFBD><D6BE><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
if(0 == fifo_data_length) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
{
fifo->execution &= ~FIFO_READ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
break;
}
}
fifo->execution |= FIFO_READ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
if((fifo->head > fifo->end) || (fifo->head >= *length))
{
switch(fifo->type)
{
case FIFO_DATA_8BIT: memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->head - *length]), *length); break;
case FIFO_DATA_16BIT: memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->head - *length]), *length * 2);break;
case FIFO_DATA_32BIT: memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->head - *length]), *length * 4);break;
}
}
else
{
temp_length = *length - fifo->head; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ж<EFBFBD><D0B6>ٿռ<D9BF>
switch(fifo->type)
{
case FIFO_DATA_8BIT:
{
memcpy(dat, &(((uint8 *)fifo->buffer)[fifo->max - temp_length]), temp_length);
memcpy(&(((uint8 *)dat)[temp_length]), &(((uint8 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length));
}break;
case FIFO_DATA_16BIT:
{
memcpy(dat, &(((uint16 *)fifo->buffer)[fifo->max - temp_length]), temp_length * 2);
memcpy(&(((uint16 *)dat)[temp_length]), &(((uint16 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length) * 2);
}break;
case FIFO_DATA_32BIT:
{
memcpy(dat, &(((uint32 *)fifo->buffer)[fifo->max - temp_length]), temp_length * 4);
memcpy(&(((uint32 *)dat)[temp_length]), &(((uint32 *)fifo->buffer)[fifo->head - *length]), (*length - temp_length) * 4);
}break;
}
}
fifo->execution &= ~FIFO_READ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}
if(FIFO_READ_AND_CLEAN == flag) // <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO ״̬
{
if((FIFO_RESET | FIFO_CLEAR | FIFO_READ) == fifo->execution) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȡ ״̬ <20><><EFBFBD><EFBFBD><EFBFBD>
{
return_state = FIFO_CLEAR_UNDO; // <20><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
break;
}
fifo_clear(fifo);
}
}while(0);
fifo->execution &= FIFO_READ;
return return_state;
}
@@ -516,23 +541,19 @@ fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *len
// ʹ<><CAB9>ʾ<EFBFBD><CABE> fifo_init(&user_fifo, user_buffer, 64);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
fifo_state_enum return_value = FIFO_SUCCESS;
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
do
{
if(NULL == buffer_addr)
{
return_value = FIFO_BUFFER_NULL;
break;
}
fifo->buffer = buffer_addr;
fifo->execution = FIFO_IDLE;
fifo->type = type;
fifo->head = 0;
fifo->end = 0;
fifo->size = size;
fifo->max = size;
fifo->buffer = buffer_addr;
fifo->execution = FIFO_IDLE;
fifo->type = type;
fifo->head = 0;
fifo->end = 0;
fifo->size = size;
fifo->max = size;
}while(0);
return return_value;
return return_state;
}

View File

@@ -30,7 +30,8 @@
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2022-08-10 Teternal first version
* 2023-12-06 Teternal <20><><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD>߼<EFBFBD> <20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡʱ<C8A1><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
********************************************************************************************************************/
#ifndef _zf_common_fifo_h_
@@ -40,56 +41,67 @@
typedef enum
{
FIFO_SUCCESS,
FIFO_SUCCESS, // FIFO <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
FIFO_WRITE_UNDO,
FIFO_CLEAR_UNDO,
FIFO_BUFFER_NULL,
FIFO_SPACE_NO_ENOUGH,
FIFO_DATA_NO_ENOUGH,
}fifo_state_enum;
FIFO_RESET_UNDO, // FIFO <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>δִ<CEB4><D6B4>
FIFO_CLEAR_UNDO, // FIFO <20><><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>δִ<CEB4><D6B4>
FIFO_BUFFER_NULL, // FIFO <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FIFO_WRITE_UNDO, // FIFO д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δִ<CEB4><D6B4>
FIFO_SPACE_NO_ENOUGH, // FIFO д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC><E4B2BB>
FIFO_READ_UNDO, // FIFO <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>δִ<CEB4><D6B4>
FIFO_DATA_NO_ENOUGH, // FIFO <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD>
}fifo_state_enum; // FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> <20><><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
// <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// ˳<><CBB3><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// β<><CEB2><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>˷<EFBFBD>ֹ<EFBFBD>ж<EFBFBD>Ƕ<EFBFBD>׵<EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
typedef enum
{
FIFO_IDLE = 0x00, // <20><><EFBFBD><EFBFBD>״̬
FIFO_RESET = 0x01, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
FIFO_CLEAR = 0x02, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
FIFO_WRITE = 0x04, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>д<EFBFBD><EFBFBD><EBBBBA><EFBFBD><EFBFBD>
FIFO_READ = 0x08, // <20><><EFBFBD><EFBFBD>ִ<EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}fifo_execution_enum; // FIFO <20><><EFBFBD><EFBFBD>״̬ ΪǶ<CEAA><C7B6>ʹ<EFBFBD><CAB9>Ԥ<EFBFBD><D4A4> <20>޷<EFBFBD><DEB7><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum
{
FIFO_IDLE = 0x00,
FIFO_CLEAR = 0x01,
FIFO_WRITE = 0x02,
FIFO_READ = 0x04,
}fifo_execution_enum;
typedef enum
{
FIFO_READ_AND_CLEAN,
FIFO_READ_ONLY,
FIFO_READ_AND_CLEAN, // FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷŶ<CDB7>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FIFO_READ_ONLY, // FIFO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD>ȡ
}fifo_operation_enum;
typedef enum
{
FIFO_DATA_8BIT,
FIFO_DATA_16BIT,
FIFO_DATA_32BIT,
FIFO_DATA_8BIT, // FIFO <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> 8bit
FIFO_DATA_16BIT, // FIFO <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> 16bit
FIFO_DATA_32BIT, // FIFO <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> 32bit
}fifo_data_type_enum;
typedef struct
{
uint8 execution; // ִ<>в<EFBFBD><D0B2><EFBFBD>
fifo_data_type_enum type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void *buffer; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
void *buffer; // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
uint32 head; // <20><><EFBFBD><EFBFBD>ͷָ<CDB7><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>յĻ<D5B5><C4BB><EFBFBD>
uint32 end; // <20><><EFBFBD><EFBFBD>βָ<CEB2><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ǿջ<C7BF><D5BB><EFBFBD><E6A3A8><EFBFBD><EFBFBD>ȫ<EFBFBD>ճ<EFBFBD><D5B3>
uint32 size; // <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD>С
uint32 max; // <20><><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С
}fifo_struct;
}fifo_obj_struct;
fifo_state_enum fifo_clear (fifo_struct *fifo);
uint32 fifo_used (fifo_struct *fifo);
fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
uint32 fifo_used (fifo_obj_struct *fifo);
fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif

View File

@@ -84,7 +84,6 @@
#include "zf_device_bluetooth_ch9141.h"
#include "zf_device_gps_tau1201.h"
#include "zf_device_camera.h"
#include "zf_device_detector.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
#include "zf_device_icm20602.h"
@@ -107,6 +106,10 @@
#include "zf_device_wireless_uart.h"
//===================================================<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
//====================================================Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>====================================================
#include "seekfree_assistant.h"
//====================================================Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>====================================================
//=====================================================<3D>û<EFBFBD><C3BB><EFBFBD>======================================================
//=====================================================<3D>û<EFBFBD><C3BB><EFBFBD>======================================================

View File

@@ -72,6 +72,8 @@ typedef volatile int64 vint64;
#define ZF_TRUE (1)
#define ZF_FALSE (0)
#define ZF_WEAK __attribute__((weak))
//=================================================== <20><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> ===================================================
#endif

View File

@@ -0,0 +1,436 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> seekfree_assistant
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.9.4
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2023-11-29 pudding first version
********************************************************************************************************************/
#include "zf_common_fifo.h"
#include "seekfree_assistant.h"
seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼ<><CDBC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼ<><CDBC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼ<><CDBC><EFBFBD>Լ<EFBFBD><D4BC>߽绺<DFBD><E7BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
static fifo_obj_struct seekfree_assistant_fifo;
static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>IJ<EFBFBD><C4B2><EFBFBD>
vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>־λ
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer <20><>ҪУ<D2AA><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length У<><EFBFBD><E9B3A4>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
{
uint8 temp_sum = 0;
while(length--)
{
temp_sum += *buffer++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> camera_type <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *image_addr ͼ<><CDBC><EFBFBD>׵<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> boundary_num ͼ<><CDBC><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC><EFBFBD>߶<EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
{
uint32 image_size = 0;
seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION;
seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num;
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD>鲿<EFBFBD><E9B2BF>
seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
seekfree_assistant_camera_data.image_width = width;
seekfree_assistant_camera_data.image_height = height;
// <20><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD><EFBFBD>ܡ<EFBFBD><DCA1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>͡<EFBFBD><CDA1>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ȸ߶ȵ<DFB6><C8B5><EFBFBD>Ϣ
seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>С
switch(camera_type)
{
case SEEKFREE_ASSISTANT_OV7725_BIN:
{
image_size = width * height / 8;
}break;
case SEEKFREE_ASSISTANT_MT9V03X:
{
image_size = width * height;
}break;
case SEEKFREE_ASSISTANT_SCC8660:
{
image_size = width * height * 2;
}break;
}
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(NULL != image_addr)
{
seekfree_assistant_transfer(image_addr, image_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD>߻<EFBFBD><DFBB>ƺ<EFBFBD><C6BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> boundary_id <20><><EFBFBD><EFBFBD>ID
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_num <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *dot_x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *dot_y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC><EFBFBD>߶<EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
{
uint8 i;
uint16 dot_bytes = 0; // <20><><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
{
dot_bytes *= 2;
}
// <20><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD><EFBFBD>ܡ<EFBFBD><DCA1>߽<EFBFBD><DFBD><EFBFBD><EFBFBD>š<EFBFBD><C5A1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(NULL != buffer->boundary_x[i])
{
seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(NULL != buffer->boundary_y[i])
{
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ʾÿһ<C3BF><D2BB>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD>߽<EFBFBD>
// ָ<><D6B8><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ͬһ<CDAC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *seekfree_assistant_oscilloscope ʾ<><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
{
uint8 packet_size;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
seekfree_assistant_oscilloscope->channel_num &= 0x0f;
zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num);
// ֡ͷ
seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD;
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
seekfree_assistant_oscilloscope->length = packet_size;
// д<><EFBFBD><EBB9A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
// <20><>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
seekfree_assistant_oscilloscope->check_sum = 0;
seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>seekfree_assistant_oscilloscope_data.data[]
seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> camera_type ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_addr ͼ<><CDBC><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾֻ<CABE><D6BB><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC><EFBFBD>߶<EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
{
seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
seekfree_assistant_camera_buffer.camera_type = camera_type;
seekfree_assistant_camera_buffer.image_addr = image_addr;
seekfree_assistant_camera_buffer.width = width;
seekfree_assistant_camera_buffer.height = height;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> boundary_type <20>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_num һ<><D2BB><EFBFBD>߽<EFBFBD><DFBD>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_x1 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>1
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_x2 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>2
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_x3 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>3
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_y1 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>1
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_y2 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>2
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_y3 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>3
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3)
{
uint8 i = 0;
uint8 boundary_num = 0;
uint8 boundary_data_type = 0;
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ô˺<C3B4><CBBA><EFBFBD>֮ǰ<D6AE><C7B0>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>seekfree_assistant_camera_config<69><67><EFBFBD>ú<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Ϣ
zf_assert(0 != seekfree_assistant_camera_buffer.camera_type);
seekfree_assistant_camera_dot_data.dot_num = dot_num;
seekfree_assistant_camera_dot_data.valid_flag = 0;
for(i = 0; i < 3; i++)
{
seekfree_assistant_camera_buffer.boundary_x[i] = NULL;
seekfree_assistant_camera_buffer.boundary_y[i] = NULL;
}
switch(boundary_type)
{
case X_BOUNDARY:
{
if(NULL != dot_x1)
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0;
seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1;
}
if(NULL != dot_x2)
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1;
seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2;
}
if(NULL != dot_x3)
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2;
seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3;
}
if(255 < seekfree_assistant_camera_buffer.height)
{
boundary_data_type = 1;
}
}break;
case Y_BOUNDARY:
{
if(NULL != dot_y1)
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0;
seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1;
}
if(NULL != dot_y2)
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1;
seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2;
}
if(NULL != dot_y3)
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2;
seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3;
}
if(255 < seekfree_assistant_camera_buffer.width)
{
boundary_data_type = 1;
}
}break;
case XY_BOUNDARY:
{
if((NULL != dot_x1) && (NULL != dot_y1))
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0;
seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1;
seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1;
}
if((NULL != dot_x2) && (NULL != dot_y2))
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1;
seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2;
seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2;
}
if((NULL != dot_x3) && (NULL != dot_y3))
{
boundary_num++;
seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2;
seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3;
seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3;
}
if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height))
{
boundary_data_type = 1;
}
}break;
case NO_BOUNDARY:break;
}
seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڵ<EFBFBD><DAB5><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>seekfree_assistant_camera_config<69><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void seekfree_assistant_camera_send (void)
{
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
zf_assert(0 != seekfree_assistant_camera_buffer.camera_type);
seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height);
if(seekfree_assistant_camera_dot_data.dot_type & 0x0f)
{
seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer);
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>PIT<49>жϻ<D0B6><CFBB><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
uint32 read_length;
seekfree_assistant_parameter_struct *receive_packet;
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>uint32<33><32><EFBFBD>ж<EFBFBD><D0B6>壬Ŀ<E5A3AC><C4BF><EFBFBD><EFBFBD>Ϊ<EFBFBD>˱<EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// <20><><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ʽ<E4B7BD><CABD><EFBFBD>ӽ<EFBFBD><D3BD>ջص<D5BB><D8B5>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY);
if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
{
// û<><C3BB>֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD>FIFO<46><4F>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
read_length = 1;
}
else
{
// <20>ҵ<EFBFBD>֡ͷ
receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer;
temp_sum = receive_packet->check_sum;
receive_packet->check_sum = 0;
if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct)))
{
// <20><>У<EFBFBD><D0A3><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
}
else
{
read_length = 1;
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK void seekfree_assistant_init ()
{
fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
}

View File

@@ -1,4 +1,4 @@
/*********************************************************************************************************************
/*/*********************************************************************************************************************
* TC264 Opensourec Library TC264 SDK
* Copyright (c) 2022 SEEKFREE
*
@@ -21,7 +21,7 @@
* libraries LICENSE
* 使
*
* zf_device_detector
* seekfree_assistant
*
* libraries/doc version
* ADS v1.9.4
@@ -30,67 +30,54 @@
*
*
*
* 2023-05-27 pudding first version
* 2023-11-29 pudding first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#ifndef _zf_device_detector_h_
#define _zf_device_detector_h_
#include "zf_common_typedef.h"
#include "zf_common_debug.h"
// 定义接收FIFO大小
#define DETECTOR_BUFFER_SIZE ( 0x40 )
#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
// 定义示波器的最大通道数量
#define DETECTOR_SET_OSCILLOSCOPE_COUNT ( 0x08 )
#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
// 定义参数调试的最大通道数量
#define DETECTOR_SET_PARAMETR_COUNT ( 0x08 )
#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
// 定义图像边线最大数量
#define DETECTOR_CAMERA_MAX_BOUNDARY ( 0x08 )
#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
// 单片机往上位机发送的帧头
#define DETECTOR_SEND_HEAD ( 0xAA )
#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
// 摄像头类
#define DETECTOR_CAMERA_FUNCTION ( 0x02 )
#define DETECTOR_CAMERA_DOT_FUNCTION ( 0x03 )
#define DETECTOR_CAMERA_OSCILLOSCOPE ( 0x10 )
#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
// 上位机往单片机发送的帧头
#define DETECTOR_RECEIVE_HEAD ( 0x55 )
#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
// 参数设置类
#define DETECTOR_RECEIVE_SET_PARAMETER ( 0x20 )
// 数据发送设备枚举
typedef enum
{
DETECTOR_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
DETECTOR_WIRELESS_UART, // 无线转串口
DETECTOR_CH9141, // 9141蓝牙
DETECTOR_WIFI_UART, // WIFI转串口
DETECTOR_WIFI_SPI, // 高速WIFI SPI
DETECTOR_CUSTOM, // 自定义通讯方式 需要自行detector_custom_write_byte函数中实现数据发送
}detector_transfer_type_enum;
#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
{
// 按照摄像头型号定义
DETECTOR_OV7725_BIN = 1,
DETECTOR_MT9V03X,
DETECTOR_SCC8660,
SEEKFREE_ASSISTANT_OV7725_BIN = 1,
SEEKFREE_ASSISTANT_MT9V03X,
SEEKFREE_ASSISTANT_SCC8660,
// 按照图像类型定义
DETECTOR_BINARY = 1,
DETECTOR_GRAY,
DETECTOR_RGB565,
}detector_image_type_enum;
SEEKFREE_ASSISTANT_BINARY = 1,
SEEKFREE_ASSISTANT_GRAY,
SEEKFREE_ASSISTANT_RGB565,
}seekfree_assistant_image_type_enum;
// 摄像头类型枚举
typedef enum
@@ -100,7 +87,7 @@ typedef enum
Y_BOUNDARY, // 发送的图像中边界信息只包含Y也就是只有纵坐标信息横坐标根据图像宽度得到通常很少有这样的需求
XY_BOUNDARY, // 发送的图像中边界信息包含X与Y这样可以指定点在任意位置就可以方便显示出回弯的效果
NO_BOUNDARY, // 发送的图像中没有边线信息
}detector_boundary_type_enum;
}seekfree_assistant_boundary_type_enum;
typedef struct
{
@@ -108,8 +95,8 @@ typedef struct
uint8 channel_num; // 高四位为功能字 低四位为通道数量
uint8 check_sum; // 和校验
uint8 length; // 包长度
float data[DETECTOR_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}detector_oscilloscope_struct;
float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
@@ -120,7 +107,7 @@ typedef struct
uint8 length; // 包长度(仅包含协议部分)
uint16 image_width; // 图像宽度
uint16 image_height; // 图像高度
}detector_camera_struct;
}seekfree_assistant_camera_struct;
typedef struct
@@ -130,19 +117,19 @@ typedef struct
uint8 dot_type; // 点类型 BIT51坐标是16位的 0坐标是8位的 BIT7-BIT60只有X坐标 1只有Y坐标 2X和Y坐标都有 BIT3-BIT0边界数量
uint8 length; // 包长度(仅包含协议部分)
uint16 dot_num; // 画点数量
uint8 valid_flag; // 通道标识
uint8 valid_flag; // 通道标识
uint8 reserve; // 保留
}detector_camera_dot_struct;
}seekfree_assistant_camera_dot_struct;
typedef struct
{
void *image_addr; // 摄像头地址
uint16 width; // 图像宽度
uint16 height; // 图像高度
detector_image_type_enum camera_type; // 摄像头类型
void *boundary_x[DETECTOR_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
void *boundary_y[DETECTOR_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}detector_camera_buffer_struct;
seekfree_assistant_image_type_enum camera_type; // 摄像头类型
void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
@@ -151,23 +138,24 @@ typedef struct
uint8 channel; // 通道
uint8 check_sum; // 和校验
float data; // 数据
}detector_parameter_struct;
}seekfree_assistant_parameter_struct;
extern detector_oscilloscope_struct detector_oscilloscope_data; // 虚拟示波器数据
extern float detector_parameter[DETECTOR_SET_PARAMETR_COUNT]; // 保存接收到的参数
extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
void detector_oscilloscope_send (detector_oscilloscope_struct *detector_oscilloscope);
void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
void detector_camera_information_config (detector_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
void detector_camera_boundary_config (detector_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
void detector_camera_send (void);
void detector_data_analysis (void);
void detector_init (detector_transfer_type_enum transfer_type);
void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
void seekfree_assistant_camera_send (void);
void seekfree_assistant_data_analysis (void);
void seekfree_assistant_init (void);
#endif

View File

@@ -0,0 +1,72 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> seekfree_assistant_interface
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.9.4
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2023-11-29 pudding first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
uint32 len = 0;
len = debug_send_buffer(buff, length);
return len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length Ҫ<><D2AA><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
uint32 len = 0;
len = debug_read_ring_buffer(buff, length);
return len;
}

View File

@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
static fifo_struct bluetooth_ch9141_fifo; // fifo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B6A8>
static fifo_obj_struct bluetooth_ch9141_fifo; // fifo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B6A8>
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint8 bluetooth_ch9141_data = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>

View File

@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
fifo_struct camera_receiver_fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fifo<66><EFBFBD><E1B9B9>
fifo_obj_struct camera_receiver_fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fifo<66><EFBFBD><E1B9B9>
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD><CDB5><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>֡ͷ

View File

@@ -44,7 +44,7 @@
//=================================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
extern fifo_struct camera_receiver_fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fifo<66><EFBFBD><E1B9B9>
extern fifo_obj_struct camera_receiver_fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fifo<66><EFBFBD><E1B9B9>
extern uint8 camera_send_image_frame_header[4]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD><CDB5><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>֡ͷ
//=================================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================

View File

@@ -1,628 +0,0 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_detector
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.9.4
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2023-05-27 pudding first version
********************************************************************************************************************/
#include "zf_driver_uart.h"
#include "zf_common_fifo.h"
#include "zf_device_wireless_uart.h"
#include "zf_device_bluetooth_ch9141.h"
#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "zf_device_detector.h"
typedef uint32 (*detector_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*detector_receive_callback_function) (uint8 *buff, uint32 length);
detector_transfer_type_enum detector_transfer_type; // <20><><EFBFBD>ݴ<EFBFBD><DDB4>ʽ
detector_transfer_callback_function detector_transfer_callback; // <20><><EFBFBD>ݷ<EFBFBD><DDB7>ͺ<EFBFBD><CDBA><EFBFBD>ָ<EFBFBD><D6B8>
detector_receive_callback_function detector_receive_callback; // <20><><EFBFBD>ݽ<EFBFBD><DDBD>պ<EFBFBD><D5BA><EFBFBD>ָ<EFBFBD><D6B8>
detector_oscilloscope_struct detector_oscilloscope_data; // <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static detector_camera_struct detector_camera_data; // ͼ<><CDBC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static detector_camera_dot_struct detector_camera_dot_data; // ͼ<><CDBC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static detector_camera_buffer_struct detector_camera_buffer; // ͼ<><CDBC><EFBFBD>Լ<EFBFBD><D4BC>߽绺<DFBD><E7BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
static fifo_struct detector_fifo;
static uint8 detector_buffer[DETECTOR_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float detector_parameter[DETECTOR_SET_PARAMETR_COUNT]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>IJ<EFBFBD><C4B2><EFBFBD>
////-------------------------------------------------------------------------------------------------------------------
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4>ڷ<EFBFBD><DAB7>ͺ<EFBFBD><CDBA><EFBFBD>
//// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
//// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
//// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
//// ʹ<><CAB9>ʾ<EFBFBD><CABE>
////-------------------------------------------------------------------------------------------------------------------
//uint32 detector_debug_uart_transfer (const uint8 *buff, uint32 length)
//{
// uart_write_buffer(DEBUG_UART_INDEX, buff, length);
// return 0;
//}
////-------------------------------------------------------------------------------------------------------------------
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4>ڽ<EFBFBD><DABD>պ<EFBFBD><D5BA><EFBFBD>
//// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
//// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>յij<D5B5><C4B3><EFBFBD>
//// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʵ<>ʽ<EFBFBD><CABD>ճ<EFBFBD><D5B3><EFBFBD>
//// ʹ<><CAB9>ʾ<EFBFBD><CABE>
////-------------------------------------------------------------------------------------------------------------------
//uint32 detector_debug_uart_receive (uint8 *buff, uint32 length)
//{
// return debug_read_ring_buffer(buff, length);
//}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ֽڷ<D6BD><DAB7>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
static uint8 detector_custom_write_byte(const uint8 data)
{
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ֽڷ<D6BD><DAB7><EFBFBD>
return 0;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ʽ<E4B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>ַ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
//-------------------------------------------------------------------------------------------------------------------
uint32 detector_custom_transfer (const uint8 *buff, uint32 length)
{
uint32 send_length;
send_length = length;
while(send_length--)
{
detector_custom_write_byte(*buff);
buff++;
}
return send_length;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> <20><><EFBFBD>ֽڽ<D6BD><DABD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0:<3A><><EFBFBD>ճɹ<D5B3> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> detector_custom_receive_byte <20><> detector_custom_receive<76><65><EFBFBD><EFBFBD> ֻ<><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint8 detector_custom_receive_byte (uint8 data)
{
uint8 return_state = 0;
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ֽڷ<D6BD><DAB7><EFBFBD>
if(FIFO_SUCCESS != fifo_write_buffer(&detector_fifo, &data, 1))
{
return_state = 1;
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0:<3A><><EFBFBD>ճɹ<D5B3> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> detector_custom_receive_byte <20><> detector_custom_receive<76><65><EFBFBD><EFBFBD> ֻ<><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint8 detector_custom_receive (uint8 *buff, uint32 length)
{
uint8 return_state = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>FIFO
if(FIFO_SUCCESS != fifo_write_buffer(&detector_fifo, buff, length))
{
return_state = 1;
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4>ͷ<EFBFBD><CDB7>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *send_data <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> send_length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
static uint32 detector_transfer (void *send_data, uint32 send_length)
{
return detector_transfer_callback((const uint8 *)send_data, send_length);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer <20><>ҪУ<D2AA><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length У<><EFBFBD><E9B3A4>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
static uint8 detector_sum (uint8 *buffer, uint32 length)
{
uint8 temp_sum = 0;
while(length--)
{
temp_sum += *buffer++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD> ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> camera_type <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *image_addr ͼ<><CDBC><EFBFBD>׵<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> boundary_num ͼ<><CDBC><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC><EFBFBD>߶<EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
void detector_camera_data_send (detector_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
{
uint32 image_size = 0;
detector_camera_data.head = DETECTOR_SEND_HEAD;
detector_camera_data.function = DETECTOR_CAMERA_FUNCTION;
detector_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num;
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD>鲿<EFBFBD><E9B2BF>
detector_camera_data.length = sizeof(detector_camera_struct);
detector_camera_data.image_width = width;
detector_camera_data.image_height = height;
// <20><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD><EFBFBD>ܡ<EFBFBD><DCA1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>͡<EFBFBD><CDA1>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ȸ߶ȵ<DFB6><C8B5><EFBFBD>Ϣ
detector_transfer(&detector_camera_data, sizeof(detector_camera_struct));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>С
switch(camera_type)
{
case DETECTOR_OV7725_BIN:
{
image_size = width * height / 8;
}break;
case DETECTOR_MT9V03X:
{
image_size = width * height;
}break;
case DETECTOR_SCC8660:
{
image_size = width * height * 2;
}break;
}
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(NULL != image_addr)
{
detector_transfer(image_addr, image_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD> ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD>߻<EFBFBD><DFBB>ƺ<EFBFBD><C6BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> boundary_id <20><><EFBFBD><EFBFBD>ID
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_num <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *dot_x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *dot_y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC><EFBFBD>߶<EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
void detector_camera_dot_send (detector_camera_buffer_struct *buffer)
{
uint8 i;
uint16 dot_bytes = 0; // <20><><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
wifi_spi_send_multi_struct multi_buffer;
dot_bytes = detector_camera_dot_data.dot_num;
if(detector_camera_dot_data.dot_type & (1 << 5))
{
dot_bytes *= 2;
}
// <20><><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>ʱ WIFI SPI<50><49><EFBFBD>ö<EFBFBD>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>,<2C><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD><EFBFBD>ٶ<EFBFBD>
if(DETECTOR_WIFI_SPI == detector_transfer_type)
{
multi_buffer.source[0] = (uint8 *)&detector_camera_dot_data;
multi_buffer.length[0] = sizeof(detector_camera_dot_struct);
for(i=0; i < DETECTOR_CAMERA_MAX_BOUNDARY; i++)
{
multi_buffer.source[i * 2 + 1] = buffer->boundary_x[i];
multi_buffer.source[i * 2 + 2] = buffer->boundary_y[i];
multi_buffer.length[i * 2 + 1] = dot_bytes;
multi_buffer.length[i * 2 + 2] = dot_bytes;
}
wifi_spi_send_buffer_multi(&multi_buffer);
}
else
{
// <20><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD><EFBFBD>ܡ<EFBFBD><DCA1>߽<EFBFBD><DFBD><EFBFBD><EFBFBD>š<EFBFBD><C5A1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
detector_transfer(&detector_camera_dot_data, sizeof(detector_camera_dot_struct));
for(i=0; i < DETECTOR_CAMERA_MAX_BOUNDARY; i++)
{
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(NULL != buffer->boundary_x[i])
{
detector_transfer(buffer->boundary_x[i], dot_bytes);
}
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(NULL != buffer->boundary_y[i])
{
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ʾÿһ<C3BF><D2BB>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD>߽<EFBFBD>
// ָ<><D6B8><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ͬһ<CDAC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
detector_transfer(buffer->boundary_y[i], dot_bytes);
}
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD> <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *detector_oscilloscope ʾ<><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> detector_oscilloscope_send(&detector_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
void detector_oscilloscope_send (detector_oscilloscope_struct *detector_oscilloscope)
{
uint8 packet_size;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
detector_oscilloscope->channel_num &= 0x0f;
zf_assert(DETECTOR_SET_OSCILLOSCOPE_COUNT >= detector_oscilloscope->channel_num);
// ֡ͷ
detector_oscilloscope->head = DETECTOR_SEND_HEAD;
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
packet_size = sizeof(detector_oscilloscope_struct) - (DETECTOR_SET_OSCILLOSCOPE_COUNT - detector_oscilloscope->channel_num) * 4;
detector_oscilloscope->length = packet_size;
// д<><EFBFBD><EBB9A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
detector_oscilloscope->channel_num |= DETECTOR_CAMERA_OSCILLOSCOPE;
// <20><>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
detector_oscilloscope->check_sum = 0;
detector_oscilloscope->check_sum = detector_sum((uint8 *)&detector_oscilloscope_data, packet_size);
// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>detector_oscilloscope_data.data[]
detector_transfer((uint8 *)detector_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> camera_type ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_addr ͼ<><CDBC><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾֻ<CABE><D6BB><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC><EFBFBD>߶<EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> detector_camera_information_config(DETECTOR_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void detector_camera_information_config (detector_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
{
detector_camera_dot_data.head = DETECTOR_SEND_HEAD;
detector_camera_dot_data.function = DETECTOR_CAMERA_DOT_FUNCTION;
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
detector_camera_dot_data.length = sizeof(detector_camera_dot_struct);
detector_camera_buffer.camera_type = camera_type;
detector_camera_buffer.image_addr = image_addr;
detector_camera_buffer.width = width;
detector_camera_buffer.height = height;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> boundary_type <20>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_num һ<><D2BB><EFBFBD>߽<EFBFBD><DFBD>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_x1 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>1
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_x2 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>2
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_x3 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>3
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_y1 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>1
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_y2 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>2
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dot_y3 <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>3
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> detector_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> detector_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> detector_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void detector_camera_boundary_config (detector_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3)
{
uint8 i = 0;
uint8 boundary_num = 0;
uint8 boundary_data_type = 0;
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ô˺<C3B4><CBBA><EFBFBD>֮ǰ<D6AE><C7B0>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>detector_camera_config<69><67><EFBFBD>ú<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Ϣ
zf_assert(0 != detector_camera_buffer.camera_type);
detector_camera_dot_data.dot_num = dot_num;
detector_camera_dot_data.valid_flag = 0;
for(i = 0; i < 3; i++)
{
detector_camera_buffer.boundary_x[i] = NULL;
detector_camera_buffer.boundary_y[i] = NULL;
}
switch(boundary_type)
{
case X_BOUNDARY:
{
if(NULL != dot_x1)
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 0;
detector_camera_buffer.boundary_x[i++] = dot_x1;
}
if(NULL != dot_x2)
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 1;
detector_camera_buffer.boundary_x[i++] = dot_x2;
}
if(NULL != dot_x3)
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 2;
detector_camera_buffer.boundary_x[i++] = dot_x3;
}
if(255 < detector_camera_buffer.height)
{
boundary_data_type = 1;
}
}break;
case Y_BOUNDARY:
{
if(NULL != dot_y1)
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 0;
detector_camera_buffer.boundary_y[i++] = dot_y1;
}
if(NULL != dot_y2)
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 1;
detector_camera_buffer.boundary_y[i++] = dot_y2;
}
if(NULL != dot_y3)
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 2;
detector_camera_buffer.boundary_y[i++] = dot_y3;
}
if(255 < detector_camera_buffer.width)
{
boundary_data_type = 1;
}
}break;
case XY_BOUNDARY:
{
if((NULL != dot_x1) && (NULL != dot_y1))
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 0;
detector_camera_buffer.boundary_x[i] = dot_x1;
detector_camera_buffer.boundary_y[i++] = dot_y1;
}
if((NULL != dot_x2) && (NULL != dot_y2))
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 1;
detector_camera_buffer.boundary_x[i] = dot_x2;
detector_camera_buffer.boundary_y[i++] = dot_y2;
}
if((NULL != dot_x3) && (NULL != dot_y3))
{
boundary_num++;
detector_camera_dot_data.valid_flag |= 1 << 2;
detector_camera_buffer.boundary_x[i] = dot_x3;
detector_camera_buffer.boundary_y[i++] = dot_y3;
}
if((255 < detector_camera_buffer.width) || (255 < detector_camera_buffer.height))
{
boundary_data_type = 1;
}
}break;
case NO_BOUNDARY:break;
}
detector_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڵ<EFBFBD><DAB5><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>detector_camera_config<69><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void detector_camera_send (void)
{
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
zf_assert(0 != detector_camera_buffer.camera_type);
detector_camera_data_send(detector_camera_buffer.camera_type, detector_camera_buffer.image_addr, detector_camera_dot_data.dot_type & 0x0f, detector_camera_buffer.width, detector_camera_buffer.height);
if(detector_camera_dot_data.dot_type & 0x0f)
{
detector_camera_dot_send(&detector_camera_buffer);
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>PIT<49>жϻ<D0B6><CFBB><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void detector_data_analysis (void)
{
uint8 temp_sum;
uint32 read_length;
detector_parameter_struct *receive_packet;
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>uint32<33><32><EFBFBD>ж<EFBFBD><D0B6>壬Ŀ<E5A3AC><C4BF><EFBFBD><EFBFBD>Ϊ<EFBFBD>˱<EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
uint32 temp_buffer[DETECTOR_BUFFER_SIZE / 4];
// <20><><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>ʽ<E4B7BD><CABD><EFBFBD>ӽ<EFBFBD><D3BD>ջص<D5BB><D8B5>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
if(DETECTOR_CUSTOM != detector_transfer_type)
{
read_length = detector_receive_callback((uint8 *)temp_buffer, DETECTOR_BUFFER_SIZE);
if(read_length)
{
// <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>FIFO
fifo_write_buffer(&detector_fifo, (uint8 *)temp_buffer, read_length);
}
}
while(sizeof(detector_parameter_struct) <= fifo_used(&detector_fifo))
{
read_length = sizeof(detector_parameter_struct);
fifo_read_buffer(&detector_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY);
if(DETECTOR_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
{
// û<><C3BB>֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD>FIFO<46><4F>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
read_length = 1;
}
else
{
// <20>ҵ<EFBFBD>֡ͷ
receive_packet = (detector_parameter_struct *)temp_buffer;
temp_sum = receive_packet->check_sum;
receive_packet->check_sum = 0;
if(temp_sum == detector_sum((uint8 *)temp_buffer, sizeof(detector_parameter_struct)))
{
// <20><>У<EFBFBD><D0A3><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
detector_parameter[receive_packet->channel - 1] = receive_packet->data;
}
else
{
read_length = 1;
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
fifo_read_buffer(&detector_fifo, NULL, &read_length, FIFO_READ_AND_CLEAN);
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>δ<EFBFBD><CEB4><EFBFBD> <20><>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> transfer_type ѡ<><D1A1>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
//-------------------------------------------------------------------------------------------------------------------
void detector_init (detector_transfer_type_enum transfer_type)
{
detector_transfer_type = transfer_type;
fifo_init(&detector_fifo, FIFO_DATA_8BIT, detector_buffer, DETECTOR_BUFFER_SIZE);
switch(detector_transfer_type)
{
case DETECTOR_DEBUG_UART:
{
detector_transfer_callback = debug_send_buffer;
detector_receive_callback = debug_read_ring_buffer;
}break;
case DETECTOR_WIRELESS_UART:
{
detector_transfer_callback = wireless_uart_send_buffer;
detector_receive_callback = wireless_uart_read_buffer;
}break;
case DETECTOR_CH9141:
{
detector_transfer_callback = bluetooth_ch9141_send_buffer;
detector_receive_callback = bluetooth_ch9141_read_buffer;
}break;
case DETECTOR_WIFI_UART:
{
detector_transfer_callback = wifi_uart_send_buffer;
detector_receive_callback = wifi_uart_read_buffer;
}break;
case DETECTOR_WIFI_SPI:
{
detector_transfer_callback = wifi_spi_send_buffer;
detector_receive_callback = wifi_spi_read_buffer;
}break;
case DETECTOR_CUSTOM:
{
// <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>detector_custom_write_byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ<DDB5><C4B4><EFBFBD>
detector_transfer_callback = detector_custom_transfer;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD>ջص<D5BB>
// <20>ں<EFBFBD><DABA>ʵ<EFBFBD>λ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>detector_custom_receive <20><><EFBFBD><EFBFBD> detector_custom_receive_byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
// detector_custom_receive <20><><EFBFBD><EFBFBD> detector_custom_receive_byte<74><65><EFBFBD><EFBFBD> ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>ֽڽ<D6BD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻᱻд<E1B1BB><D0B4>detector_fifo<66>У<EFBFBD> <20>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
//detector_receive_callback = detector_custom_receive;
}break;
}
}

View File

@@ -58,7 +58,7 @@ uint8 gps_tau1201_flag = 0;
gps_info_struct gps_tau1201; // GPS<50><53><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint8 gps_tau1201_state = 0; // 1<><31>GPS<50><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static fifo_struct gps_tau1201_receiver_fifo; //
static fifo_obj_struct gps_tau1201_receiver_fifo; //
static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga <20><><EFBFBD><EFBFBD>״̬

View File

@@ -501,11 +501,11 @@ uint8 ov7725_init (void)
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
if(ov7725_get_config(ov7725_get_confing_buffer))
{
uart_rx_interrupt(OV7725_COF_UART, 0);
system_delay_ms(200);
set_camera_type(CAMERA_BIN_IIC, ov7725_vsync_handler, ov7725_dma_handler, ov7725_uart_handler); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
if(ov7725_iic_init())
{
uart_rx_interrupt(OV7725_COF_UART, 0);
system_delay_ms(200);
set_camera_type(CAMERA_BIN_IIC, ov7725_vsync_handler, ov7725_dma_handler, NULL); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
if(ov7725_iic_init())
{
zf_log(0, "OV7725 IIC error.");
set_camera_type(NO_CAMERE, NULL, NULL, NULL);
return_state = 1;

View File

@@ -65,7 +65,7 @@
#define WAIT_TIME_OUT (10000) // <20><>ָ<EFBFBD><D6B8><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ<EFBFBD><CEBB>ms
#define WIFI_SPI_WRITE_MAX 4092 // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>SPIͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
#define WIFI_SPI_WRITE_MAX 128 // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>SPIͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
#define WIFI_SPI_WRITE_REQUEST 0x01
#define WIFI_SPI_CHECK_STATE 0x02
@@ -80,7 +80,7 @@
volatile wifi_spi_buffer_state_enum wifi_buffer_state;
volatile wifi_spi_transmit_state_enum wifi_transmit_state;
static fifo_struct wifi_spi_fifo;
static fifo_obj_struct wifi_spi_fifo;
static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vuint8 wifi_spi_ack_flag = 0; // 0<><30>ģ<EFBFBD><C4A3>δӦ<CEB4><D3A6> 1<><31>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
@@ -88,7 +88,7 @@ uint8 wifi_spi_init_flag; // 0
vuint8 wifi_spi_packet_num; // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݰ<EFBFBD>ID
vuint32 wifi_spi_send_remain_length; // ʣ<><CAA3><EFBFBD>ķ<EFBFBD><C4B7>ͳ<EFBFBD><CDB3><EFBFBD>
uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
wifi_spi_information_struct wifi_spi_information;
//-------------------------------------------------------------------------------------------------------------------
@@ -145,7 +145,7 @@ static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// @return void
// Sample usage:
//-------------------------------------------------------------------------------------------------------------------
@@ -165,7 +165,26 @@ static void wifi_spi_send_done(void)
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// @return void
// Sample usage:
//-------------------------------------------------------------------------------------------------------------------
static void wifi_spi_receive_start(void)
{
wifi_spi_buffer_struct head;
head.cmd = WIFI_SPI_READ_DATA;
head.addr = WIFI_SPI_WRITE_ADDR;
head.dummy = 0x00;
gpio_set_level(WIFI_SPI_CS_PIN, 0);
spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
wifi_transmit_state = TRANSMIT_READ;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// @return void
// Sample usage:
//-------------------------------------------------------------------------------------------------------------------
@@ -173,6 +192,8 @@ static void wifi_spi_receive_done(void)
{
wifi_spi_buffer_struct head;
gpio_set_level(WIFI_SPI_CS_PIN, 1);
head.cmd = WIFI_SPI_READ_END;
head.addr = WIFI_SPI_WRITE_ADDR;
head.dummy = 0x00;
@@ -242,18 +263,7 @@ static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
//-------------------------------------------------------------------------------------------------------------------
static void wifi_spi_receive_data(uint8 *buff, uint16 length)
{
wifi_spi_buffer_struct head;
head.cmd = WIFI_SPI_READ_DATA;
head.addr = WIFI_SPI_WRITE_ADDR;
head.dummy = 0x00;
wifi_transmit_state = TRANSMIT_READ;
gpio_set_level(WIFI_SPI_CS_PIN, 0);
spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 3);
spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)buff, buff, length);
gpio_set_level(WIFI_SPI_CS_PIN, 1);
wifi_spi_receive_done();
spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -309,22 +319,38 @@ static void wifi_spi_send_command(const char *str)
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ȡģ<C8A1><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// @return void
// Sample usage:
//-------------------------------------------------------------------------------------------------------------------
void wifi_spi_check_state_read_buffer(void)
{
uint16 wifi_spi_receive_length; // <20><><EFBFBD>ν<EFBFBD><CEBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
// <20><>ѯWIFIģ<49><C4A3><EFBFBD><EFBFBD>״̬
wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡWIFIģ<49><C4A3><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>򱣴<EFBFBD><F2B1A3B4><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
if(BUFFER_READ == wifi_buffer_state)
{
wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // <20><><EFBFBD><EFBFBD> FIFO
wifi_spi_receive_start();
do
{
if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
{
wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // <20><><EFBFBD><EFBFBD> FIFO
wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
}
else
{
wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // <20><><EFBFBD><EFBFBD> FIFO
wifi_spi_receive_length = 0;
}
}while(wifi_spi_receive_length > 0);
wifi_spi_receive_done();
}
else if(BUFFER_IDLE == wifi_buffer_state)
{
@@ -335,7 +361,7 @@ void wifi_spi_check_state_read_buffer(void)
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ģ<EFBFBD><C4A3>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
// @return uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// Sample usage:
@@ -787,7 +813,7 @@ static uint8 wifi_spi_set_transfer_model (char *model)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> state 0:<3A><> Wi-Fi ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>ҹر<D2B9> Wi-Fi RF----1: Station ģʽ----2: SoftAP ģʽ----3: SoftAP+Station ģʽ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_set_model("1");
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//--------------------------------------------------------------------------------------------------
uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
{
@@ -836,7 +862,7 @@ uint8 wifi_spi_close_sleep_model (void)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_disconnected_wifi();
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//--------------------------------------------------------------------------------------------------
uint8 wifi_spi_disconnected_wifi (void)
{
@@ -855,7 +881,7 @@ uint8 wifi_spi_disconnected_wifi (void)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_entry_serianet();
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//--------------------------------------------------------------------------------------------------
uint8 wifi_spi_entry_serianet (void)
{
@@ -874,7 +900,7 @@ uint8 wifi_spi_entry_serianet (void)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> model 0:<3A>ر<EFBFBD>͸<EFBFBD><CDB8>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_exit_serianet(1);
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//--------------------------------------------------------------------------------------------------
uint8 wifi_spi_exit_serianet (void)
{
@@ -1042,7 +1068,7 @@ uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_disconnect_link();
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//--------------------------------------------------------------------------------------------------
uint8 wifi_spi_disconnect_link (void)
{
@@ -1191,7 +1217,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFiģ<69><C4A3> <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *multi_buffer <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ<EFBFBD>Լ<EFBFBD>ÿ<EFBFBD><C3BF>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>Ҫ<EFBFBD><D2AA><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ͨѶʱ<D1B6><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3>Ȳ<EFBFBD><C8B2>ܳ<EFBFBD><DCB3><EFBFBD>4092
//-------------------------------------------------------------------------------------------------------------------
uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
@@ -1278,7 +1304,7 @@ uint32 wifi_spi_send_string (const char *str)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>sizeof<6F><66><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʽ<EFBFBD><CABD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
// <20><>ע<EFBFBD><D7A2>Ϣ
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
{
@@ -1289,7 +1315,7 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
//--------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> wifi spi handshake<6B>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//--------------------------------------------------------------------------------------------------
void wifi_spi_callback (void)

View File

@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static fifo_struct wifi_uart_fifo;
static fifo_obj_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint8 wifi_uart_data;

View File

@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
static fifo_struct wireless_uart_fifo;
static fifo_obj_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;

View File

@@ -31,6 +31,7 @@
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-11-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
********************************************************************************************************************/
#ifndef _zf_driver_delay_h_

View File

@@ -85,7 +85,7 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_
uint8 list_num, i;
uint16 single_channel_dma_count;
zf_assert(!(dma_count%8)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ8<CEAA>ı<EFBFBD><C4B1><EFBFBD>
zf_assert(!(dma_count % 8)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ8<CEAA>ı<EFBFBD><C4B1><EFBFBD>
list_num = 1;

View File

@@ -402,7 +402,6 @@ void uart_rx_interrupt (uart_index_enum uart_n, uint32 status)
{
IfxSrc_disable(src);
}
}
//-------------------------------------------------------------------------------------------------------------------