Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE EthernetInterface Game_Synchronizer MMA8452 SDFileSystem mbed-rtos mbed wave_player
Fork of 2035_Tanks_Shell by
Diff: two_player.h
- Revision:
- 0:899c85cd266f
- Child:
- 1:0589ea36661b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/two_player.h Tue Oct 06 01:54:18 2015 +0000
@@ -0,0 +1,165 @@
+#ifndef TWO_PLAYER_H__
+#define TWO_PLAYER_H__
+
+#include "uLCD_4DGL.h"
+#include "EthernetInterface.h"
+
+#define PLAYER1 true
+#define PLAYER2 false
+
+Serial pc(USBTX, USBRX);
+
+const char* PLAYER1_IP = "192.168.2.1";
+const char* PLAYER2_IP = "192.168.2.2";
+const int SERVER_PORT = 7;
+
+DigitalOut led(LED2);
+
+
+class uLCD_2P
+{
+
+public :
+
+ int p1_p2;
+ enum Color
+ {
+ LINE_CMD,
+ BG_COLOR_CMD,
+ CIRCLE_CMD,
+ CLS_CMD,
+ BUTTONS_CMD
+ };
+
+
+ uLCD_2P(PinName tx, PinName rx, PinName rst, bool player) {
+ p1_p2 = player;
+ //LCD = new uLCD_4DGL (tx, rx, rst);
+ }
+
+ void init() {
+
+ buffer_idx = 0;
+ sock = new UDPSocket();
+ endpoint = new Endpoint();
+ eth = new EthernetInterface();
+
+ switch (p1_p2) {
+ case PLAYER1: // Client
+ eth->init(PLAYER1_IP, "255.255.255.0", "0.0.0.0");
+ eth->connect();
+ sock->init();
+ endpoint->set_address(PLAYER2_IP, SERVER_PORT);
+ //sock.sendTo(endpoint, buffer, sizeof(buffer));
+ //int n = sock.receiveFrom(echo_server, in_buffer, sizeof(in_buffer));
+ break;
+ case PLAYER2: // Server
+ eth->init(PLAYER2_IP, "255.255.255.0", "0.0.0.0");
+ eth->connect();
+ sock->bind(SERVER_PORT);
+ //sock.sendTo(endpoint, buffer, sizeof(buffer));
+ //int n = sock.receiveFrom(endpoint, buffer, sizeof(buffer));
+ break;
+ }
+ }
+
+ void draw(int CMD, int a, int b, int c, int d, int e, char nArgs){
+
+ // Deal with overflows
+ //if(buffer_idx + nArgs > 256) {//flush();}
+
+ buffer[buffer_idx] = CMD;
+ if(nArgs >= 1) buffer[buffer_idx+1] = a;
+ if(nArgs >= 2) buffer[buffer_idx+2] = b;
+ if(nArgs >= 3) buffer[buffer_idx+3] = c;
+ if(nArgs >= 4) buffer[buffer_idx+4] = d;
+ if(nArgs == 5) buffer[buffer_idx+5] = e;
+ // ERROR: nArgs > 5
+
+
+ buffer_idx += nArgs+1;
+ }
+
+ void cls(void) { draw(CLS_CMD, 0,0,0,0,0,0); }
+ void background_color(int color) {
+ draw(BG_COLOR_CMD, color, 0,0,0,0,1);
+ }
+ void set_button_state(int a, int b, int c, int d, int e) { draw(BUTTONS_CMD, a,b,c,d,e,5); }
+ void line(int sx, int sy, int ex, int ey, int color) {
+ //draw(LINE_CMD, sx, sy, ex, ey, color);
+ }
+
+
+ void update() {
+ if(p1_p2 == PLAYER1) {
+ sock->sendTo(*endpoint, (char*)buffer, (buffer_idx+1)*sizeof(buffer[0]));
+ buffer_idx = 0;
+ }else if(p1_p2 == PLAYER2) {
+ int n = sock->receiveFrom(*endpoint, (char*)buffer, sizeof(buffer)/sizeof(buffer[0]));
+ buffer[n] = '\0';
+ }
+
+ int idx = 0;
+ while(buffer[idx] != '\0') {
+ char cmd = buffer[idx];
+ idx++;
+
+ switch(cmd) {
+ case BG_COLOR_CMD:
+ //LCD->background_color(buffer[idx+1]);
+ pc.printf("Change the background to %x\n", buffer[idx]);
+ idx += 1;
+ break;
+ case LINE_CMD:
+ break;
+ case CLS_CMD:
+ //LCD->cls();
+ pc.printf("Clear the screen!\n");
+ idx += 0;
+ break;
+ case BUTTONS_CMD:
+ A_button = buffer[idx+0];
+ B_button = buffer[idx+1];
+ C_button = buffer[idx+2];
+ D_button = buffer[idx+3];
+ E_button = buffer[idx+4];
+ pc.printf("Button Values: %d %d %d %d %d\n",
+ A_button, B_button, C_button, D_button, E_button);
+ idx += 5;
+ break;
+ default:
+ pc.printf("UNKNOWN CMD %d: This could get ugly!\n", cmd);
+ idx += 0;
+ }
+ }
+
+ }
+
+ ~uLCD_2P() {
+ sock->close();
+ eth->disconnect();
+ delete sock;
+ delete endpoint;
+ delete eth;
+ }
+
+ private:
+ bool master_slave;
+
+ int buffer[256];
+ int buffer_idx;
+
+ UDPSocket* sock;
+ Endpoint* endpoint;
+ EthernetInterface* eth;
+
+ uLCD_4DGL* LCD;
+
+ int A_button;
+ int B_button;
+ int C_button;
+ int D_button;
+ int E_button;
+};
+
+#endif
\ No newline at end of file
