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;
    }
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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;
}