Customized SNICInterface
Fork of NySNICInterface by
Diff: SNIC/SNIC_Core.h
- Revision:
- 20:dd736d328de6
- Child:
- 21:dda155fe5048
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNIC/SNIC_Core.h Thu Mar 27 06:52:04 2014 +0000 @@ -0,0 +1,263 @@ +/******************* Murata Manufacturing Co.,Ltd. 2014 ***************** + * + * Filename: SNIC_Core.h + * + * Purpose: This module has define of internal common function for API. + * + * $Author: kishino $ + * + * $Date: 2014/03/26 $ + * + * $Revision: 0.0.0.1 $ + * ***********************************************************************/ +#ifndef _SNIC_CORE_H_ +#define _SNIC_CORE_H_ + +#include "mbed.h" +#include "rtos.h" +#include "RawSerial.h" +#include "CBuffer.h" + +#include "SNIC_UartCommandManager.h" + +namespace murata_wifi +{ +#define UART_REQUEST_PAYLOAD_MAX 256 + +#define MEMPOOL_BLOCK_SIZE 2048 +#define MEMPOOL_PAYLOAD_NUM 1 +typedef struct +{ + unsigned char buf[MEMPOOL_BLOCK_SIZE]; +}tagMEMPOOL_BLOCK_T; + +#define MAX_SOCKET_ID 5 + +/** Connection information +*/ +typedef struct { + CircBuffer<unsigned char> *recvbuf_p; + bool is_connected; + bool is_received; +}tagCONNECT_INFO_T; + +/** Wi-Fi security + */ +typedef enum SECURITY { + /** Securiry Open */ + e_SEC_OPEN = 0x00, + /** Securiry WEP */ + e_SEC_WEP = 0x01, + /** Securiry WPA-PSK(TKIP) */ + e_SEC_WPA_TKIP = 0x02, + /** Securiry WPA2-PSK(AES) */ + e_SEC_WPA2_AES = 0x04, + /** Securiry WPA2-PSK(TKIP/AES) */ + e_SEC_WPA2_MIXED = 0x06, + /** Securiry WPA-PSK(AES) */ + e_SEC_WPA_AES = 0x07 +}E_SECURITY; + +/** Wi-Fi Network type + */ +typedef enum NETWORK_TYPE { + /** Infrastructure */ + e_INFRA = 0, + /** Adhoc */ + e_ADHOC = 1 +}E_NETWORK_TYPE; + +/** Wi-Fi status + */ +typedef enum WIFI_STATUS { + /** Wi-Fi OFF */ + e_STATUS_OFF = 0, + /** No network */ + e_NO_NETWORK, + /** Connected to AP (STA mode) */ + e_STA_JOINED, + /** Started on AP mode */ + e_AP_STARTED +}E_WIFI_STATUS; + +/** GEN_FW_VER_GET_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; +}tagGEN_FW_VER_GET_REQ_T; + +/** SNIC_INIT_REQ */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned short buf_size; +}tagSNIC_INIT_REQ_T; + +/** SNIC_TCP_CREATE_SOCKET_REQ */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned char bind; + unsigned char local_addr[4]; + unsigned char local_port[2]; +}tagSNIC_TCP_CREATE_SOCKET_REQ_T; + +/** SNIC_TCP_SEND_FROM_SOCKET_REQ */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned char socket_id; + unsigned char option; + unsigned char payload_len[2]; +}tagSNIC_TCP_SEND_FROM_SOCKET_REQ_T; + +/** SNIC_TCP_CONNECT_TO_SERVER_REQ */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned char socket_id; + unsigned char remote_addr[4]; + unsigned char remote_port[2]; + unsigned char recv_bufsize[2]; + unsigned char timeout; +}tagSNIC_TCP_CONNECT_TO_SERVER_REQ_T; + +/** WIFI_ON_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + char country[COUNTRYC_CODE_LENTH]; +}tagWIFI_ON_REQ_T; + +/** WIFI_OFF_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; +}tagWIFI_OFF_REQ_T; + +/** WIFI_DISCONNECT_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; +}tagWIFI_DISCONNECT_REQ_T; + +/** WIFI_GET_STA_RSSI_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; +}tagWIFI_GET_STA_RSSI_REQ_T; + +/** WIFI_GET_STATUS_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned char interface; +}tagWIFI_GET_STATUS_REQ_T; + +/** WIFI_SCAN_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned char scan_type; + unsigned char bss_type; + unsigned char bssid[BSSID_MAC_LENTH]; + unsigned char chan_list; + unsigned char ssid[SSID_MAX_LENGTH+1]; +}tagWIFI_SCAN_REQ_T; + +/** C_SNIC_Core class + */ +class C_SNIC_Core +{ +public: + + /** Get buffer for command from memory pool. + @return Pointer of buffer + */ + tagMEMPOOL_BLOCK_T *allocCmdBuf(); + + /** Release buffer to memory pool. + @param buf_p Pointer of buffer + */ + void freeCmdBuf( tagMEMPOOL_BLOCK_T *buf_p ); + + /** Initialize UART + */ + int initUart( PinName tx, PinName rx, int baud ); + + /** Send data to UART + @param len Length of send data + @param data Pointer of send data + @return 0:success/other:fail + */ + int sendUart( unsigned int len, unsigned char *data ); + + /** Preparation of the UART command + @param cmd_id UART Command ID + @param cmd_sid UART Command SubID + @param req_buf_p Pointer of UART request buffer + @param req_buf_len Length of UART request buffer + @param response_buf_p Pointer of UART response buffer + @param command_p Pointer of UART command[output] + @return Length of UART command. + */ + unsigned int preparationSendCommand( unsigned char cmd_id, unsigned char cmd_sid + , unsigned char *req_buf_p, unsigned int req_buf_len + , unsigned char *response_buf_p, unsigned char *command_p ); + + /** + Get pointer of connection information. + @param socket_id Socket ID + @return The pointer of connection information + */ + tagCONNECT_INFO_T *getConnectInfo( int socket_id ); + + /** + Get pointer of the instance of C_SNIC_UartCommandManager. + @return The pointer of the instance of C_SNIC_UartCommandManager. + */ + C_SNIC_UartCommandManager *getUartCommand(); + + /** Get an instance of the C_SNIC_Core class. + @return Instance of the C_SNIC_Core class + @note Please do not create an instance in the default constructor this class. + Please use this method when you want to get an instance. + */ + static C_SNIC_Core *getInstance(); + +private: + static C_SNIC_Core *mInstance_p; + Thread *mUartRecvThread_p; + RawSerial *mUart_p; + Mutex mUartMutex; +// DigitalInOut mModuleReset; + C_SNIC_UartCommandManager *mUartCommand_p; + + /** MemoryPool for payload of UART response */ + MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_PAYLOAD_NUM> mMemPoolPayload; + + /** Socket buffer */ + tagCONNECT_INFO_T mConnectInfo[MAX_SOCKET_ID+1]; + + /** Constructor + */ + C_SNIC_Core(); + + /** Receiving thread of UART + */ + static void uartRecvThread( void const *args_p ); +}; +} + +#endif \ No newline at end of file