Axeda Ready Demo for Freescale FRDM-KL46Z as accident alert system
Dependencies: FRDM_MMA8451Q KL46Z-USBHost MAG3110 SocketModem TSI mbed FATFileSystem
Fork of AxedaGo-Freescal_FRDM-KL46Z by
AMMPC/axTransport.cpp
- Committer:
- AxedaCorp
- Date:
- 2014-07-01
- Revision:
- 0:65004368569c
File content as of revision 0:65004368569c:
#include "axTransport.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "axStatusCodes.h" #include "axConstants.h" #include <math.h> #include "include_me.h" #include "mbed.h" using namespace mts; char *temp_buff; int buff_size; /************************************************************************************************/ /*getEpoch() */ /* */ /*This method should return the number of seconds since January 1st 1970. */ /* */ /*returns long value in seconds */ /************************************************************************************************/ long getEpoch(){ return (long)0; } /**************************************************************************************************/ /*ax_print() */ /* */ /*A wrapper method that will allow you to direct the output to a particular stream. Most of the */ /*time the output will just go to printf/std. out. This is called by the axAgent library to print*/ /*error and debug messages. It is reccomended to include processing for the integers AX_DEBUG_MSG*/ /*and AX_ERROR_MSG as the library will frequently use these options if configured. */ /* */ /* msgType: allows for an integer value to control how the data is displayed or written */ /* msg: a pointer to a string containing the data to be printed */ /************************************************************************************************/ void ax_print(int msgType, char *msg){ switch(msgType) { case AX_DEBUG_MSG: printf("DEBUG: %s\n", msg); break; case AX_ERROR_MSG: printf("ERR: %s\n", msg); break; } } /************************************************************************************************/ /*sys_delay() */ /* */ /*A wrapper method that is meant to induce a delay on the system that it running it. Used mostly*/ /*to implement timeouts. */ /* */ /* */ /* */ /************************************************************************************************/ void sys_delay(int seconds){ } /************************************************************************************************/ /*randInt() */ /* */ /*This function is an abstraction function and should be populated with a call to the host's */ /*equivalent of the random function. */ /************************************************************************************************/ int randInt() { //call to the local create random method. srand(1235); return rand(); } /************************************************************************************************/ /*seedRand() */ /* */ /*This function is an abstraction function and should be populated with a call to the host's */ /*equivalent of the function that seeds the random number generator */ /************************************************************************************************/ int seedRand(){ } /*************************************************************************************************/ /*net_socketInit() */ /* */ /*This method provides a convenient way to call code that initializes the socket before it is */ /*actually called to open. For example, it could initialize a holder object that you code or set */ /*options on the socket itself. The return will be a code that could be passed up through the */ /*HTTP library and to the error stream. */ /*************************************************************************************************/ int net_socketInit(ax_socket *sock) { int retVal=AX_UNKNOWN; buff_size=0; temp_buff=NULL; return retVal; } /*************************************************************************************************/ /*net_socketOpen() */ /* */ /*This function opens a network port and connects to it. The connection point is defined by server*/ /*and port in the arguments. A reference to the port should be stored in the sock structure. If */ /*the secure flag is set to AX_TRUE your code should enable TLS or SSL at this stage. */ /* */ /*************************************************************************************************/ int net_socketOpen(ax_socket *sock, char *server, int port, int secure){ int retVal=AX_UNKNOWN; Wifi* wifi = Wifi::getInstance(); // Mode mode=TCP; bool result=wifi->open(server, port, Wifi::TCP); // bool result=wifi->open("192.168.1.107", port, Wifi::TCP); if(result) { retVal=AX_OK; } else {retVal=AX_NET_ERR_UNABLE_TO_CONNECT; } return retVal; } /*************************************************************************************************/ /*net_socketWrite() */ /* */ /*This function is used to write the data to a network port that has already been open and is */ /*connected. As usual the ax_socket struct should contain a reference to your port that you wish */ /*to write to. Data contains the data to be written and size describes how long the data is. */ /* */ /*************************************************************************************************/ int net_socketWrite(ax_socket *sock, char *data, int size) { int retVal=AX_OK; // Wifi* wifi = Wifi::getInstance(); // int written= wifi->write(data, size, 300); int fullsz=size+1; if(buff_size==0) { temp_buff=(char *)calloc(fullsz, sizeof(char)); int wrt=snprintf(temp_buff, fullsz, "%s", data); buff_size++; } else { int total=strlen(temp_buff)+fullsz; char *temp=(char *)calloc(total, sizeof(char)); snprintf(temp, total, "%s%s", temp_buff, data); free(temp_buff); temp_buff=temp; buff_size++; } return retVal; } /*************************************************************************************************/ /*net_socketFlush() */ /* */ /*This function will be called to handle writing all the data out to a network port. This function*/ /*may not be needed depending on your system. The single argument is a pointer to a struct that */ /*should contain the necessary references to the port on your local system. */ /* */ /*************************************************************************************************/ int net_socketFlush(ax_socket *sock){ int retVal=AX_UNKNOWN; int size=strlen(temp_buff); Wifi* wifi = Wifi::getInstance(); wifi->write(temp_buff, size, 300); //Wr free(temp_buff); buff_size=0; return retVal; } /*************************************************************************************************/ /*net_socketClose() */ /* */ /*This function will be called to handle a socket close operation. It is used primarily by the */ /*axHTTP part of the library. The single argument is pointer to a structure that should contain */ /*the necessary references to the port on your local system. */ /*Override the source in this function to close a network port */ /*************************************************************************************************/ int net_socketClose(ax_socket *sock){ // int retVal=AX_UNKNOWN; Wifi* wifi = Wifi::getInstance(); wifi->close(); int ctr=30; while((wifi->isOpen()==true)&&(ctr>0)) { wifi->close(); printf("Socket Not closed, %d\n", ctr); ctr--; wait(1); } return AX_OK; } /*************************************************************************************************/ /*net_socketRead() */ /* */ /*This function is a wrapper function that will read returned data from a previous web call. It */ /*is assumed that any connection related to ax_socket will have already been established. The */ /*function should read the data and store it into the *data pointer, then populate the number of */ /*bytes read in the size variable. The axHTTP library will handle parsing and making sense of the*/ /*data that it is provided. The timeout will be passed as a parameter but is not implemented by */ /*any of the calling libraries, implement it here or pass to another local function if available.*/ /*************************************************************************************************/ int net_socketRead(ax_socket *sock, int timeout, unsigned char *buffer, int bufferSz, int *readSz){ int retVal=AX_UNKNOWN; Wifi* wifi = Wifi::getInstance(); int bytesRead = wifi->read((char *)buffer, bufferSz, 300); *readSz=bytesRead; if(bytesRead>0) {return AX_OK; } return retVal; } /*************************************************************************************************/ /*scm_download_req() */ /* */ /*This function will be called whenever an egress message is recieved with a file download command*/ /*You can write the code in the function to handle the file immediately OR store the structure for*/ /*later processing. The latter is preferable as this request may prevent the network port from */ /*being closed in a timely fashion. */ /* */ /*************************************************************************************************/ int scm_download_req(ax_package *request) { } /*************************************************************************************************/ /*scm_file_write() */ /* */ /*This function will be called whenever a file download is requested from the system. Override the*/ /*function to direct the output to serial or a file system or other storage device of your choice*/ /*The parameters to the function will be filled in when it's called by the toolkit */ /* */ /*char *filename: Just what it sounds like, the file name of the file */ /*char *data: The actual data of the file. */ /*int length: The number of bytes received */ /*ax_package_instruction *downloadInfo: a struct containing filename/path etc. */ /*************************************************************************************************/ int scm_file_write(char *filename, char *data, int length, ax_package_instruction *downloadInfo){ return AX_OK; } /*************************************************************************************************/ /*data_item_write() */ /* */ /*If a set data item command is recieved from the platform server this function will be called to*/ /*handle it each time. The function is here to allow for external data to be modified as needed. */ /*It could toggle a pin and light up an led or set a global variable in another thread. */ /* */ /*char *name: The name of the data item on the platform */ /*int ax_type: {AX_STRING|AX_ANALoG|AX_DIGITAL} indicates whether the sValue or dValue parameter */ /* will have the intended data. */ /*char *sValue: if ax_type==AX_STRING then this will be a pointer to a valid cstring */ /*int dValue: if ax_type==AX_ANLOG|AX_DIGITAL this value will be populated. It should be not be */ /* checked if the type is AX_STRING */ /*************************************************************************************************/ int data_item_write(char *name, char *sValue, int dValue, int ax_type) { return AX_OK; } /*************************************************************************************************/ /*data_item_request() */ /* */ /*This function is called whenever the platform requests a data item's current value. Since this */ /*library is designed to run as it's own thread it does not maintain a list of data items and */ /*values. The implementation of this function should call an appropriate library or check an input*/ /*then create a dataItem set and send it immediately or on the next ping. */ /* */ /*char *name, the name of the data item being requested */ /* */ /*************************************************************************************************/ int data_item_request(char *name) { return AX_OK; } /***************************************************************************************************/ /***********************************************{Custom helper methods}****************************/