| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #include "includes.h"
- #include "device.h"
- #include "gateway.h"
- #include "net_proc.h"
- typedef struct _gb_gateway_info {
- gb_gateway_bind_info_t bind;
- u16 gw_echo_fail_count;
- u16 node_echo_fail_count[GB_SUPPORT_MAX_NODE];
- } gb_gateway_info_t;
- gb_gateway_info_t gw_mgr;
- int gateway_gw_id_flush(u32 gw_device_id)
- {
- int ret = 0;
- gw_mgr.bind.gw_device_id = gw_device_id;
- gw_mgr.gw_echo_fail_count = 0;
-
- return ret;
- }
-
- int gateway_id_cmp(u32 gw_device_id)
- {
- int ret = 0;
-
- if(gw_mgr.bind.gw_device_id == gw_device_id) {
- ret = 1;
- }
- return ret;
- }
- int gateway_gw_id_get(u32 *gw_device_id)
- {
- int ret = 0;
- if(gw_device_id) {
- *gw_device_id = gw_mgr.bind.gw_device_id;
- }
-
- if(gw_mgr.bind.gw_device_id) {
- ret = 1;
- }
-
- return ret;
- }
- int gateway_id_and_chn_get(u32 des_device_type, u32 des_device_id,
- u32 *gw_device_id, uint8_t *chn)
- {
- int ret = 0, i = 0;
-
- if(gw_device_id) {
- *gw_device_id = gw_mgr.bind.gw_device_id;
- }
- if(chn) {
- for(i = 0;i < GB_SUPPORT_MAX_NODE;i++) {
- gb_node_info_t *p_node = &gw_mgr.bind.node[i];
- if((p_node->device_type == des_device_type)&&
- (p_node->device_id == des_device_id)) {
- *chn = i;
- ret = 1;//find
- break;
- }
- }
- }
- return ret;
- }
- int gateway_node_type_and_id_flush(u32 des_device_type, u32 des_device_id)
- {
- int i = 0, choice = 0xff;
- gb_node_info_t *p_node = NULL;
-
- for(i = 0;i < GB_SUPPORT_MAX_NODE;i++) {
- p_node = &gw_mgr.bind.node[i];
- if((p_node->device_type == des_device_type)&&
- (p_node->device_id == des_device_id)) {
- gw_mgr.node_echo_fail_count[i] = 0;
- break;
- } else if((choice == 0xff) &&(p_node->device_type == 0)) {
- choice = i;
- }
- }
- if((i == GB_SUPPORT_MAX_NODE)&&(choice != 0xff)) {/* bind */
- p_node = &gw_mgr.bind.node[choice];
- p_node->device_type = des_device_type;
- p_node->device_id = des_device_id;
- gw_mgr.node_echo_fail_count[choice] = 0;
- }
- return 0;
- }
- //void gateway_msg_timer(void *p_tmr, void *p_arg)
- //{
- // inner_msg_format_t *p_msg = NULL;
- // u8 type = 0, len = 0, i;
- // p_msg = (inner_msg_format_t *)net_queue_mem_calloc();
- // if(p_msg == NULL) {
- // return ;
- // }
- //
- // if((device_type_get() == DEV_TYPE_COLLECT_STATION)||
- // (device_type_get() == DEV_TYPE_OILTANK_STATION)) {/* collect */
- // gb_node_bind_info_t *p_node_bind = (gb_node_bind_info_t *)p_msg->info;
- // if(gw_mgr.bind.gw_device_id == 0) {
- // p_node_bind->gw_device_id = 0;
- // type = net_msg_type_bind_req;
- // } else {
- // p_node_bind->gw_device_id = gw_mgr.bind.gw_device_id;
- // type = net_msg_type_node_echo;
- // }
- // device_type_and_id_get(&p_node_bind->device_type, &p_node_bind->device_id);
- // len = sizeof(gb_node_bind_info_t);
- // gw_mgr.gw_echo_fail_count++;
- // if(gw_mgr.gw_echo_fail_count > GATEWAY_ECHO_MAX_COUNT) {/* aging. */
- // gw_mgr.bind.gw_device_id = 0;
- // }
- // } else if(device_type_get() == DEV_TYPE_GATEWAY){/* gateway */
- // type = net_msg_type_gw_echo;
- // memcpy(p_msg->info, &gw_mgr.bind, sizeof(gb_gateway_bind_info_t));
- // len = sizeof(gb_gateway_bind_info_t);
- // for(i = 0;i < GB_SUPPORT_MAX_NODE;i++) {
- // gw_mgr.node_echo_fail_count[i]++;
- // if(gw_mgr.node_echo_fail_count[i] > GATEWAY_ECHO_MAX_COUNT) {/* aging. */
- // gw_mgr.bind.node[i].device_type = 0;
- // gw_mgr.bind.node[i].device_id = 0;
- // }
- // }
- // }
- //
- // net_msg_frame_fill(p_msg, type, len);
- // net_queue_insert((char *)p_msg, sizeof(inner_msg_format_t));
- //}
- OS_TMR gateway_timer;
- int gateway_init(void)
- {
- // OS_ERR err;
- // if(device_type_get() == DEV_TYPE_GATEWAY) {
- // device_type_and_id_get(NULL, &gw_mgr.bind.gw_device_id);
- // }
- // OSTmrCreate(&gateway_timer, "gateway_tmr",
- // GW_MSG_PERIOD, GW_MSG_PERIOD, OS_OPT_TMR_PERIODIC, gateway_msg_timer, NULL, &err);
- // OSTmrStart(&gateway_timer, &err);
- return 0;
- }
|