#include #include #include "log_service.h" #include "cmsis_os.h" #include #include #include #include "wifi_conf.h" #include "google/google_nest.h" #include #include #define GN_PORT 443 #define _AT_GOOGLE_NEST_ "ATG0" //functions that using Google Nest's API void google_data_retrieve_cb(char *response_buf); void googlenest_get(char *host_addr, char *host_file) { unsigned char buffer[512]; googlenest_context googlenest; char *googlenest_host = host_addr; char *googlenest_uri = host_file; memset(&googlenest, 0, sizeof(googlenest_context)); if(gn_connect(&googlenest, googlenest_host, GN_PORT) == 0) { if(gn_get(&googlenest, googlenest_uri, buffer, sizeof(buffer)) == 0) printf("\r\n\r\nGet data from googlenest: %s", buffer); gn_close(&googlenest); } } void google_data_retrieve_cb(char *response_buf) { printf("\r\nResponse_buf:\r\n%s\r\n", response_buf); } void googlenest_stream(char *host_addr, char *host_file) { googlenest_context googlenest; char *googlenest_host = host_addr; char *googlenest_uri = host_file; memset(&googlenest, 0, sizeof(googlenest_context)); if(gn_connect(&googlenest, googlenest_host, GN_PORT) == 0) { google_retrieve_data_hook_callback(google_data_retrieve_cb); gn_stream(&googlenest, googlenest_uri); gn_close(&googlenest); } } void googlenest_delete(char *host_addr, char *host_file) { googlenest_context googlenest; char *googlenest_host = host_addr; char *googlenest_uri = host_file; memset(&googlenest, 0, sizeof(googlenest_context)); if(gn_connect(&googlenest, googlenest_host, GN_PORT) == 0) { if(gn_delete(&googlenest, googlenest_uri) == 0) printf("\r\n\r\nDelete the data is successful!"); gn_close(&googlenest); } } void googlenest_put(char *host_addr, char *host_file, char *data) { googlenest_context googlenest; char *googlenest_host = host_addr; char *googlenest_uri = host_file; memset(&googlenest, 0, sizeof(googlenest_context)); if(gn_connect(&googlenest, googlenest_host, GN_PORT) == 0) { if(gn_put(&googlenest, googlenest_uri, data) == 0) printf("\r\n\r\nSaving data in firebase is successful!"); gn_close(&googlenest); } } void googlenest_patch(char *host_addr, char *host_file, char *data) { googlenest_context googlenest; char *googlenest_host = host_addr; char *googlenest_uri = host_file; memset(&googlenest, 0, sizeof(googlenest_context)); if(gn_connect(&googlenest, googlenest_host, GN_PORT) == 0) { if(gn_patch(&googlenest, googlenest_uri, data) == 0) printf("\r\n\r\nUpdating data in firebase is successful!"); gn_close(&googlenest); } } void googlenest_post(char *host_addr, char *host_file, char *data) { googlenest_context googlenest; char *googlenest_host = host_addr; char *googlenest_uri = host_file; unsigned char buffer[64]; memset(&googlenest, 0, sizeof(googlenest_context)); if(gn_connect(&googlenest, googlenest_host, GN_PORT) == 0) { if(gn_post(&googlenest, googlenest_uri, data, buffer, sizeof(buffer)) == 0) printf("\r\n\r\nInserting data to firebase is successful!\r\n\r\nThe unique name for this list of data is: %s", buffer); gn_close(&googlenest); } } void cmd_googlenest(int argc, char **argv) { if(strcmp(argv[1], "get") == 0) { if(argc != 4) printf("\n\rUsage: gn get address file"); else { googlenest_get(argv[2], argv[3]); } } else if(strcmp(argv[1], "delete") ==0){ if(argc != 4) printf("\n\rUsage: gn delete address file"); else { googlenest_delete(argv[2], argv[3]); } } else if(strcmp(argv[1], "put") ==0){ if(argc != 5) printf("\n\rUsage: gn put address file data"); else { googlenest_put(argv[2], argv[3], argv[4]); } } else if(strcmp(argv[1], "patch") ==0){ if(argc != 5) printf("\n\rUsage: gn patch address file data"); else { googlenest_patch(argv[2], argv[3], argv[4]); } } else if(strcmp(argv[1], "post") ==0){ if(argc != 5) printf("\n\rUsage: gn post address file data"); else { googlenest_post(argv[2], argv[3], argv[4]); } } else if(strcmp(argv[1], "stream") ==0){ if(argc != 4) printf("\n\rUsage: gn stream address file"); else { googlenest_stream(argv[2], argv[3]); } } else printf("\n\rUsage: gn method addr file (data)"); } //AT Command function void fATG0(void *arg){ int argc; char *argv[MAX_ARGC] = {0}; printf("[ATG0]: _AT_WLAN_GOOGLENEST_\n\r"); if(!arg){ printf("[ATG0]Usage: ATWG=[method,address,file,data] or ATG0=[method,address,file]\n\r"); return; } argv[0] = "gn"; if((argc = parse_param(arg, argv)) > 1){ cmd_googlenest(argc, argv); } else printf("[ATG0]Usage: ATG0=[method,address,file,data] or ATG0=[method,address,file]\n\r"); } #if CONFIG_GOOGLE_NEST log_item_t at_google_items[ ] = { {"ATG0", fATG0,} }; void at_google_init(void) { log_service_add_table(at_google_items, sizeof(at_google_items)/sizeof(at_google_items[0])); } log_module_init(at_google_init); #endif