diff --git a/Example/Coreboard_Demo/E00【必读】例程功能说明.xlsx.lnk b/Example/Coreboard_Demo/E00【必读】例程功能说明.xlsx.lnk
deleted file mode 100644
index ef0f3e0..0000000
Binary files a/Example/Coreboard_Demo/E00【必读】例程功能说明.xlsx.lnk and /dev/null differ
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E01_gpio_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E01_gpio_demo/user/isr.c b/Example/Coreboard_Demo/E01_gpio_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E01_gpio_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E01_gpio_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E02_uart_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E02_uart_demo/user/isr.c b/Example/Coreboard_Demo/E02_uart_demo/user/isr.c
index 7dc0dd2..927ed43 100644
--- a/Example/Coreboard_Demo/E02_uart_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E02_uart_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -175,14 +174,14 @@ IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO)
}
-//IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO)
-//{
-// interrupt_global_enable(0); // жǶ
-//
-//#if DEBUG_UART_USE_INTERRUPT // debug ж
-// debug_interrupr_handler(); // debug ڽմ ݻᱻ debug λȡ
-//#endif // DEBUG_UART_INDEX δҪŵӦĴжȥ
-//}
+IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO)
+{
+ interrupt_global_enable(0); // жǶ
+
+#if DEBUG_UART_USE_INTERRUPT // debug ж
+ debug_interrupr_handler(); // debug ڽմ ݻᱻ debug λȡ
+#endif // DEBUG_UART_INDEX δҪŵӦĴжȥ
+}
// 1Ĭӵͷô
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E03_adc_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E03_adc_demo/user/isr.c b/Example/Coreboard_Demo/E03_adc_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E03_adc_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E03_adc_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E04_pwm_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E04_pwm_demo/user/isr.c b/Example/Coreboard_Demo/E04_pwm_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E04_pwm_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E04_pwm_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E05_pit_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E05_pit_demo/user/isr.c b/Example/Coreboard_Demo/E05_pit_demo/user/isr.c
index daa57f0..927ed43 100644
--- a/Example/Coreboard_Demo/E05_pit_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E05_pit_demo/user/isr.c
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E06_exit_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E06_exit_demo/user/isr.c b/Example/Coreboard_Demo/E06_exit_demo/user/isr.c
index b0ca6eb..927ed43 100644
--- a/Example/Coreboard_Demo/E06_exit_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E06_exit_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -83,45 +83,45 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY)
// **************************** ⲿжϺ ****************************
-//IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
-//{
-// interrupt_global_enable(0); // жǶ
-// if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
-// {
-// exti_flag_clear(ERU_CH0_REQ0_P15_4);
-//
-// }
-//
-// if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
-// {
-// exti_flag_clear(ERU_CH4_REQ13_P15_5);
-//
-//
-//
-//
-// }
-//}
-//
-//IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
-//{
-// interrupt_global_enable(0); // жǶ
-//
-// if(exti_flag_get(ERU_CH1_REQ10_P14_3)) // ͨ1ж
-// {
-// exti_flag_clear(ERU_CH1_REQ10_P14_3);
-//
-// tof_module_exti_handler(); // ToF ģ INT ж
-//
-// }
-//
-// if(exti_flag_get(ERU_CH5_REQ1_P15_8)) // ͨ5ж
-// {
-// exti_flag_clear(ERU_CH5_REQ1_P15_8);
-//
-//
-//
-// }
-//}
+IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
+{
+ interrupt_global_enable(0); // жǶ
+ if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
+ {
+ exti_flag_clear(ERU_CH0_REQ0_P15_4);
+
+ imu660rc_callback(); // 660RC ģ INT ж
+ }
+
+ if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
+ {
+ exti_flag_clear(ERU_CH4_REQ13_P15_5);
+
+
+
+
+ }
+}
+
+IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
+{
+ interrupt_global_enable(0); // жǶ
+
+ if(exti_flag_get(ERU_CH1_REQ10_P14_3)) // ͨ1ж
+ {
+ exti_flag_clear(ERU_CH1_REQ10_P14_3);
+
+ tof_module_exti_handler(); // ToF ģ INT ж
+
+ }
+
+ if(exti_flag_get(ERU_CH5_REQ1_P15_8)) // ͨ5ж
+ {
+ exti_flag_clear(ERU_CH5_REQ1_P15_8);
+
+
+ }
+}
// ͷpclkĬռ 2ͨڴDMAﲻٶжϺ
// IFX_INTERRUPT(exti_ch2_ch6_isr, 0, EXTI_CH2_CH6_INT_PRIO)
@@ -136,7 +136,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E07_encoder_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E07_encoder_demo/user/isr.c b/Example/Coreboard_Demo/E07_encoder_demo/user/isr.c
index daa57f0..927ed43 100644
--- a/Example/Coreboard_Demo/E07_encoder_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E07_encoder_demo/user/isr.c
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/user/isr.c b/Example/Coreboard_Demo/E08_eeprom_demo/user/isr.c
index 7b5a1e9..927ed43 100644
--- a/Example/Coreboard_Demo/E08_eeprom_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E08_eeprom_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,11 +228,12 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
}
+
// ͨѶж
IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO)
{
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E09_timer_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E09_timer_demo/user/isr.c b/Example/Coreboard_Demo/E09_timer_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E09_timer_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E09_timer_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/user/isr.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/user/isr.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/user/isr.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/user/isr.c
index daa57f0..927ed43 100644
--- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/user/isr.c
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/user/isr.c b/Example/Coreboard_Demo/E13_dual_core_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E13_dual_core_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E13_dual_core_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/user/isr.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E15_fft_demo/libraries/doc/version.txt
index 1e222a3..8ce85ca 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/doc/version.txt
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/doc/version.txt
@@ -1,3 +1,13 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
+V3.4.3
+ 660RC
+V3.4.2
+ printfضеĺ궨
+ WIFI_SPI
V3.4.1
Ĵڷ麯еķ
ips200proע
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
index 27b7965..e8d6021 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
@@ -91,6 +91,7 @@
#include "zf_device_imu660ra.h"
#include "zf_device_imu660rb.h"
#include "zf_device_imu660rx.h"
+#include "zf_device_imu660rc.h"
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/printf_redirect.c
index c44d826..299da76 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/printf_redirect.c
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/printf_redirect.c
@@ -45,7 +45,7 @@
//-------------------------------------------------------------------------------------------------------------------
int fputc(int ch, FILE *stream)
{
- uart_write_byte(DEBUG_UART_INDEX, (char)ch);
+ uart_write_byte(PRINTF_USE_UART, (char)ch);
return (ch);
}
@@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len)
int fgetc(FILE *f)
{
#if PRINTF_OUTPUT_TYPE == 0
- return uart_read_byte(DEBUG_UART_INDEX);
+ return uart_read_byte(PRINTF_USE_UART);
#else
uint8 buf;
wifi_spi_read_buffer(&buf, 1);
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.c
new file mode 100644
index 0000000..68840e2
--- /dev/null
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.c
@@ -0,0 +1,563 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#include "math.h"
+#include "zf_common_debug.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_spi.h"
+#include "zf_driver_gpio.h"
+#include "zf_driver_soft_iic.h"
+#include "zf_device_config.h"
+#include "zf_driver_uart.h"
+#include "zf_driver_exti.h"
+
+#include "zf_device_imu660rc.h"
+
+#ifndef M_PI
+#define M_PI 3.1415926f
+#endif
+
+
+static uint8 imu660rc_quarternion_rate;
+
+float imu660rc_transition_factor[2];
+int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro ()
+int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ)
+float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ
+float imu660rc_quarternion[4]; // Ԫ
+
+
+
+#if IMU660RC_USE_SOFT_IIC
+static soft_iic_info_struct imu660rc_iic_struct;
+
+#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data)))
+#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len)))
+#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg)))
+#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len)))
+#else
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC дĴ
+// ˵ reg Ĵַ
+// ˵ data
+// ز void
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_write_register (uint8 reg, uint8 data)
+{
+ IMU660RC_CS(0);
+ spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data);
+ IMU660RC_CS(1);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ĵ
+// ˵ reg Ĵַ
+// ز uint8
+// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_read_register (uint8 reg)
+{
+ uint8 data;
+ IMU660RC_CS(0);
+ data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R);
+ IMU660RC_CS(1);
+ return data;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC
+// ˵ reg Ĵַ
+// ˵ data ݻ
+// ˵ len ݳ
+// ز void
+// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6);
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len)
+{
+ IMU660RC_CS(0);
+ spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len);
+ IMU660RC_CS(1);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC fp16ת
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint32 fp16_to_float(uint16 h)
+{
+ uint16 h_exp = (h & 0x7c00u);
+ uint32 f_sgn = ((uint32)h & 0x8000u) << 16;
+ switch (h_exp)
+ {
+ case 0x0000u: // 0 or subnormal
+ {
+ uint16 h_sig = (h & 0x03ffu);
+ // Signed zero
+ if (h_sig == 0)
+ {
+ return f_sgn;
+ }
+ // Subnormal
+ h_sig <<= 1;
+ while ((h_sig & 0x0400u) == 0)
+ {
+ h_sig <<= 1;
+ h_exp++;
+ }
+ uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23;
+ uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13;
+ return f_sgn + f_exp + f_sig;
+ }
+ case 0x7c00u: // inf or NaN
+ {
+ // All-ones exponent and a copy of the significand
+ return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13);
+ }
+ default: // normalized
+ {
+ // Just need to adjust the exponent and shift
+ return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13);
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫһ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_normalize(float quat[4], uint16 *fp16)
+{
+ float n = 0;
+ float temp[4];
+
+ *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]);
+ *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]);
+ *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]);
+ *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]);
+
+ n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3];
+ n = sqrtf(n);
+
+ if(n > 0.001f) // Խӽ0ֵ
+ {
+ n = temp[3] < 0.0f ? -n : n;
+
+ quat[0] = temp[1] / n;
+ quat[1] = temp[2] / n;
+ quat[2] = temp[0] / n;
+ quat[3] = temp[3] / n;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Ԫתŷ
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw)
+{
+ float euler[3];
+
+ float sqx = quat[0] * quat[0];
+ float sqy = quat[1] * quat[1];
+ float sqz = quat[2] * quat[2];
+
+ euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx));
+ euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2]));
+ euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz));
+
+ // תǶ
+ euler[0] = 180 * (euler[0]) / M_PI;
+ euler[1] = 180 * (euler[1]) / M_PI;
+ euler[2] = 180 * (euler[2]) / M_PI;
+
+ // Ƕȵ
+ euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2];
+
+ *roll = euler[0];
+ *pitch = euler[1];
+ *yaw = euler[2];
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ÷
+// ˵ void
+// ز uint8
+// ʹʾ
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank)
+{
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC Լ
+// ˵ void
+// ز uint8 1-Լʧ 0-Լɹ
+// ʹʾ imu660rc_self_check();
+// עϢ ڲ
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 imu660rc_self_check (void)
+{
+ uint8 dat = 0, return_state = 0;
+ uint16 timeout_count = 0;
+ do
+ {
+ if(IMU660RC_TIMEOUT_COUNT < timeout_count ++)
+ {
+ return_state = 1;
+ break;
+ }
+ dat = imu660rc_read_register(IMU660RC_CHIP_ID);
+ system_delay_ms(1);
+ }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû豸
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ٶȼ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_acc (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6);
+ imu660rc_acc_x = dat[0];
+ imu660rc_acc_y = dat[1];
+ imu660rc_acc_z = dat[2];
+ }
+}
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı
+// עϢ ʹ SPI IJɼʱΪ10us
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_gyro (void)
+{
+ int16 dat[3];
+ if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate)
+ { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6);
+ imu660rc_gyro_x = dat[0];
+ imu660rc_gyro_y = dat[1];
+ imu660rc_gyro_z = dat[2];
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// ȡ IMU660RC ԪݲתΪŷ
+// ˵ void
+// ز void
+// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı
+// עϢ ҪINT2Ŵжϵô˺
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_get_quarternion(void)
+{
+ uint8 i;
+ uint16 buff[4];
+ uint8 *buff1_ptr;
+ int16 *buff2_ptr;
+
+ if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate)
+ {
+ buff1_ptr = (uint8 *)buff;
+
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x20);
+ imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31);
+
+ for(i = 0; 8 > i; i++)
+ {
+ imu660rc_write_register(0x08, 0x4C + i);
+ buff1_ptr[i] = imu660rc_read_register(0x09);
+ }
+
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x0);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // Ԫһ
+ quarternion_normalize(imu660rc_quarternion, buff);
+ // Ԫתŷ
+ quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw);
+
+ // ȡٶٶϢ
+ #if(1 == IMU660RC_QUARTERNION_GET_ACC)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6);
+ imu660rc_acc_x = buff2_ptr[0];
+ imu660rc_acc_y = buff2_ptr[1];
+ imu660rc_acc_z = buff2_ptr[2];
+ }
+ #endif
+ #if(1 == IMU660RC_QUARTERNION_GET_GYRO)
+ {
+ buff2_ptr = (int16 *)buff;
+ imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6);
+ imu660rc_gyro_x = buff2_ptr[0];
+ imu660rc_gyro_y = buff2_ptr[1];
+ imu660rc_gyro_z = buff2_ptr[2];
+ }
+ #endif
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RCжϻصҪжڶȡԪ
+// ˵ void
+// ز void
+// ʹʾ
+// עϢ
+//
+//-------------------------------------------------------------------------------------------------------------------
+void imu660rc_callback(void)
+{
+ imu660rc_get_quarternion();
+
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʼ IMU660RC
+// ˵ quarternion_rate ѡԪ
+// ز uint8 1-ʼʧ 0-ʼɹ
+// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ);
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate)
+{
+ uint8 return_state = 0;
+
+ imu660rc_quarternion_rate = quarternion_rate;
+ #if IMU660RC_USE_SOFT_IIC
+ soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿
+
+ #else
+ spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿
+ gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿
+ #endif
+
+ system_delay_ms(10);
+
+ do
+ {
+ if(imu660rc_self_check()) // IMU660RC Լ
+ {
+ // ˶Ϣ ʾλ
+ // ô IMU660RC Լʱ˳
+ // һ½û ûܾǻ
+ zf_log(0, "imu660rc self check error.");
+ return_state = 1;
+ break;
+ }
+
+ // λ
+ imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04);
+ system_delay_ms(30);
+
+ // ÿ¹ַ
+ imu660rc_write_register(IMU660RC_CTRL3, 0x44);
+
+ switch(IMU660RC_ACC_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_2G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x00);
+ imu660rc_transition_factor[0] = 16393.44;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_4G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x01);
+ imu660rc_transition_factor[0] = 8196.72;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_8G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x02);
+ imu660rc_transition_factor[0] = 4098.36;
+ }break;
+ case IMU660RC_ACC_SAMPLE_SGN_16G:
+ {
+ imu660rc_write_register(IMU660RC_CTRL8, 0x03);
+ imu660rc_transition_factor[0] = 2049.18;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ switch(IMU660RC_GYRO_SAMPLE_DEFAULT)
+ {
+ default:
+ {
+ zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error.");
+ return_state = 1;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_125DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x00);
+ imu660rc_transition_factor[1] = 228.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_250DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x01);
+ imu660rc_transition_factor[1] = 114.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_500DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x02);
+ imu660rc_transition_factor[1] = 57.1428;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_1000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x03);
+ imu660rc_transition_factor[1] = 28.5714;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_2000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x04);
+ imu660rc_transition_factor[1] = 14.2857;
+ }break;
+ case IMU660RC_GYRO_SAMPLE_SGN_4000DPS:
+ {
+ imu660rc_write_register(IMU660RC_CTRL6, 0x0C);
+ imu660rc_transition_factor[1] = 7.14285;
+ }break;
+ }
+ if(1 == return_state)
+ {
+ break;
+ }
+
+ // ôģʽΪ߾ģʽԼ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x15);
+ imu660rc_write_register(IMU660RC_CTRL2, 0x18);
+
+ // LPF1˲
+ imu660rc_write_register(IMU660RC_CTRL7, 0x01);
+
+ // LPF2˲
+ imu660rc_write_register(IMU660RC_CTRL9, 0x08);
+
+ // ԪӦ
+ if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate)
+ {
+ // жϴź
+ imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80);
+ imu660rc_write_register(IMU660RC_CTRL4, 0x08);
+ imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30);
+
+ // üٶȡٶ
+ imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3));
+ imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3));
+
+ // Ԫʲ
+ imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK);
+ imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3));
+ imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02);
+ imu660rc_write_register(IMU660RC_PAGE_RW, 0x00);
+ imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK);
+
+ // жϼ
+ exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING);
+ }
+ }while(0);
+
+ return return_state;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.h
new file mode 100644
index 0000000..dd5a9e3
--- /dev/null
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.h
@@ -0,0 +1,211 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
+* Copyright (c) 2022 SEEKFREE ɿƼ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
+* Ըᷢ GPLGNU General Public License GNUͨù֤
+* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
+*
+* Դķϣܷãδκεı֤
+* ûԻʺض;ı֤
+* ϸμ GPL
+*
+* ӦյԴͬʱյһ GPL ĸ
+* ûУ
+*
+* ע
+* Դʹ GPL3.0 Դ֤Э Ϊİ汾
+* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
+* ֤ libraries ļ ļµ LICENSE ļ
+* ӭλʹò ʱ뱣ɿƼİȨ
+*
+* ļ zf_device_imu660rc
+* ˾ ɶɿƼ˾
+* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
+* ADS v1.10.2
+* ƽ̨ TC264
+* https://seekfree.taobao.com/
+*
+* ļ¼
+* ע
+* 2025-12-12 SeekFree first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* ߶壺
+* ------------------------------------
+* ģܽ Ƭܽ
+* // Ӳ SPI
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨
+* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨
+* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨
+* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+*
+* // IIC
+* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨
+* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨
+* VCC 3.3VԴ
+* GND Դ
+*
+* ------------------------------------
+********************************************************************************************************************/
+
+
+#ifndef _zf_device_imu660rc_h_
+#define _zf_device_imu660rc_h_
+
+#include "zf_common_typedef.h"
+
+
+// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC
+// IMU660RC_USE_SOFT_IICҪȱ벢سƬģҪϵͨѶ
+#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ
+
+#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ
+//==================================================== IIC ====================================================
+#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ
+#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL
+#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA
+//==================================================== IIC ====================================================
+#else
+
+//====================================================Ӳ SPI ====================================================
+#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI
+#define IMU660RC_SPI (SPI_0) // Ӳ SPI
+#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK
+#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
+#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO
+//====================================================Ӳ SPI ====================================================
+#endif
+#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ
+#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) )
+#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ
+
+
+#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ
+#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ
+#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ
+
+typedef enum
+{
+ IMU660RC_MAIN_MEM_BANK = 0x00,
+ IMU660RC_HUB_MEM_BANK = 0x40,
+ IMU660RC_EMBED_MEM_BANK = 0x80,
+}imu660rc_mem_bank_enum;
+
+typedef enum
+{
+ IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2)
+ IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G
+ IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G
+ IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G
+}imu660rc_acc_sample_config;
+
+typedef enum
+{
+ IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S)
+ IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS
+ IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS
+ IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS
+ IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS
+}imu660rc_gyro_sample_config;
+
+typedef enum
+{
+ IMU660RC_QUARTERNION_15HZ, // 15 Hz
+ IMU660RC_QUARTERNION_30HZ, // 30 Hz
+ IMU660RC_QUARTERNION_60HZ, // 60 Hz
+ IMU660RC_QUARTERNION_120HZ, // 120Hz
+ IMU660RC_QUARTERNION_240HZ, // 240Hz
+ IMU660RC_QUARTERNION_480HZ, // 480Hz
+ IMU660RC_QUARTERNION_DISABLE, // Ԫ
+}imu660rc_quarternion_rate_config;
+
+
+//================================================ IMU660RC ڲַ================================================
+#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ
+#define IMU660RC_SPI_W ( 0x00 )
+#define IMU660RC_SPI_R ( 0x80 )
+#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ
+
+
+//================================================ IMU660RC Ĵַ================================================
+#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 )
+#define IMU660RC_INT2_CTRL ( 0x0E )
+#define IMU660RC_CHIP_ID ( 0x0F )
+#define IMU660RC_CTRL1 ( 0x10 )
+#define IMU660RC_CTRL2 ( 0x11 )
+#define IMU660RC_CTRL3 ( 0x12 )
+#define IMU660RC_CTRL4 ( 0x13 )
+#define IMU660RC_CTRL5 ( 0x14 )
+#define IMU660RC_CTRL6 ( 0x15 )
+#define IMU660RC_CTRL7 ( 0x16 )
+#define IMU660RC_CTRL8 ( 0x17 )
+#define IMU660RC_CTRL9 ( 0x18 )
+#define IMU660RC_CTRL10 ( 0x19 )
+#define IMU660RC_CTRL_STATUS ( 0x1A )
+#define IMU660RC_STATUS_REG ( 0x1E )
+#define IMU660RC_OUT_TEMP_L ( 0x20 )
+#define IMU660RC_OUT_TEMP_H ( 0x21 )
+#define IMU660RC_OUTX_L_G ( 0x22 )
+#define IMU660RC_OUTX_H_G ( 0x23 )
+#define IMU660RC_OUTY_L_G ( 0x24 )
+#define IMU660RC_OUTY_H_G ( 0x25 )
+#define IMU660RC_OUTZ_L_G ( 0x26 )
+#define IMU660RC_OUTZ_H_G ( 0x27 )
+#define IMU660RC_OUTX_L_A ( 0x28 )
+#define IMU660RC_OUTX_H_A ( 0x29 )
+#define IMU660RC_OUTY_L_A ( 0x2A )
+#define IMU660RC_OUTY_H_A ( 0x2B )
+#define IMU660RC_OUTZ_L_A ( 0x2C )
+#define IMU660RC_OUTZ_H_A ( 0x2D )
+
+#define IMU660RC_PAGE_SEL ( 0x02 )
+#define IMU660RC_EMB_FUNC_EN_A ( 0x04 )
+#define IMU660RC_PAGE_RW ( 0x17 )
+#define IMU660RC_SFLP_ODR ( 0x5E )
+#define IMU660RC_EMB_FUNC_CFG ( 0x63 )
+
+
+
+extern float imu660rc_transition_factor[2];
+extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; //
+extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ
+extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ
+extern float imu660rc_quarternion[4]; // Ԫ
+
+
+void imu660rc_get_acc (void);
+void imu660rc_get_gyro (void);
+void imu660rc_get_quarternion (void);
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC ٶȼתΪʵ
+// ˵ acc_value ļٶȼ
+// ز void
+// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2)
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0])
+
+//-------------------------------------------------------------------------------------------------------------------
+// IMU660RC תΪʵ
+// ˵ gyro_value
+// ز void
+// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1])
+void imu660rc_callback (void);
+uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate);
+
+
+
+#endif
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rx.h
index 45699d9..81b8b41 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rx.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rx.h
@@ -97,7 +97,7 @@
//================================================ IMU660RX ȫֱ================================================
extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro ()
extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ)
-extern float imu660ra_transition_factor[2];
+extern float imu660rx_transition_factor[2];
//================================================ IMU660RX ȫֱ================================================
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c
index b51c600..b06e6a1 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,7 +24,7 @@
* ļ zf_device_wifi_spi
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.9.20
+* ADS v1.10.2
* ƽ̨ TC264D
* https://seekfree.taobao.com/
*
@@ -63,6 +63,21 @@
#define SOCKET_CONNECT_TIME_OUT 50000 // λ
#define OTHER_TIME_OUT 1000 // λ
+#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088))
+ #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088"
+#endif
+
+#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE)
+ #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE"
+#endif
+
+
+#if (WIFI_SPI_TRANSFER_SIZE != 4088)
+ #error "WIFI_SPI_TRANSFER_SIZE must be == 4088"
+#endif
+
+
+
char wifi_spi_version[12]; // ģ̼汾Ϣ
char wifi_spi_mac_addr[20]; // ģMACַϢ
char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ
@@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void)
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void)
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1;
-
return return_state;
}
@@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void)
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
- return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1;
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ȡϵͳʱ
+// ˵ time_format ʱʽ
+// ز *buffer ʱַַ СҪ30ֽ
+// ز buffer_size С
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+ uint8 send_cmd, receive_cmd;
+
+ // ʱ30ֽ
+ // ģ̼V2汾
+ if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2)))
+ {
+ send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0;
+ receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0;
+
+ return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (receive_cmd == temp_packets.head.command))
+ {
+ return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2);
+ if(0 == return_state)
+ {
+ memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3);
+ buffer[temp_packets.head.length - 3] = 0;
+ }
+ }
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ɨȵ
+// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз
+// ˵ buffer_size ij
+// ز uint8 ״̬ 0-ɹ 1-
+// ʹʾ
+// עϢ WIFI SPI ߰汾֧
+// עϢ ϢΪַϢֱprintfֲ鿴
+// עϢ ÿһаһwifi
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size)
+{
+ uint8 return_state;
+
+ // ģV2汾Ĺִ̼֧˹
+ if(!strncmp(wifi_spi_version, "V2", 2))
+ {
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT);
+
+ if(0 == return_state)
+ {
+ #if (0 == WIFI_SPI_READ_TRANSFER)
+ wifi_spi_send_buffer(NULL, 0);
+ #endif
+ while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size))
+ {
+ system_delay_ms(10);
+ }
+ }
+ }
return return_state;
}
@@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
while(length)
{
- send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+ send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length);
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
@@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
return length;
}
+//-------------------------------------------------------------------------------------------------------------------
+// WIFI SPI ַͺͬ
+// ˵ *string Ҫ͵ַ
+// ز void
+// ʹʾ wifi_spi_send_string("123");
+// עϢ
+//-------------------------------------------------------------------------------------------------------------------
+void wifi_spi_send_string(const char *string)
+{
+ wifi_spi_send_buffer((uint8*)string, strlen(string));
+}
+
//-------------------------------------------------------------------------------------------------------------------
// WIFI SPI ȡ
// ˵ *buff ջ
@@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
- uint32 data_len = length;
+ uint32 fifo_read_length;
+ uint32 write_length = 0;
+ wifi_spi_packets_struct temp_packets;
+
+ // жFIFOǷݣȴFIFOȡ
+ if(fifo_used(&wifi_spi_fifo))
+ {
+ fifo_read_length = fifo_used(&wifi_spi_fifo);
+ fifo_read_length = length < fifo_read_length ? length : fifo_read_length;
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN);
+
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ }
#if(1 == WIFI_SPI_READ_TRANSFER)
-
- wifi_spi_packets_struct temp_packets;
- // WIFI SPI״̬жϻ߳ѾͨѶβܷ
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
- // ͨѶ״̬Ϊæ
- wifi_spi_mutex = WIFI_SPI_BUSY;
+ wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ
- // ͨѶ鿴ģǷδȡ
do
{
- if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ
+ (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳
+ )
{
break;
}
+
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// յİǷ
- if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) &&
+ (temp_packets.head.length)
+ )
{
- // յ
- if(temp_packets.head.length)
+ if(length)
+ {
+ fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length;
+ memcpy(buffer, temp_packets.buffer, fifo_read_length);
+ buffer += fifo_read_length;
+ length -= fifo_read_length;
+ write_length += fifo_read_length;
+ if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length);
+ }
+ }
+ else // ȫдFIFO
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
@@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
-#endif
+#endif
- fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
- return data_len;
+ return write_length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
// MACַϢַʽwifi_spi_mac_addr
wifi_spi_get_mac_addr();
-
+ if(NULL == wifi_ssid)
+ {
+ // ʼʱҪWIFI
+ break;
+ }
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h
index eea8a78..e7cec39 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
@@ -95,10 +95,15 @@ typedef enum
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ
+ WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI
+ WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ
WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾
WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ
WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ
+ WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1
+ WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2
+ WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3
// ӻش
WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ
@@ -110,6 +115,9 @@ typedef enum
WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں
+ WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ
+ WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ
+ WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ
WIFI_SPI_INVALID2 = 0xFF // Чݰ
}wifi_spi_packets_command_enum;
@@ -134,19 +142,27 @@ typedef struct
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; //
}wifi_spi_packets_struct;
-
+typedef enum
+{
+ WIFI_SPI_UTC_0 = 1, // ʱ
+ WIFI_SPI_GMT, // ʱ תΪGMTʽGMT һڶԽƶ˴ģʹ
+ WIFI_SPI_UTC_8, // ʱ
+}wifi_spi_time_enum;
+
extern char wifi_spi_version[12]; // ̼汾 ַ
extern char wifi_spi_mac_addr[20]; // ģMACַ ַ
extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ
-uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
-uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
-uint8 wifi_spi_socket_disconnect (void);
-uint8 wifi_spi_udp_send_now (void);
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
+uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size);
+uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size);
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+void wifi_spi_send_string (const char *string);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
-
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);
diff --git a/Example/Coreboard_Demo/E15_fft_demo/user/isr.c b/Example/Coreboard_Demo/E15_fft_demo/user/isr.c
index e19382e..927ed43 100644
--- a/Example/Coreboard_Demo/E15_fft_demo/user/isr.c
+++ b/Example/Coreboard_Demo/E15_fft_demo/user/isr.c
@@ -40,14 +40,14 @@
// ˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ
// **************************** PITжϺ ****************************
-IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
-{
- interrupt_global_enable(0); // жǶ
- pit_clear_flag(CCU60_CH0);
-
-
-
-}
+//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
+//{
+// interrupt_global_enable(0); // жǶ
+// pit_clear_flag(CCU60_CH0);
+//
+//
+//
+//}
IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
@@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж
{
exti_flag_clear(ERU_CH0_REQ0_P15_4);
-
+
+ imu660rc_callback(); // 660RC ģ INT ж
}
if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж
@@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
-
}
}
@@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
// exti_flag_clear(ERU_CH6_REQ9_P20_0);
// }
// }
-
IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // жǶ
- gnss_uart_callback(); // GPSڻص
+ gnss_uart_callback(); // GNSSڻص
diff --git a/Example/Coreboard_Demo/【必读】例程功能说明.xlsx b/Example/Coreboard_Demo/【必读】例程功能说明.xlsx
new file mode 100644
index 0000000..3efabc3
Binary files /dev/null and b/Example/Coreboard_Demo/【必读】例程功能说明.xlsx differ
diff --git a/Example/Motherboard_Demo.7z b/Example/Motherboard_Demo.7z
index 01989b0..8f4cb26 100644
Binary files a/Example/Motherboard_Demo.7z and b/Example/Motherboard_Demo.7z differ
diff --git a/Example/【必读】例程功能说明.xlsx b/Example/【必读】例程功能说明.xlsx
index 1f4dfd3..3efabc3 100644
Binary files a/Example/【必读】例程功能说明.xlsx and b/Example/【必读】例程功能说明.xlsx differ
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
index 5688984..8ce85ca 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.4.4
+ SCC8660ʽ
+ ָV2
+ ips200ʾscc8660ͷʽ
+ ips114ʾscc8660ͷʽ
V3.4.3
660RC
V3.4.2
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c
index 231b20d..3e9ec74 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,423 +24,519 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "seekfree_assistant.h"
+// ͨö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD ,
+ SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD ,
-extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+ SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 ,
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+ SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 ,
+}seekfree_assistant_cmd_type_enum;
+
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ
+
+// ݷͺָ
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+
+// ݽպָ
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive;
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
#include "zf_common_fifo.h"
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO
-static fifo_struct seekfree_assistant_fifo = // FIFOṹ
+static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE];
+static fifo_struct seekfree_assistant_debug_param_fifo =
{
- .buffer = seekfree_assistant_buffer,
+ .buffer = seekfree_assistant_debug_param_buffer,
.execution = FIFO_IDLE,
.type = FIFO_DATA_8BIT,
.head = 0,
.end = 0,
- .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
- .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
-};
+ .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE,
+};
#endif
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ
-
-seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ
-seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ
-
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ
-
//-------------------------------------------------------------------------------------------------------------------
// ͺ
-// ˵ *buffer ҪУݵַ
-// ˵ length У鳤
-// ز uint8 ֵ
+// ˵ *buffer ҪУݵַ
+// ˵ length У鳤
+// ز uint8 ֵ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length)
+static uint8 seekfree_assistant_sum (void *buffer, uint32 length)
{
uint8 temp_sum = 0;
+ uint8 *ptr = (uint8 *)buffer;
while(length--)
{
- temp_sum += *buffer++;
+ temp_sum += *ptr ++;
}
return temp_sum;
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼͺ
-// ˵ camera_type ͷ
-// ˵ *image_addr ͼַ
-// ˵ boundary_num ͼа߽
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height)
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer)
{
- uint32 image_size = 0;
+ zf_assert(NULL != ccd_obj);
+ zf_assert(NULL != data_buffer);
- 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;
- // дϢЭ鲿
- seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct);
- seekfree_assistant_camera_data.image_width = width;
- seekfree_assistant_camera_data.image_height = height;
+ memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct));
+ ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD;
+ ccd_obj->config.channel_index = channel_index;
- // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
-
- // ͷͼͼС
- switch(camera_type)
+ uint16 data_max = 256;
+ uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT;
+ loop_count = (2 >= loop_count) ? (loop_count) : (2);
+ for(uint8 i = 0; loop_count > i; i ++)
{
- 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;
+ data_max *= 4;
}
- // ͼ
- if(NULL != image_addr)
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF);
+ #else
+ ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF);
+ ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF);
+ ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF);
+ ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF);
+ ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ ccd_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ ccd_obj->config.data_type = data_type;
+ }
+
+ // ¼ʵֽ uint16 Ҫݳ
+ ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1));
+ // Ȼ¼Ӧݻ
+ ccd_obj->data_buffer = data_buffer;
+
+ // У
+ ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ ccd_obj->config.check_sum += seekfree_assistant_sum(
+ &(ccd_obj->config.cmd),
+ sizeof(ccd_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)ccd_obj,
+ sizeof(ccd_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(ccd_obj->data_buffer),
+ ccd_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer)
+{
+ zf_assert(NULL != camera_obj);
+
+ memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct));
+ camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD;
+ camera_obj->config.camera_type = camera_type;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF);
+ #else
+ camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF);
+ camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF);
+ camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF);
+ camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF);
+ #endif
+
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type
+ && NULL != data_buffer)
{
- seekfree_assistant_transfer_callback(image_addr, image_size);
+ camera_obj->config.data_type = 0x02;
+ }
+ else
+ {
+ camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01);
+ }
+
+ // RGB565 ͼ ôֽ
+ camera_obj->buffer_byte_size =
+ image_width * image_height
+ * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1));
+ camera_obj->buffer_byte_size =
+ (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type)
+ ? (camera_obj->buffer_byte_size / 8)
+ : (camera_obj->buffer_byte_size);
+ camera_obj->data_buffer = data_buffer;
+
+ // У
+ camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_obj->config.cmd),
+ sizeof(camera_obj->config) - 2);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_obj,
+ sizeof(camera_obj->config));
+ if(NULL != camera_obj->data_buffer)
+ {
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_obj->data_buffer),
+ camera_obj->buffer_byte_size);
}
}
//-------------------------------------------------------------------------------------------------------------------
-// ͼƺ
-// ˵ boundary_id ID
-// ˵ dot_num
-// ˵ *dot_x ַ
-// ˵ *dot_y ַ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
// ز void
-// ʹʾ
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer)
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer)
{
- uint8 i;
- uint16 dot_bytes = 0; // ֽ
+ zf_assert(NULL != camera_boundary_obj);
+ zf_assert(NULL != data_buffer);
- dot_bytes = seekfree_assistant_camera_dot_data.dot_num;
+ memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct));
+ camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD;
- if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5))
- {
- dot_bytes *= 2;
+ if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE
+ && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type)
+ { // uint16 STC Ƭ ôΪ 0x02
+ camera_boundary_obj->config.data_type = data_type + 1;
+ }
+ else
+ { // Ļ uint8 ݻ uint16
+ camera_boundary_obj->config.data_type = data_type;
}
- // ȷ֡ͷܡ߽š곤ȡ
- seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF);
+ camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
- for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
- {
- // жǷͺ
- if(NULL != buffer->boundary_x[i])
- {
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
- }
+ camera_boundary_obj->buffer_byte_size =
+ boundary_lenght * 2
+ * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2));
+ camera_boundary_obj->data_buffer = data_buffer;
- // жǷ
- if(NULL != buffer->boundary_y[i])
- {
- // ûݣʾÿһֻһ߽
- // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣
- seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
- }
- }
+ // У
+ camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_boundary_obj->config.check_sum += seekfree_assistant_sum(
+ &(camera_boundary_obj->config.cmd),
+ sizeof(camera_boundary_obj->config) - 2);
}
//-------------------------------------------------------------------------------------------------------------------
-// ʾͺ
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj)
+{
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)camera_boundary_obj,
+ sizeof(camera_boundary_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(camera_boundary_obj->data_buffer),
+ camera_boundary_obj->buffer_byte_size);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color)
+{
+ seekfree_assistant_camera_rectangular_struct camera_rectangular_obj;
+ memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct));
+ camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD;
+
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF);
+ #else
+ camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF);
+ camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF);
+ camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF);
+ camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF);
+ camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF);
+ camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF);
+ camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF);
+ camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF);
+ camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF);
+ #endif
+
+ // У
+ camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ camera_rectangular_obj.check_sum += seekfree_assistant_sum(
+ &(camera_rectangular_obj.cmd),
+ sizeof(camera_rectangular_obj) - 2);
+
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)&camera_rectangular_obj,
+ sizeof(camera_rectangular_obj));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer)
+{
+ zf_assert(NULL != oscilloscope_obj);
+ zf_assert(NULL != data_buffer);
+
+ memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct));
+ oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD;
+ oscilloscope_obj->config.channel_max =
+ (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max)
+ ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX)
+ : ((0 == channel_max) ? (1) : (channel_max));
+ oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00);
+ oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4;
+ oscilloscope_obj->data_buffer = data_buffer;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
// ز void
// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope)
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj)
{
- uint8 packet_size;
-
- // λ
- 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;
-
- // дϢ
- packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4;
- seekfree_assistant_oscilloscope->length = packet_size;
-
- // д빦ͨ
- seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE;
-
// У
- seekfree_assistant_oscilloscope->check_sum = 0;
- seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD;
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ &(oscilloscope_obj->config.cmd),
+ sizeof(oscilloscope_obj->config) - 2);
+ oscilloscope_obj->config.check_sum += seekfree_assistant_sum(
+ (oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
- // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[]
-
- seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)oscilloscope_obj,
+ sizeof(oscilloscope_obj->config));
+ seekfree_assistant_transfer_callback(
+ (const uint8 *)(oscilloscope_obj->data_buffer),
+ oscilloscope_obj->buffer_byte_size);
}
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
//-------------------------------------------------------------------------------------------------------------------
-// ͼϢú
-// ˵ camera_type ͼ
-// ˵ image_addr ͼַ NULLʾֻͱϢλ
-// ˵ width ͼ
-// ˵ height ͼ߶
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
// ز void
-// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
-// עϢ
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height)
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj)
{
- seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD;
- seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION;
- // дϢ
- seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct);
+ zf_assert(NULL != debug_param_obj);
- 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;
-}
+ seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ
+ uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ
+ uint8 temp_sum = 0xFF; // Уʱ
+ uint32 read_length = 0; // ȡʱ
-//-------------------------------------------------------------------------------------------------------------------
-// ͼ߷ú
-// ˵ boundary_type ߽
-// ˵ dot_num һ߽жٸ
-// ˵ dot_x1 ű1ĵַ NULLʾͱ1
-// ˵ dot_x2 ű2ĵַ NULLʾͱ2
-// ˵ dot_x3 ű3ĵַ NULLʾͱ3
-// ˵ dot_y1 ű1ĵַ NULLʾͱ1
-// ˵ dot_y2 ű2ĵַ NULLʾͱ2
-// ˵ dot_y3 ű3ĵַ NULLʾͱ3
-// ز void
-// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк
-// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ
-// ʹʾ 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); // ͼʱߣ߰
-// עϢ
-//-------------------------------------------------------------------------------------------------------------------
-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;
-
- // ͼͻǷ, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ
- 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;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// ַͷͼ
-// ˵ void
-// ز void
-// ʹʾ
-// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú
-//-------------------------------------------------------------------------------------------------------------------
-void seekfree_assistant_camera_send (void)
-{
- // ͼͻǷ
- 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);
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// ֽյ
-// ˵ void
-// ز void
-// ʹʾ ֻҪŵеPITжϻѭ
-//-------------------------------------------------------------------------------------------------------------------
-#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
-void seekfree_assistant_data_analysis (void)
-{
- uint8 temp_sum;
- uint32 read_length;
- seekfree_assistant_parameter_struct *receive_packet;
-
- // ʹuint32ж壬ĿΪ˱ֽ֤ڶ
- uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
-
- // Զȡ, ԶĴ䷽ʽӽջصжȡ
- read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ // Զȡһݰ
+ // ԶĴ䷽ʽӽջصжȡ
+ read_length = seekfree_assistant_receive_callback(
+ debug_param_cmd_pointer,
+ sizeof(seekfree_assistant_debug_param_cmd_struct));
if(read_length)
- {
- // ȡдFIFO
- fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
+ { // ȡдFIFO
+ fifo_write_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ 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);
+ while( sizeof(seekfree_assistant_debug_param_cmd_struct)
+ <= fifo_used(&seekfree_assistant_debug_param_fifo))
+ { // FIFO һݰ ôͽн
+ // ֱӶһݰ
+ read_length = sizeof(seekfree_assistant_debug_param_cmd_struct);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_ONLY);
- if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0])
- {
- // û֡ͷFIFOȥһ
- read_length = 1;
- }
- else
- {
- // ҵ֡ͷ
- 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)))
- {
- // Уɹ
- seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data;
- seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1;
+ if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0]
+ && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2])
+ { // ֱƥ֡ͷ ҹҲƥ
+ temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ
+ debug_param_cmd_obj.check_sum = 0; // հУֵ У
+ if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct)))
+ { // Уɹ
+ debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float;
+ #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE)
+ // STC ôС˷һ
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0];
+ debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1];
+ debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2];
+ #endif
+ debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1;
+ temp_sum = 0x00;
}
else
- {
- read_length = 1;
+ { // Уƥ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+ }
+ else
+ { // ƥ䲻֡ͷ λʱУΪ 0xFF ʾ
+ temp_sum = 0xFF;
+ }
+
+ if(0xFF == temp_sum)
+ { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ
+ for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++)
+ { // Ϊȡһ һ
+ if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length])
+ { // ҵ¸֡ͷ˳
+ break;
+ }
}
}
// ʹõ
- fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
+ fifo_read_buffer(
+ &seekfree_assistant_debug_param_fifo,
+ debug_param_cmd_pointer,
+ &read_length,
+ FIFO_READ_AND_CLEAN);
}
}
#endif
-
-
-
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h
index 5b7e1b5..937f784 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,142 +24,292 @@
* ļ seekfree_assistant
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
-
#include "zf_common_typedef.h"
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 ,
+ SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 ,
+}seekfree_assistant_data_type_enum;
-// 1ʹܲڵĹ 0رղڵĹ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
-
-
-
-// FIFOС
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
-
-// ʾͨ
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// Եͨ
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// ͼ
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// Ƭλ͵֡ͷ
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// ͷ
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// λƬ͵֡ͷ
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-//
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-
+// CCD ö
+typedef enum
+{
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ
+ SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ
+}seekfree_assistant_ccd_resolution_enum;
// ͷö
typedef enum
{
- // ͷͺŶ
- SEEKFREE_ASSISTANT_OV7725_BIN = 1,
- SEEKFREE_ASSISTANT_MT9V03X,
- SEEKFREE_ASSISTANT_SCC8660,
-
// ͼͶ
- SEEKFREE_ASSISTANT_BINARY = 1,
- SEEKFREE_ASSISTANT_GRAY,
- SEEKFREE_ASSISTANT_RGB565,
-}seekfree_assistant_image_type_enum;
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 ,
-// ͷö
-typedef enum
-{
- // ͷͺŶ
- X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ
- Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ
- XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ
- NO_BOUNDARY, // ͵ͼûбϢ
-}seekfree_assistant_boundary_type_enum;
+ // ͷͺƥ䶨
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X ,
+ SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 ,
+}seekfree_assistant_camera_type_enum;
+
+#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨
+
+#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ
+#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤
+
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ
+#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС
+#endif
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 channel_num; // λΪ λΪͨ
- uint8 check_sum; // У
- uint8 length; //
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ uint8 data_lenght_buffer[2] ; // CCD ݳ
+ uint8 channel_color_buffer[2] ; // ͨɫ
+ uint8 channel_data_max[2] ; // ֵͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve ; //
+ }config;
+ uint16 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_ccd_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 camera_type ; // ͷ
+ uint8 image_width_buffer[2] ; // ͼ
+ uint8 image_height_buffer[2] ; // ͼ߶
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 data_type ; // ȷϴС
+ uint8 boundary_lenght_buffer[2] ; // ߳
+ uint8 color_buffer[2] ; // ͨɫ
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
+}seekfree_assistant_camera_boundary_struct;
+
+typedef struct
+{
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 reserve ; //
+ uint8 x_axis_buffer[2] ; // X
+ uint8 y_axis_buffer[2] ; // Y
+ uint8 width_buffer[2] ; // ο
+ uint8 height_buffer[2] ; // θ߶
+ uint8 color_buffer[2] ; // ɫ
+}seekfree_assistant_camera_rectangular_struct;
+
+typedef struct
+{
+ struct
+ {
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_max ; // ͨ
+ uint8 data_type ; // ȷϴС
+ uint8 reserve[3] ; //
+ }config;
+ uint32 buffer_byte_size ; // ݻ ʵֽڴС
+ void *data_buffer ; // ݻ
}seekfree_assistant_oscilloscope_struct;
+typedef union
+{
+ uint8 data_uint8[4] ;
+ float data_float ;
+}seekfree_assistant_param_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ
- uint8 length; // ȣЭ鲿֣
- uint16 image_width; // ͼ
- uint16 image_height; // ͼ߶
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽
- uint8 length; // ȣЭ鲿֣
- uint16 dot_num; //
- uint8 valid_flag; // ͨʶ
- uint8 reserve; //
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // ͷַ
- uint16 width; // ͼ
- uint16 height; // ͼ߶
- 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;
+ uint8 head ; // ֡ͷ
+ uint8 check_sum ; // У
+ uint8 cmd ; //
+ uint8 channel_index ; // ͨ
+ seekfree_assistant_param_struct dat ; // һ
+
+}seekfree_assistant_debug_param_cmd_struct;
typedef struct
{
- uint8 head; // ֡ͷ
- uint8 function; //
- uint8 channel; // ͨ
- uint8 check_sum; // У
- float data; //
-}seekfree_assistant_parameter_struct;
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint8_struct;
+
+
+typedef struct
+{
+ uint8 x;
+ uint8 y;
+}seekfree_assistant_camera_boundary_uint16_struct;
+
+typedef struct
+{
+ float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+ uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ;
+}seekfree_assistant_debug_param_struct;
typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ
-
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-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);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ
+// ˵ *ccd_obj CCD ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ channel_index CCD ͨ
+// ˵ channel_color ͨҪʹõɫ
+// ˵ data_lenght CCD ݳ
+// ˵ *data_buffer CCD ݻ
+// ز void
+// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_config (
+ seekfree_assistant_ccd_struct *ccd_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint8 channel_index,
+ uint16 channel_color,
+ uint16 data_lenght,
+ void *data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+// CCD ͼ ͺ
+// ˵ *ccd_obj CCD ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_ccd_send(ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj);
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ
+// ˵ *camera_obj CAMERA ݽṹ
+// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum
+// ˵ image_width CAMERA ͼ
+// ˵ image_height CAMERA ͼ߶
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_config (
+ seekfree_assistant_camera_struct *camera_obj,
+ seekfree_assistant_camera_type_enum camera_type,
+ uint16 image_width,
+ uint16 image_height,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͼ ͺ
+// ˵ *camera_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_send(camera_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ˵ data_type seekfree_assistant_data_type_enum
+// ˵ color Ҫʹõɫ
+// ˵ boundary_lenght CAMERA
+// ˵ *data_buffer CAMERA ͼ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_config (
+ seekfree_assistant_camera_boundary_struct *camera_boundary_obj,
+ seekfree_assistant_data_type_enum data_type,
+ uint16 color,
+ uint16 boundary_lenght,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ͺ
+// ˵ *camera_boundary_obj CAMERA ݽṹ
+// ز void
+// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj);
+
+//-------------------------------------------------------------------------------------------------------------------
+// CAMERA ο ͺ
+// ˵ x X
+// ˵ y Y
+// ˵ width ο
+// ˵ height θ߶
+// ˵ color ɫ
+// ز void
+// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ
+// ˵ *oscilloscope_obj ʾݽṹ
+// ˵ channel_max ͨ Χ [1, 16] ΧΧ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_config (
+ seekfree_assistant_oscilloscope_struct *oscilloscope_obj,
+ uint8 channel_max,
+ void *data_buffer);
+
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *seekfree_assistant_oscilloscope ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj);
+
+#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE)
+//-------------------------------------------------------------------------------------------------------------------
+// ʾ ͺ
+// ˵ *debug_param_obj ʾݽṹ
+// ز void
+// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);
+//-------------------------------------------------------------------------------------------------------------------
+void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj);
+#endif
#endif
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
index d139201..23205d5 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,23 +24,20 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
#include "zf_common_fifo.h"
#include "zf_common_debug.h"
-#include "zf_driver_uart.h"
+
#include "zf_device_wireless_uart.h"
-#include "zf_device_ble6a20.h"
-#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_wifi_uart.h"
#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
@@ -50,7 +47,6 @@
extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ
extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ
-
//-------------------------------------------------------------------------------------------------------------------
// ַͺ
// ˵ *buff Ҫ͵ݵַ
@@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv
// ز uint32 ʣδݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
+uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݷ
@@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
// ز uint32 յݳ
// ʹʾ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
+uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
// ѡԶͨѶʽʱ Ҫݽչ
return 0;
@@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
// ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ
// ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ
//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
{
switch(transfer_device)
{
case SEEKFREE_ASSISTANT_DEBUG_UART:
{
-#if DEBUG_UART_USE_INTERRUPT == 1
seekfree_assistant_transfer_callback = debug_send_buffer;
seekfree_assistant_receive_callback = debug_read_ring_buffer;
-#endif
}break;
-
+
case SEEKFREE_ASSISTANT_WIRELESS_UART:
{
seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
seekfree_assistant_receive_callback = wireless_uart_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_BLE6A20:
- {
- seekfree_assistant_transfer_callback = ble6a20_send_buffer;
- seekfree_assistant_receive_callback = ble6a20_read_buffer;
- }break;
- case SEEKFREE_ASSISTANT_CH9141:
- {
- seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
- seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
- }break;
-
- case SEEKFREE_ASSISTANT_WIFI_UART:
- {
- seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
- seekfree_assistant_receive_callback = wifi_uart_read_buffer;
- }break;
-
+ // case SEEKFREE_ASSISTANT_CH9141:
+ // {
+ // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ // }break;
+
+ // case SEEKFREE_ASSISTANT_WIFI_UART:
+ // {
+ // seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ // seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ // }break;
+
case SEEKFREE_ASSISTANT_WIFI_SPI:
{
seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
seekfree_assistant_receive_callback = wifi_spi_read_buffer;
}break;
-
- case SEEKFREE_ASSISTANT_CUSTOM:
- {
+
+ default:
+ {
// Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ
-
+ seekfree_assistant_transfer_callback = seekfree_assistant_transfer;
+ seekfree_assistant_receive_callback = seekfree_assistant_receive;
}break;
}
}
-
-
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h
index 2ccfd8a..0e28f49 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h
@@ -1,20 +1,20 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
+* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
-*
-* ļ TC264 Դһ
-*
-* TC264 Դ
+*
+* ļ RT1064DVL6A Դһ
+*
+* RT1064DVL6A Դ
* Ըᷢ GPLGNU General Public License GNUͨù֤
* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/
-*
+*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
-*
+*
* ӦյԴͬʱյһ GPL ĸ
* ûУ
-*
+*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
@@ -24,13 +24,13 @@
* ļ seekfree_assistant_interface
* ˾ ɶɿƼ˾
* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵
-* ADS v1.10.2
+* ADS v1.9.4
* ƽ̨ TC264D
* https://seekfree.taobao.com/
-*
+*
* ļ¼
-* ע
-* 2024-01-01 pudding first version
+* ע
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_interface_h_
@@ -43,7 +43,6 @@ typedef enum
{
SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ
SEEKFREE_ASSISTANT_WIRELESS_UART, // ת
- SEEKFREE_ASSISTANT_BLE6A20, // ת
SEEKFREE_ASSISTANT_CH9141, // CH9141
SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת
SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h
index 1166c84..dc091aa 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h
@@ -62,7 +62,7 @@
//==================================================== SPI ====================================================
#else
//====================================================Ӳ SPI ====================================================
-#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI
+#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI
@@ -70,7 +70,7 @@
//====================================================Ӳ SPI ====================================================
#endif
-#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ
+#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h
index 6f4544a..6af089f 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h
@@ -76,7 +76,7 @@
// 1Զ Զʵ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ
// Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000
-#define BLE6A20_AUTO_BAUD_RATE ( 0 )
+#define BLE6A20_AUTO_BAUD_RATE ( 1 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h
index c56f310..9c4ac0d 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h
@@ -167,7 +167,7 @@ void ips114_init (void);
// ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================= IPS114 չ================================================
#endif
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h
index 850fb11..5bf4284 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h
@@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select);
// ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// עϢ չһʾĬţĻʼ㿪ʼʾ
//-------------------------------------------------------------------------------------------------------------------
-#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
+#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0))
//================================================== IPS200 չ================================================
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
index 98c5364..557e1d2 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
@@ -86,7 +86,7 @@
// £SCC8660_PCLK_DIVԽͼԽ
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ
-#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
+#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0
//================================================ SCC8660 ã֧ͫ֡ʰ汾===========================
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h
index e0913bd..e7cec39 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h
@@ -73,8 +73,8 @@
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP
-#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿
+#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP
+#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666
#endif
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..24b88cc 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
@@ -73,7 +73,7 @@
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]"
#else
-#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP
+#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP
#define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿
#define WIFI_UART_LOCAL_PORT "8080" // ˿
#endif
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c
index 8d514b7..ad4099e 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c
@@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n)
//-------------------------------------------------------------------------------------------------------------------
void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin)
{
-// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
+ zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init
IfxGpt12_enableModule(&MODULE_GPT120);
IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);