Exemple #1
0
/* 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;
	}
}
Exemple #2
0
/* 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;
	}
}
Exemple #3
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;*/
		}
	}
}