From 4b444d21541819f3a07a62966beaada2027d35bf Mon Sep 17 00:00:00 2001 From: Zip <76966589@qq.com> Date: Wed, 27 Mar 2019 09:00:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:ota=E5=A4=B1=E8=B4=A5=E6=97=B6=E6=97=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=94=E5=9B=9E=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20=E7=89=88=E6=9C=AC0.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TC1/TC1.mk | 3 +- TC1/main.c | 1 + TC1/main.h | 2 +- TC1/ota_server/ota_server.c | 487 ++++++++++++++++++ TC1/ota_server/ota_server.h | 142 +++++ TC1/user_function.c | 26 +- TC1/user_gpio.c | 11 +- TC1/user_gpio.h | 3 +- TC1/user_mqtt_client.c | 3 + TC1/user_ota.c | 2 +- TC1/user_power.c | 4 +- .../binary/TC1@MK3031@moc.all.bin | Bin 1959768 -> 1959768 bytes .../binary/TC1@MK3031@moc.ota.bin | Bin 531928 -> 531800 bytes 13 files changed, 659 insertions(+), 25 deletions(-) create mode 100644 TC1/ota_server/ota_server.c create mode 100644 TC1/ota_server/ota_server.h diff --git a/TC1/TC1.mk b/TC1/TC1.mk index 189c245..18776ba 100644 --- a/TC1/TC1.mk +++ b/TC1/TC1.mk @@ -26,6 +26,7 @@ NAME := App_TC1 $(NAME)_SOURCES := main.c\ cJSON/cJSON.c\ + ota_server/ota_server.c\ user_wifi.c\ user_gpio.c\ user_udp.c\ @@ -38,5 +39,5 @@ $(NAME)_SOURCES := main.c\ $(NAME)_COMPONENTS := protocols/SNTP\ protocols/mqtt\ - daemons/ota_server + utilities/url \ No newline at end of file diff --git a/TC1/main.c b/TC1/main.c index 666c330..9034519 100644 --- a/TC1/main.c +++ b/TC1/main.c @@ -6,6 +6,7 @@ #include "user_udp.h" #include "user_power.h" #include "user_mqtt_client.h" +#include "user_function.h" #define os_log(format, ...) custom_log("TC1", format, ##__VA_ARGS__) diff --git a/TC1/main.h b/TC1/main.h index efb6d01..0c390ac 100644 --- a/TC1/main.h +++ b/TC1/main.h @@ -4,7 +4,7 @@ #include "mico.h" #include "MiCOKit_EXT.h" -#define VERSION "v0.3" +#define VERSION "v0.4" #define TYPE 1 #define TYPE_NAME "zTC1" diff --git a/TC1/ota_server/ota_server.c b/TC1/ota_server/ota_server.c new file mode 100644 index 0000000..0b1c3d0 --- /dev/null +++ b/TC1/ota_server/ota_server.c @@ -0,0 +1,487 @@ +/** + ****************************************************************************** + * @file ota_server.c + * @author QQ ding + * @version V1.0.0 + * @date 19-Oct-2016 + * @brief Create a OTA server thread, download update bin file. Reboot system + * if download success. + ****************************************************************************** + * + * The MIT License + * Copyright (c) 2016 MXCHIP Inc. + * + * 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. + ****************************************************************************** + */ +#include "mico.h" +#include "HTTPUtils.h" +#include "SocketUtils.h" +#include "ota_server.h" +#include "url.h" + +#if OTA_DEBUG +#define ota_server_log(M, ...) custom_log("OTA", M, ##__VA_ARGS__) +#else +#define ota_server_log(M, ...) +#endif + +static ota_server_context_t *ota_server_context = NULL; +static HTTPHeader_t *httpHeader = NULL; + +static CRC16_Context crc_context; +static md5_context md5; +static uint32_t offset = 0; + +static OSStatus onReceivedData( struct _HTTPHeader_t * httpHeader, + uint32_t pos, + uint8_t *data, + size_t len, + void * userContext ); + +static void hex2str(uint8_t *hex, int hex_len, char *str) +{ + int i = 0; + for(i=0; i= 'A') && (*(str+i) <= 'Z') ){ + *(str+i) += 32; + } + } +} + +static int ota_server_send( uint8_t *data, int datalen ) +{ + int res = 0; + if( ota_server_context->download_url.HTTP_SECURITY == HTTP_SECURITY_HTTP ){ + res = send( ota_server_context->download_url.ota_fd, data, datalen, 0 ); + } +#if OTA_USE_HTTPS + if( ota_server_context->download_url.HTTP_SECURITY == HTTP_SECURITY_HTTPS ){ + res = ssl_send( ota_server_context->download_url.ota_ssl, data, datalen); + } +#endif + return res; +} + +static OSStatus ota_server_connect( struct sockaddr_in *addr, socklen_t addrlen ) +{ + OSStatus err = kNoErr; +#if OTA_USE_HTTPS + int ssl_errno = 0; +#endif + + err = connect( ota_server_context->download_url.ota_fd, (struct sockaddr *)addr, addrlen ); + require_noerr_string( err, exit, "ERROR: connect ota server failed" ); + +#if OTA_USE_HTTPS + if( ota_server_context->download_url.HTTP_SECURITY == HTTP_SECURITY_HTTPS ){ + ota_server_context->download_url.ota_ssl = ssl_connect( ota_server_context->download_url.ota_fd, 0, NULL, &ssl_errno ); + require_action_string( ota_server_context->download_url.ota_ssl != NULL, exit, err = kConnectionErr,"ERROR: ssl disconnect" ); + } +#endif + +exit: + return err; +} + +static int ota_server_read_header( HTTPHeader_t *httpHeader ) +{ + int res = 0; + if( ota_server_context->download_url.HTTP_SECURITY == HTTP_SECURITY_HTTP ){ + res = SocketReadHTTPHeader( ota_server_context->download_url.ota_fd, httpHeader ); + } + if( ota_server_context->download_url.HTTP_SECURITY == HTTP_SECURITY_HTTPS ){ +#if OTA_USE_HTTPS + res = SocketReadHTTPSHeader( ota_server_context->download_url.ota_ssl, httpHeader ); +#endif + } + + return res; +} + +static int ota_server_read_body( HTTPHeader_t *httpHeader ) +{ + int res = 0; + if( ota_server_context->download_url.HTTP_SECURITY == HTTP_SECURITY_HTTP ){ + res = SocketReadHTTPBody( ota_server_context->download_url.ota_fd, httpHeader ); + } + if( ota_server_context->download_url.HTTP_SECURITY == HTTP_SECURITY_HTTPS ){ +#if OTA_USE_HTTPS + res = SocketReadHTTPSBody( ota_server_context->download_url.ota_ssl, httpHeader ); +#endif + } + return res; +} + +static int ota_server_send_header( void ) +{ + char *header = NULL; + int j = 0; + int ret = 0; + header = malloc( OTA_SEND_HEAD_SIZE ); + memset( header, 0x00, OTA_SEND_HEAD_SIZE ); + + j = sprintf( header, "GET " ); + j += sprintf( header + j, "/%s HTTP/1.1\r\n", ota_server_context->download_url.url ); + + if ( ota_server_context->download_url.port == 0 ) + { + j += sprintf( header + j, "Host: %s\r\n", ota_server_context->download_url.host ); + } else + { + j += sprintf( header + j, "Host: %s:%d\r\n", ota_server_context->download_url.host, ota_server_context->download_url.port ); + } + + j += sprintf( header + j, "Connection: close\r\n" ); //Keep-Alive close + + //Range: bytes=start-end + if ( ota_server_context->download_state.download_begin_pos > 0 ) + { + if ( ota_server_context->download_state.download_end_pos > 0 ) + { + j += sprintf( header + j, "Range: bytes=%d-%d\r\n", ota_server_context->download_state.download_begin_pos, + ota_server_context->download_state.download_end_pos ); + } else + { + j += sprintf( header + j, "Range: bytes=%d-\r\n", ota_server_context->download_state.download_begin_pos ); + } + } + + j += sprintf( header + j, "\r\n" ); + + ret = ota_server_send( (uint8_t *) header, strlen( header ) ); + +// ota_server_log("send: %d\r\n%s", strlen(header), header); + if ( header != NULL ) free( header ); + return ret; +} + +static void ota_server_socket_close( void ) +{ +#if OTA_USE_HTTPS + if ( ota_server_context->download_url.ota_ssl ) ssl_close( ota_server_context->download_url.ota_ssl ); +#endif + SocketClose( &(ota_server_context->download_url.ota_fd) ); + ota_server_context->download_url.ota_fd = -1; +} + +static int ota_server_connect_server( struct in_addr in_addr ) +{ + int err = 0; + struct sockaddr_in server_address; + + if ( ota_server_context->download_url.port == 0 ) + { + if ( ota_server_context->download_url.HTTP_SECURITY == HTTP_SECURITY_HTTP ) + { + server_address.sin_port = htons(80); + } else + { + server_address.sin_port = htons(443); + } + } else + { + server_address.sin_port = htons(ota_server_context->download_url.port); + } + + server_address.sin_family = AF_INET; + server_address.sin_addr = in_addr; + + err = ota_server_connect( &server_address, sizeof(server_address) ); + if ( err != 0 ) + { + mico_thread_sleep( 1 ); + return -1; + } + + ota_server_log("ota server connected!"); + return 0; +} + +static void ota_server_progress_set( OTA_STATE_E state ) +{ + float progress = 0.00; + + progress =(float) ota_server_context->download_state.download_begin_pos / ota_server_context->download_state.download_len; + progress = progress*100; + if( ota_server_context->ota_server_cb != NULL ) + ota_server_context->ota_server_cb(state, progress); +} + +static void ota_server_thread( mico_thread_arg_t arg ) +{ + OSStatus err; + uint16_t crc16 = 0; + char md5_value[16] = {0}; + char md5_value_string[33] = {0}; + fd_set readfds; + struct hostent* hostent_content = NULL; + char **pptr = NULL; + struct in_addr in_addr; + + mico_logic_partition_t* ota_partition = MicoFlashGetInfo( MICO_PARTITION_OTA_TEMP ); + + ota_server_context->ota_control = OTA_CONTROL_START; + + hostent_content = gethostbyname( ota_server_context->download_url.host ); + require_action_quiet( hostent_content != NULL, DELETE, ota_server_progress_set(OTA_FAIL)); + pptr=hostent_content->h_addr_list; + in_addr.s_addr = *(uint32_t *)(*pptr); + strcpy( ota_server_context->download_url.ip, inet_ntoa(in_addr)); + ota_server_log("OTA server address: %s, host ip: %s", ota_server_context->download_url.host, ota_server_context->download_url.ip); + + offset = 0; + MicoFlashErase( MICO_PARTITION_OTA_TEMP, 0x0, ota_partition->partition_length ); + + CRC16_Init( &crc_context ); + if( ota_server_context->ota_check.is_md5 == true ){ + InitMd5( &md5 ); + } + + httpHeader = HTTPHeaderCreateWithCallback( 1024, onReceivedData, NULL, NULL ); + require_action( httpHeader, DELETE, ota_server_progress_set(OTA_FAIL) ); + + while ( 1 ) + { + if ( ota_server_context->ota_control == OTA_CONTROL_PAUSE ){ + mico_thread_sleep( 1 ); + continue; + }else if( ota_server_context->ota_control == OTA_CONTROL_STOP ){ + goto DELETE; + } + + ota_server_context->download_url.ota_fd = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); + err = ota_server_connect_server( in_addr ); + require_noerr_action( err, RECONNECTED, ota_server_progress_set(OTA_FAIL)); + + /* Send HTTP Request */ + ota_server_send_header( ); + + FD_ZERO( &readfds ); + FD_SET( ota_server_context->download_url.ota_fd, &readfds ); + + select( ota_server_context->download_url.ota_fd + 1, &readfds, NULL, NULL, NULL ); + if ( FD_ISSET( ota_server_context->download_url.ota_fd, &readfds ) ) + { + /*parse header*/ + err = ota_server_read_header( httpHeader ); + if ( ota_server_context->ota_control == OTA_CONTROL_START ) + { + ota_server_context->download_state.download_len = httpHeader->contentLength; + ota_server_context->ota_control = OTA_CONTROL_CONTINUE; + } + switch ( err ) + { + case kNoErr: +#if OTA_DEBUG + PrintHTTPHeader( httpHeader ); +#endif + err = ota_server_read_body( httpHeader );/*get body data*/ + require_noerr( err, RECONNECTED ); + /*get data and print*/ + break; + case EWOULDBLOCK: + case kNoSpaceErr: + case kConnectionErr: + default: + ota_server_log("ERROR: HTTP Header parse error: %d", err); + break; + } + } + + if ( ota_server_context->download_state.download_len == ota_server_context->download_state.download_begin_pos ) + { + if( httpHeader->statusCode != 200 ){ + ota_server_progress_set(OTA_FAIL); + goto DELETE; + } + CRC16_Final( &crc_context, &crc16 ); + if( ota_server_context->ota_check.is_md5 == true ){ + Md5Final( &md5, (unsigned char *) md5_value ); + hex2str((uint8_t *)md5_value, 16, md5_value_string); + } + if ( memcmp( md5_value_string, ota_server_context->ota_check.md5, OTA_MD5_LENTH ) == 0 ){ + ota_server_progress_set(OTA_SUCCE); + mico_ota_switch_to_new_fw( ota_server_context->download_state.download_len, crc16 ); + mico_system_power_perform( mico_system_context_get( ), eState_Software_Reset ); + }else{ + ota_server_log("OTA md5 check err, Calculation:%s, Get:%s", md5_value_string, ota_server_context->ota_check.md5); + ota_server_progress_set(OTA_FAIL); + } + goto DELETE; + } + + RECONNECTED: + ota_server_socket_close( ); + mico_thread_sleep(2); + continue; + + } +DELETE: + HTTPHeaderDestory( &httpHeader ); + ota_server_socket_close( ); + if( ota_server_context != NULL ){ + if( ota_server_context->download_url.url != NULL ){ + free(ota_server_context->download_url.url); + ota_server_context->download_url.url = NULL; + } + free(ota_server_context); + ota_server_context = NULL; + } + + ota_server_log("ota server thread will delete"); + mico_rtos_delete_thread(NULL); +} + +/*one request may receive multi reply*/ +static OSStatus onReceivedData( struct _HTTPHeader_t * inHeader, uint32_t inPos, uint8_t * inData, + size_t inLen, void * inUserContext ) +{ + OSStatus err = kNoErr; + + if ( inLen == 0 ) + return err; + + ota_server_context->download_state.download_begin_pos += inLen; + + CRC16_Update( &crc_context, inData, inLen ); + if( ota_server_context->ota_check.is_md5 == true ){ + Md5Update( &md5, inData, inLen ); + } + + MicoFlashWrite( MICO_PARTITION_OTA_TEMP, &offset, (uint8_t *) inData, inLen ); + + ota_server_progress_set(OTA_LOADING); + + if( ota_server_context->ota_control == OTA_CONTROL_PAUSE ){ + while( 1 ){ + if( ota_server_context->ota_control != OTA_CONTROL_PAUSE ) + break; + mico_thread_msleep(100); + } + } + + if( ota_server_context->ota_control == OTA_CONTROL_STOP ){ + err = kUnsupportedErr; + } + + return err; +} + +static OSStatus ota_server_set_url( char *url ) +{ + OSStatus err = kNoErr; + url_field_t *url_t; + char *pos = NULL; + + url_t = url_parse( url ); + require_action(url, exit, err = kParamErr); +#if OTA_DEBUG + url_field_print( url_t ); +#endif + if ( !strcmp( url_t->schema, "https" ) ) + { + ota_server_context->download_url.HTTP_SECURITY = HTTP_SECURITY_HTTPS; + } else + { + ota_server_context->download_url.HTTP_SECURITY = HTTP_SECURITY_HTTP; + } + + strcpy( ota_server_context->download_url.host, url_t->host ); + ota_server_context->download_url.port = atoi( url_t->port ); + pos = strstr( url, url_t->path ); + if ( pos == NULL ) + { + strcpy( ota_server_context->download_url.url, "" ); + } else + { + strcpy( ota_server_context->download_url.url, pos ); + } + +exit: + url_free( url_t ); + return err; +} + +OSStatus ota_server_start( char *url, char *md5, ota_server_cb_fn call_back ) +{ + OSStatus err = kNoErr; + + require_action(url, exit, err = kParamErr); + + if( ota_server_context != NULL ){ + if( ota_server_context->download_url.url != NULL ){ + free(ota_server_context->download_url.url); + ota_server_context->download_url.url = NULL; + } + free(ota_server_context); + ota_server_context = NULL; + } + + ota_server_context = malloc(sizeof(ota_server_context_t)); + require_action(ota_server_context, exit, err = kNoMemoryErr); + memset(ota_server_context, 0x00, sizeof(ota_server_context_t)); + + ota_server_context->download_url.url = malloc(strlen(url)); + require_action(ota_server_context->download_url.url, exit, err = kNoMemoryErr); + memset(ota_server_context->download_url.url, 0x00, strlen(url)); + + err = ota_server_set_url(url); + require_noerr(err, exit); + + if( md5 != NULL ){ + ota_server_context->ota_check.is_md5 = true; + memcpy(ota_server_context->ota_check.md5, md5, OTA_MD5_LENTH); + upper2lower(ota_server_context->ota_check.md5, OTA_MD5_LENTH); + } + + ota_server_context->ota_server_cb = call_back; + + err = mico_rtos_create_thread( NULL, MICO_APPLICATION_PRIORITY, "OTA", ota_server_thread, OTA_SERVER_THREAD_STACK_SIZE, 0 ); +exit: + return err; +} + +void ota_server_pause( void ) +{ + ota_server_context->ota_control = OTA_CONTROL_PAUSE; +} + +void ota_server_continue( void ) +{ + ota_server_context->ota_control = OTA_CONTROL_CONTINUE; +} + +void ota_server_stop( void ) +{ + ota_server_context->ota_control = OTA_CONTROL_STOP; +} + +OTA_CONTROL_E ota_server_get( void ) +{ + return ota_server_context->ota_control; +} diff --git a/TC1/ota_server/ota_server.h b/TC1/ota_server/ota_server.h new file mode 100644 index 0000000..9d6a2e9 --- /dev/null +++ b/TC1/ota_server/ota_server.h @@ -0,0 +1,142 @@ +/** + ****************************************************************************** + * @file ota_sever.h + * @author QQ ding + * @version V1.0.0 + * @date 19-Oct-2016 + * @brief Provide ota server header files. + ****************************************************************************** + * + * The MIT License + * Copyright (c) 2014 MXCHIP Inc. + * + * 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 __ota_server_H +#define __ota_server_H + +#define OTA_DEBUG (1) +#define OTA_USE_HTTPS (0) + +#define OTA_MD5_LENTH 32 +#define OTA_SEND_HEAD_SIZE 256 +#if OTA_USE_HTTPS +#define OTA_SERVER_THREAD_STACK_SIZE 0x2000 +#else +#define OTA_SERVER_THREAD_STACK_SIZE 0x800 +#endif + +typedef enum _OTA_STATE_E{ + OTA_LOADING, + OTA_SUCCE, + OTA_FAIL +}OTA_STATE_E; + +typedef enum _HTTP_SECURITY_E{ + HTTP_SECURITY_HTTP, + HTTP_SECURITY_HTTPS +} HTTP_SECURITY_E; + +typedef enum _OTA_CONTROL_E{ + OTA_CONTROL_IDLE, + OTA_CONTROL_START, + OTA_CONTROL_PAUSE, + OTA_CONTROL_CONTINUE, + OTA_CONTROL_STOP, +} OTA_CONTROL_E; + +typedef struct _download_url_t{ + char *url; + HTTP_SECURITY_E HTTP_SECURITY; + char host[30]; + char ip[16]; + int port; + int ota_fd; +#if OTA_USE_HTTPS + mico_ssl_t ota_ssl; +#endif +} download_url_t; + +typedef struct _download_state_t{ + int download_len; + int download_begin_pos; + int download_end_pos; +} download_state_t; + +typedef struct _ota_check_t{ + bool is_md5; + char md5[OTA_MD5_LENTH + 1]; +} ota_check_t; + +typedef void (*ota_server_cb_fn) (OTA_STATE_E state, float progress); + +typedef struct _ota_server_context_t{ + download_url_t download_url; + download_state_t download_state; + ota_check_t ota_check; + OTA_CONTROL_E ota_control; + ota_server_cb_fn ota_server_cb; +} ota_server_context_t; + + +/** @addtogroup OTA_SERVER_DAEMONS_APIs + * @{ + */ + + +/** @brief Start OTA server, Support resume from break point, MD5 check + * + * @param url : Download address, URL breakdown from RFC 3986 + * @param md5 : MD5 checksum result, must sting type, can be NULL + * @param call_back : call back function, can be NULL + * + * @return kNoErr : on success. + * @return kGeneralErr : if an error occurred + */ +OSStatus ota_server_start( char *url, char *md5, ota_server_cb_fn call_back ); + + +/** @brief Get OTA server state + * + * @return OTA_CONTROL_E : state + */ +OTA_CONTROL_E ota_server_state_get( void ); + + +/** @brief Pause OTA server daemons + * + * @return No + */ +void ota_server_pause( void ); + + +/** @brief Continue OTA server daemons + * + * @return No + */ +void ota_server_continue( void ); + + +/** @brief Stop OTA server daemons + * + * @return No + */ +void ota_server_stop( void ); + +#endif diff --git a/TC1/user_function.c b/TC1/user_function.c index 88f0155..29ff46b 100644 --- a/TC1/user_function.c +++ b/TC1/user_function.c @@ -1,9 +1,13 @@ #define os_log(format, ...) custom_log("FUNCTION", format, ##__VA_ARGS__) +#include "TimeUtils.h" + #include "main.h" #include "user_gpio.h" #include "cJSON/cJSON.h" #include "user_ota.h" +#include "user_mqtt_client.h" +#include "user_udp.h" uint32_t last_time = 0; @@ -19,8 +23,8 @@ typedef struct _user_json_context_t int8_t val; } user_json_context_t; -bool json_plug_analysis( int udp_flag, char x, cJSON * pJsonRoot, cJSON * pJsonSend ); -bool json_plug_task_analysis( char x, char y, cJSON * pJsonRoot, cJSON * pJsonSend ); +bool json_plug_analysis( int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON * pJsonSend ); +bool json_plug_task_analysis(unsigned char x, unsigned char y, cJSON * pJsonRoot, cJSON * pJsonSend ); void user_send( int udp_flag, char *s ) { @@ -32,8 +36,8 @@ void user_send( int udp_flag, char *s ) void user_function_cmd_received( int udp_flag, uint8_t *pusrdata ) { - OSStatus err = kNoErr; - char i; + + unsigned char i; bool update_user_config_flag = false; //标志位,记录最后是否需要更新储存的数据 bool return_flag = true; //为true时返回json结果,否则不返回 @@ -119,7 +123,7 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata ) if ( cJSON_IsNumber( p_nvalue ) ) { uint32_t now_time = UpTicks( ); - os_log( "system_get_time:%d,%d = %09d\r\n", last_time, now_time, (now_time - last_time) ); +// os_log( "system_get_time:%d,%d = %09d\r\n", last_time, now_time, (now_time - last_time) ); if ( now_time - last_time < 1000 && p_idx ) { return_flag = false; @@ -226,7 +230,6 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata ) } //解析plug----------------------------------------------------------------- - char plug_str[] = "plug_X"; for ( i = 0; i < PLUG_NUM; i++ ) { if ( json_plug_analysis( udp_flag, i, pJsonRoot, json_send ) ) @@ -256,11 +259,6 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata ) } cJSON_Delete( pJsonRoot ); - return; - exit: - os_log( "user_function_cmd_received ERROR:0x%x", err ); - - cJSON_Delete( pJsonRoot ); } @@ -269,7 +267,7 @@ void user_function_cmd_received( int udp_flag, uint8_t *pusrdata ) *udp_flag:发送udp/mqtt标志位,此处修改插座开关状态时,需要实时更新给domoticz *x:插座编号 */ -bool json_plug_analysis( int udp_flag, char x, cJSON * pJsonRoot, cJSON * pJsonSend ) +bool json_plug_analysis( int udp_flag, unsigned char x, cJSON * pJsonRoot, cJSON * pJsonSend ) { if ( !pJsonRoot ) return false; if ( !pJsonSend ) return false; @@ -346,7 +344,7 @@ bool json_plug_analysis( int udp_flag, char x, cJSON * pJsonRoot, cJSON * pJsonS cJSON_AddItemToObject( json_plug_send, "setting", json_plug_setting_send ); } } - cJSON *p_nvalue = cJSON_GetObjectItem( pJsonRoot, "nvalue" ); +// cJSON *p_nvalue = cJSON_GetObjectItem( pJsonRoot, "nvalue" ); // if ( p_plug || p_nvalue ) cJSON_AddNumberToObject( json_plug_send, "on", user_config->plug[x].on ); @@ -358,7 +356,7 @@ bool json_plug_analysis( int udp_flag, char x, cJSON * pJsonRoot, cJSON * pJsonS *解析处理定时任务json *x:插座编号 y:任务编号 */ -bool json_plug_task_analysis( char x, char y, cJSON * pJsonRoot, cJSON * pJsonSend ) +bool json_plug_task_analysis( unsigned char x, unsigned char y, cJSON * pJsonRoot, cJSON * pJsonSend ) { if ( !pJsonRoot ) return false; bool return_flag = false; diff --git a/TC1/user_gpio.c b/TC1/user_gpio.c index 6a8a4e6..a41811d 100644 --- a/TC1/user_gpio.c +++ b/TC1/user_gpio.c @@ -20,7 +20,7 @@ void user_led_set( char x ) bool relay_out( void ) { - char i; + unsigned char i; for ( i = 0; i < PLUG_NUM; i++ ) { if ( user_config->plug[i].on != 0 ) @@ -30,17 +30,18 @@ bool relay_out( void ) } return false; } -#define set_relay(a,b) if(((b) == 1) ? Relay_ON : Relay_OFF) MicoGpioOutputHigh( relay[(a)] );else MicoGpioOutputLow( relay[(a)] ) + /*user_relay_set * 设置继电器开关 * x:编号 0-5 * y:开关 0:关 1:开 */ -void user_relay_set( char x, char y ) +void user_relay_set(unsigned char x,unsigned char y ) { - if ( x < 0 || x >= PLUG_NUM ) return; + if (x >= PLUG_NUM ) return; + + if((y == 1) ? Relay_ON : Relay_OFF) MicoGpioOutputHigh( relay[x] );else MicoGpioOutputLow( relay[x] ); - set_relay( x, y ); user_config->plug[x].on = y; if ( relay_out( ) ) diff --git a/TC1/user_gpio.h b/TC1/user_gpio.h index 9f587ae..5828c2c 100644 --- a/TC1/user_gpio.h +++ b/TC1/user_gpio.h @@ -8,7 +8,8 @@ extern void user_led_set(char x); extern void key_init(void); -extern void user_relay_set( char x, char y ); +extern void user_relay_set(unsigned char x,unsigned char y ); extern void user_relay_set_all( char y ); +extern bool relay_out( void ); #endif diff --git a/TC1/user_mqtt_client.c b/TC1/user_mqtt_client.c index 467585b..c0c967d 100644 --- a/TC1/user_mqtt_client.c +++ b/TC1/user_mqtt_client.c @@ -22,7 +22,10 @@ #include "mico.h" #include "MQTTClient.h" #include "user_function.h" +#include "user_gpio.h" +#include "user_mqtt_client.h" #include "cJSON/cJSON.h" + /****************************************************** * Macros ******************************************************/ diff --git a/TC1/user_ota.c b/TC1/user_ota.c index bdbd49e..4ccb982 100644 --- a/TC1/user_ota.c +++ b/TC1/user_ota.c @@ -1,7 +1,7 @@ #define os_log(format, ...) custom_log("OTA", format, ##__VA_ARGS__) #include "mico.h" -#include "ota_server.h" +#include "ota_server/ota_server.h" #include "main.h" #include "user_udp.h" #include "user_mqtt_client.h" diff --git a/TC1/user_power.c b/TC1/user_power.c index f173c5e..4a40336 100644 --- a/TC1/user_power.c +++ b/TC1/user_power.c @@ -1,7 +1,7 @@ #define os_log(format, ...) custom_log("OTA", format, ##__VA_ARGS__) +#include "TimeUtils.h" #include "mico.h" -#include "ota_server.h" #include "main.h" #include "user_udp.h" #include "user_mqtt_client.h" @@ -12,7 +12,7 @@ mico_timer_t power_timer; static uint32_t timer_count_last = 0; static uint32_t timer_count = 0; static uint32_t timer = 0; -static uint8_t pin_input_last = 0; + static void power_timer_handler( void* arg ) { diff --git a/build/TC1@MK3031@moc/binary/TC1@MK3031@moc.all.bin b/build/TC1@MK3031@moc/binary/TC1@MK3031@moc.all.bin index 54922217a21f255449427d0df4e7db7f084f27bf..380800ff20cc347fb0ec6f0b196e96f2fefde72a 100644 GIT binary patch delta 27545 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 Jz8bZ#<1e@PH=+Ol delta 27239 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