NanoService device game controller for NSPong.

Dependencies:   Beep C12832_lcd EthernetInterface MMA7660 mbed-rtos mbed nsdl_lib

NS_Game_Controller

NS_Game_Controller is a game controller software for NSPong.

NSPong is a HTML5 demo game developed on top of ARM Sensinode’s NanoService Platform. The game uses for example RealTimeMultiplayerNodeJS, Box2D and CAAT libraries, which are specifically built for HTML5 multiplayer games with the client/server model.

NSPong is available at https://github.com/NSPong/NSPong.

Demo video is available at https://vimeo.com/95207889.

Committer:
Shage
Date:
Tue May 13 17:17:38 2014 +0000
Revision:
0:e8d7be634e3c
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Shage 0:e8d7be634e3c 1 #include "mbed.h"
Shage 0:e8d7be634e3c 2 #include "EthernetInterface.h"
Shage 0:e8d7be634e3c 3 #include "C12832_lcd.h"
Shage 0:e8d7be634e3c 4 #include "nsdl_support.h"
Shage 0:e8d7be634e3c 5 #include "dbg.h"
Shage 0:e8d7be634e3c 6
Shage 0:e8d7be634e3c 7 // Include resources
Shage 0:e8d7be634e3c 8 #include "accelerometer.h"
Shage 0:e8d7be634e3c 9 #include "joystick.h"
Shage 0:e8d7be634e3c 10 #include "buzzer.h"
Shage 0:e8d7be634e3c 11 #include "led.h"
Shage 0:e8d7be634e3c 12 #include "lcd.h"
Shage 0:e8d7be634e3c 13
Shage 0:e8d7be634e3c 14 static C12832_LCD lcd;
Shage 0:e8d7be634e3c 15 Serial pc(USBTX, USBRX); // tx, rx
Shage 0:e8d7be634e3c 16
Shage 0:e8d7be634e3c 17 // ****************************************************************************
Shage 0:e8d7be634e3c 18 // Configuration section
Shage 0:e8d7be634e3c 19
Shage 0:e8d7be634e3c 20 // Ethernet configuration
Shage 0:e8d7be634e3c 21 /* Define this to enable DHCP, otherwise manual address configuration is used */
Shage 0:e8d7be634e3c 22 //#define DHCP
Shage 0:e8d7be634e3c 23
Shage 0:e8d7be634e3c 24 /* Manual IP configurations, if DHCP not defined */
Shage 0:e8d7be634e3c 25 #define IP "192.168.1.108"
Shage 0:e8d7be634e3c 26 #define MASK "255.255.255.0"
Shage 0:e8d7be634e3c 27 #define GW ""
Shage 0:e8d7be634e3c 28
Shage 0:e8d7be634e3c 29 // NSP configuration
Shage 0:e8d7be634e3c 30 /* Change this IP address to that of your NanoService Platform installation */
Shage 0:e8d7be634e3c 31 static const char* NSP_ADDRESS = "192.168.1.101"; /* demo NSP address */
Shage 0:e8d7be634e3c 32 static const int NSP_PORT = 5683;
Shage 0:e8d7be634e3c 33 char endpoint_name[16] = "mbed-";
Shage 0:e8d7be634e3c 34 uint8_t ep_type[] = {"mbed_device"};
Shage 0:e8d7be634e3c 35 uint8_t lifetime_ptr[] = {"1200"};
Shage 0:e8d7be634e3c 36
Shage 0:e8d7be634e3c 37 // ****************************************************************************
Shage 0:e8d7be634e3c 38 // Ethernet initialization
Shage 0:e8d7be634e3c 39
Shage 0:e8d7be634e3c 40 EthernetInterface eth;
Shage 0:e8d7be634e3c 41
Shage 0:e8d7be634e3c 42 static void ethernet_init()
Shage 0:e8d7be634e3c 43 {
Shage 0:e8d7be634e3c 44 char mbed_uid[33]; // for creating unique name for the board
Shage 0:e8d7be634e3c 45
Shage 0:e8d7be634e3c 46 /* Initialize network */
Shage 0:e8d7be634e3c 47 #ifdef DHCP
Shage 0:e8d7be634e3c 48 NSDL_DEBUG("DHCP in use\r\n");
Shage 0:e8d7be634e3c 49 eth.init();
Shage 0:e8d7be634e3c 50 #else
Shage 0:e8d7be634e3c 51 eth.init(IP, MASK, GW);
Shage 0:e8d7be634e3c 52 #endif
Shage 0:e8d7be634e3c 53 if(eth.connect(30000) == 0)
Shage 0:e8d7be634e3c 54 pc.printf("Connect OK\n\r");
Shage 0:e8d7be634e3c 55
Shage 0:e8d7be634e3c 56 mbed_interface_uid(mbed_uid);
Shage 0:e8d7be634e3c 57 mbed_uid[32] = '\0';
Shage 0:e8d7be634e3c 58 strncat(endpoint_name, mbed_uid + 27, 15 - strlen(endpoint_name));
Shage 0:e8d7be634e3c 59
Shage 0:e8d7be634e3c 60 lcd.locate(0,11);
Shage 0:e8d7be634e3c 61 lcd.printf("IP:%s", eth.getIPAddress());
Shage 0:e8d7be634e3c 62
Shage 0:e8d7be634e3c 63 NSDL_DEBUG("IP Address:%s ", eth.getIPAddress());
Shage 0:e8d7be634e3c 64 }
Shage 0:e8d7be634e3c 65
Shage 0:e8d7be634e3c 66 // ****************************************************************************
Shage 0:e8d7be634e3c 67 // NSP initialization
Shage 0:e8d7be634e3c 68
Shage 0:e8d7be634e3c 69 UDPSocket server;
Shage 0:e8d7be634e3c 70 Endpoint nsp;
Shage 0:e8d7be634e3c 71
Shage 0:e8d7be634e3c 72 static void nsp_init()
Shage 0:e8d7be634e3c 73 {
Shage 0:e8d7be634e3c 74 server.init();
Shage 0:e8d7be634e3c 75 server.bind(NSP_PORT);
Shage 0:e8d7be634e3c 76
Shage 0:e8d7be634e3c 77 nsp.set_address(NSP_ADDRESS, NSP_PORT);
Shage 0:e8d7be634e3c 78
Shage 0:e8d7be634e3c 79 NSDL_DEBUG("name: %s", endpoint_name);
Shage 0:e8d7be634e3c 80 NSDL_DEBUG("NSP=%s - port %d\n", NSP_ADDRESS, NSP_PORT);
Shage 0:e8d7be634e3c 81
Shage 0:e8d7be634e3c 82 lcd.locate(0,22);
Shage 0:e8d7be634e3c 83 lcd.printf("EP name:%s\n", endpoint_name);
Shage 0:e8d7be634e3c 84 }
Shage 0:e8d7be634e3c 85
Shage 0:e8d7be634e3c 86 // ****************************************************************************
Shage 0:e8d7be634e3c 87 // Resource creation
Shage 0:e8d7be634e3c 88
Shage 0:e8d7be634e3c 89 static int create_resources()
Shage 0:e8d7be634e3c 90 {
Shage 0:e8d7be634e3c 91 sn_nsdl_resource_info_s *resource_ptr = NULL;
Shage 0:e8d7be634e3c 92 sn_nsdl_ep_parameters_s *endpoint_ptr = NULL;
Shage 0:e8d7be634e3c 93
Shage 0:e8d7be634e3c 94 NSDL_DEBUG("Creating resources");
Shage 0:e8d7be634e3c 95
Shage 0:e8d7be634e3c 96 /* Create resources */
Shage 0:e8d7be634e3c 97 resource_ptr = (sn_nsdl_resource_info_s*)nsdl_alloc(sizeof(sn_nsdl_resource_info_s));
Shage 0:e8d7be634e3c 98 if(!resource_ptr)
Shage 0:e8d7be634e3c 99 return 0;
Shage 0:e8d7be634e3c 100 memset(resource_ptr, 0, sizeof(sn_nsdl_resource_info_s));
Shage 0:e8d7be634e3c 101
Shage 0:e8d7be634e3c 102 resource_ptr->resource_parameters_ptr = (sn_nsdl_resource_parameters_s*)nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
Shage 0:e8d7be634e3c 103 if(!resource_ptr->resource_parameters_ptr)
Shage 0:e8d7be634e3c 104 {
Shage 0:e8d7be634e3c 105 nsdl_free(resource_ptr);
Shage 0:e8d7be634e3c 106 return 0;
Shage 0:e8d7be634e3c 107 }
Shage 0:e8d7be634e3c 108 memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
Shage 0:e8d7be634e3c 109
Shage 0:e8d7be634e3c 110 // Dynamic resources
Shage 0:e8d7be634e3c 111 create_accelerometer_resource(resource_ptr);
Shage 0:e8d7be634e3c 112 create_joystick_resource(resource_ptr);
Shage 0:e8d7be634e3c 113 create_buzz_resource(resource_ptr);
Shage 0:e8d7be634e3c 114 create_led_resource(resource_ptr);
Shage 0:e8d7be634e3c 115 create_lcd_resource(resource_ptr);
Shage 0:e8d7be634e3c 116
Shage 0:e8d7be634e3c 117 /* Register with NSP */
Shage 0:e8d7be634e3c 118 endpoint_ptr = nsdl_init_register_endpoint(endpoint_ptr, (uint8_t*)endpoint_name, ep_type, lifetime_ptr);
Shage 0:e8d7be634e3c 119 if(sn_nsdl_register_endpoint(endpoint_ptr) != 0)
Shage 0:e8d7be634e3c 120 pc.printf("NSP registering failed\r\n");
Shage 0:e8d7be634e3c 121 else
Shage 0:e8d7be634e3c 122 pc.printf("NSP registering OK\r\n");
Shage 0:e8d7be634e3c 123 nsdl_clean_register_endpoint(&endpoint_ptr);
Shage 0:e8d7be634e3c 124
Shage 0:e8d7be634e3c 125 nsdl_free(resource_ptr->resource_parameters_ptr);
Shage 0:e8d7be634e3c 126 nsdl_free(resource_ptr);
Shage 0:e8d7be634e3c 127 return 1;
Shage 0:e8d7be634e3c 128 }
Shage 0:e8d7be634e3c 129
Shage 0:e8d7be634e3c 130 // ****************************************************************************
Shage 0:e8d7be634e3c 131 // Program entry point
Shage 0:e8d7be634e3c 132
Shage 0:e8d7be634e3c 133 int main()
Shage 0:e8d7be634e3c 134 {
Shage 0:e8d7be634e3c 135 lcd.cls();
Shage 0:e8d7be634e3c 136 lcd.locate(0,0);
Shage 0:e8d7be634e3c 137 lcd.printf("NS Game Controller Demo\n");
Shage 0:e8d7be634e3c 138
Shage 0:e8d7be634e3c 139 // Initialize Ethernet interface first
Shage 0:e8d7be634e3c 140 ethernet_init();
Shage 0:e8d7be634e3c 141
Shage 0:e8d7be634e3c 142 // Initialize NSP node
Shage 0:e8d7be634e3c 143 nsp_init();
Shage 0:e8d7be634e3c 144
Shage 0:e8d7be634e3c 145 // Initialize NSDL stack
Shage 0:e8d7be634e3c 146 nsdl_init();
Shage 0:e8d7be634e3c 147
Shage 0:e8d7be634e3c 148 // Create NSDL resources
Shage 0:e8d7be634e3c 149 create_resources();
Shage 0:e8d7be634e3c 150
Shage 0:e8d7be634e3c 151 // Run the NSDL event loop (never returns)
Shage 0:e8d7be634e3c 152 nsdl_event_loop();
Shage 0:e8d7be634e3c 153 }