[tuxdroid-svn] r219 - svnlook: warning: cannot set LC_CTYPE locale svnlook: warning: environment va
Status: Beta
Brought to you by:
ks156
From: svnlook:warning@affinitic.be:cannot s. L. l. <c2m...@c2...> - 2007-04-02 18:24:20
|
Author: svnlook: warning: cannot set LC_CTYPE locale Date: svnlook: warning: environment variable LANG is EN New Revision: 219 Added: daemon/branches/CPPDaemon/TuxDeviceManager.cpp daemon/branches/CPPDaemon/TuxDeviceManager.h Modified: daemon/branches/CPPDaemon/Dispatcher.h daemon/branches/CPPDaemon/Makefile daemon/branches/CPPDaemon/TCP.cpp daemon/branches/CPPDaemon/TCP.h daemon/branches/CPPDaemon/UsbHandler.cpp daemon/branches/CPPDaemon/UsbHandler.h Log: srikantap 2007-04-02 20:23:39 +0200 (Mon, 02 Apr 2007) 76 Added TuxDeviceManager class. Handles Tux Device (Usb open/read/write, etc) svnlook: warning: cannot set LC_CTYPE locale svnlook: warning: environment variable LANG is EN svnlook: warning: please check that your locale name is correct Modified: daemon/branches/CPPDaemon/Dispatcher.h =================================================================== --- daemon/branches/CPPDaemon/Dispatcher.h 2007-03-30 16:03:10 UTC (rev 218) +++ daemon/branches/CPPDaemon/Dispatcher.h 2007-04-02 18:23:39 UTC (rev 219) @@ -1,6 +1,10 @@ #include "TCP.h" #include "MsgQueue.h" +/** + * Should this class run as a thread? + * Does it need its own msgQ? + */ class Dispatcher { public: Modified: daemon/branches/CPPDaemon/Makefile =================================================================== --- daemon/branches/CPPDaemon/Makefile 2007-03-30 16:03:10 UTC (rev 218) +++ daemon/branches/CPPDaemon/Makefile 2007-04-02 18:23:39 UTC (rev 219) @@ -1,6 +1,7 @@ default: - g++ main.cpp Socket.cpp TCP.cpp MsgQueue.cpp UsbHandler.cpp Dispatcher.cpp -lpthread + g++ main.cpp Socket.cpp TCP.cpp MsgQueue.cpp \ + UsbHandler.cpp Dispatcher.cpp TuxDeviceManager.cpp -lpthread -lusb clean: rm -f *.out *.o Modified: daemon/branches/CPPDaemon/TCP.cpp =================================================================== --- daemon/branches/CPPDaemon/TCP.cpp 2007-03-30 16:03:10 UTC (rev 218) +++ daemon/branches/CPPDaemon/TCP.cpp 2007-04-02 18:23:39 UTC (rev 219) @@ -31,17 +31,17 @@ ::memcpy(&_msg[4], data, 12); } -char Message::getDestination() +Message::MESSAGE_DEST Message::getDestination() { - return (_msg[0]); + return ( (Message::MESSAGE_DEST) _msg[0]); } char Message::getSubDestination() { return (_msg[1]); } -char Message::getDataType() +Message::MESSAGE_TYPE Message::getDataType() { - return (_msg[2]); + return ( (MESSAGE_TYPE) _msg[2]); } char Message::getDataSubType() { @@ -229,6 +229,7 @@ { clients[i] = *newClient; clients[i].set_non_blocking(true); + printf("CommManager: Added New Client %d\n", i); return true; } } @@ -257,27 +258,43 @@ else if(recv_ret == 0) { clients[i].invalidate(); + printf("CommManager: Removed client %d\n", i); } else { Message msg (str.c_str()); - //msg.dump(); - // TODO: USB.dispatch(clients[i].msg); - /*int s = usbQueue->send((char *) str.c_str(), MESSAGE_SIZE, USB_QUEUE_MSG_TYPE); - if (s < 0) + Message::MESSAGE_DEST dest = msg.getDestination(); + if (Message::MESSAGE_DEST_SUB_DAEMON == dest + || Message::MESSAGE_DEST_CLIENT == dest) { - perror ("Msg send"); + handleMessage(msg); } - */ - Dispatcher d; - d.dispatch(msg); - printf("TCP: Dispatched...\n"); + else + { + Dispatcher d; + d.dispatch(msg); + } } } } } +void CommManager::handleMessage(Message& msg) +{ + printf("CommManager:: Handling msg\n"); + + Message::MESSAGE_TYPE type = msg.getDataType(); + + if (Message::MESSAGE_COMMAND == type) + { + printf("CommManager:: COMMAND\n"); + } + else if (Message::MESSAGE_REQUEST == type) + { + printf("CommManager: REQUEST\n"); + } +} /***************************************************************/ Modified: daemon/branches/CPPDaemon/TCP.h =================================================================== --- daemon/branches/CPPDaemon/TCP.h 2007-03-30 16:03:10 UTC (rev 218) +++ daemon/branches/CPPDaemon/TCP.h 2007-04-02 18:23:39 UTC (rev 219) @@ -12,16 +12,31 @@ class Message { public: + typedef enum + { + MESSAGE_COMMAND, + MESSAGE_REQUEST, + } MESSAGE_TYPE; + typedef enum + { + MESSAGE_DEST_MASTER_DAEMON, + MESSAGE_DEST_SUB_DAEMON, + MESSAGE_DEST_TUX, + MESSAGE_DEST_RESOURCE, + MESSAGE_DEST_CLIENT, + } MESSAGE_DEST; + void setSource(char source); void setSubSource(char subSource); void setDataType(char dataType); void setSubDataType(char subDataType); void setMessageData(char* data); - char getDestination(); + MESSAGE_DEST getDestination(); + char getSubDestination(); - char getDataType(); + MESSAGE_TYPE getDataType(); char getDataSubType(); char* getMessageData(); @@ -62,6 +77,8 @@ bool addClient(Client* newClient); bool processMessages(); bool stayAlive() { return (sockId.is_valid()); }; + void handleMessage(Message& msg); + Client *clients; struct sockaddr_in tcp_server_sockaddr; Added: daemon/branches/CPPDaemon/TuxDeviceManager.cpp =================================================================== --- daemon/branches/CPPDaemon/TuxDeviceManager.cpp (rev 0) +++ daemon/branches/CPPDaemon/TuxDeviceManager.cpp 2007-04-02 18:23:39 UTC (rev 219) @@ -0,0 +1,112 @@ +#include <usb.h> +#include <stdio.h> +#include "TuxDeviceManager.h" + + +TuxDeviceManager::TuxDeviceManager* TuxDeviceManager::instance = NULL; + +void TuxDeviceManager::send(const char* msg) +{ + printf("TuxDeviceManager::Send: Writing to tux...\n"); + usb_interrupt_write(deviceHandle, TUX_WRITE_EP, (char *) msg, TUX_SEND_LENGTH, 5000); + +} + +bool TuxDeviceManager::initializeDevice() +{ + bool status; + + if (deviceIsAvailable()) + { + return (initDevice()); + } + else + { + return (false); + } +} + +bool TuxDeviceManager::deviceIsAvailable() +{ + struct usb_bus *bus; + //struct usb_device *device; + + usb_init(); + usb_find_busses(); + usb_find_devices(); + + for(bus = usb_busses; bus; bus = bus->next) + { + for (device = bus->devices; device; device = device->next) + { + if ((device->descriptor.idVendor == TUX_VID) + && (device->descriptor.idProduct == TUX_PID)) + { + return true; + } + } + } + + return false; +} + +bool TuxDeviceManager::initDevice() +{ + // usb_dev_handle *deviceHandle; + int error; + + /* Open usb device */ + deviceHandle = usb_open(device); + if (!deviceHandle) + { + // printf("Can't open device: %s (%d)\n", strerror(errno), errno); + printf("Can't open device\n"); + return false; + } + + /* Claim device interface */ + error = usb_claim_interface(deviceHandle, TUX_INTERFACE); + if (error != 0) + { + usb_detach_kernel_driver_np(deviceHandle, TUX_INTERFACE); + error = usb_claim_interface(deviceHandle, TUX_INTERFACE); + if (error != 0) + { + // printf("Can't claim interface: %s (%d)\n", strerror(errno), errno); + printf("Can't open device\n"); + return false; + } + } + /* Set altinterface */ + error = usb_set_altinterface(deviceHandle, 0); + if (error != 0) + { + printf("usb_set_altinterface error: %d : %s \n", error, usb_strerror()); + return false; + } + + return (true); + // return deviceHandle; +} + +TuxDeviceManager& TuxDeviceManager::getInstance() +{ + if (NULL != instance) + { + return (*instance); + } + + instance = new TuxDeviceManager; + return (*instance); +} + +TuxDeviceManager::TuxDeviceManager() : + TUX_PID(0xFF07) , TUX_VID(0x03EB), TUX_INTERFACE(0x03), + TUX_WRITE_EP(0x05), TUX_READ_EP(0x84), TUX_SEND_LENGTH(0x05) +{ +} + +TuxDeviceManager::~TuxDeviceManager() +{ +} + Property changes on: daemon/branches/CPPDaemon/TuxDeviceManager.cpp ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Added: daemon/branches/CPPDaemon/TuxDeviceManager.h =================================================================== --- daemon/branches/CPPDaemon/TuxDeviceManager.h (rev 0) +++ daemon/branches/CPPDaemon/TuxDeviceManager.h 2007-04-02 18:23:39 UTC (rev 219) @@ -0,0 +1,36 @@ +#ifndef __TUX_DEV_MGR_H__ +#define __TUX_DEV_MGR_H__ + +#include <usb.h> + +class TuxDeviceManager +{ + public: + static TuxDeviceManager& getInstance(); + + bool deviceIsAvailable(); + bool initializeDevice(); + bool initDevice(); + void send(const char* msg); + + + ~TuxDeviceManager(); + + + private: + TuxDeviceManager(); + const TuxDeviceManager& operator= (TuxDeviceManager& tux); + + static TuxDeviceManager* instance; + usb_dev_handle* deviceHandle; + struct usb_device *device; + + const int TUX_PID; + const int TUX_VID; + const int TUX_INTERFACE; + const int TUX_WRITE_EP; + const int TUX_READ_EP; + const int TUX_SEND_LENGTH; +}; + +#endif Property changes on: daemon/branches/CPPDaemon/TuxDeviceManager.h ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id Name: svn:eol-style + native Modified: daemon/branches/CPPDaemon/UsbHandler.cpp =================================================================== --- daemon/branches/CPPDaemon/UsbHandler.cpp 2007-03-30 16:03:10 UTC (rev 218) +++ daemon/branches/CPPDaemon/UsbHandler.cpp 2007-04-02 18:23:39 UTC (rev 219) @@ -4,6 +4,7 @@ #include "UsbHandler.h" #include "MsgQueue.h" +#include "TuxDeviceManager.h" #include "TCP.h" UsbHandler::UsbHandler() @@ -28,10 +29,31 @@ while (1) { usbQ->recv(message, MESSAGE_SIZE, USB_QUEUE_MSG_TYPE); + printf("UsbHandler:: RECEIVED MSG\n"); Message msg(message); - msg.dump(); + handleMessage(msg); } } +void UsbHandler::handleMessage(Message& msg) +{ + // msg.dump(); + + Message::MESSAGE_TYPE type = msg.getDataType(); + + if (Message::MESSAGE_COMMAND == type) + { + printf("UsbHandler: COMMAND\n"); + TuxDeviceManager& tux = TuxDeviceManager::getInstance(); + const char* cmd = msg.getMessageData(); + tux.send(cmd); + } + else if (Message::MESSAGE_REQUEST == type) + { + printf("UsbHandler: REQUEST\n"); + } + + +} Modified: daemon/branches/CPPDaemon/UsbHandler.h =================================================================== --- daemon/branches/CPPDaemon/UsbHandler.h 2007-03-30 16:03:10 UTC (rev 218) +++ daemon/branches/CPPDaemon/UsbHandler.h 2007-04-02 18:23:39 UTC (rev 219) @@ -1,4 +1,5 @@ #include "MsgQueue.h" +#include "TCP.h" class UsbHandler { @@ -10,5 +11,7 @@ ~UsbHandler(); private: + void handleMessage(Message& msg); + MsgQueue* usbQ; }; |