}
ndk{
//ldLibs "log", "z", "cutils"
- moduleName"ag3335m_jni" //生成的so文件名字,调用C程序的代码中会用到该名字
+ moduleName"ag3335m_jni ag3335m_dl" //生成的so文件名字,调用C程序的代码中会用到该名字
abiFilters 'armeabi-v7a' //, 'armeabi','x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
- ndkVersion '20.1.5948944'
+// ndkVersion '20.1.5948944'
// sourceSets.main {
// jniLibs.srcDir 'src/main/libs'
// jni.srcDirs = [] //disable automatic ndk-build call
LOCAL_C_INCLUDES := bionic/libc/bionic $(LOCAL_PATH)/libag3335m/inc
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lc
-LOCAL_SHARED_LIBRARIES += libag3335m_jni
+LOCAL_SHARED_LIBRARIES += libag3335m_dl
LOCAL_MODULE := ag333m_tool
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
+include_directories(${PROJECT_SOURCE_DIR}/libag3335m/inc/hdl_ports/)
+include_directories(${PROJECT_SOURCE_DIR}/libag3335m/inc/)
+include_directories(${PROJECT_SOURCE_DIR}/libag3335m/)
+
target_link_libraries( # Specifies the target library.
ag3335m_jni
# Links the target library to the log library
# included in the NDK.
- ${log-lib})
\ No newline at end of file
+ ${log-lib})
+
+add_library( # Sets the name of the library.
+ ag3335m_dl
+
+ # Sets the library as a shared library.
+ SHARED
+
+ # Provides a relative path to your source file(s).
+
+ libag3335m/src/hdl_demo.c
+ libag3335m/src/hdl_debug.c
+ libag3335m/src/hdl_da_cmd.c
+ libag3335m/src/hdl_channel.c
+ libag3335m/src/hdl_brom_base.c
+ libag3335m/src/hdl_api.c
+ libag3335m/src/hdl_ports/hdl_flash_api.c
+ libag3335m/src/hdl_ports/hdl_uart.c
+ libag3335m/src/hdl_ports/hdl_os_util.c
+ libag3335m/src/hdl_ports/md5.c
+ )
+
+target_link_libraries( # Specifies the target library.
+ ag3335m_dl
+
+ # Links the target library to the log library
+ # included in the NDK.
+ ${log-lib})
+
DISCONNECT_RESET
} HDL_DISCONNECT_TYPE;
-bool hdl_connect(const hdl_da_info_t *da_info, const hdl_connect_arg_t *connect_arg,
+bool hdl_connect(const hdl_image_t *da_info, const hdl_connect_arg_t *connect_arg,
hdl_da_report_t *da_report);
bool hdl_format(const hdl_format_arg_t *format_arg);
bool hdl_readback(const hdl_readback_arg_t *readback_arg);
bool hdl_brom_write32(uint32_t addr, uint32_t data);
bool hdl_brom_send_da(const hdl_connect_arg_t *connect_arg,
- uint32_t da_flash_pos, uint32_t da_start_addr, uint32_t da_len);
+ hdl_image_t *img_info, uint32_t da_start_addr, uint32_t da_len);
bool hdl_brom_jump_da(uint32_t addr);
//#define PSRAM_DOWNLOAD
/***
- * main_region:
+bootloader
+ file: slave_da_UART.bin
+ name: slave_da
+ begin_address: 0x00100000
+ filesize : 27103
+main_region:
address_type: physical
rom_list:
- rom:
file: partition_table.bin
name: PartitionTable
begin_address: 0x08000000
+ file size 384
- rom:
file: ag3335_bootloader.bin
name: BootLoader
begin_address: 0x08003000
+ file size 17428
- rom:
file: gnss_demo.bin
name: CM4
begin_address: 0x08013000
+ file size 104974
- rom:
file: gnss_config.bin
name: GNSSConfiguration
begin_address: 0x083FF000
+ file size 1024
*/
+
+#define ROMPATH "/data/ag3335m_rom"
// DA Flash Position
+#define HDL_DA_FILE_PATH "slave_da_UART.bin"
#define HDL_DA_FLASH_POS 0x00100000
-#define HDL_DA_SIZE 28672
+#define HDL_DA_SIZE 27103
// Test Images Flash Position in Host & Target Device
-#define HDL_BL_IMAGE_HOST_FLASH_POS 0x00110000
-#define HDL_BL_IMAGE_SLAVE_FLASH_POS 0x08010000
-#define HDL_BL_IMAGE_SIZE 32768
+#define HDL_PARTITION_IMAGE_HOST_IMAGE_NAME "partition_table.bin"
+#define HDL_PARTITION_IMAGE_SLAVE_FLASH_POS 0x08000000
+#define HDL_PARTITION_IMAGE_SIZE 384
+#define HDL_PARTITION_IMAGE_NAME "Partition"
+#define HDL_BL_IMAGE_HOST_IMAGE_NAME "ag3335_bootloader.bin"
+#define HDL_BL_IMAGE_SLAVE_FLASH_POS 0x08003000
+#define HDL_BL_IMAGE_SIZE 17428
#define HDL_BL_IMAGE_NAME "BootLoader"
-#define HDL_CM4_IMAGE_HOST_FLASH_POS 0x00120000
-#define HDL_CM4_IMAGE_SLAVE_FLASH_POS 0x08020000
-#define HDL_CM4_IMAGE_SIZE 540672
+#define HDL_CM4_IMAGE_HOST_IMAGE_NAME "gnss_demo.bin"
+#define HDL_CM4_IMAGE_SLAVE_FLASH_POS 0x08013000
+#define HDL_CM4_IMAGE_SIZE 104974
#define HDL_CM4_IMAGE_NAME "CM4"
-#define HDL_OTHER_IMAGE_HOST_FLASH_POS 0x001F0000
-#define HDL_OTHER_IMAGE_SLAVE_FLASH_POS 0x080F0000
-#define HDL_OTHER_IMAGE_SIZE 53248
-#define HDL_OTHER_IMAGE_NAME "Other"
+#define HDL_OTHER_IMAGE_HOST_IMAGE_NAME "gnss_config.bin"
+#define HDL_OTHER_IMAGE_SLAVE_FLASH_POS 0x083FF000
+#define HDL_OTHER_IMAGE_SIZE 1024
+#define HDL_OTHER_IMAGE_NAME "Config"
#ifdef __cplusplus
}
uint32_t read_len, uint32_t readback_total_len);
typedef struct {
- uint32_t da_flash_addr; // Or da_ram_pointer, Or da_file if your host have file system
+ char *da_filepath;
uint32_t da_run_addr;
uint32_t da_len;
+ uint32_t fd;
} hdl_da_info_t;
typedef struct {
} hdl_format_arg_t;
typedef struct _hdl_image_t {
- uint32_t image_host_flash_addr; // Or image_ram_pointer, Or image_file if your host have file system
uint32_t image_slave_flash_addr;
uint32_t image_len;
char *image_name;
+ char *image_file_path;
bool image_is_bootloader;
+ bool image_is_da;
+ uint32_t fd;
struct _hdl_image_t *next;
} hdl_image_t;
// ToDo Porting: Please use your platform API to implement them.
// Host Flash API
bool hdl_flash_init();
-bool hdl_flash_read(uint32_t start_address, uint8_t *buffer, uint32_t length);
+bool hdl_flash_read(hdl_image_t *hdlimg, uint8_t *buffer, uint32_t length);
bool hdl_flash_deinit();
#ifdef __cplusplus
return success;
}
#else
-bool hdl_connect(const hdl_da_info_t *da_info, const hdl_connect_arg_t *connect_arg, hdl_da_report_t *da_report)
+bool hdl_connect(const hdl_image_t *da_info, const hdl_connect_arg_t *connect_arg, hdl_da_report_t *da_report)
{
if (da_info == NULL || connect_arg == NULL || da_report == NULL) {
HDL_LOGE("hdl_connect fail, invalid parameter");
HDL_Require_Noerr_Action(success, exit, "hdl_brom_disable_wdt");
// Brom Send DA
- success = hdl_brom_send_da(connect_arg, da_info->da_flash_addr, da_info->da_run_addr, da_info->da_len);
+ success = hdl_brom_send_da(connect_arg, da_info, da_info->image_slave_flash_addr, da_info->image_len);
HDL_Require_Noerr_Action(success, exit, "hdl_brom_send_da");
// Brom Jump to DA
- success = hdl_brom_jump_da(da_info->da_run_addr);
+ success = hdl_brom_jump_da(da_info->image_slave_flash_addr);
HDL_Require_Noerr_Action(success, exit, "hdl_brom_jump_da");
// DA Sync
// Check Image Flash_Addr & Size
hdl_image_t *image = download_arg->download_images;
while (image != NULL) {
- HDL_LOGI("Download Image (%s) BL=%d 0x%08X->0x%08X %d",
- image->image_name, image->image_is_bootloader, image->image_host_flash_addr,
+ HDL_LOGI("Download Image (%s) BL=%d fd 0x%08X slave addr 0x%08X %d",
+ image->image_name, image->image_is_bootloader, image->fd,
image->image_slave_flash_addr, image->image_len);
// image slave_flash_addr and image_len
if (image->image_slave_flash_addr == 0 || image->image_len == 0) {
#include "../inc/hdl_ports/hdl_os_util.h"
#include "../inc/hdl_debug.h"
#include "../inc/hdl_channel.h"
-
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <sys/types.h>
extern uint8_t g_hdl_data_buf[];
bool g_brom_task_stop = FALSE;
HDL_LOGI("brom_start_task put_char 0xA0");
hdl_delay(50);
}
- hdl_delete_task(NULL);
+ HDL_LOGD("brom task end!");
}
+void hdl_create_brom_start_task(){
+ int rc;
+ pthread_t pt1;
+
+ const char* msg1 = "block";
+ rc = pthread_create(&pt1, NULL, (void*)&brom_start_task, (void*)msg1);
+ if (rc != 0)
+ {
+ HDL_LOGE("create brom task failed %d",rc);
+ }
+ // pthread_join(pt1, NULL);
+}
static void brom_write8_echo(uint8_t data)
{
HDL_LOGI("brom_write8_echo 0x%02X", data);
// continuously in UART Polling mode.
// For your UART, you could try to use UART DMA mode, or create task like us.
g_brom_task_stop = FALSE;
- hdl_create_brom_start_task(brom_start_task);
+ hdl_create_brom_start_task();
+ ag3335m_reset(1);
while (1) {
hdl_delay(20);
rx_data = HDL_COM_GetByte();
}
bool hdl_brom_send_da(const hdl_connect_arg_t *connect_arg,
- uint32_t da_flash_pos, uint32_t da_start_addr, uint32_t da_len)
+ hdl_image_t *img_info , uint32_t da_start_addr, uint32_t da_len)
{
bool success = FALSE;
bool ret = hdl_flash_init();
HDL_Require_Noerr_Action(ret, exit, "hdl_flash_init");
- HDL_LOGI("hdl_brom_send_da 0x%08X 0x%08X %d", da_flash_pos, da_start_addr, da_len);
+ HDL_LOGI("hdl_brom_send_da fd 0x%08X ,start addr 0x%08X ,len %d", img_info->fd, da_start_addr, da_len);
// DA Init Callback
if (connect_arg != NULL && connect_arg->conn_da_init_cb != NULL) {
uint32_t local_check_sum = 0;
while (total_sent_len < da_len) {
unsigned int to_send_len = min(packet_len, da_len - total_sent_len);
- ret = hdl_flash_read(da_flash_pos + total_sent_len, g_hdl_data_buf, to_send_len);
+ ret = hdl_flash_read(img_info , g_hdl_data_buf, to_send_len);
if (ret) {
uint32_t sent_len = HDL_COM_PutByte_Buffer(g_hdl_data_buf, to_send_len);
total_sent_len += sent_len;
HDL_LOGI("hdl_da_download (%s) packet %d/%d %d", image->image_name,
(packet_sent_num + 1), packet_num, cur_packet_len);
- bool ret = hdl_flash_read(image->image_host_flash_addr + start_offset,
+ bool ret = hdl_flash_read(image ,
g_hdl_data_buf, cur_packet_len);
if (ret) {
if (is_last_packet && cur_packet_len < DA_SEND_PACKET_LEN) {
start_offset + cur_packet_len, image_len);
}
} else {
- HDL_LOGE("hdl_flash_read addr=0x%08X len=0x%08X fail",
- image->image_host_flash_addr + start_offset, cur_packet_len);
+ HDL_LOGE("hdl_flash_read fd =0x%08X len=0x%08X fail",
+ image->fd , cur_packet_len);
continue;
}
da_check_success = hdl_da_check_cmd_arg(&error_status);
HDL_Require_Noerr_Action(da_check_success, exit, "DA Download End");
#endif
-
if (packet_sent_num == packet_num && error_status == 0) {
success = TRUE;
}
-
exit:
if (error_status != 0) {
HDL_LOGE("hdl_da_download error_status=%d", error_status);
cur_image_name, percent, sent_bytes, total_bytes);
}
-#ifndef PSRAM_DOWNLOAD
-// Host Local Flash Read Buffer, only for Test Readback
-uint8_t g_hdl_flash_read_buf[4096] = {0};
-bool g_readback_check_result = TRUE;
-void readback_cb_demo(void *usr_arg, uint32_t cur_flash_addr,
- uint8_t *readback_buf, uint32_t readback_buf_len,
- uint32_t read_len, uint32_t readback_total_len)
-{
- uint8_t percent = read_len * 100 / readback_total_len;
- HDL_MAIN_LOG("Readback Progress %d%% (%d/%d Bytes)", percent, read_len, readback_total_len);
-
- uint32_t host_flash_addr = cur_flash_addr - 0x08000000 + 0x00100000;
- bool ret = hdl_flash_read(host_flash_addr, g_hdl_flash_read_buf, readback_buf_len);
- if (ret) {
- uint8_t md5_local[16] = {0};
- uint8_t md5_readback[16] = {0};
- // ToDo Note: Use mbedTLS MD5 API to verify readback result,
- // you could ignore the readback verification function.
- hdl_md5(g_hdl_flash_read_buf, readback_buf_len, md5_local);
- hdl_md5(readback_buf, readback_buf_len, md5_readback);
- int ret = memcmp(md5_local, md5_readback, 16);
- if (ret != 0) {
- g_readback_check_result = FALSE;
- HDL_LOGE("readback_cb_demo, check fail 0x%08X %d", cur_flash_addr, readback_buf_len);
- }
- }
-}
-#endif
-
void progress_cb_demo(void *usr_arg, uint8_t percent)
{
HDL_MAIN_LOG("%s %d%%", (usr_arg != NULL ? usr_arg : "percent "), percent);
}
-
void hdl_host_dl_demo()
{
-#ifdef PSRAM_DOWNLOAD
// Init Connect ARG
- hdl_da_info_t da_info;
- da_info.da_flash_addr = HDL_DA_FLASH_POS;
- da_info.da_run_addr = HDL_DA_RUN_ADDR;
- da_info.da_len = HDL_DA_SIZE;
- hdl_connect_arg_t connect_arg;
- connect_arg.conn_da_init_cb = init_cb_demo;
- connect_arg.conn_da_init_cb_arg = "Download DA now...";
- connect_arg.conn_da_send_cb = da_send_cb_demo;
- connect_arg.conn_da_send_cb_arg = "";
- connect_arg.conn_enable_log = FALSE;
-
- // Connect Device
- bool success = hdl_connect(&da_info, &connect_arg);
- HDL_Require_Noerr_Action(success, exit, "hdl_connect");
-
- hdl_image_t cm4_image;
- cm4_image.image_host_flash_addr = HDL_CM4_IMAGE_HOST_FLASH_POS;
- cm4_image.image_slave_flash_addr = HDL_CM4_IMAGE_SLAVE_FLASH_POS;
- cm4_image.image_len = HDL_CM4_IMAGE_SIZE;
- cm4_image.image_name = HDL_CM4_IMAGE_NAME;
- cm4_image.image_is_bootloader = FALSE;
- cm4_image.next = NULL;
-
- hdl_download_arg_t download_arg;
- download_arg.download_init_cb = init_cb_demo;
- download_arg.download_init_cb_arg = "Download Images now...";
- download_arg.download_cb = download_cb_demo;
- download_arg.download_cb_arg = "";
- download_arg.download_images = &cm4_image;
- success = hdl_download(&download_arg);
- HDL_Require_Noerr_Action(success, exit, "hdl_download");
-#else
- // Init Connect ARG
- hdl_da_info_t da_info;
- da_info.da_flash_addr = HDL_DA_FLASH_POS;
- da_info.da_run_addr = HDL_DA_RUN_ADDR;
- da_info.da_len = HDL_DA_SIZE;
+ hdl_image_t da_info;
+ da_info.image_file_path = HDL_DA_FILE_PATH;
+ da_info.image_slave_flash_addr = HDL_DA_RUN_ADDR;
+ da_info.image_len = HDL_DA_SIZE;
hdl_connect_arg_t connect_arg;
connect_arg.conn_da_init_cb = init_cb_demo;
connect_arg.conn_da_init_cb_arg = "Download DA now...";
HDL_Require_Noerr_Action(success, exit, "hdl_format");
// Download 3 Images (Bootloader, CM4, Other)
+ hdl_image_t partition_image;
hdl_image_t bl_image;
hdl_image_t cm4_image;
- hdl_image_t other_image;
- bl_image.image_host_flash_addr = HDL_BL_IMAGE_HOST_FLASH_POS;
+ hdl_image_t config_image;
+ partition_image.image_file_path = HDL_PARTITION_IMAGE_HOST_IMAGE_NAME;
+ partition_image.image_is_bootloader = false;
+ partition_image.image_slave_flash_addr = HDL_PARTITION_IMAGE_SLAVE_FLASH_POS;
+ partition_image.image_name = HDL_PARTITION_IMAGE_NAME;
+ partition_image.next = &bl_image;
+ bl_image.image_file_path = HDL_BL_IMAGE_HOST_IMAGE_NAME;
bl_image.image_slave_flash_addr = HDL_BL_IMAGE_SLAVE_FLASH_POS;
bl_image.image_len = HDL_BL_IMAGE_SIZE;
bl_image.image_name = HDL_BL_IMAGE_NAME;
bl_image.image_is_bootloader = TRUE;
bl_image.next = &cm4_image;
- cm4_image.image_host_flash_addr = HDL_CM4_IMAGE_HOST_FLASH_POS;
+ cm4_image.image_file_path = HDL_CM4_IMAGE_HOST_IMAGE_NAME;
cm4_image.image_slave_flash_addr = HDL_CM4_IMAGE_SLAVE_FLASH_POS;
cm4_image.image_len = HDL_CM4_IMAGE_SIZE;
cm4_image.image_name = HDL_CM4_IMAGE_NAME;
cm4_image.image_is_bootloader = FALSE;
- cm4_image.next = &other_image;
- other_image.image_host_flash_addr = HDL_OTHER_IMAGE_HOST_FLASH_POS;
- other_image.image_slave_flash_addr = HDL_OTHER_IMAGE_SLAVE_FLASH_POS;
- other_image.image_len = HDL_OTHER_IMAGE_SIZE;
- other_image.image_name = HDL_OTHER_IMAGE_NAME;
- other_image.image_is_bootloader = FALSE;
- other_image.next = NULL;
+ cm4_image.next = &config_image;
+ config_image.image_file_path = HDL_OTHER_IMAGE_HOST_IMAGE_NAME;
+ config_image.image_slave_flash_addr = HDL_OTHER_IMAGE_SLAVE_FLASH_POS;
+ config_image.image_len = HDL_OTHER_IMAGE_SIZE;
+ config_image.image_name = HDL_OTHER_IMAGE_NAME;
+ config_image.image_is_bootloader = FALSE;
+ config_image.next = NULL;
hdl_download_arg_t download_arg;
download_arg.download_init_cb = init_cb_demo;
// Disconnect Device
success = hdl_disconnect(DISCONNECT_NONE);
HDL_Require_Noerr_Action(success, exit, "hdl_disconnect");
-#endif
+
exit:
HDL_SUCCESS_LOG(__func__);
}
+void hdl_main(){
+
+ hdl_host_dl_demo();
+}
//static void vHostDLTask(void *pvParameters)
//{
// LOG_I(main, "hdl_host_dl_demo start");
* AIROHA FOR SUCH AIROHA SOFTWARE AT ISSUE.
*/
-#include "hdl_ports/hdl_flash_api.h"
+#include <hdl_data.h>
+#include "hdl_flash_api.h"
bool hdl_flash_init()
{
return true;
}
-bool hdl_flash_read(uint32_t start_address, uint8_t *buffer, uint32_t length)
+bool hdl_flash_read(hdl_image_t *hdlimg, uint8_t *buffer, uint32_t length)
{
//hal_flash_status_t status = hal_flash_read(start_address, buffer, length);
// HDL_LOGI("hdl_flash_read status=%d", status);
// return (status == HAL_FLASH_STATUS_OK);
- return true;
+ if( hdlimg->fd ==-1){
+ char path[1024]={0};
+ sprintf(path,"%s/%s",ROMPATH,hdlimg->image_file_path);
+ hdlimg->fd=open(hdlimg->image_file_path,O_RDWR);
+ }
+ if(hdlimg->fd >0){
+ int ret=read(hdlimg->fd,buffer,length);
+ if(ret==length){
+ return true;
+ }else{
+ HDL_LOGE(" read failed! read %d != %d", ret,length);
+ close(hdlimg->fd);
+ hdlimg->fd=-1;
+ return false;
+ }
+ }else{
+ HDL_LOGE(" fd <=0 read failed!");
+ }
+
+ return false;
}
bool hdl_flash_deinit()
int err = 0;
{// enable step counter
- LOGD("ag3335m_reset ioctl");
+ HDL_LOGD("ag3335m_reset ioctl");
err = ioctl(dev_fd, GH_IOCTL_CMD_RESET,
&enabled);
- LOGD("ag3335m_reset done");
+ HDL_LOGD("ag3335m_reset done");
if (err != 0) {
- LOGE("ag3335m_reset failed (%s)", strerror(errno));
+ HDL_LOGE("ag3335m_reset failed (%s)", strerror(errno));
return err;
}
}// enable step counter end
#include <linux/input.h>
#include "hardware.h"
+#include "libag3335m/inc/hdl_demo.h"
#define LOG_TAG "sctool"
#include <stdio.h>
int main()
{
+
+#if 0
int rc;
pt_t pt1, pt2;
pthread_join(pt2, NULL);
gps_hardware_close();
tty_hardware_close();
+#else
+ hdl_host_dl_demo();
+#endif
return 0;
}
\ No newline at end of file