YXY FFI   ![crates badge] ![docs badge]

C-FFI binding for YXY


About

more details: [docs.rs]

Header: [yxy.h]

Examples

Query electricity

```c

include "yxy.h"

void query() { char uid[] = "123456789\0"; char *session = auth(uid); if (session == NULL) { printf("auth error\n"); return; } else { printf("session: %s\n", session); }

ele_result *e;
int code = query_ele(session, &e);
if (code) {
  printf("query error: %d\n", code);
  return;
}

free_c_string(session);

printf("room: %s\nstatus: %s\ntotal surplus: %f %f\nsurplus: %f "
       "%f\nsubsidy: %f %f\n",
       e->display_room_name, e->room_status, e->total_surplus,
       e->total_amount, e->surplus, e->surplus_amount, e->subsidy,
       e->subsidy_amount);

free_ele_result(e);

} ```

App login (query uid)

```c

include "yxy.h"

void login() { login_handle handle;

gen_device_id(&handle);
printf("device_id: %s\n", handle.device_id);

handle.phone_num = "18888888888\0";

security_token_result *sec_token;
int code = get_security_token(&handle, &sec_token);

if (code) {
  printf("fail to get security token: %d\n", code);
  return;
}
printf("security token: %s\nlevel: %d\n", sec_token->token, sec_token->level);

if (sec_token->level != 0) {
    char *image;
    code = get_captcha_image(&handle, sec_token->token, &image);
    if (code) {
        printf("fail to get captcha image: %d\n", code);
        return;
    }
    char captcha_code[5] = {0};
    printf("Captcha image: %s\n", image);
    printf("Please solve the image captcha and input the code: ");
    scanf("%4s", captcha_code);
    code = send_verification_code(&handle, sec_token->token, captcha_code);
} else {
    code = send_verification_code(&handle, sec_token->token, NULL);
}
if (code == 0 || code == 1) {
  printf("send verification code success\n");
} else {
  printf("fail to send verification code: %d\n", code);
  return;
}
free_security_token_result(sec_token);

char verification_code[7] = {0};
printf("please input verification code:");
scanf("%6s", verification_code);

login_result *l_result;
code = do_login(&handle, verification_code, &l_result);
if (code) {
  printf("fail to login: %d\n", code);
  return;
}
printf("login success\n");
printf("uid: %s\ntoken: %s\ndivice_id: %s\nbind_card_status: %d\n",
       l_result->uid, l_result->token, l_result->device_id,
       l_result->bind_card_status);

free_login_result(l_result); // remember to free the memory
free_c_string(handle.device_id);

} ```