Customized SNICInterface

Fork of NySNICInterface by Ryo Iizuka

SNIC/SNIC_UartCommandManager.h

Committer:
kishino
Date:
2014-07-15
Revision:
39:a1233ca02edf
Parent:
33:33f1bc919486
Child:
41:1c1b5ad4d491

File content as of revision 39:a1233ca02edf:

/* Copyright (C) 2014 Murata Manufacturing Co.,Ltd., MIT License
 *  muRata, SWITCH SCIENCE Wi-FI module TypeYD-SNIC UART.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 * and associated documentation files (the "Software"), to deal in the Software without restriction,
 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or
 * substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef _SNIC_UART_COMMAND_MANAGER_H_
#define _SNIC_UART_COMMAND_MANAGER_H_
#include "MurataObject.h"
#include "mbed.h"
#include "rtos.h"

/** Max length of SSID */
#define SSID_MAX_LENGTH 32
/** Max length of BSSID */
#define BSSID_MAC_LENTH 6
/** Length of Country code */
#define COUNTRYC_CODE_LENTH 2
    
/** Wait signal ID of UART command */
#define UART_COMMAND_SIGNAL        0x00000001
/** Timeout of UART command wait(ms)*/
#define UART_COMMAND_WAIT_TIMEOUT  10000

/** Scan result structure used by scanresults handler
*/
typedef struct {
    bool          is_complete;
    /** Channel */
    unsigned char channel;
    /** RSSI */
    signed   char rssi;
    /** Security type */
    unsigned char security;
    /** BSSID */
    unsigned char bssid[BSSID_MAC_LENTH];
    /** Network type */
    unsigned char network_type;
    /** Max data rate */
    unsigned char max_rate;
    /** SSID */
    char          ssid[SSID_MAX_LENGTH+1];
}tagSCAN_RESULT_T;

/** Internal class for managing the SNIC UART command.
 */
class C_SNIC_UartCommandManager: public C_MurataObject
{
friend class C_SNIC_Core;
friend class C_SNIC_WifiInterface;
friend class TCPSocketConnection;
friend class TCPSocketServer;
friend class UDPSocket;
friend class Socket;

private:
    virtual ~C_SNIC_UartCommandManager();
    
    /** Set Command ID
        @param cmd_id Command ID
    */
    void setCommandID( unsigned char cmd_id );

    /** Get Command ID
        @return Command ID
    */
    unsigned char getCommandID();

    /** Set Command SubID
        @param cmd_sid Command Sub ID
    */
    void setCommandSID( unsigned char cmd_sid );

    /** Get Command SubID
        @return Command Sub ID
    */
    unsigned char getCommandSID();
    
    /** Set Command status
        @param status Command status
    */
    void setCommandStatus( unsigned char status );

    /** Get Command status
        @return Command status
    */
    unsigned char getCommandStatus();

    /** Set Response buffer
        @param buf_p Pointer of response buffer
    */
    void setResponseBuf( unsigned char *buf_p );

    /** Get Response buffer
        @return Pointer of response buffer
    */
    unsigned char *getResponseBuf();

    /** Set scan result callback hander
        @param handler_p Pointer of callback function
    */
    void setScanResultHandler( void (*handler_p)(tagSCAN_RESULT_T *scan_result) );
    
    void bufferredPacket( unsigned char *payload_p, int payload_len );
    
    void bufferredUDPPacket( unsigned char *payload_p, int payload_len );

    void scanResultIndicate( unsigned char *payload_p, int payload_len );
    
    void connectedTCPClient( unsigned char *payload_p, int payload_len );
    
    /** Checks in the command which is waiting from Command ID and Sub ID.
        @param  command_id  Command ID
        @param  payload_p   Command payload
        @return true: Waiting command / false: Not waiting command
    */
    bool isWaitingCommand( unsigned int command_id, unsigned char *payload_p );

    int wait();
    
    int signal();

private:
    /** Command request thread ID */
    osThreadId    mCommandThreadID;
    /** Command ID */
    unsigned char mCommandID;
    /** Command SubID */
    unsigned char mCommandSID;
    /** Status of command response */
    unsigned char mCommandStatus;
    /** ResponseData of command response */
    unsigned char *mResponseBuf_p;
    /** Scan result handler */
    void (*mScanResultHandler_p)(tagSCAN_RESULT_T *scan_result);
};
    
#endif