void init_client(int bankid, int clientid) { if (bankid < 1 || clientid < 1) { printf("illegal client info input\n"); return; } bank_id = bankid; client_id = clientid; /*get the current client's information from the config file */ /* in client_read_conf.cpp */ get_client_need_info(); /* init server address */ bzero(&ser_addr, sizeof(ser_addr)); ser_addr.sin_family = AF_INET; /* init master address */ bzero(&ma_addr, sizeof(ma_addr)); ma_addr.sin_family = AF_INET; if ((send_head_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("Error opening head_fd socket\n"); exit(1); } if ((send_tail_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("Error opening tail_fd socket\n"); exit(1); } if ((send_master_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("Error opening master_fd socket\n"); exit(1); } /*when client login, tell master its own bank_id, ip, port to get head, tail servers' info*/ send_master(); }
// switch to master mode and send something, return to slave mode when done. extern void i2c_tx(u8 chip, u32 addr, u8 addr_len, u32 data_len, void* data) { while( twi_is_busy() ) {;;} status = init_master(); print_dbg("\r\nI2C init (master) : "); if(status==TWI_SUCCESS) { print_dbg("SUCCESS"); } else { print_dbg("FAIL: "); print_dbg_hex(status); } print_dbg("\r\n chip addr: "); print_dbg_hex(chip); print_dbg(", mem addr: "); print_dbg_hex(addr); print_dbg(", addr len: "); print_dbg_hex(addr_len); print_dbg(", data len: "); print_dbg_hex(data_len); print_dbg(", data (1st 4 bytes): "); print_dbg_hex(*((u32*)(data))); status = send_master(chip, addr, addr_len, data_len, data); print_dbg("\r\nI2C tx (master) : "); if(status==TWI_SUCCESS) { print_dbg("SUCCESS"); } else { print_dbg("FAIL: "); print_dbg_hex(status); } while( twi_is_busy() ) {;;} status = init_slave(); print_dbg("\r\nI2C init (slave) : "); if(status==TWI_SUCCESS) { print_dbg("SUCCESS"); } else { print_dbg("FAIL: "); print_dbg_hex(status);} }