API GUIDE

1.WEB API

The Web API contains a set of REST API in order to interact with LIVERA in a convenient way through AJAX or URL.

__AJAX Example:__the below could be run in general font-end javascript client side.



    var xhr = new XMLHttpRequest(){
          xhr.open('GET', '/hicat/videoServer?mode=0', true)
          xhr.onload = function() {
            answer = JSON.parse(xhr.responseText)
            console.log(answer1)            
         }
        xhr.send()
    }

Websocket and bridge system: bridge is a websocket server that runs on the linux core, help to accept websocket connections to Livera onport 7681 and transfer the information to MCU(32u4).

__Websocket Example:__we've built a websocket bridge server to help to transport text message from front-end web client to Arduino.


                //server on port 7681
                var WebSocketURL = 'ws://' + window.location.hostname + ':7681'

                ws = new WebSocket(WebSocketURL);

                ws.onopen = function(event) {
                    console.log('ws connection opened:' + WebSocketURL);
                }
                ws.send(`msg`);
                ws.close();

1.Set up Video Streaming Mode: This API allows you to swith between RTSP and MJPEG streaming mode, be careful that Video Record API only works under RTSP Mode, and Screen Shot API only works under MJEPG Mode.

/hicat/videoServer?mode=0

mode=0: RTSP Server Start mode=1: MJPEG Mode

2.Station Mode: Let Livera link to local wifi router

/hicat/stationMode?ssid=xxxxx&password=xxxxxxx

return messages: success: none return error:{"result":"ERROR"}

3.WIFI Access Point: Make Livera to AP mode

/hicat/apMode?ssid=xxxxx&password=xxxxxxx

return messages(object): success: none return error:{"result":"ERROR"}

4.Set Livera time: Synchronous time with Livera, the time also affect to the default video name.

/hicat/setTime?time=%d-%d-%d-%d-%d-%d

Example: /hicat/setTime?time=2018-09-09-01-01-01 success:{"result":"OK"}
error:{"result":"ERROR"}

5.Get Video Download Links: This API will return a JASON format({"result":"OK","files":["name":"xxxxx","name":"xxxxx"]}) message about all the file within video folder in SD Card. Once you get the fileName you could just go to this url http://192.168.1.1/mmc/video/xxxxx.264 to download it(might figure your IP address under station mode).

/hicat/files

success:{"result":"OK","files":["name":"xxxxx","name":"xxxxx"]}
error:{"result":"ERROR"}

6.Video Record: This API allows you to record and delete the video and auto save into the default video folder in SD card.

/hicat/record?save=1
/hicat/record?del=xxxxxxxx.h264

save=1: start recording save=0: stop recording and save del=xxxxxxxx.h264: delete xxxxxxxx.h264 success:{"result":"OK"}
error:{"result":"ERROR"}

7.Video Setting: Switch video angle, video resolution and video fps.

/hicat/setCamera?resolve=1&rotate=0&fps=20

success:{"result":"OK"}
error:{"result":"ERROR"}

//only work under mjpg mode

8.Snapshot: snap shot form one of the frame form MJPEG stream. We suggest to make the direction to /www/mmc/video/ coz the photo info could be receive under /hicat/files API.

/hicat/snapshot?name=xxx.jpg&dir=/www/mmc/video/

success:{"result":"OK"}

9.For test: test api, do nothing but test.

/hicat/test

success:{"result":"OK"}

2.Embedded Linux API

Detail information could be view under our github libhicat, There are instructions guide you through development tools set up and workflow, please have a look.

#ifndef _LIBHISIV_H_
#define _LIBHISIV_H_

#ifdef __cplusplus 
extern "C" { 
#endif
int venc_exit(int n);
int venc_init(int resolve);//0:720P 1:QVGA(320*240) 2:VGA(640*480)
int venc_init_more(int resolve,int mode,int fps);//resolve: 0/1/2  1280*720/320*240/640*480  mode: 0/1 H264/MJPEG
int venc_requestIDR();//request IDR frame
int venc_getFrame(char* buffer,int *datalen,int *pts,int *type);
int venc_snap(char* buff,int xRes,int yRes);
int venc_getYUV(int mode,char*buff);//mode=0 Y  mode=1 UV mode = 3 YUV420(SP)
int venc_rotate(int dir);

//for audio
extern int aenc_init(int mode);// 0/1 PT_LPCM/AAC/
extern int aenc_getFrame(char* buff);
extern int aenc_exit();
//jpeg to http
extern int libyuvdist_startYuvDistService(int port);
extern int libyuvdist_updateYuv(int iHandle,char* data,int len,int seq,unsigned long timeStamp);
extern int libyuvdist_stopYuvDistService(int iHandle);
extern int libyuvdist_setSettingCallback(int iHandle,int func);//int func(int resX,int resY,int fps)

#ifdef __cplusplus 
}
#endif
#endif

3.Arduino Libray API

The Arduino library wraps the web api, using serial communication and curl to communicate and send command to the video core(HI3518E). There are also example codes could be find in github

#ifndef _HICAT_H_
#define _HICAT_H_

#include <Arduino.h>

class HiCat
{
public:
    HiCat();
    int begin(void);

    /**
     * Take a picture
     *
     * @param file_name     picture name
     * @return 0 - OK, otherwise - error code
     */
    int snapshot(const char *file_name);

    /**
     * Start to record a video which is saved at /www/mmc/video/
     *
     * @return 0 - OK, otherwise - error code
     */
    int record();

    /**
     * Stop to record a video
     *
     * @return 0 - OK, otherwise - error code
     */
    int stop_recording();

    /**
     * Set camera format
     *
     * @param resolution    0 - 1280*720, 2 - 640*480, 1 - 320*240
     * @param rotation      0 - no rotation, 1 - 180 degree rotation
     * @param fps           frame per secord from 1 to 25
     * @return 0 - OK, otherwise - error code
     */
    int set_camera(int resolution, int rotation, int fps);

    /**
     * Set Wi-Fi mode
     *
     * @param mode  0 - AP mode, 1 - Station mode
     * @param ssid  SSID
     * @param password  password
     * @return 0 - OK, otherwise - error code
     */
    int set_wifi(int mode, const char *ssid, const char *password);

    /**
     * Run a shell command
     *
     * @param command   shell command
     * @return 0 - OK, otherwise - error code
     */
    int run(const char *command);

private:
    void prepare_web_command();
    int read_result();
};

extern HiCat hicat;


#endif // _HICAT_H_