first version cassa
This commit is contained in:
parent
0ec72832d1
commit
55f248f517
12
project/Natalia/Makefile
Normal file
12
project/Natalia/Makefile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
CONTIKI_PROJECT = serial-test
|
||||||
|
PLATFORMS_ONLY = cc26x0-cc13x0
|
||||||
|
all: $(CONTIKI_PROJECT)
|
||||||
|
|
||||||
|
CONTIKI = ../..
|
||||||
|
|
||||||
|
PLATFORMS_EXCLUDE = nrf52dk
|
||||||
|
|
||||||
|
#use this to enable TSCH: MAKE_MAC = MAKE_MAC_TSCH
|
||||||
|
MAKE_MAC ?= MAKE_MAC_CSMA
|
||||||
|
MAKE_NET = MAKE_NET_NULLNET
|
||||||
|
include $(CONTIKI)/Makefile.include
|
179
project/Natalia/cassa.c
Normal file
179
project/Natalia/cassa.c
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
#include "net/netstack.h"
|
||||||
|
#include "net/nullnet/nullnet.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "sys/log.h"
|
||||||
|
#define LOG_MODULE "App"
|
||||||
|
#define LOG_LEVEL LOG_LEVEL_INFO
|
||||||
|
|
||||||
|
#include "os/dev/serial-line.h"
|
||||||
|
#include "arch/cpu/cc26x0-cc13x0/dev/cc26xx-uart.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_CUSTOMERS 20
|
||||||
|
|
||||||
|
enum message_type{CASH_OUT_MSG, PRODUCT_MSG, ITEM_ELEM_MSG, BASKET_MSG, START_OF_LIST_PRODUCTS_MSG};
|
||||||
|
|
||||||
|
typedef struct basket_msg
|
||||||
|
{
|
||||||
|
uint8_t n_products;
|
||||||
|
uint8_t customer_id;
|
||||||
|
linkaddr_t* address;
|
||||||
|
|
||||||
|
|
||||||
|
}basket_msg;
|
||||||
|
|
||||||
|
typedef struct user_invoice
|
||||||
|
{
|
||||||
|
uint8_t n_prods;
|
||||||
|
float total_sum;
|
||||||
|
uint8_t customer_id;
|
||||||
|
linkaddr_t* address_basket;
|
||||||
|
uint8_t empty;
|
||||||
|
|
||||||
|
|
||||||
|
}user_invoice;
|
||||||
|
|
||||||
|
typedef struct cash_out_msg
|
||||||
|
{
|
||||||
|
uint8_t customer_id;
|
||||||
|
}cash_out_msg;
|
||||||
|
|
||||||
|
typedef struct product_msg{
|
||||||
|
|
||||||
|
uint8_t customer_id;
|
||||||
|
uint8_t product_id;
|
||||||
|
float prize;
|
||||||
|
|
||||||
|
}product_msg;
|
||||||
|
|
||||||
|
typedef struct msg{
|
||||||
|
enum message_type msg_type;
|
||||||
|
cash_out_msg cash_out;
|
||||||
|
product_msg product;
|
||||||
|
basket_msg basket;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}msg;
|
||||||
|
|
||||||
|
PROCESS(cassa_main_process, "Cassa process");
|
||||||
|
AUTOSTART_PROCESSES(&cassa_main_process);
|
||||||
|
|
||||||
|
static uint8_t invoice_index(uint32_t customer_id, user_invoice invoices[])
|
||||||
|
{
|
||||||
|
|
||||||
|
uint8_t i = 0;
|
||||||
|
for(i = 0; i< MAX_CUSTOMERS;i++) {
|
||||||
|
if (invoices[i].empty==0 && customer_id == invoices[i].customer_id)
|
||||||
|
return i;
|
||||||
|
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t index_free_spot(user_invoice invoices[])
|
||||||
|
{
|
||||||
|
uint8_t i = 0;
|
||||||
|
for(i = 0;i<MAX_CUSTOMERS;i++) {
|
||||||
|
if (invoices[i].empty == 1) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void input_callback(const void* data, uint16_t len, const linkaddr_t* source_address, const linkaddr_t* destination_address)
|
||||||
|
{
|
||||||
|
msg received_msg;
|
||||||
|
|
||||||
|
static user_invoice invoices[MAX_CUSTOMERS];
|
||||||
|
|
||||||
|
|
||||||
|
if (len == sizeof(*data)) {
|
||||||
|
memcpy (&received_msg, data, sizeof ((msg *)data));
|
||||||
|
LOG_INFO("Received data");
|
||||||
|
LOG_INFO_LLADDR(source_address); //this is the link layer address
|
||||||
|
LOG_INFO("\n");
|
||||||
|
//we need to receive an additional message to start the process of receiving the products because if we start receiving the products immediately
|
||||||
|
//in the case of parallel processes we wouldnt know to what client and what basket that product is assosiated with
|
||||||
|
if (received_msg.msg_type == BASKET_MSG) {
|
||||||
|
uint8_t index = index_free_spot(invoices);
|
||||||
|
if (index != -1 ) {
|
||||||
|
invoices[index].n_prods = received_msg.basket.n_products;
|
||||||
|
invoices[index].total_sum = 0;
|
||||||
|
invoices[index].customer_id = received_msg.basket.customer_id;
|
||||||
|
invoices[index].address_basket = received_msg.basket.address;
|
||||||
|
|
||||||
|
msg start_sending_list;
|
||||||
|
start_sending_list.msg_type = START_OF_LIST_PRODUCTS_MSG;
|
||||||
|
nullnet_buf = (uint8_t*)&start_sending_list;
|
||||||
|
|
||||||
|
LOG_INFO("Sending acknowledgment to start sending list of products");
|
||||||
|
LOG_INFO_("\n");
|
||||||
|
nullnet_len = sizeof(start_sending_list);
|
||||||
|
NETSTACK_NETWORK.output((invoices[index].address_basket));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} else
|
||||||
|
printf("Reached max number of customers");
|
||||||
|
}
|
||||||
|
if (received_msg.msg_type == PRODUCT_MSG) {
|
||||||
|
uint8_t index = invoice_index(received_msg.product.customer_id, invoices);
|
||||||
|
if (index != -1) {
|
||||||
|
if (invoices[index].n_prods > 0) {
|
||||||
|
invoices[index].total_sum += received_msg.product.prize;
|
||||||
|
invoices[index].n_prods--;
|
||||||
|
}
|
||||||
|
if (invoices[index].n_prods == 0) {
|
||||||
|
printf("Total sum for client %d is %f\n", (int)invoices[index].customer_id, invoices[index].total_sum);
|
||||||
|
invoices[index].empty = 1;
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
printf("Customer with that id is not associated to any basket!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PROCESS_THREAD(cassa_main_process, ev, data) {
|
||||||
|
PROCESS_BEGIN();
|
||||||
|
|
||||||
|
static uint8_t customer_id;
|
||||||
|
static msg bro_customer_id;
|
||||||
|
|
||||||
|
cc26xx_uart_set_input(serial_line_input_byte);
|
||||||
|
serial_line_init();
|
||||||
|
|
||||||
|
nullnet_buf = (uint8_t*)&bro_customer_id;
|
||||||
|
nullnet_set_input_callback(input_callback); //this should be moved down?
|
||||||
|
|
||||||
|
|
||||||
|
printf("Dear customer, insert your card id\n");
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
PROCESS_WAIT_EVENT_UNTIL(ev == serial_line_event_message);
|
||||||
|
|
||||||
|
printf("Customer's id: %s\n", (char*)data);
|
||||||
|
customer_id = atoi(data);
|
||||||
|
printf("id: %d\n", (int)customer_id);
|
||||||
|
|
||||||
|
bro_customer_id.msg_type = CASH_OUT_MSG;
|
||||||
|
bro_customer_id.cash_out.customer_id = customer_id;
|
||||||
|
|
||||||
|
LOG_INFO("Sending BROADCAST customer id: %d\n", (int)customer_id);
|
||||||
|
LOG_INFO_LLADDR(NULL);
|
||||||
|
LOG_INFO_("\n");
|
||||||
|
nullnet_len = sizeof(bro_customer_id);
|
||||||
|
NETSTACK_NETWORK.output(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
PROCESS_END();
|
||||||
|
}
|
||||||
|
|
43
project/Natalia/project-conf.h
Normal file
43
project/Natalia/project-conf.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014, Texas Instruments Incorporated - http://www.ti.com/
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the copyright holder nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
#ifndef PROJECT_CONF_H_
|
||||||
|
#define PROJECT_CONF_H_
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/* Enable the ROM bootloader */
|
||||||
|
#define CCXXWARE_CONF_ROM_BOOTLOADER_ENABLE 1
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/* Change to match your configuration */
|
||||||
|
#define IEEE802154_CONF_PANID 0xABCD
|
||||||
|
#define IEEE802154_CONF_DEFAULT_CHANNEL 25
|
||||||
|
#define RF_BLE_CONF_ENABLED 1
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
#endif /* PROJECT_CONF_H_ */
|
||||||
|
/*---------------------------------------------------------------------------*/
|
Loading…
Reference in New Issue
Block a user