#include #include #include #include "app_protocol_api.h" #include "system/includes.h" #include "vm.h" #include "audio_config.h" #include "app_power_manage.h" #include "user_cfg.h" #if APP_PROTOCOL_DMA_CODE #if 1 #define APP_DMA_LOG printf #define APP_DMA_DUMP put_buf #else #define APP_DMA_LOG(...) #define APP_DMA_DUMP(...) #endif //*********************************************************************************// // DMA认证信息 // //*********************************************************************************// //调试阶段:DMA_PRODUCT_INFO_TEST宏可以开启调试 //生产阶段:DMA_PRODUCT_INFO_TEST宏需关闭 #define DMA_PRODUCT_INFO_TEST 0 #if DMA_PRODUCT_INFO_TEST static const char *dma_product_id = "abcdeYghv0fy6HFexl6bTIZU123Z4n6H"; static const char *dma_triad_id = "A254BcBb000E00D200A0C0E3"; static const char *dma_secret = "bab8d7e0dc616630"; #endif static const char *dma_product_key = "rcPXDpFbBOxXaDL9GZ8qLTWq7Yz8rWFm"; #define DMA_PRODUCT_ID_LEN 65 #define DMA_PRODUCT_KEY_LEN 65 #define DMA_TRIAD_ID_LEN 32 #define DMA_SECRET_LEN 32 #define DMA_LEGAL_CHAR(c) ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) static u16 dma_get_one_info(const u8 *in, u8 *out) { int read_len = 0; const u8 *p = in; while (DMA_LEGAL_CHAR(*p) && *p != ',') { //read Product ID *out++ = *p++; read_len++; } return read_len; } u8 read_dma_product_info_from_flash(u8 *read_buf, u16 buflen) { u8 *rp = read_buf; const u8 *dma_ptr = (u8 *)app_protocal_get_license_ptr(); if (dma_ptr == NULL) { return FALSE; } if (dma_get_one_info(dma_ptr, rp) != 32) { return FALSE; } dma_ptr += 33; rp = read_buf + DMA_PRODUCT_ID_LEN; memcpy(rp, dma_product_key, strlen(dma_product_key)); rp = read_buf + DMA_PRODUCT_ID_LEN + DMA_PRODUCT_KEY_LEN; if (dma_get_one_info(dma_ptr, rp) != 24) { return FALSE; } dma_ptr += 25; rp = read_buf + DMA_PRODUCT_ID_LEN + DMA_PRODUCT_KEY_LEN + DMA_TRIAD_ID_LEN; if (dma_get_one_info(dma_ptr, rp) != 16) { return FALSE; } return TRUE; } __attribute__((weak)) void bt_update_testbox_addr(u8 *addr) { } void dueros_dma_manufacturer_info_init() { u8 read_buf[DMA_PRODUCT_ID_LEN + DMA_PRODUCT_KEY_LEN + DMA_TRIAD_ID_LEN + DMA_SECRET_LEN + 1] = {0}; bool ret = FALSE; APP_DMA_LOG("dueros_dma_manufacturer_info_init\n"); #if DMA_PRODUCT_INFO_TEST memcpy(read_buf, dma_product_id, strlen(dma_product_id)); memcpy(read_buf + DMA_PRODUCT_ID_LEN, dma_product_key, strlen(dma_product_key)); memcpy(read_buf + DMA_PRODUCT_ID_LEN + DMA_PRODUCT_KEY_LEN, dma_triad_id, strlen(dma_triad_id)); memcpy(read_buf + DMA_PRODUCT_ID_LEN + DMA_PRODUCT_KEY_LEN + DMA_TRIAD_ID_LEN, dma_secret, strlen(dma_secret)); ret = TRUE; #else ret = read_dma_product_info_from_flash(read_buf, sizeof(read_buf)); #endif if (ret == TRUE) { APP_DMA_LOG("read license success\n"); APP_DMA_LOG("product id: %s\n", read_buf); APP_DMA_LOG("product key: %s\n", read_buf + DMA_PRODUCT_ID_LEN); APP_DMA_LOG("triad id: %s\n", read_buf + DMA_PRODUCT_ID_LEN + DMA_PRODUCT_KEY_LEN); APP_DMA_LOG("secret: %s\n", read_buf + DMA_PRODUCT_ID_LEN + DMA_PRODUCT_KEY_LEN + DMA_TRIAD_ID_LEN); app_protocol_set_info_group(DMA_HANDLER_ID, read_buf); } else { app_protocol_set_info_group(DMA_HANDLER_ID, NULL); } //调试阶段:可以开启if 1调试 //生产阶段:烧写器固定MAC地址 连接小度APP后与MAC地址绑定,因此下面代码需用if 0屏蔽掉 #if 0 u8 mac[] = {0xF4, 0x43, 0x8D, 0x29, 0x17, 0x02}; u8 ble_mac[6]; void bt_update_mac_addr(u8 * addr); void lmp_hci_write_local_address(const u8 * addr); void bt_update_testbox_addr(u8 * addr); extern int le_controller_set_mac(void *addr); //extern void lib_make_ble_address(u8 * ble_address, u8 * edr_address); bt_update_mac_addr(mac); lmp_hci_write_local_address(mac); bt_update_testbox_addr(mac); //lib_make_ble_address(ble_mac, mac); le_controller_set_mac(mac); //修改BLE地址 APP_DMA_DUMP(mac, 6); APP_DMA_DUMP(ble_mac, 6); #endif } //*********************************************************************************// // DMA提示音 // //*********************************************************************************// const char *dma_notice_tab[APP_RROTOCOL_TONE_MAX] = { [APP_PROTOCOL_TONE_CONNECTED_ALL_FINISH] = TONE_RES_ROOT_PATH"tone/xd_ok.*",//所有连接完成【已连接,你可以按AI键来和我进行对话】 [APP_PROTOCOL_TONE_PROTOCOL_CONNECTED] = TONE_RES_ROOT_PATH"tone/xd_con.*",//小度APP已连接,经典蓝牙未连接【请在手机上完成蓝牙配对】 [APP_PROTOCOL_TONE_CONNECTED_NEED_OPEN_APP] = TONE_RES_ROOT_PATH"tone/xd_btcon.*",//经典蓝牙已连接,小度app未连接【已配对,请打开小度app进行连接】 [APP_PROTOCOL_TONE_DISCONNECTED] = TONE_RES_ROOT_PATH"tone/xd_dis.*",//经典蓝牙已断开【蓝牙已断开,请在手机上完成蓝牙配对】 [APP_PROTOCOL_TONE_DISCONNECTED_ALL] = TONE_RES_ROOT_PATH"tone/xd_alldis.*",//经典蓝牙和小度都断开了【蓝牙未连接,请用手机蓝牙和我连接吧】 [APP_RROTOCOL_TONE_SPEECH_APP_START] = TONE_NORMAL, [APP_RROTOCOL_TONE_SPEECH_KEY_START] = TONE_NORMAL, }; #endif