void App_SerPrintf (CPU_CHAR *p_fmt, ...) { CPU_CHAR str[80u + 1u]; CPU_SIZE_T len; SERIAL_ERR err; va_list vArgs; va_start(vArgs, p_fmt); vsprintf((char *)str, (char const *)p_fmt, vArgs); va_end(vArgs); len = Str_Len(str); Serial_Wr((SERIAL_IF_NBR )App_SerTraceIF_Nbr, (void *)&str[0u], (CPU_SIZE_T )len, (CPU_INT32U )0u, (SERIAL_ERR *)&err); }
CPU_BOOLEAN Exosite_Init(CPU_CHAR * pVen, CPU_CHAR * pOS, CPU_CHAR * pVer, NET_IF_NBR if_nbr) { init_mac_address(if_nbr); init_flash_content(); Str_Copy_N(VEN, pVen, VEN_SIZE); VEN[VEN_SIZE - 1] = 0; VEN_LENGTH = Str_Len(VEN); Str_Copy_N(OSN, pOS, OSN_SIZE); OSN[OSN_SIZE - 1] = 0; OSN_LENGTH = Str_Len(OSN); Str_Copy_N(OSV, pVer, OSV_SIZE); OSV[OSV_SIZE - 1] = 0; OSV_LENGTH = Str_Len(OSV); return Exosite_Reinit(); }
void App_SerStrWr (CPU_CHAR *p_str) { CPU_SIZE_T len; SERIAL_ERR err; if (p_str == (CPU_CHAR *)0u) { return; } len = Str_Len(p_str); Serial_Wr((SERIAL_IF_NBR )App_SerTraceIF_Nbr, (void *)p_str, (CPU_SIZE_T )len, (CPU_INT32U )0u, (SERIAL_ERR *)&err); }
// UART LED color print void BSP_LED_UART_print (CPU_INT08U led) { switch (led) { case 0: BSP_UART_Send_string ("Red\n\r",Str_Len("Red\n\r")); break; case 1: BSP_UART_Send_string ("Blue\n\r",Str_Len("Blue\n\r")); break; case 2: BSP_UART_Send_string ("Green\n\r",Str_Len("Green\n\r")); break; case 3: BSP_UART_Send_string ("Pink\n\r",Str_Len("Pink\n\r")); break; case 4: BSP_UART_Send_string ("Yellow\n\r",Str_Len("Yellow\n\r")); break; case 5: BSP_UART_Send_string ("Sky Blue\n\r",Str_Len("Sky Blue\n\r")); break; case 6: BSP_UART_Send_string ("White\n\r",Str_Len("White\n\r")); break; default: break; } }
int BSP_Print (const char *format, /* ARGS */ ...) { CPU_CHAR buf[128u + 1u]; CPU_SIZE_T len; CPU_SIZE_T len_wr; va_list vArgs; buf[0] = (CPU_CHAR)ASCII_CHAR_NULL; va_start(vArgs, format); vsnprintf((char *)buf, sizeof(buf) - 1, (char const *)format, vArgs); va_end(vArgs); len = Str_Len(buf); len_wr = BSP_SerWr ( BSP_SER_ID_UART0, (void *)buf, len); return ((int)len_wr); }
CPU_SIZE_T BSP_SerPrint (CPU_DATA port_id, CPU_CHAR *format, /* ARGS */ ...) { CPU_CHAR buf[128u + 1u]; CPU_SIZE_T len; CPU_SIZE_T len_wr; va_list vArgs; buf[0] = (CPU_CHAR)ASCII_CHAR_NULL; va_start(vArgs, format); vsnprintf((char *)buf, sizeof(buf) - 1, (char const *)format, vArgs); va_end(vArgs); len = Str_Len(buf); len_wr = BSP_SerWr ( port_id, (void *)buf, len); return (len_wr); }
static void init_flash_content(void) { rdk_meta *meta_info; rdk_meta_init(); meta_info = (rdk_meta *)RDK_META_LOCATION; if (0 != Str_Cmp_N((CPU_CHAR*)meta_info->mark, EXOMARK, Str_Len(EXOMARK))) { rdk_meta_defaults(); } // Get local copy as it can be set temporarily Str_Copy_N(CIK, (CPU_CHAR*)meta_info->cik, CIK_LENGTH); // Convert stored copy to something usable IP = meta_info->server[0] * 16777216 + meta_info->server[1] * 65536 + meta_info->server[2] * 256 + meta_info->server[3] * 1; PORT = meta_info->server[4] * 256 + meta_info->server[5] * 1; }
/* ********************************************************************************************************* * NOTE: each key and value in 'pkeys' and 'pvalues' must be urlencoded ********************************************************************************************************* */ CPU_BOOLEAN Exosite_Write_Batch(CPU_CHAR **pkeys, CPU_CHAR **pvalues, CPU_SIZE_T count) { CPU_BOOLEAN success = DEF_FALSE; NET_SOCK_ID sock; CPU_SIZE_T len, slen, rxlen; CPU_CHAR length[4]; CPU_CHAR rx[RX_SIZE]; CPU_SIZE_T i; if (0 == count) { return success; } len = 0; for (i = 0; i < count; i++) { len += Str_Len(pkeys[i]) + 1 + Str_Len(pvalues[i]); // "<key>","=","<val>" } len += count - 1; // number of '&' chars. if (0 == Str_FmtNbr_Int32U ( (CPU_INT32U) len, (CPU_INT08U) 3, (CPU_INT08U) 10, (CPU_CHAR) '\0', (CPU_BOOLEAN) DEF_YES, (CPU_BOOLEAN) DEF_YES, (CPU_CHAR*) length )) { return success; } slen = Str_Len_N(length, 3); sock = socket_open(); if (-1 == sock) { return success; } if ( 35 != socket_send(sock, "POST /api:v1/stack/alias HTTP/1.1\r\n", 35) || 22 != socket_send(sock, "Host: m2.exosite.com\r\n", 22) || 15 != socket_send(sock, "X-Exosite-CIK: ", 15) || CIK_LENGTH != socket_send(sock, CIK, CIK_LENGTH) || 2 != socket_send(sock, "\r\n", 2) || 64 != socket_send(sock, "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n", 64) || 16 != socket_send(sock, "Content-Length: ", 16) || slen != socket_send(sock, length, slen) || 4 != socket_send(sock, "\r\n\r\n", 4) ) { socket_close(sock); return success; } i = 0; socket_send(sock, pkeys[i], Str_Len(pkeys[i])); socket_send(sock, "=", 1); socket_send(sock, pvalues[i], Str_Len(pvalues[i])); for (i = 1; i < count; i++) { socket_send(sock, "&", 1); socket_send(sock, pkeys[i], Str_Len(pkeys[i])); socket_send(sock, "=", 1); socket_send(sock, pvalues[i], Str_Len(pvalues[i])); } // @HTTP/x.x NNN@ rxlen = socket_recv(sock, rx, 12); if (12 == rxlen && '2' == rx[9] && '0' == rx[10] && '4' == rx[11]) { success = DEF_TRUE; } socket_close(sock); return success; }
/* ********************************************************************************************************* * NOTE: 'pkey' and 'pval' must be urlencoded ********************************************************************************************************* */ CPU_BOOLEAN Exosite_Write(CPU_CHAR *pkey, CPU_CHAR *pval) { CPU_BOOLEAN success = DEF_FALSE; NET_SOCK_ID sock; CPU_SIZE_T len, slen, klen, vlen, rxlen; CPU_CHAR length[4]; CPU_CHAR rx[RX_SIZE]; klen = Str_Len(pkey); vlen = Str_Len(pval); len = klen + 1 + vlen; // "<pkey>","=","<pval>" if (0 == Str_FmtNbr_Int32U ( (CPU_INT32U) len, (CPU_INT08U) 3, (CPU_INT08U) 10, (CPU_CHAR) '\0', (CPU_BOOLEAN) DEF_YES, (CPU_BOOLEAN) DEF_YES, (CPU_CHAR*) length )) { return success; } slen = Str_Len_N(length, 3); sock = socket_open(); if (-1 == sock) { return success; } if ( 35 != socket_send(sock, "POST /api:v1/stack/alias HTTP/1.1\r\n", 35) || 22 != socket_send(sock, "Host: m2.exosite.com\r\n", 22) || 15 != socket_send(sock, "X-Exosite-CIK: ", 15) || CIK_LENGTH != socket_send(sock, CIK, CIK_LENGTH) || 2 != socket_send(sock, "\r\n", 2) || 64 != socket_send(sock, "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n", 64) || 16 != socket_send(sock, "Content-Length: ", 16) || slen != socket_send(sock, length, slen) || 4 != socket_send(sock, "\r\n\r\n", 4) || klen != socket_send(sock, pkey, klen) || 1 != socket_send(sock, "=", 1) || vlen != socket_send(sock, pval, vlen) ) { socket_close(sock); return success; } // @HTTP/x.x NNN@ rxlen = socket_recv(sock, rx, 12); if (12 == rxlen && '2' == rx[9] && '0' == rx[10] && '4' == rx[11]) { success = DEF_TRUE; } socket_close(sock); return success; }
/* ********************************************************************************************************* * NOTE: 'pkey' must be urlencoded * 'pbuf' is returned urlencoded and must be decoded by the caller. ********************************************************************************************************* */ CPU_SIZE_T Exosite_Read(CPU_CHAR *pkey, CPU_CHAR *pbuf, CPU_SIZE_T buflen) { NET_SOCK_ID sock; CPU_SIZE_T len, klen, vlen, rxlen; CPU_CHAR *p, *pcheck; CPU_CHAR rx[RX_SIZE]; vlen = 0; klen = Str_Len(pkey); pcheck = pkey; sock = socket_open(); if (-1 == sock) { return vlen; } if ( 24 != socket_send(sock, "GET /api:v1/stack/alias?", 24) || klen != socket_send(sock, pkey, klen) || 12 != socket_send(sock, "= HTTP/1.1\r\n", 12) || 22 != socket_send(sock, "Host: m2.exosite.com\r\n", 22) || 15 != socket_send(sock, "X-Exosite-CIK: ", 15) || CIK_LENGTH != socket_send(sock, CIK, CIK_LENGTH) || 2 != socket_send(sock, "\r\n", 2) || 58 != socket_send(sock, "Accept: application/x-www-form-urlencoded; charset=utf-8\r\n", 58) || 2 != socket_send(sock, "\r\n", 2) ) { socket_close(sock); return vlen; } // @HTTP/x.x NNN@ rxlen = socket_recv(sock, rx, 12); if (12 == rxlen && '2' == rx[9] && '0' == rx[10] && '0' == rx[11]) { CPU_CHAR crlf = 0; do { rxlen = socket_recv(sock, rx, RX_SIZE); len = rxlen; p = rx; // Find 4 consecutive \r or \n - should be: \r\n\r\n while (0 < len && 4 > crlf) { if ('\r' == *p || '\n' == *p) { ++crlf; } else { crlf = 0; } ++p; --len; } // The body is "<key>=<value>" if (0 < len && 4 == crlf && buflen > vlen) { // Move past "<key>" while (0 < len && 0 != *pcheck) { if (*pcheck == *p) { ++pcheck; } else { pcheck = pkey; } ++p; --len; } // Match '=', we should now have '<key>=' if (0 < len && 0 == *pcheck && '=' == *p) { ++p; --len; } // read in the rest of the body as the value while (0 < len && buflen > vlen) { pbuf[vlen++] = *p++; --len; } } } while (RX_SIZE == rxlen); } socket_close(sock); return vlen; }