1461 lines
50 KiB
C
1461 lines
50 KiB
C
#include "include.h"
|
||
#include "func.h"
|
||
#include "func_alipay.h"
|
||
#include "app_variable.h"
|
||
|
||
#if SECURITY_PAY_EN
|
||
|
||
#if TRACE_EN
|
||
#define TRACE(...) printf(__VA_ARGS__)
|
||
#else
|
||
#define TRACE(...)
|
||
#endif
|
||
|
||
enum
|
||
{
|
||
COMPO_ID_RATE = 1,
|
||
|
||
// 按钮
|
||
COMPO_ID_BTN_PAYCODE, // 付款码
|
||
COMPO_ID_BTN_SETTING, // 设置
|
||
COMPO_ID_BTN_HELP, // 帮助
|
||
COMPO_ID_BTN_PAY_CODE, // 付款码
|
||
COMPO_ID_BTN_UNBIND, // 解除绑定
|
||
COMPO_ID_BTN_UNBIND_YES, // 解除绑定-确认
|
||
COMPO_ID_BTN_UNBIND_NO, // 解除绑定-取消
|
||
COMPO_ID_BTN_QUIT_BIND_YES, // 退出绑定-确认
|
||
COMPO_ID_BTN_QUIT_BIND_NO, // 退出绑定-取消
|
||
COMPO_ID_BTN_CONFIRM, // 确认
|
||
COMPO_ID_PIC_BINDING, // 绑定动画
|
||
};
|
||
|
||
enum
|
||
{
|
||
ALIPAY_PAGE_LOGO = 1,
|
||
ALIPAY_PAGE_SCAN,
|
||
ALIPAY_PAGE_BINDING,
|
||
ALIPAY_PAGE_BIND_SUCC,
|
||
ALIPAY_PAGE_BIND_FAIL,
|
||
ALIPAY_PAGE_OPTION_LIST,
|
||
ALIPAY_PAGE_QRCODE,
|
||
ALIPAY_PAGE_BARCODE,
|
||
ALIPAY_PAGE_UNBIND,
|
||
ALIPAY_PAGE_QUIT_BIND,
|
||
ALIPAY_PAGE_HELP,
|
||
ALIPAY_PAGE_UNBIND_CONFIRM,
|
||
ALIPAY_PAGE_UNBIND_FINISH,
|
||
};
|
||
|
||
typedef struct f_alipay_t_
|
||
{
|
||
uint8_t page;
|
||
uint8_t last_page;
|
||
|
||
uint8_t logo_display_cnt;
|
||
uint8_t binding_time_cnt;
|
||
uint8_t bind_fail_time_cnt;
|
||
uint8_t bind_success_time_cnt;
|
||
uint8_t bind_code_refresh_time_cnt;
|
||
uint8_t binding_flag;
|
||
uint8_t light_level_temp;
|
||
|
||
uint32_t binding_anim_idx;
|
||
uint32_t binding_anim_tick;
|
||
uint32_t task_run_tick;
|
||
} f_alipay_t;
|
||
|
||
extern struct Node *csi_head;
|
||
void alipay_binding_detect(void);
|
||
|
||
static bool func_alipay_hfp_sta_get(void)
|
||
{
|
||
if (sys_cb.sco_state == false && bt_cb.call_type == CALL_TYPE_NONE && bt_cb.number_sta == false && !bt_is_ring() && bt_get_call_indicate() == BT_CALL_IDLE) {
|
||
return false;
|
||
} else {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
// 创建支付宝logo窗体
|
||
compo_form_t *func_alipay_form_logo_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建蓝色背景
|
||
compo_shape_t *rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, COLOR_BLACK);
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, GUI_SCREEN_WIDTH, GUI_SCREEN_HEIGHT);
|
||
compo_shape_set_radius(rect, 20);
|
||
|
||
// 新建图像
|
||
compo_picturebox_t *pic = compo_picturebox_create(frm, UI_BUF_ALIPAY_ICON_BIN);
|
||
compo_picturebox_set_pos(pic, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 23);
|
||
|
||
compo_picturebox_t *pic_text = NULL;
|
||
#if defined(__LANGUAGE_SM_CHINESE__)
|
||
if (tjd_Get_Language_Current_Index() == LANGUAGE_TYPE_Chinese)
|
||
pic_text = compo_picturebox_create(frm, UI_BUF_ALIPAY_ALIPAY_CH_BIN);
|
||
else
|
||
#endif
|
||
pic_text = compo_picturebox_create(frm, UI_BUF_ALIPAY_ALIPAY_EN_BIN);
|
||
compo_picturebox_set_pos(pic_text, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y + 40);
|
||
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝窗体
|
||
compo_form_t *func_alipay_form_scan_create(void)
|
||
{
|
||
int binding_str_len = 256;
|
||
char *binding_str = func_zalloc(binding_str_len);
|
||
memset(binding_str, 0, binding_str_len);
|
||
u8 res = alipay_get_binding_code(binding_str, &binding_str_len);
|
||
printf("res:%d, binding_str: %s\n", res, binding_str);
|
||
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
compo_shape_t *shape_bg = compo_radius_shape_create(frm, COMPO_SHAPE_TYPE_ROUNDED_RECTANGLE, 57);
|
||
compo_shape_set_color(shape_bg, COLOR_WHITE);
|
||
compo_shape_set_location(shape_bg, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, GUI_SCREEN_WIDTH, GUI_SCREEN_HEIGHT);
|
||
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 113, 220, 30);
|
||
compo_textbox_set_forecolor(txt, COLOR_BLACK);
|
||
compo_textbox_set(txt, i18n[STR_ALIPAY_BIND_TIP]);
|
||
|
||
if (!func_alipay_hfp_sta_get()) {
|
||
compo_qrcodebox_t *qrcode = compo_qrcodebox_create(frm, QRCODE_TYPE_2D, 200);
|
||
compo_qrcodebox_set(qrcode, (char *)binding_str);
|
||
compo_qrcodebox_pos(qrcode, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y + 15);
|
||
compo_qrcodebox_set_bitwid_by_qrwid(qrcode, 150);
|
||
}
|
||
|
||
func_free(binding_str);
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝窗体
|
||
compo_form_t *func_alipay_form_binding_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
compo_picturebox_t *banding_anim = compo_picturebox_create(frm, UI_BUF_ALIPAY_BINDING_ANIM_BIN);
|
||
compo_setid(banding_anim, COMPO_ID_PIC_BINDING);
|
||
compo_picturebox_cut(banding_anim, 0, ALIPAY_ANIM_NUM_MAX);
|
||
compo_picturebox_set_pos(banding_anim, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 28);
|
||
|
||
// compo_arc_t *arc = compo_arc_create(frm);
|
||
// compo_setid(arc, COMPO_ID_RATE);
|
||
// compo_arc_set_alpha(arc, 0xff, 0);
|
||
// compo_arc_set_location(arc, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 10, 180, 180);
|
||
// compo_arc_set_width(arc, 7);
|
||
// compo_arc_set_rotation(arc, 0);
|
||
// compo_arc_set_angles(arc, 0, 3600);
|
||
// compo_arc_set_color(arc, COLOR_BLUE, COLOR_WHITE);
|
||
// compo_arc_set_value(arc, 250);
|
||
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y + 48, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_BINDING]);
|
||
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝绑定状态窗体
|
||
compo_form_t *func_alipay_form_bind_complete_create(void)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
if (!f_alipay)
|
||
{
|
||
return NULL;
|
||
}
|
||
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建图像
|
||
compo_picturebox_t *pic = compo_picturebox_create(frm, UI_BUF_ALIPAY_COMPLETE_BIN);
|
||
compo_picturebox_set_pos(pic, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 30);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 200, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_BIND_SUCCESS]);
|
||
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝绑定状态窗体
|
||
compo_form_t *func_alipay_form_bind_fail_create(void)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
if (!f_alipay)
|
||
{
|
||
return NULL;
|
||
}
|
||
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建图像
|
||
compo_picturebox_t *pic = compo_picturebox_create(frm, UI_BUF_ALIPAY_BIND_STA_BIN);
|
||
compo_picturebox_set_pos(pic, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 30);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 200, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_BIND_FAILED]);
|
||
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝选项列表窗体
|
||
compo_form_t *func_alipay_form_option_list_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建按钮
|
||
compo_button_t *btn = compo_button_create_by_image(frm, UI_BUF_COMMON_BG_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_PAYCODE);
|
||
compo_button_set_pos(btn, GUI_SCREEN_CENTER_X, 58);
|
||
btn = compo_button_create_by_image(frm, UI_BUF_COMMON_BG_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_SETTING);
|
||
compo_button_set_pos(btn, GUI_SCREEN_CENTER_X, 133);
|
||
btn = compo_button_create_by_image(frm, UI_BUF_COMMON_BG_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_HELP);
|
||
compo_button_set_pos(btn, GUI_SCREEN_CENTER_X, 208);
|
||
|
||
// 新建图像
|
||
compo_picturebox_t *pic = compo_picturebox_create(frm, UI_BUF_ALIPAY_PAYMENT_BIN);
|
||
compo_picturebox_set_pos(pic, 40, 58);
|
||
pic = compo_picturebox_create(frm, UI_BUF_ALIPAY_SET_BIN);
|
||
compo_picturebox_set_pos(pic, 40, 133);
|
||
pic = compo_picturebox_create(frm, UI_BUF_ALIPAY_HELP_BIN);
|
||
compo_picturebox_set_pos(pic, 40, 208);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_align_center(txt, false);
|
||
compo_textbox_set_location(txt, 70, 58 - widget_text_get_height() / 2, 220, 70);
|
||
compo_textbox_set(txt, i18n[STR_PAYCODE]);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_align_center(txt, false);
|
||
compo_textbox_set_location(txt, 70, 133 - widget_text_get_height() / 2, 220, 70);
|
||
compo_textbox_set(txt, i18n[STR_SETTING]);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_align_center(txt, false);
|
||
compo_textbox_set_location(txt, 70, 208 - widget_text_get_height() / 2, 220, 70);
|
||
compo_textbox_set(txt, i18n[STR_HELP]);
|
||
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝二维码窗体
|
||
compo_form_t *func_alipay_form_qrcode_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建蓝色背景
|
||
compo_shape_t *rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(51, 121, 246));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, GUI_SCREEN_WIDTH, GUI_SCREEN_HEIGHT);
|
||
compo_shape_set_radius(rect, 20);
|
||
|
||
u32 paycode_len = 20;
|
||
u8 *paycode = func_zalloc(paycode_len);
|
||
memset(paycode, 0, paycode_len);
|
||
u8 res = alipay_get_paycode(paycode, &paycode_len);
|
||
u8 retry_cnt = 0;
|
||
while (res != ALIPAY_RV_OK)
|
||
{
|
||
res = alipay_get_paycode(paycode, &paycode_len);
|
||
retry_cnt++;
|
||
if (retry_cnt > ALIPAY_API_RETRY_CNT)
|
||
{
|
||
retry_cnt = 0;
|
||
printf("alipay_get_paycode err\n");
|
||
break;
|
||
}
|
||
}
|
||
printf("res:%d, paycode: %s\n", res, paycode);
|
||
|
||
#ifndef ALIPAY_PAYMENT_CODE_VERTICAL
|
||
// 页码示意条
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, COLOR_WHITE);
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X - 8, 15, 10, 10);
|
||
widget_rect_set_radius(rect->rect, 5);
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(0x8B, 0xbb, 0xff));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X + 8, 15, 10, 10);
|
||
widget_rect_set_radius(rect->rect, 5);
|
||
|
||
// 新建二维码
|
||
if (!func_alipay_hfp_sta_get()) {
|
||
compo_qrcodebox_t *qrbox = compo_qrcodebox_create(frm, QRCODE_TYPE_2D, 64);
|
||
compo_qrcodebox_set(qrbox, (char *)paycode);
|
||
compo_qrcodebox_set_bitwid_by_qrwid(qrbox, 140);
|
||
}
|
||
|
||
compo_button_t *btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_PAY_CODE);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, 140, 140);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 40, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_PAYCODE]);
|
||
#else
|
||
// 页码示意条
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(0x8B, 0xbb, 0xff));
|
||
compo_shape_set_location(rect, 15, GUI_SCREEN_CENTER_Y - 8, 10, 10);
|
||
widget_rect_set_radius(rect->rect, 5);
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, COLOR_WHITE);
|
||
compo_shape_set_location(rect, 15, GUI_SCREEN_CENTER_Y + 8, 10, 10);
|
||
widget_rect_set_radius(rect->rect, 5);
|
||
|
||
compo_picturebox_t *pic_title = compo_picturebox_create(frm, UI_BUF_ALIPAY_PAY_TEXT_BIN);
|
||
compo_picturebox_set_pos(pic_title, 32, GUI_SCREEN_CENTER_Y);
|
||
compo_picturebox_cut(pic_title, tjd_Get_Language_Current_Index() == LANGUAGE_TYPE_Chinese ? 0 : 1, 2);
|
||
|
||
// 新建二维码
|
||
if (!func_alipay_hfp_sta_get()) {
|
||
compo_qrcodebox_t *qrbox = compo_qrcodebox_create(frm, QRCODE_TYPE_2D, 64);
|
||
compo_qrcodebox_set(qrbox, (char *)paycode);
|
||
compo_qrcodebox_set_bitwid_by_qrwid(qrbox, 140);
|
||
compo_qrcodebox_pos(qrbox, GUI_SCREEN_CENTER_X + 18, GUI_SCREEN_CENTER_Y);
|
||
}
|
||
|
||
compo_button_t *btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_PAY_CODE);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X + 18, GUI_SCREEN_CENTER_Y, 140, 140);
|
||
#endif
|
||
|
||
func_free(paycode);
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝条形码窗体
|
||
compo_form_t *func_alipay_form_barcode_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建蓝色背景
|
||
compo_shape_t *rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(51, 121, 246));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, GUI_SCREEN_WIDTH, GUI_SCREEN_HEIGHT);
|
||
compo_shape_set_radius(rect, 20);
|
||
|
||
u32 paycode_len = 20;
|
||
u8 *paycode = func_zalloc(paycode_len);
|
||
memset(paycode, 0, paycode_len);
|
||
u8 res = alipay_get_paycode(paycode, &paycode_len);
|
||
u8 retry_cnt = 0;
|
||
while (res != ALIPAY_RV_OK)
|
||
{
|
||
res = alipay_get_paycode(paycode, &paycode_len);
|
||
retry_cnt++;
|
||
if (retry_cnt > ALIPAY_API_RETRY_CNT)
|
||
{
|
||
retry_cnt = 0;
|
||
printf("alipay_get_paycode err\n");
|
||
break;
|
||
}
|
||
}
|
||
u8 pay_num1[5] = {0};
|
||
u8 pay_num2[5] = {0};
|
||
u8 pay_num3[5] = {0};
|
||
u8 pay_num4[7] = {0};
|
||
memcpy(pay_num1, paycode, 4);
|
||
memcpy(pay_num2, &paycode[4], 4);
|
||
memcpy(pay_num3, &paycode[8], 4);
|
||
memcpy(pay_num4, &paycode[12], paycode_len - 12);
|
||
printf("res:%d, paycode: %s\n", res, paycode);
|
||
|
||
#ifndef ALIPAY_PAYMENT_CODE_VERTICAL
|
||
// 页码示意条
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(0x8B, 0xbb, 0xff));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X - 8, 15, 10, 10);
|
||
widget_rect_set_radius(rect->rect, 5);
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, COLOR_WHITE);
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X + 8, 15, 10, 10);
|
||
widget_rect_set_radius(rect->rect, 5);
|
||
|
||
// 新建二维码
|
||
if (!func_alipay_hfp_sta_get()) {
|
||
compo_qrcodebox_t *qrbox = compo_qrcodebox_create(frm, QRCODE_TYPE_HORIZONTAL, 64);
|
||
compo_qrcodebox_set(qrbox, (char *)paycode);
|
||
compo_qrcodebox_set_bitwid(qrbox, 10);
|
||
compo_qrcodebox_set_bitwid_by_qrwid(qrbox, 200);
|
||
}
|
||
|
||
compo_button_t *btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_PAY_CODE);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, 240, 140);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 40, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_PAYCODE]);
|
||
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y + 70, 240, 30);
|
||
sprintf(text_buf, "%s %s %s %s", (char *)pay_num1, (char *)pay_num2, (char *)pay_num3, (char *)pay_num4);
|
||
compo_textbox_set(txt, text_buf);
|
||
#else
|
||
// 页码示意条
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, COLOR_WHITE);
|
||
compo_shape_set_location(rect, 15, GUI_SCREEN_CENTER_Y - 8, 10, 10);
|
||
widget_rect_set_radius(rect->rect, 5);
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(0x8B, 0xbb, 0xff));
|
||
compo_shape_set_location(rect, 15, GUI_SCREEN_CENTER_Y + 8, 10, 10);
|
||
widget_rect_set_radius(rect->rect, 5);
|
||
|
||
compo_picturebox_t *pic_title = compo_picturebox_create(frm, UI_BUF_ALIPAY_PAY_TEXT_BIN);
|
||
compo_picturebox_set_pos(pic_title, 32, GUI_SCREEN_CENTER_Y);
|
||
compo_picturebox_cut(pic_title, tjd_Get_Language_Current_Index() == LANGUAGE_TYPE_Chinese ? 0 : 1, 2);
|
||
|
||
// 新建二维码
|
||
if (!func_alipay_hfp_sta_get()) {
|
||
compo_qrcodebox_t *qrbox = compo_qrcodebox_create(frm, QRCODE_TYPE_VERTICAL, 64);
|
||
compo_qrcodebox_set(qrbox, (char *)paycode);
|
||
compo_qrcodebox_set_bitwid(qrbox, 10);
|
||
compo_qrcodebox_set_bitwid_by_qrwid(qrbox, 200);
|
||
compo_qrcodebox_pos(qrbox, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y);
|
||
compo_qrcodebox_set_rect_size(qrbox, GUI_SCREEN_WIDTH / 20, GUI_SCREEN_WIDTH / 10);
|
||
}
|
||
|
||
compo_button_t *btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_PAY_CODE);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, 140, 240);
|
||
|
||
u8 space_cnt = 0;
|
||
u16 img_hei, img_y;
|
||
for (int i = 0; i < paycode_len; i++)
|
||
{
|
||
if (i % 4 == 0 && i <= 12) space_cnt++;
|
||
|
||
compo_picturebox_t *pic_num = compo_picturebox_create(frm, UI_BUF_ALIPAY_NUMBER_BIN);
|
||
|
||
area_t area = widget_image_get_size(pic_num->img);
|
||
img_hei = area.hei / 10;
|
||
|
||
img_y = (GUI_SCREEN_HEIGHT - (img_hei * (paycode_len + 3))) / 2;
|
||
img_y = (GUI_SCREEN_HEIGHT - img_y) + (img_hei / 2);
|
||
|
||
compo_picturebox_set_pos(pic_num, GUI_SCREEN_CENTER_X + 56, img_y - (img_hei * (i + space_cnt)));
|
||
compo_picturebox_cut(pic_num, paycode[i] - 0x30, 10);
|
||
}
|
||
#endif
|
||
|
||
func_free(paycode);
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝解绑(设置)窗体
|
||
compo_form_t *func_alipay_form_unbind_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建按钮蓝色背景
|
||
compo_shape_t *rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(51, 121, 246));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X, GUI_SCREEN_HEIGHT - 60, 150, 50);
|
||
widget_rect_set_radius(rect->rect, 20);
|
||
|
||
// 新建按钮
|
||
compo_button_t *btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_UNBIND);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X, GUI_SCREEN_HEIGHT - 60, 150, 50);
|
||
|
||
u8 res;
|
||
|
||
u32 id_len = 128;
|
||
u8 *id = func_zalloc(id_len);
|
||
memset(id, 0, id_len);
|
||
|
||
u32 name_len = 128;
|
||
u8 *name = func_zalloc(name_len);
|
||
char *affirm_name = func_zalloc(name_len);
|
||
memset(name, 0, name_len);
|
||
memset(affirm_name, 0, name_len);
|
||
|
||
res = alipay_get_logon_ID(id, &id_len);
|
||
u8 retry_cnt = 0;
|
||
while (res != ALIPAY_RV_OK)
|
||
{
|
||
res = alipay_get_logon_ID(id, &id_len);
|
||
retry_cnt++;
|
||
if (retry_cnt > ALIPAY_API_RETRY_CNT)
|
||
{
|
||
retry_cnt = 0;
|
||
printf("alipay_get_logon_ID err\n");
|
||
break;
|
||
}
|
||
}
|
||
printf("alipay_get_logon_ID: %d: %s\n", res, id);
|
||
res = alipay_get_nick_name(name, &name_len);
|
||
retry_cnt = 0;
|
||
while (res != ALIPAY_RV_OK)
|
||
{
|
||
res = alipay_get_nick_name(name, &name_len);
|
||
retry_cnt++;
|
||
if (retry_cnt > ALIPAY_API_RETRY_CNT)
|
||
{
|
||
retry_cnt = 0;
|
||
printf("alipay_get_nick_name err\n");
|
||
break;
|
||
}
|
||
}
|
||
UTF8_replace_emojis((char *)name, affirm_name);
|
||
printf("alipay_get_logon_name: %d: %s\n", res, name);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 30, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_SETTING]);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 35, 220, 30);
|
||
compo_textbox_set_forecolor(txt, COLOR_GRAY);
|
||
compo_textbox_set(txt, affirm_name);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, 220, 30);
|
||
compo_textbox_set(txt, (char *)id);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_HEIGHT - 60, 130, 30);
|
||
compo_textbox_set(txt, i18n[STR_UNBIND]);
|
||
|
||
func_free(id);
|
||
func_free(name);
|
||
func_free(affirm_name);
|
||
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝二维码窗体
|
||
compo_form_t *func_alipay_form_help_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建蓝色背景
|
||
compo_shape_t *rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(51, 121, 246));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, GUI_SCREEN_WIDTH, GUI_SCREEN_HEIGHT);
|
||
compo_shape_set_radius(rect, 20);
|
||
|
||
u32 len_aid_code = 256;
|
||
char *aid_code = func_zalloc(len_aid_code);
|
||
memset(aid_code, 0, len_aid_code);
|
||
u8 res = alipay_get_aid_code(aid_code, &len_aid_code, true);
|
||
u8 retry_cnt = 0;
|
||
while (res != ALIPAY_RV_OK)
|
||
{
|
||
res = alipay_get_aid_code(aid_code, &len_aid_code, true);
|
||
retry_cnt++;
|
||
if (retry_cnt > ALIPAY_API_RETRY_CNT)
|
||
{
|
||
retry_cnt = 0;
|
||
printf("alipay_get_paycode err\n");
|
||
break;
|
||
}
|
||
}
|
||
printf("res:%d, aid_code: %s, len_aid_code: %d\n", res, aid_code, len_aid_code);
|
||
|
||
// 新建二维码
|
||
if (!func_alipay_hfp_sta_get()) {
|
||
compo_qrcodebox_t *qrbox = compo_qrcodebox_create(frm, QRCODE_TYPE_2D, 200);
|
||
compo_qrcodebox_set(qrbox, (char *)aid_code);
|
||
compo_qrcodebox_set_bitwid_by_qrwid(qrbox, 140);
|
||
compo_qrcodebox_pos(qrbox, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y + 10);
|
||
}
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 40, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_HELP_TILE]);
|
||
|
||
func_free(aid_code);
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝确认解绑窗体
|
||
compo_form_t *func_alipay_form_unbind_confirm_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建按钮背景
|
||
compo_shape_t *rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); // 白
|
||
compo_shape_set_color(rect, COLOR_WHITE);
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X - 60, GUI_SCREEN_HEIGHT - 60, 100, 60);
|
||
widget_rect_set_radius(rect->rect, 30);
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); // 蓝
|
||
compo_shape_set_color(rect, make_color(51, 121, 246));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X + 60, GUI_SCREEN_HEIGHT - 60, 100, 60);
|
||
widget_rect_set_radius(rect->rect, 30);
|
||
|
||
// 新建按钮
|
||
compo_button_t *btn = compo_button_create(frm); // 确认
|
||
compo_setid(btn, COMPO_ID_BTN_UNBIND_YES);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X - 60, GUI_SCREEN_HEIGHT - 60, 100, 60);
|
||
btn = compo_button_create(frm); // 取消
|
||
compo_setid(btn, COMPO_ID_BTN_UNBIND_NO);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X + 60, GUI_SCREEN_HEIGHT - 60, 100, 60);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 40, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_UNBIND]);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 20, 220, 118);
|
||
compo_textbox_set_multiline(txt, true);
|
||
compo_textbox_set(txt, i18n[STR_ALIPAY_UNBIND_TIP]);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X - 60, GUI_SCREEN_HEIGHT - 60, 80, 30);
|
||
compo_textbox_set_forecolor(txt, COLOR_BLACK);
|
||
compo_textbox_set(txt, i18n[STR_CONFIMR]);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X + 60, GUI_SCREEN_HEIGHT - 60, 80, 30);
|
||
compo_textbox_set(txt, i18n[STR_CANCEL]);
|
||
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝解绑完成窗体
|
||
compo_form_t *func_alipay_form_unbind_finish_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建按钮蓝色背景
|
||
compo_shape_t *rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(rect, make_color(51, 121, 246));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X, GUI_SCREEN_HEIGHT - 60, 150, 60);
|
||
widget_rect_set_radius(rect->rect, 20);
|
||
|
||
// 新建按钮
|
||
compo_button_t *btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_CONFIRM);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X, GUI_SCREEN_HEIGHT - 60, 150, 60);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 40, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_UNBIND_SUCCEED]);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN * 2);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 20, 220, 118);
|
||
compo_textbox_set_multiline(txt, true);
|
||
compo_textbox_set(txt, i18n[STR_ALIPAY_UNBIND_TIP2]);
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_HEIGHT - 60, 130, 30);
|
||
compo_textbox_set(txt, i18n[STR_CONFIMR]);
|
||
|
||
return frm;
|
||
}
|
||
|
||
// 创建支付宝退出绑定窗体
|
||
compo_form_t *func_alipay_form_quit_bind_create(void)
|
||
{
|
||
// 新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
// 新建按钮背景
|
||
compo_shape_t *rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); // 白
|
||
compo_shape_set_color(rect, COLOR_WHITE);
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X - 60, GUI_SCREEN_HEIGHT - 60, 100, 60);
|
||
widget_rect_set_radius(rect->rect, 30);
|
||
|
||
rect = compo_shape_create(frm, COMPO_SHAPE_TYPE_RECTANGLE); // 蓝
|
||
compo_shape_set_color(rect, make_color(51, 121, 246));
|
||
compo_shape_set_location(rect, GUI_SCREEN_CENTER_X + 60, GUI_SCREEN_HEIGHT - 60, 100, 60);
|
||
widget_rect_set_radius(rect->rect, 30);
|
||
|
||
// 新建按钮
|
||
compo_button_t *btn = compo_button_create(frm); // 确认
|
||
compo_setid(btn, COMPO_ID_BTN_QUIT_BIND_YES);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X - 60, GUI_SCREEN_HEIGHT - 60, 100, 60);
|
||
|
||
btn = compo_button_create(frm); // 取消
|
||
compo_setid(btn, COMPO_ID_BTN_QUIT_BIND_NO);
|
||
compo_button_set_location(btn, GUI_SCREEN_CENTER_X + 60, GUI_SCREEN_HEIGHT - 60, 100, 60);
|
||
|
||
// 新建文本
|
||
compo_textbox_t *txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, 40, 220, 30);
|
||
compo_textbox_set(txt, i18n[STR_ALIPAY_QUIT_BINDING]);
|
||
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y - 20, 220, 118);
|
||
compo_textbox_set_multiline(txt, true);
|
||
compo_textbox_set(txt, i18n[STR_ALIPAY_QUIT_BINDING_TIP]);
|
||
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X - 60, GUI_SCREEN_HEIGHT - 60, 80, 30);
|
||
compo_textbox_set_forecolor(txt, COLOR_BLACK);
|
||
compo_textbox_set(txt, i18n[STR_ALIPAY_QUIT]);
|
||
|
||
txt = compo_textbox_create(frm, TEXTBOX_TEXT_BUF_LEN);
|
||
compo_textbox_set_location(txt, GUI_SCREEN_CENTER_X + 60, GUI_SCREEN_HEIGHT - 60, 80, 30);
|
||
compo_textbox_set(txt, i18n[STR_ALIPAY_GO_BIND]);
|
||
|
||
return frm;
|
||
}
|
||
|
||
extern u32 __alipay_start, __alipay_size;
|
||
AT(.text.func.alipay)
|
||
void func_alipay_prepare(void)
|
||
{
|
||
printf("__alipay_start: 0x%x, size: 0x%x\n", &__alipay_start, &__alipay_size);
|
||
memset(&__alipay_start, 0, (u32)&__alipay_size);
|
||
#if (SECURITY_PAY_VENDOR == SECURITY_VENDOR_HS)
|
||
HS_IIC_Init();
|
||
#endif
|
||
#if (SECURITY_PAY_VENDOR == SECURITY_VENDOR_HED)
|
||
uint8_t *alipay_com_outbuf = func_zalloc(200);
|
||
uint32_t alipay_outlen = 0;
|
||
hed_rst_init();
|
||
csi_exit_lpm(0);
|
||
HED_IIC_Init();
|
||
api_connect(alipay_com_outbuf, &alipay_outlen);
|
||
printf("api_connect atr:\n");
|
||
print_r(alipay_com_outbuf, alipay_outlen);
|
||
func_free(alipay_com_outbuf);
|
||
#endif
|
||
u8 sta = alipay_pre_init();
|
||
printf("alipay_pre_init: %d\n", sta);
|
||
if (sta != ALIPAY_RV_OK)
|
||
{
|
||
func_back_to();
|
||
}
|
||
|
||
sta = alipay_get_binding_status();
|
||
printf("alipay_get_binding_status: %d\n", sta);
|
||
if (sta == true)
|
||
{
|
||
SysVariable.alipay_binding_flag = true;
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_OPTION_LIST);
|
||
}
|
||
else
|
||
{
|
||
SysVariable.alipay_binding_flag = false;
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_SCAN);
|
||
}
|
||
|
||
printf("func_alipay_prepare finish\n");
|
||
}
|
||
|
||
|
||
// AT(.text.func.alipay)
|
||
// u8 get_alipay_band(void)
|
||
// {
|
||
// printf("__alipay_start: 0x%x, size: 0x%x\n", &__alipay_start, &__alipay_size);
|
||
// memset(&__alipay_start, 0, (u32)&__alipay_size);
|
||
// #if (SECURITY_PAY_VENDOR == SECURITY_VENDOR_HS)
|
||
// HS_IIC_Init();
|
||
// #endif
|
||
// #if (SECURITY_PAY_VENDOR == SECURITY_VENDOR_HED)
|
||
// uint8_t *alipay_com_outbuf = func_zalloc(200);
|
||
// uint32_t alipay_outlen = 0;
|
||
// hed_rst_init();
|
||
// csi_exit_lpm(0);
|
||
// HED_IIC_Init();
|
||
// api_connect(alipay_com_outbuf, &alipay_outlen);
|
||
// printf("api_connect atr:\n");
|
||
// print_r(alipay_com_outbuf, alipay_outlen);
|
||
// func_free(alipay_com_outbuf);
|
||
// #endif
|
||
// u8 sta = alipay_pre_init();
|
||
// printf("alipay_pre_init: %d\n", sta);
|
||
// sta = alipay_get_binding_status();
|
||
// printf("alipay_get_binding_status: %d\n", sta);
|
||
// printf("func_alipay_prepare finish\n");
|
||
// return sta;
|
||
// }
|
||
|
||
|
||
void func_alipay_init(void)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
|
||
f_alipay->page = ALIPAY_PAGE_LOGO;
|
||
f_alipay->task_run_tick = tick_get();
|
||
|
||
f_alipay->light_level_temp = SysVariable.light_level;
|
||
}
|
||
|
||
// 支付宝功能事件处理
|
||
static void func_alipay_process(void)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
|
||
/* 支付宝任务调度 UNIT:1S */
|
||
if (tick_check_expire(f_alipay->task_run_tick, 1000))
|
||
{
|
||
f_alipay->task_run_tick = tick_get();
|
||
alipay_binding_detect();
|
||
}
|
||
|
||
/* 绑定动画刷新 */
|
||
compo_picturebox_t *banding_anim = compo_getobj_byid(COMPO_ID_PIC_BINDING);
|
||
if (banding_anim != NULL &&
|
||
f_alipay->page == ALIPAY_PAGE_BINDING &&
|
||
tick_check_expire(f_alipay->binding_anim_tick, ALIPAY_ANIM_PLAY_INTERVAL))
|
||
{
|
||
f_alipay->binding_anim_tick = tick_get();
|
||
|
||
f_alipay->binding_anim_idx = (f_alipay->binding_anim_idx + 1) % ALIPAY_ANIM_NUM_MAX;
|
||
compo_picturebox_cut(banding_anim, f_alipay->binding_anim_idx, ALIPAY_ANIM_NUM_MAX);
|
||
}
|
||
|
||
func_process();
|
||
}
|
||
|
||
// 创建支付宝窗体(默认为logo页面)
|
||
compo_form_t *func_alipay_form_create(void)
|
||
{
|
||
return func_alipay_form_logo_create();
|
||
}
|
||
|
||
// 创建指定页面的窗体(销毁&创建)
|
||
void func_alipay_form_create_by_page(u8 page_sta)
|
||
{
|
||
printf("%s: %d\n", __func__, page_sta);
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
compo_form_t *frm = func_cb.frm_main;
|
||
|
||
if (frm != NULL)
|
||
{
|
||
compo_form_destroy(frm);
|
||
frm = NULL;
|
||
}
|
||
|
||
switch (page_sta)
|
||
{
|
||
case ALIPAY_PAGE_LOGO:
|
||
frm = func_alipay_form_logo_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_SCAN:
|
||
frm = func_alipay_form_scan_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_BINDING:
|
||
frm = func_alipay_form_binding_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_BIND_SUCC:
|
||
frm = func_alipay_form_bind_complete_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_BIND_FAIL:
|
||
frm = func_alipay_form_bind_fail_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_OPTION_LIST:
|
||
frm = func_alipay_form_option_list_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_QRCODE:
|
||
frm = func_alipay_form_qrcode_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_BARCODE:
|
||
frm = func_alipay_form_barcode_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_UNBIND:
|
||
frm = func_alipay_form_unbind_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_QUIT_BIND:
|
||
frm = func_alipay_form_quit_bind_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_HELP:
|
||
frm = func_alipay_form_help_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_UNBIND_CONFIRM:
|
||
frm = func_alipay_form_unbind_confirm_create();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_UNBIND_FINISH:
|
||
frm = func_alipay_form_unbind_finish_create();
|
||
break;
|
||
}
|
||
|
||
/* 打开付款码时亮度保持80% */
|
||
if (page_sta == ALIPAY_PAGE_QRCODE || page_sta == ALIPAY_PAGE_BARCODE)
|
||
{
|
||
if (f_alipay->light_level_temp == SysVariable.light_level)
|
||
{
|
||
f_alipay->light_level_temp = SysVariable.light_level;
|
||
if (SysVariable.light_level < 4)
|
||
SysVariable.light_level = 4;
|
||
|
||
tft_bglight_set_level(SysVariable.light_level, false);
|
||
}
|
||
}
|
||
|
||
if (frm)
|
||
{
|
||
f_alipay->last_page = f_alipay->page;
|
||
f_alipay->page = page_sta;
|
||
printf(">>>page_sta[%d]\n", page_sta);
|
||
}
|
||
}
|
||
|
||
// 检测绑定状态改变之后跳转界面
|
||
void alipay_binding_detect(void)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
if (f_alipay->page == ALIPAY_PAGE_LOGO)
|
||
{
|
||
f_alipay->logo_display_cnt++;
|
||
printf("logo_display_cnt: %d\n", f_alipay->logo_display_cnt);
|
||
reset_sleep_delay_all();
|
||
if (f_alipay->logo_display_cnt == ALIPAY_LOGO_TIMEOUT)
|
||
{
|
||
f_alipay->logo_display_cnt = 0;
|
||
func_alipay_prepare();
|
||
}
|
||
}
|
||
else if (f_alipay->page == ALIPAY_PAGE_SCAN || f_alipay->page == ALIPAY_PAGE_BINDING || f_alipay->page == ALIPAY_PAGE_QUIT_BIND)
|
||
{
|
||
u32 ret;
|
||
reset_sleep_delay_all(); // 支付宝在绑定的过程中不许系统休眠
|
||
sys_cb.alipay_state = true;
|
||
binding_status_e sta = ALIPAY_STATUS_UNKNOWN;
|
||
ret = alipay_query_binding_result(&sta);
|
||
printf("ret: %d, sta: %d, page: %d\n", ret, sta, f_alipay->page);
|
||
|
||
if (sta == ALIPAY_STATUS_START_BINDING &&
|
||
(f_alipay->page == ALIPAY_PAGE_SCAN || (f_alipay->page == ALIPAY_PAGE_QUIT_BIND && f_alipay->last_page != ALIPAY_PAGE_BINDING)))
|
||
{
|
||
f_alipay->binding_flag = true;
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_BINDING);
|
||
}
|
||
// compo_arc_t *arc = compo_getobj_byid(COMPO_ID_RATE);
|
||
if (f_alipay->page == ALIPAY_PAGE_BINDING || f_alipay->page == ALIPAY_PAGE_QUIT_BIND)
|
||
{
|
||
switch (sta)
|
||
{
|
||
case ALIPAY_STATUS_BINDING_OK:
|
||
// compo_arc_set_value(arc, 1000);
|
||
f_alipay->binding_flag = false;
|
||
SysVariable.alipay_binding_flag = true;
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_BIND_SUCC);
|
||
break;
|
||
case ALIPAY_STATUS_BINDING_FAIL:
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
// binding timeout go to logo
|
||
if (sta != ALIPAY_STATUS_BINDING_OK && (f_alipay->page == ALIPAY_PAGE_BINDING || (f_alipay->page == ALIPAY_PAGE_QUIT_BIND && f_alipay->binding_flag)))
|
||
{
|
||
f_alipay->binding_time_cnt++;
|
||
if (f_alipay->binding_time_cnt == ALIPAY_BIND_TIMEOUT || sta == ALIPAY_STATUS_BINDING_FAIL || !ble_is_connected())
|
||
{
|
||
f_alipay->binding_flag = false;
|
||
f_alipay->binding_time_cnt = 0;
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_BIND_FAIL);
|
||
}
|
||
}
|
||
}
|
||
/* 绑定成功提醒页面跳转至列表页面 */
|
||
if (f_alipay->page == ALIPAY_PAGE_BIND_SUCC)
|
||
{
|
||
reset_sleep_delay_all();
|
||
f_alipay->bind_success_time_cnt++;
|
||
printf("bind_success_time_cnt: %d\n", f_alipay->bind_success_time_cnt);
|
||
if (f_alipay->bind_success_time_cnt == ALIPAY_SUCCESS_TIMEOUT)
|
||
{
|
||
f_alipay->bind_success_time_cnt = 0;
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_OPTION_LIST);
|
||
}
|
||
}
|
||
/* 绑定失败提醒页面跳转至绑定页面 */
|
||
else if (f_alipay->page == ALIPAY_PAGE_BIND_FAIL)
|
||
{
|
||
reset_sleep_delay_all();
|
||
f_alipay->bind_fail_time_cnt++;
|
||
printf("bind_fail_time_cnt: %d\n", f_alipay->bind_fail_time_cnt);
|
||
if (f_alipay->bind_fail_time_cnt == ALIPAY_FAIL_TIMEOUT)
|
||
{
|
||
f_alipay->bind_fail_time_cnt = 0;
|
||
// alipay_bind_env_destroy();
|
||
printf("alipay_bind_env_destroy\n");
|
||
printf("%s\n", __func__);
|
||
|
||
freeList(&csi_head);
|
||
func_alipay_prepare();
|
||
}
|
||
}
|
||
/* 更新付款码数据 */
|
||
else if (f_alipay->page == ALIPAY_PAGE_QRCODE || f_alipay->page == ALIPAY_PAGE_BARCODE)
|
||
{
|
||
reset_sleep_delay_all();
|
||
f_alipay->bind_code_refresh_time_cnt++;
|
||
|
||
if (f_alipay->bind_code_refresh_time_cnt >= ALIPAY_CODE_REFRESH_TIMEOUT)
|
||
{
|
||
printf("===>> qr code refresh\n");
|
||
f_alipay->bind_code_refresh_time_cnt = 0;
|
||
func_alipay_form_create_by_page(f_alipay->page);
|
||
}
|
||
}
|
||
}
|
||
|
||
// 支付宝按钮点击处理
|
||
static void func_alipay_touch_key(void)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
u8 id = compo_get_button_id();
|
||
if (id)
|
||
{
|
||
printf(">>>button_id:%d\n", id);
|
||
switch (f_alipay->page)
|
||
{
|
||
case ALIPAY_PAGE_OPTION_LIST:
|
||
if (id == COMPO_ID_BTN_PAYCODE)
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_QRCODE);
|
||
}
|
||
else if (id == COMPO_ID_BTN_SETTING)
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_UNBIND);
|
||
}
|
||
else if (id == COMPO_ID_BTN_HELP)
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_HELP);
|
||
}
|
||
break;
|
||
|
||
case ALIPAY_PAGE_UNBIND:
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_UNBIND_CONFIRM);
|
||
break;
|
||
|
||
case ALIPAY_PAGE_UNBIND_CONFIRM:
|
||
if (id == COMPO_ID_BTN_UNBIND_YES)
|
||
{
|
||
if (alipay_unbinding() == ALIPAY_RV_OK)
|
||
{
|
||
freeList(&csi_head);
|
||
SysVariable.alipay_binding_flag = false;
|
||
printf("alipay_unbinding success!\n");
|
||
}
|
||
else
|
||
{
|
||
SysVariable.alipay_binding_flag = true;
|
||
printf("alipay_unbinding fail!\n");
|
||
}
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_UNBIND_FINISH);
|
||
}
|
||
else
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_UNBIND);
|
||
}
|
||
break;
|
||
|
||
case ALIPAY_PAGE_QUIT_BIND:
|
||
if (id == COMPO_ID_BTN_QUIT_BIND_YES)
|
||
{
|
||
func_back_to();
|
||
}
|
||
else
|
||
{
|
||
binding_status_e sta = ALIPAY_STATUS_UNKNOWN;
|
||
alipay_query_binding_result(&sta);
|
||
|
||
if (sta == ALIPAY_STATUS_START_BINDING)
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_BINDING);
|
||
else
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_SCAN);
|
||
}
|
||
break;
|
||
|
||
case ALIPAY_PAGE_UNBIND_FINISH:
|
||
func_alipay_prepare();
|
||
break;
|
||
|
||
case ALIPAY_PAGE_QRCODE:
|
||
case ALIPAY_PAGE_BARCODE:
|
||
if (id == COMPO_ID_BTN_PAY_CODE)
|
||
{
|
||
static u32 touch_update_tick = 0;
|
||
if (tick_check_expire(touch_update_tick, 2000))
|
||
{
|
||
touch_update_tick = tick_get();
|
||
f_alipay->bind_code_refresh_time_cnt = 0;
|
||
func_alipay_form_create_by_page(f_alipay->page);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 支付宝功能消息处理
|
||
static void func_alipay_touch_move(size_msg_t msg)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
|
||
if (msg == MSG_CTP_SHORT_RIGHT && (f_alipay->page == ALIPAY_PAGE_LOGO))
|
||
{
|
||
// func_back_to();
|
||
}
|
||
#ifndef ALIPAY_PAYMENT_CODE_VERTICAL
|
||
else if (msg == MSG_CTP_SHORT_LEFT && f_alipay->page == ALIPAY_PAGE_QRCODE)
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_BARCODE);
|
||
}
|
||
else if (msg == MSG_CTP_SHORT_RIGHT && f_alipay->page == ALIPAY_PAGE_BARCODE)
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_QRCODE);
|
||
}
|
||
else if (msg == MSG_CTP_SHORT_RIGHT && (f_alipay->page == ALIPAY_PAGE_QRCODE || f_alipay->page == ALIPAY_PAGE_UNBIND || f_alipay->page == ALIPAY_PAGE_HELP))
|
||
{
|
||
/* 退出时恢复亮度 */
|
||
if (f_alipay->light_level_temp != SysVariable.light_level && f_alipay->page == ALIPAY_PAGE_QRCODE)
|
||
{
|
||
SysVariable.light_level = f_alipay->light_level_temp;
|
||
tft_bglight_set_level(SysVariable.light_level, false);
|
||
}
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_OPTION_LIST);
|
||
}
|
||
#else
|
||
else if (msg == MSG_CTP_SHORT_UP && f_alipay->page == ALIPAY_PAGE_BARCODE)
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_QRCODE);
|
||
}
|
||
else if (msg == MSG_CTP_SHORT_DOWN && f_alipay->page == ALIPAY_PAGE_QRCODE)
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_BARCODE);
|
||
}
|
||
else if (msg == MSG_CTP_SHORT_RIGHT &&
|
||
(f_alipay->page == ALIPAY_PAGE_QRCODE || f_alipay->page == ALIPAY_PAGE_BARCODE || f_alipay->page == ALIPAY_PAGE_UNBIND || f_alipay->page == ALIPAY_PAGE_HELP))
|
||
{
|
||
/* 退出时恢复亮度 */
|
||
if (f_alipay->light_level_temp != SysVariable.light_level && (f_alipay->page == ALIPAY_PAGE_QRCODE || ALIPAY_PAGE_BARCODE))
|
||
{
|
||
SysVariable.light_level = f_alipay->light_level_temp;
|
||
tft_bglight_set_level(SysVariable.light_level, false);
|
||
}
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_OPTION_LIST);
|
||
}
|
||
#endif
|
||
else if (msg == MSG_CTP_SHORT_RIGHT && (f_alipay->page == ALIPAY_PAGE_UNBIND_CONFIRM))
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_UNBIND);
|
||
}
|
||
else if (msg == MSG_CTP_SHORT_RIGHT && f_alipay->page == ALIPAY_PAGE_OPTION_LIST)
|
||
{
|
||
func_back_to();
|
||
}
|
||
else if (msg == MSG_CTP_SHORT_RIGHT && (f_alipay->page == ALIPAY_PAGE_BINDING || f_alipay->page == ALIPAY_PAGE_SCAN))
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_QUIT_BIND);
|
||
}
|
||
else if (msg == MSG_CTP_SHORT_RIGHT && f_alipay->page == ALIPAY_PAGE_QUIT_BIND)
|
||
{
|
||
binding_status_e sta = ALIPAY_STATUS_UNKNOWN;
|
||
alipay_query_binding_result(&sta);
|
||
|
||
if (sta == ALIPAY_STATUS_START_BINDING)
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_BINDING);
|
||
else
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_SCAN);
|
||
}
|
||
else if (msg == MSG_CTP_SHORT_RIGHT && (f_alipay->page == ALIPAY_PAGE_BIND_FAIL))
|
||
{
|
||
freeList(&csi_head);
|
||
func_alipay_prepare();
|
||
f_alipay->bind_fail_time_cnt = 0;
|
||
}
|
||
}
|
||
|
||
// 支付宝功能消息处理
|
||
static void func_alipay_click_handler(void)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
|
||
if (f_alipay->page == ALIPAY_PAGE_OPTION_LIST)
|
||
{
|
||
func_back_to();
|
||
}
|
||
else if (f_alipay->page == ALIPAY_PAGE_BINDING || f_alipay->page == ALIPAY_PAGE_SCAN)
|
||
{
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_QUIT_BIND);
|
||
}
|
||
else if (f_alipay->page == ALIPAY_PAGE_QUIT_BIND)
|
||
{
|
||
binding_status_e sta = ALIPAY_STATUS_UNKNOWN;
|
||
alipay_query_binding_result(&sta);
|
||
|
||
if (sta == ALIPAY_STATUS_START_BINDING)
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_BINDING);
|
||
else
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_SCAN);
|
||
}
|
||
|
||
switch (f_alipay->page)
|
||
{
|
||
case ALIPAY_PAGE_QRCODE:
|
||
case ALIPAY_PAGE_BARCODE:
|
||
case ALIPAY_PAGE_UNBIND:
|
||
case ALIPAY_PAGE_UNBIND_CONFIRM:
|
||
case ALIPAY_PAGE_HELP:
|
||
func_alipay_form_create_by_page(ALIPAY_PAGE_OPTION_LIST);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
// 支付宝功能消息处理
|
||
static void func_alipay_message(size_msg_t msg)
|
||
{
|
||
switch (msg)
|
||
{
|
||
case MSG_CTP_CLICK:
|
||
func_alipay_touch_key();
|
||
break;
|
||
|
||
case MSG_CTP_LONG:
|
||
break;
|
||
case KU_BACK:
|
||
func_alipay_click_handler();
|
||
break;
|
||
|
||
case MSG_CTP_SHORT_UP:
|
||
case MSG_CTP_SHORT_DOWN:
|
||
case MSG_CTP_SHORT_RIGHT:
|
||
case MSG_CTP_SHORT_LEFT:
|
||
func_alipay_touch_move(msg);
|
||
break;
|
||
default:
|
||
func_message(msg);
|
||
break;
|
||
}
|
||
}
|
||
|
||
// 进入支付宝功能
|
||
static u8 alipay_enter_heap_func[HEAP_FUNC_ALIPAY_SIZE] AT(.alipay_enter.buf);
|
||
// static u8 alipay_exit_heap_func[HEAP_FUNC_SIZE] AT(.heap.func);
|
||
// static u8 heap_func[HEAP_FUNC_SIZE] AT(.alipay_exit.buf);
|
||
extern u32 __dev_end;
|
||
static void func_alipay_enter(void)
|
||
{
|
||
printf("__dev_end=0X%X\n", (u32)&__dev_end);
|
||
func_heap_init(alipay_enter_heap_func, HEAP_FUNC_ALIPAY_SIZE);
|
||
// func_heap_init(heap_func, HEAP_FUNC_SIZE);
|
||
|
||
printf("heap_init\n");
|
||
func_cb.f_cb = func_zalloc(sizeof(f_alipay_t));
|
||
func_cb.frm_main = func_alipay_form_create();
|
||
func_alipay_init();
|
||
}
|
||
|
||
|
||
|
||
// 退出支付宝功能
|
||
static void func_alipay_exit(void)
|
||
{
|
||
f_alipay_t *f_alipay = (f_alipay_t *)func_cb.f_cb;
|
||
|
||
printf("%s\n", __func__);
|
||
|
||
/* 等待任务状态改变 */
|
||
while (func_cb.sta == FUNC_ALIPAY) {
|
||
func_process();
|
||
func_message(msg_dequeue());
|
||
}
|
||
|
||
/* 退出时恢复亮度 */
|
||
if (f_alipay->light_level_temp != SysVariable.light_level)
|
||
{
|
||
SysVariable.light_level = f_alipay->light_level_temp;
|
||
tft_bglight_set_level(SysVariable.light_level, false);
|
||
}
|
||
|
||
if (func_cb.f_cb != NULL) {
|
||
func_free(func_cb.f_cb);
|
||
}
|
||
|
||
/* 检查内存是否已经释放 */
|
||
if (func_heap_get_free_size() != HEAP_FUNC_ALIPAY_SIZE) {
|
||
freeList(&csi_head);
|
||
}
|
||
printf("free List over\n");
|
||
|
||
/* 原厂用于检查支付宝调试过程中是否内存泄漏,目前支付宝内调试已稳定故此处不再常开做严格限制 */
|
||
#if HEAP_FUNC_DEBUG_ENABLE
|
||
// 检查Alipay运行内存Heap是否全部被释放, 确定释放则恢复界面Heap
|
||
u32 heap_size = func_heap_get_free_size();
|
||
if (heap_size != HEAP_FUNC_ALIPAY_SIZE)
|
||
{
|
||
printf("ALIPAY HEAP FUNC (%d -> %d): %d\n", func_cb.last, func_cb.sta, heap_size);
|
||
halt(HALT_FUNC_HEAP);
|
||
}
|
||
#endif
|
||
|
||
/* 还原MTU - 防止MUT大小中途被支付宝更改 */
|
||
if (ble_is_connected()) {
|
||
if (ble_get_gatt_mtu() != (att_get_max_mtu() - 3)) {
|
||
msg_enqueue(EVT_READY_EXCHANGE_MTU);
|
||
}
|
||
}
|
||
|
||
func_cb.last = FUNC_ALIPAY;
|
||
}
|
||
|
||
// 支付宝功能
|
||
void func_alipay(void)
|
||
{
|
||
printf("%s\n", __func__);
|
||
|
||
sys_cb.alipay_state = false;
|
||
|
||
/* 下面流程已经关闭音频链路,此处不再做等待 */
|
||
#if 1//0
|
||
// 判断通话SCO是否Setup
|
||
while (func_cb.sta == FUNC_ALIPAY && (sys_cb.sco_state == true || bt_cb.call_type != CALL_TYPE_NONE || bt_cb.number_sta == true))
|
||
{
|
||
if ( // bt_is_ios_device() == false &&
|
||
bt_cb.number_sta == false)
|
||
{ // 安卓设备流程与IOS不一致,兼容
|
||
bt_cb.call_type = CALL_TYPE_NONE;
|
||
// break;
|
||
}
|
||
func_process();
|
||
func_message(msg_dequeue());
|
||
}
|
||
#endif
|
||
|
||
// 判断后台是否正在播放音乐或提示音
|
||
#if !SECURITY_BT_BACKSTAGE_MUSIC_EN
|
||
mp3_res_play_exit();
|
||
music_control(MUSIC_MSG_STOP);
|
||
dac_fade_out();
|
||
#if DAC_DNR_EN
|
||
dac_dnr_set_sta(0);
|
||
sys_cb.dnr_sta = 0;
|
||
#endif
|
||
bt_audio_bypass();
|
||
|
||
#if !BT_BACKSTAGE_EN
|
||
// bt_disconnect(1);
|
||
// bt_off();
|
||
// bt_cb.bt_is_inited = 0;
|
||
#else
|
||
/*
|
||
if (bt_get_status() == BT_STA_PLAYING && !bt_is_testmode()) { //蓝牙退出停掉音乐
|
||
|
||
delay_5ms(10);
|
||
if(bt_get_status() == BT_STA_PLAYING) { //再次确认play状态
|
||
u32 timeout = 850; //8.5s
|
||
bt_music_pause();
|
||
while (bt_get_status() == BT_STA_PLAYING && timeout > 0) {
|
||
timeout--;
|
||
delay_5ms(2);
|
||
}
|
||
}
|
||
}
|
||
*/
|
||
#endif // !BT_BACKSTAGE_EN
|
||
#endif // !SECURITY_BT_BACKSTAGE_MUSIC_EN
|
||
|
||
func_alipay_enter();
|
||
|
||
while (func_cb.sta == FUNC_ALIPAY && (sys_cb.sco_state == false && bt_cb.call_type == CALL_TYPE_NONE && bt_cb.number_sta == false))
|
||
{
|
||
func_alipay_process();
|
||
func_alipay_message(msg_dequeue());
|
||
}
|
||
func_alipay_exit();
|
||
|
||
// 退出恢复音乐后台播放
|
||
#if !SECURITY_BT_BACKSTAGE_MUSIC_EN
|
||
// func_bt_init();
|
||
bt_audio_enable();
|
||
#if DAC_DNR_EN
|
||
dac_dnr_set_sta(1);
|
||
sys_cb.dnr_sta = 1;
|
||
#endif
|
||
|
||
#endif // !SECURITY_BT_BACKSTAGE_MUSIC_EN
|
||
|
||
sys_cb.alipay_state = false;
|
||
}
|
||
|
||
// 清除支付宝数据
|
||
void alipay_reset_all_data(void)
|
||
{
|
||
SysVariable.alipay_binding_flag = false;
|
||
func_heap_init(alipay_enter_heap_func, HEAP_FUNC_ALIPAY_SIZE);
|
||
|
||
memset(&__alipay_start, 0, (u32)&__alipay_size);
|
||
|
||
#if (SECURITY_PAY_VENDOR == SECURITY_VENDOR_HS)
|
||
HS_IIC_Init();
|
||
#endif
|
||
|
||
#if (SECURITY_PAY_VENDOR == SECURITY_VENDOR_HED)
|
||
uint8_t *alipay_com_outbuf = func_zalloc(200);
|
||
uint32_t alipay_outlen = 0;
|
||
hed_rst_init();
|
||
csi_exit_lpm(0);
|
||
HED_IIC_Init();
|
||
api_connect(alipay_com_outbuf, &alipay_outlen);
|
||
printf("api_connect atr:\n");
|
||
print_r(alipay_com_outbuf, alipay_outlen);
|
||
func_free(alipay_com_outbuf);
|
||
#endif
|
||
|
||
u8 sta = alipay_pre_init();
|
||
if (sta == ALIPAY_RV_OK)
|
||
{
|
||
if (alipay_get_binding_status())
|
||
alipay_reset_all();
|
||
}
|
||
|
||
// freeList(&csi_head);
|
||
// func_heap_get_free_size();
|
||
|
||
/* 检查内存是否已经释放 */
|
||
if (func_heap_get_free_size() != HEAP_FUNC_ALIPAY_SIZE) {
|
||
freeList(&csi_head);
|
||
}
|
||
printf("free List over\n");
|
||
|
||
/* 原厂用于检查支付宝调试过程中是否内存泄漏,目前支付宝内调试已稳定故此处不再常开做严格限制 */
|
||
#if HEAP_FUNC_DEBUG_ENABLE
|
||
// 检查Alipay运行内存Heap是否全部被释放, 确定释放则恢复界面Heap
|
||
u32 heap_size = func_heap_get_free_size();
|
||
if (heap_size != HEAP_FUNC_ALIPAY_SIZE)
|
||
{
|
||
printf("ALIPAY HEAP FUNC (%d -> %d): %d\n", func_cb.last, func_cb.sta, heap_size);
|
||
halt(HALT_FUNC_HEAP);
|
||
}
|
||
#endif
|
||
}
|
||
|
||
#endif // SECURITY_PAY_EN
|