/* Update network status event handler */ void ZDO_MgmtNwkUpdateNotf(ZDO_MgmtNwkUpdateNotf_t *nwkParams) { switch (nwkParams->status) { case ZDO_NETWORK_STARTED_STATUS: break; case ZDO_NETWORK_LOST_STATUS: network_leave(); network_set_state(APP_NETWORK_JOIN_REQUEST); break; case ZDO_NWK_UPDATE_STATUS: break; case ZDO_CHILD_JOINED_STATUS: uprintf("Child %d joined\r\n",nwkParams->childInfo.shortAddr); uprintf(" > RSSI = %d dBm (-91 dBm to -7 dBm)\r\n",(int8_t)network_get_rssi(nwkParams->childInfo.shortAddr)); uprintf(" > LQI = %d (0 to 255)\r\n",(uint8_t)network_get_lqi(nwkParams->childInfo.shortAddr)); /* if dongle_zigbit then aciivate uart over zb */ if(get_device_functionnality(nwkParams->childInfo.shortAddr) == ZIGBIT_DONGLE) serial_over_zigbit_start(nwkParams->childInfo.shortAddr); break; case ZDO_CHILD_REMOVED_STATUS: uprintf("Child %d quit\r\n",nwkParams->childInfo.shortAddr); /* if dongle_zigbit then deaciivate uart over zb */ if(get_device_functionnality(nwkParams->childInfo.shortAddr) == ZIGBIT_DONGLE) serial_over_zigbit_stop(); break; default: uprintf("Network status = 0x%x\r\n",nwkParams->status); break; } }
/* brief Handler of aps data sent confirmation */ void APS_DataConf(APS_DataConf_t* confInfo) { static int retryCounter = 0; if (APS_SUCCESS_STATUS != confInfo->status) { retryCounter++; uprintf("!!! Last transfert was failed. Reset it (retry = %d)\r\n",retryCounter); if (MAX_RETRIES_BEFORE_REJOIN == retryCounter) { uprintf("!!! Too much failed transfert. You are now disconnected from the network %d\r\n",retryCounter); retryCounter = 0; network_leave(); network_set_transmission_state(APP_DATA_TRANSMISSION_READY_STATE); network_set_state(APP_NETWORK_JOIN_REQUEST); } else { /* Data not delivered, resend.*/ network_set_transmission_state(APP_DATA_TRANSMISSION_SENDING_STATE); network_start_transmission(); } } else { network_set_transmission_state(APP_DATA_TRANSMISSION_READY_STATE); network_specific_DataConfcallback(); retryCounter = 0; } }
int network_listen(void *v) { struct network_client *nc = v; TCPsocket sock = nc->s; struct network *n = nc->n; uint8_t command; while (1) { if (SDLNet_TCP_Recv(sock,&command,1) < 1) { network_leave(n, nc); return 1; } switch (command) { case 1:;//login char *pass = network_read_string_1(sock); if (!pass) break; if (!strcmp(pass,"926452")) { nc->in = 1; SDLNet_TCP_Send(sock,"\1\0",2); } else { SDLNet_TCP_Send(sock,"\1\1",2); } free(pass); break; case 2:;//Create a game char *name = network_read_string_1(sock); if (!name) { break; } if (!nc->in) { SDLNet_TCP_Send(sock,"\2\1",2); break; } FILE *f = fopen(name, "r"); free(name); if (!f) { SDLNet_TCP_Send(sock,"\2\2",2); break; } struct game *g = network_create_game(n, f); fclose(f); if (!g) { SDLNet_TCP_Send(sock,"\2\3",2); break; } SDLNet_TCP_Send(sock,"\2\0",2); break; case 3://Start the game (must be creator) if (!nc->in) { SDLNet_TCP_Send(sock,"\3\3",2); break; } if (!nc->g) { SDLNet_TCP_Send(sock,"\3\1",2); break; } if (nc->g->timer) { SDLNet_TCP_Send(sock,"\3\2",2); break; } network_start_game(nc->g); SDLNet_TCP_Send(sock,"\3\0",2); break; case 4:;//Join a game uint32_t ident; SDLNet_TCP_Recv(sock,&ident,4); ident = ntohl(ident); if (network_join_game(n,nc,ident)) { SDLNet_TCP_Send(sock,"\4\1",2); break; } SDLNet_TCP_Send(sock,"\4\0",2); break; case 5://list game, [client] break; case 6://now playing, [client] break; case 7://game over, [client] break; case 8://data, [client] break; case 9:;//Action. See player.data for possible transmitted data uint8_t dir; SDLNet_TCP_Recv(sock, &dir, 1); if (nc->p) { nc->p->data = (nc->p->data & ~0xf) | (dir & 0xf); } break; case 10://map list, [client] break; case 11://Player died break; /*case 9://move right printf("Right\n"); if (nc->p) { //cpBodySetVel(&nc->p->body,cpv(40, 0)); nc->p->data |= 0x2; } break; case 10://move left printf("Left\n"); if (nc->p) { //cpBodySetVel(&nc->p->body,cpv(-40, 0)); nc->p->data |= 0x1; } break; case 11://stop printf("Stop\n"); if (nc->p) { cpBodySetVel(&nc->p->body, cpv(0, 0)); nc->p->data |= 0x3; } break;*/ } } }