summaryrefslogtreecommitdiff
path: root/digital/beacon/src/network.c
diff options
context:
space:
mode:
authorFlorent Duchon2012-04-03 18:35:01 +0200
committerFlorent Duchon2012-04-03 19:34:39 +0200
commitacf4617c9f264dc5813abb4b305d8c1d76ad19b0 (patch)
treeccf5c8aac133d9bbee8a43fc7d09ffcee29be133 /digital/beacon/src/network.c
parent1fa4caab2da5558efddd4a5dc892da5dea28921b (diff)
digital/beacon: file restructuration (license header)
Diffstat (limited to 'digital/beacon/src/network.c')
-rw-r--r--digital/beacon/src/network.c377
1 files changed, 167 insertions, 210 deletions
diff --git a/digital/beacon/src/network.c b/digital/beacon/src/network.c
index 787abfb7..8e0fbaa0 100644
--- a/digital/beacon/src/network.c
+++ b/digital/beacon/src/network.c
@@ -1,51 +1,57 @@
+/* network.c */
+/* Beacon network management. {{{
+ *
+ * Copyright (C) 2012 Florent Duchon
+ *
+ * APBTeam:
+ * Web: http://apbteam.org/
+ * Email: team AT apbteam DOT org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * }}} */
+
#include <types.h>
#include <configServer.h>
#include <zdo.h>
-// #include <peer2peer.h>
+#include "configuration.h"
#include "network.h"
-// #include <serialInterface.h>
+#include "debug.h"
+#include "led.h"
+// Endpoint parameters
+static SimpleDescriptor_t simpleDescriptor = { APP_ENDPOINT, APP_PROFILE_ID, 1, 1, 0, 0 , NULL, 0, NULL };
+static APS_RegisterEndpointReq_t endpointParams;
+static ZDO_StartNetworkReq_t networkParams; // request params for ZDO_StartNetworkReq
+APS_DataReq_t config;
-#define APP_DETECT_LINK_FAILURE 1
// Network related variables
-AppMessageBuffer_t buf_to_send;
-
+AppMessageBuffer_t zigbit_tx_buffer;
extern AppState_t appState;
extern DeviceType_t deviceType;
-// extern HAL_UsartDescriptor_t appUsartDescriptor;
-// extern uint8_t usartTxBuffer[APP_USART_TX_BUFFER_SIZE];
-
-
-static ZDO_StartNetworkReq_t networkParams; // request params for ZDO_StartNetworkReq
-APS_DataReq_t test;
-
-// Endpoint parameters
-static SimpleDescriptor_t simpleDescriptor = { APP_ENDPOINT, APP_PROFILE_ID, 1, 1, 0, 0 , NULL, 0, NULL };
-static APS_RegisterEndpointReq_t endpointParams;
-
-#if APP_DETECT_LINK_FAILURE == 1
static uint8_t retryCounter = 0; // Data sending retries counter
// Leave request, used for router to leave the network when communication was interrupted
static ZDO_ZdpReq_t leaveReq;
-static void leaveNetwork(void);
-static void zdpLeaveResp(ZDO_ZdpResp_t *zdpResp);
-#endif // APP_DETECT_LINK_FAILURE
-
-uint16_t petite_adresse = 0;
-int lost_packet = 0;
-extern int jack;
-/**************************************************************************//**
- \brief Intializes network parameters.
- \param none.
- \return none.
-******************************************************************************/
-void initNetwork(void)
+/* This function intializes network parameters */
+void network_init(void)
{
if(deviceType == DEVICE_TYPE_COORDINATOR)
{
@@ -54,56 +60,43 @@ void initNetwork(void)
}
if(deviceType == DEVICE_TYPE_END_DEVICE)
{
- _delay_ms(2000);
bool rx_on_idle = false;
- CS_WriteParameter(CS_RX_ON_WHEN_IDLE_ID, &rx_on_idle);
-
+ CS_WriteParameter(CS_RX_ON_WHEN_IDLE_ID, &rx_on_idle);
}
/*False = random ID */
+ /* True = static short address */
bool unique_addr = true;
CS_WriteParameter(CS_NWK_UNIQUE_ADDR_ID,&unique_addr);
-
-// uint16_t nwkAddr=1;
-// CS_WriteParameter(CS_NWK_ADDR_ID, &nwkAddr);
+
+ uint16_t nwkAddr=CS_NWK_ADDR;
+ CS_WriteParameter(CS_NWK_ADDR_ID, &nwkAddr);
// Set the deviceType value to Config Server
CS_WriteParameter(CS_DEVICE_TYPE_ID, &deviceType);
- /* Neighbor table size - The size of neighbor table an ED can have */
- int neighbor_table_size = 10;
- CS_WriteParameter(CS_NEIB_TABLE_SIZE_ID, &neighbor_table_size);
-
- /* Max children amount -Maximum number of children that a given device (coordinator or router) may have */
- int max_children = 8;
- CS_WriteParameter(CS_MAX_CHILDREN_AMOUNT_ID, &max_children);
-
- /* Max router children amount - Maximum number of routers among the children of one device */
- int max_children_router = 2;
- CS_WriteParameter(CS_MAX_CHILDREN_ROUTER_AMOUNT_ID, &max_children_router);
-
- CS_WriteParameter(CS_EXT_PANID_ID,&(char){"0xAAAAAAAAAAAAAAAALL"});
-
appState = APP_NETWORK_JOINING_STATE;
}
-/**************************************************************************//**
- \brief ZDO_StartNetwork primitive confirmation callback.
+/* This function starts the network according to the defined configuraiton*/
+void network_start(void)
+{
+ /* Activate the network status led blink */
+ led_start_blink();
+
+ networkParams.ZDO_StartNetworkConf = ZDO_StartNetworkConf;
+ // start network
+ ZDO_StartNetworkReq(&networkParams);
+}
+
- \param confirmInfo - confirmation parametrs.
- \return none.
-******************************************************************************/
+/* ZDO_StartNetwork primitive confirmation callback */
void ZDO_StartNetworkConf(ZDO_StartNetworkConf_t* confirmInfo)
{
if (confirmInfo->status == ZDO_SUCCESS_STATUS)
{
-#if APP_DETECT_LINK_FAILURE == 1
retryCounter = 0;
-#endif // APP_DETECT_LINK_FAILURE
-
- PORTD=0b00100000;
- petite_adresse = confirmInfo->shortAddr;
appState = APP_NETWORK_JOINED_STATE;
@@ -114,207 +107,171 @@ void ZDO_StartNetworkConf(ZDO_StartNetworkConf_t* confirmInfo)
APS_RegisterEndpointReq(&endpointParams);
// Configure the message structure
- test.dstAddrMode = APS_SHORT_ADDRESS; // Short addressing mode
- test.dstAddress.shortAddress = 0x0000; // Destination address
- test.profileId = APP_PROFILE_ID; // Profile ID
- test.dstEndpoint = APP_ENDPOINT; // Desctination endpoint
- test.clusterId = APP_CLUSTER_ID; // Desctination cluster ID
- test.srcEndpoint = APP_ENDPOINT; // Source endpoint
- test.asdu = &buf_to_send.message; // application message pointer
- test.asduLength = 3 + sizeof(buf_to_send.message.messageId); // actual application message length
- test.txOptions.acknowledgedTransmission = 0; // Acknowledged transmission enabled
- test.radius = 0; // Use maximal possible radius
- test.APS_DataConf = APS_DataConf; // Confirm handler Z
+ config.dstAddrMode = APS_SHORT_ADDRESS; // Short addressing mode
+#ifdef TYPE_COOR
+ config.dstAddress.shortAddress = BROADCAST_ADDR_ALL; // Destination address
+#else
+ config.dstAddress.shortAddress = 0x0000; // Destination address
+#endif
+ config.profileId = APP_PROFILE_ID; // Profile ID
+ config.dstEndpoint = APP_ENDPOINT; // Desctination endpoint
+ config.clusterId = APP_CLUSTER_ID; // Desctination cluster ID
+ config.srcEndpoint = APP_ENDPOINT; // Source endpoint
+ config.asdu = &zigbit_tx_buffer.message; // application message pointer
+ config.asduLength = 3 + sizeof(zigbit_tx_buffer.message.messageId); // actual application message length
+ config.txOptions.acknowledgedTransmission = 0; // Acknowledged transmission enabled
+ config.radius = 0; // Use maximal possible radius
+ config.APS_DataConf = APS_DataConf; // Confirm handler Z
+
+ /* Stop the network status led blink */
+ led_stop_blink();
}
else
{
- PORTD=0b01000000;
+ uprintf("CONNECTION FAILED. confirmInfo->status = %x\n\r",confirmInfo->status);
}
SYS_PostTask(APL_TASK_ID);
}
-/**************************************************************************//**
- \brief Starts network.
- \param none.
- \return none.
-******************************************************************************/
-void startNetwork(void)
-{
- networkParams.ZDO_StartNetworkConf = ZDO_StartNetworkConf;
- // start network
- ZDO_StartNetworkReq(&networkParams);
-}
-
-
-/**************************************************************************//**
- \brief Update network status event handler.
- \param nwkParams - new network parameters.
- \return none.
-******************************************************************************/
+/* Update network status event handler */
void ZDO_MgmtNwkUpdateNotf(ZDO_MgmtNwkUpdateNotf_t *nwkParams)
{
- switch (nwkParams->status)
- {
- case ZDO_NETWORK_STARTED_STATUS:
- break;
-
- case ZDO_NETWORK_LOST_STATUS:
- {
- APS_UnregisterEndpointReq_t unregEndpoint;
-
- unregEndpoint.endpoint = endpointParams.simpleDescriptor->endpoint;
- APS_UnregisterEndpointReq(&unregEndpoint);
-
- // try to rejoin the network
- appState = APP_NETWORK_JOINING_STATE;
- SYS_PostTask(APL_TASK_ID);
- break;
- }
-
- case ZDO_NWK_UPDATE_STATUS:
- break;
-
- default:
- break;
- }
+ switch (nwkParams->status)
+ {
+ case ZDO_NETWORK_STARTED_STATUS:
+ break;
+ case ZDO_NETWORK_LOST_STATUS:
+ {
+ APS_UnregisterEndpointReq_t unregEndpoint;
+ unregEndpoint.endpoint = endpointParams.simpleDescriptor->endpoint;
+ APS_UnregisterEndpointReq(&unregEndpoint);
+ // try to rejoin the network
+ appState = APP_NETWORK_JOINING_STATE;
+ SYS_PostTask(APL_TASK_ID);
+ break;
+ }
+ case ZDO_NWK_UPDATE_STATUS:
+ break;
+ default:
+ break;
+ }
}
-/**************************************************************************//**
- \brief Handler of aps data sent confirmation.
- \param confInfo - confirmation info
- \return none.
-******************************************************************************/
+/* brief Handler of aps data sent confirmation */
void APS_DataConf(APS_DataConf_t* confInfo)
{
if (APS_SUCCESS_STATUS != confInfo->status)
{
-#if APP_DETECT_LINK_FAILURE == 1
retryCounter++;
- if(retryCounter>3)
- {
- lost_packet++;
- }
if (MAX_RETRIES_BEFORE_REJOIN == retryCounter)
{
- leaveNetwork();
+ network_leave();
}
else
-#endif // APP_DETECT_LINK_FAILURE
{
// Data not delivered, resend.
- send_data();
+// send_data();
}
return;
}
-#if APP_DETECT_LINK_FAILURE == 1
retryCounter = 0;
-#endif // APP_DETECT_LINK_FAILURE
}
-
-/**************************************************************************//**
- \brief APS data indication handler.
-
- \param indData - received data pointer.
- \return none.
-******************************************************************************/
-int received_event=0;
-int beacon_number = 0;
-int angle_received = 0;
+/* APS data indication handler */
void APS_DataIndication(APS_DataInd_t* indData)
{
AppMessage_t *appMessage = (AppMessage_t *) indData->asdu;
// Data received indication
- received_event++;
-
switch(appMessage->data[0])
{
- case 42: // COMMANDE JACK
+ case 0x42: // COMMANDE JACK
// jack = appMessage->data[2];
break;
- case 43: // Update ANGLE
- beacon_number = appMessage->data[1];
- angle_received = appMessage->data[2];
- update_position(beacon_number,angle_received);
+ case 0x43: // Update ANGLE
+// beacon_number = appMessage->data[1];
+// angle_received = appMessage->data[2];
+// update_position(beacon_number,angle_received);
+ break;
+ default:
+ uprintf("Unknown data type received = %x\r\n",appMessage->data[0]);
break;
}
-
- /*if(appMessage->data[0]==0x55)
- {
- sprintf(usartTxBuffer,"Trame recue from %d ==> Lost packet = %d\r\n\0",appMessage->data[1],appMessage->data[2]);
- WRITE_USART(&appUsartDescriptor,usartTxBuffer,strlen(usartTxBuffer));
- }
- else
- {
-
- }*/
}
-#if APP_DETECT_LINK_FAILURE == 1
-/**************************************************************************//**
- * \brief Leave network.
- *
- * \param none.
- * \return none.
- ******************************************************************************/
- static void leaveNetwork(void)
- {
- ZDO_MgmtLeaveReq_t *zdpLeaveReq = &leaveReq.req.reqPayload.mgmtLeaveReq;
- APS_UnregisterEndpointReq_t unregEndpoint;
-
- appState = APP_NETWORK_LEAVING_STATE;
-
- unregEndpoint.endpoint = endpointParams.simpleDescriptor->endpoint;
- APS_UnregisterEndpointReq(&unregEndpoint);
-
- leaveReq.ZDO_ZdpResp = zdpLeaveResp;
- leaveReq.reqCluster = MGMT_LEAVE_CLID;
- leaveReq.dstAddrMode = EXT_ADDR_MODE;
- leaveReq.dstExtAddr = 0;
- zdpLeaveReq->deviceAddr = 0;
- zdpLeaveReq->rejoin = 0;
- zdpLeaveReq->removeChildren = 1;
- zdpLeaveReq->reserved = 0;
- ZDO_ZdpReq(&leaveReq);
- }
+/* Leave network */
+void network_leave(void)
+{
+ ZDO_MgmtLeaveReq_t *zdpLeaveReq = &leaveReq.req.reqPayload.mgmtLeaveReq;
+ APS_UnregisterEndpointReq_t unregEndpoint;
+
+ appState = APP_NETWORK_LEAVING_STATE;
+
+ unregEndpoint.endpoint = endpointParams.simpleDescriptor->endpoint;
+ APS_UnregisterEndpointReq(&unregEndpoint);
+
+ leaveReq.ZDO_ZdpResp = zdpLeaveResp;
+ leaveReq.reqCluster = MGMT_LEAVE_CLID;
+ leaveReq.dstAddrMode = EXT_ADDR_MODE;
+ leaveReq.dstExtAddr = 0;
+ zdpLeaveReq->deviceAddr = 0;
+ zdpLeaveReq->rejoin = 0;
+ zdpLeaveReq->removeChildren = 1;
+ zdpLeaveReq->reserved = 0;
+ ZDO_ZdpReq(&leaveReq);
+}
- /**************************************************************************//**
- * \brief Leave network response.
- *
- * \param zdpResp - response data
- * \return none.
- ******************************************************************************/
- static void zdpLeaveResp(ZDO_ZdpResp_t *zdpResp)
- {
-
- // Try to rejoin the network
- appState = APP_NETWORK_JOINING_STATE;
- SYS_PostTask(APL_TASK_ID);
-
- (void)zdpResp;
- }
- #endif // APP_DETECT_LINK_FAILURE
-
-void send_data(void)
+
+/* Leave network response */
+void zdpLeaveResp(ZDO_ZdpResp_t *zdpResp)
{
-// PORTD ^= (1<<7);
- buf_to_send.message.data[0]=0x55;
- buf_to_send.message.data[1]=petite_adresse;
- buf_to_send.message.data[2]=lost_packet;
- APS_DataReq(&test);
-// PORTD ^= (1<<7);
+ // Try to rejoin the network
+ appState = APP_NETWORK_JOINING_STATE;
+ SYS_PostTask(APL_TASK_ID);
+
+ (void)zdpResp;
+}
+
+
+void send_data(uint8_t type, uint8_t data)
+{
+ zigbit_tx_buffer.message.data[0]=type;
+ zigbit_tx_buffer.message.data[1]=data;
+ APS_DataReq(&config);
}
void send_angle(int angle_degree)
{
- buf_to_send.message.data[0]=0x43;
- buf_to_send.message.data[1]=petite_adresse;
- buf_to_send.message.data[2]=angle_degree;
+// zigbit_tx_buffer.message.data[0]=0x43;
+// zigbit_tx_buffer.message.data[1]=beacon_id;
+// zigbit_tx_buffer.message.data[2]=angle_degree;
+}
+
+
+
+/* Wakeup event handler (dummy) */
+void ZDO_WakeUpInd(void)
+{
}
+
+/* Stub for ZDO Binding Indication */
+void ZDO_BindIndication(ZDO_BindInd_t *bindInd)
+{
+ (void)bindInd;
+}
+
+/* Stub for ZDO Unbinding Indication */
+void ZDO_UnbindIndication(ZDO_UnbindInd_t *unbindInd)
+{
+ (void)unbindInd;
+}
+
+
+
+
\ No newline at end of file