add Tencent Cloud explorer lora demo
develop guide, see http://iwiki.oa.com/pages/viewpage.action?pageId=46342556
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
#include "RHF76.h"
|
||||
#include "tos_hal.h"
|
||||
|
||||
static mcps_indication_t rhf76_mcps_indication;
|
||||
static const char RHF76_LOWPOWER_SET[] = {
|
||||
0xFF,0xFF,0xFF,0xFF,'A','T','+','L','O','W','P','O','W','E','R','=','a','u','t','o','o','f','f','\r','\n'
|
||||
};
|
||||
|
||||
static int rhf76_exit_low_power(void)
|
||||
{
|
||||
@@ -120,13 +122,29 @@ static int rhf76_set_class(lora_class_t lora_class)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int rhf76_set_band(void)
|
||||
{
|
||||
int try = 0;
|
||||
at_echo_t echo;
|
||||
|
||||
tos_at_echo_create(&echo, NULL, 0, RHF76_ATCMD_REPLY_BAND_CN470);
|
||||
|
||||
while (try++ < 10) {
|
||||
tos_at_cmd_exec(&echo, 3000, RHF76_ATCMD_SET_BAND_CN470);
|
||||
if (echo.status == AT_ECHO_STATUS_OK || echo.status == AT_ECHO_STATUS_EXPECT) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int rhf76_set_chanel(void)
|
||||
{
|
||||
int try = 0;
|
||||
at_echo_t echo;
|
||||
|
||||
tos_at_echo_create(&echo, NULL, 0, "+CH: NUM");
|
||||
|
||||
|
||||
while (try++ < 10) {
|
||||
tos_at_cmd_exec(&echo, 3000, RHF76_ATCMD_SET_CHANNEL);
|
||||
if (echo.status == AT_ECHO_STATUS_OK || echo.status == AT_ECHO_STATUS_EXPECT) {
|
||||
@@ -178,11 +196,70 @@ static int rhf76_set_mode(lora_mode_t mode)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int rhf76_join(void)
|
||||
int rhf76_join_otaa(const char *deveui, const char *appkey)
|
||||
{
|
||||
int try = 0;
|
||||
at_echo_t echo;
|
||||
|
||||
if (rhf76_set_mode(LORA_MODE_LWOTAA) != 0) {
|
||||
printf("rhf76 set mode FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_id(LORA_ID_TYPE_DEVEUI, (char *)deveui) != 0) {
|
||||
printf("rhf76 set deveui FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_key(LORA_KEY_TYPE_APPKEY, (char *)appkey) != 0) {
|
||||
printf("rhf76 set appkey FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
at_delay_ms(2000);
|
||||
|
||||
tos_at_echo_create(&echo, NULL, 0, "+JOIN: Network joined");
|
||||
while (try++ < 10) {
|
||||
tos_at_cmd_exec(&echo, 14000, RHF76_ATCMD_JOIN);
|
||||
if (echo.status == AT_ECHO_STATUS_OK || echo.status == AT_ECHO_STATUS_EXPECT) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int rhf76_join_abp(const char *deveui, const char *devaddr, const char *nwkskey, const char *appskey)
|
||||
{
|
||||
int try = 0;
|
||||
at_echo_t echo;
|
||||
|
||||
if (rhf76_set_mode(LORA_MODE_LWABP) != 0) {
|
||||
printf("rhf76 set mode FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_id(LORA_ID_TYPE_DEVEUI, (char *)deveui) != 0) {
|
||||
printf("rhf76 set deveui FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_id(LORA_ID_TYPE_DEVADDR, (char *)devaddr) != 0) {
|
||||
printf("rhf76 set devaddr FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_key(LORA_KEY_TYPE_NWKSKEY, (char *)nwkskey) != 0) {
|
||||
printf("rhf76 set nwkskey FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_key(LORA_KEY_TYPE_APPSKEY, (char *)appskey) != 0) {
|
||||
printf("rhf76 set appskey FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
at_delay_ms(2000);
|
||||
|
||||
tos_at_echo_create(&echo, NULL, 0, "+JOIN: Network joined");
|
||||
while (try++ < 10) {
|
||||
tos_at_cmd_exec(&echo, 14000, RHF76_ATCMD_JOIN);
|
||||
@@ -195,9 +272,6 @@ int rhf76_join(void)
|
||||
|
||||
static int rhf76_init(void)
|
||||
{
|
||||
char *key = "2B7E151628AED2A6ABF7158809CF4F3C";
|
||||
char *appeui = "70B3D57ED00E0017";
|
||||
|
||||
printf("Init RHF76 LoRa ...\n" );
|
||||
|
||||
at_delay_ms(1000);
|
||||
@@ -216,6 +290,11 @@ static int rhf76_init(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_band() != 0) {
|
||||
printf("rhf76 set band FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_chanel() != 0) {
|
||||
printf("rhf76 set chanel FAILED\n");
|
||||
return -1;
|
||||
@@ -226,22 +305,7 @@ static int rhf76_init(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_mode(LORA_MODE_LWOTAA) != 0) {
|
||||
printf("rhf76 set mode FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_id(LORA_ID_TYPE_APPEUI, appeui) != 0) {
|
||||
printf("rhf76 set appeui FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rhf76_set_key(LORA_KEY_TYPE_APPKEY, key) != 0) {
|
||||
printf("rhf76 set appkey FAILED\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
at_delay_ms(3000);
|
||||
at_delay_ms(2000);
|
||||
printf("Init RHF76 LoRa done\n");
|
||||
|
||||
return 0;
|
||||
@@ -268,7 +332,7 @@ __STATIC__ void __asciistr2hex(char *in, uint8_t *out, int len) {
|
||||
}
|
||||
}
|
||||
|
||||
__STATIC__ char incoming_data_buffer[128];
|
||||
__STATIC__ char incoming_data_buffer[128];
|
||||
__STATIC__ uint8_t hex_stream[128];
|
||||
|
||||
__STATIC__ void rhf76_incoming_data_process(void)
|
||||
@@ -288,9 +352,11 @@ __STATIC__ void rhf76_incoming_data_process(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ret = 0;
|
||||
|
||||
memset(incoming_data_buffer, 0x00, 512);
|
||||
|
||||
while (1) {
|
||||
tos_at_uart_read(&data, 1);
|
||||
if (data == '"') {
|
||||
@@ -300,17 +366,19 @@ __STATIC__ void rhf76_incoming_data_process(void)
|
||||
}
|
||||
|
||||
printf("rhf76_incoming_data_process %d: %s\n", ret, incoming_data_buffer);
|
||||
|
||||
|
||||
__asciistr2hex(incoming_data_buffer, hex_stream, strlen(incoming_data_buffer));
|
||||
rhf76_mcps_indication(hex_stream, strlen(incoming_data_buffer)/2);
|
||||
|
||||
extern lora_module_t lora_module_rhf76;
|
||||
if (lora_module_rhf76.recv_callback) {
|
||||
lora_module_rhf76.recv_callback(hex_stream, strlen(incoming_data_buffer) / 2);
|
||||
}
|
||||
}
|
||||
|
||||
at_event_t rhf76_at_event[] = {
|
||||
{ "+CMSGHEX: PORT:", rhf76_incoming_data_process },
|
||||
};
|
||||
|
||||
|
||||
|
||||
static char __num2hex(uint8_t num)
|
||||
{
|
||||
if (num <= 0x9) {
|
||||
@@ -345,26 +413,20 @@ static int rhf76_send(const void *buf, size_t len)
|
||||
return -1;
|
||||
}
|
||||
__hex2str((uint8_t *)buf, str_buf, len);
|
||||
|
||||
|
||||
char cmd[100] = {0};
|
||||
at_echo_t echo;
|
||||
snprintf(cmd, sizeof(cmd), RHF76_ATCMD_FMT_SEND_MSGHEX, str_buf);
|
||||
cmd[sizeof(cmd) - 1] = '\0';
|
||||
tos_mmheap_free(str_buf);
|
||||
tos_at_echo_create(&echo, NULL, 0, "+CMSG: ACK Received");
|
||||
tos_at_echo_create(&echo, NULL, 0, "+CMSG: ACK Received");
|
||||
tos_at_cmd_exec(&echo, 6000, cmd);
|
||||
if (echo.status == AT_ECHO_STATUS_OK || echo.status == AT_ECHO_STATUS_EXPECT) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
static int rhf76_recv_register(void* mcps_indication)
|
||||
{
|
||||
rhf76_mcps_indication = (mcps_indication_t)mcps_indication;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rhf76_close(void)
|
||||
{
|
||||
return 0;
|
||||
@@ -372,10 +434,11 @@ static int rhf76_close(void)
|
||||
|
||||
lora_module_t lora_module_rhf76 = {
|
||||
.init = rhf76_init,
|
||||
.join = rhf76_join,
|
||||
.join_otaa = rhf76_join_otaa,
|
||||
.join_abp = rhf76_join_abp,
|
||||
.send = rhf76_send,
|
||||
.recv_register = rhf76_recv_register,
|
||||
.close = rhf76_close
|
||||
.close = rhf76_close,
|
||||
.recv_callback = K_NULL,
|
||||
};
|
||||
|
||||
int rhf76_lora_init(hal_uart_port_t uart_port)
|
||||
@@ -398,4 +461,3 @@ int rhf76_lora_init(hal_uart_port_t uart_port)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user