
nexpaq development module demo for MAX3010x sensor
Dependencies: MAX30105 nexpaq_mdk
Fork of ALS_Prox_Demo by
Temp Prox Demo
MAX32625NEXPAQ development module
This project is a demonstration application for the MAX32625NEXPAQ development module and a MAX3010x sensor.
This project demonstrates polling the proximity sensor to use it like a button and also polling the temperature sensor and sending the information back to the application running on the phone, and the phone controlling the threshold for the proximity sensor and controlling the on board RGB LED to create different colors.
nexpaq App Tile Files
Revision 7:bf6283d600a0, committed 2016-09-23
- Comitter:
- nexpaq
- Date:
- Fri Sep 23 17:17:35 2016 +0000
- Parent:
- 6:eb5c0139e5db
- Child:
- 8:123fe6112b7a
- Commit message:
- Moved nexpaq_mdk to library and updated MAX44000 library.
Changed in this revision
--- a/MAX44000.lib Tue Sep 20 20:40:08 2016 +0000 +++ b/MAX44000.lib Fri Sep 23 17:17:35 2016 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/MaximIntegrated/code/MAX44000/#91f97c274e89 +https://developer.mbed.org/teams/MaximIntegrated/code/MAX44000/#a9f09252653a
--- a/main.cpp Tue Sep 20 20:40:08 2016 +0000 +++ b/main.cpp Fri Sep 23 17:17:35 2016 +0000 @@ -50,7 +50,6 @@ void sendALS() { unsigned char pData[3]; - // int alsData = max44000.readALS(); max44000.writeReg(MAX44000::REG_MAIN_CONFIG, 0x20); pData[0] = 10; pData[1] = max44000.readReg(MAX44000::REG_ALS_DATA_HIGH);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nexpaq_mdk.lib Fri Sep 23 17:17:35 2016 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/nexpaq/code/nexpaq_mdk/#9ac726a95d44
--- a/nexpaq_mdk_src/nexpaq_mdk.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* - * np_module_mdk_v1.h - * developer call the API of MDK by the include file. - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_MODULE_MDK_V1_H_ -#define NP_MODULE_MDK_V1_H_ - -#include <stdint.h> - -#ifdef __cplusplus - extern "C" { -#endif - -typedef void (*my_VOID_UCUC)(uint8_t*, uint8_t); -typedef void (*app_function)(void); - -typedef struct { - uint16_t command; - my_VOID_UCUC function; -} MDK_REGISTER_CMD; - -#define MDK_REGISTER_SUCCESS 0x00 -#define MDK_REGISTER_FAILD 0x01 - -void delay_ms(uint32_t t_ms); -/* - * Description: API to make the app initial by the api - * Parameter: np_app_setup-the initial function of APP - * Return: null - */ -void np_api_setup(app_function np_app_setup); - -/* - * Description: initialize mdk - * Parameter: null - * Return: null - */ -void np_api_init(); - -/* - * Description: signal ready to start - * Parameter: null - * Return: null - */ -void np_api_start(); - -/* - * Description: check for bootloader request - * Parameter: null - * Return: null - */ -void np_api_bsl_chk(); - -/* - * Description: API to run the loop function of APP, "np_app_loop()" will run on while(1),running forever when software on app mode - * Parameter: np_app_loop-the loop function of APP - * Return: null - */ -void np_api_loop(app_function np_app_loop); - -/* - * Description: API to set app firmware version - * Parameter: null - * Return: null - */ -void np_api_set_app_version(uint8_t HV, uint8_t MV, uint8_t LV); -/* - * Description: API to register developer's command callback function - * Parameter : - * cmd_func_table:the callback function about the command. - * The callback function will be called when MDK get the corresponding command. - * num :The callback function number - * Return : 0-success; 1-fail - */ -uint8_t np_api_register(MDK_REGISTER_CMD* cmd_func_table, uint8_t num); - -/* - * Description: API to upload data to Phone - * Parameter: - * rcmd : The command of the message. - * pData: Pointer of the space for hold the parameter of the message. - * pLen : The length of the "pData" - * Return : 0-success; 1-fail - */ -uint8_t np_api_upload(uint16_t rcmd,uint8_t *pData, uint8_t pLen); - -/* - * Description: API to upload data to Gateway - * rcmd : The command of the message. - * pData: Pointer of the space for hold the parameter of the message. - * pLen : The length of the "pData" - * Return : 0-success; 1-fail - */ -uint8_t np_api_upload_to_station(uint16_t rcmd, uint8_t *pData, uint8_t pLen); - -/* - * Description: API to set a manually output address for next POST message - * Parameter: address-the source address of next message - * Return: null - */ -void np_api_set_post_address(uint8_t address); - -#ifdef __cplusplus - } -#endif - -#endif /* NP_MODULE_MDK_V1_H_ */
--- a/nexpaq_mdk_src/source/np_apis.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -/* - * np_apis.c - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#include "np_apis.h" -#include "np_app_ncn_interface.h" -#include "np_app_spi.h" -#include "np_system.h" - -MDK_REGISTER_CMD *mdk_cmd_func_table_ptr; -uint8_t mdk_cmd_func_number; - -/* - * Description: APP to set firmware version of APP by the api - * Parameter: null - * Return: null - */ -void np_api_set_app_version(uint8_t HV, uint8_t MV, uint8_t LV) { - mdk_app_version[0] = HV; - mdk_app_version[1] = MV; - mdk_app_version[2] = LV; -} - -/* - * Description: APP to register processing function of command by the api - * Parameter: - * cmd_func_table: pointer of the space for hold the pointer of processing functions. - * num : the number of the processing function. - * - * Return: 0-success; 1-fail - */ -uint8_t np_api_register(MDK_REGISTER_CMD* cmd_func_table, uint8_t num) { - uint8_t t_i = 0; - uint8_t t_num = num; - - for ( ; t_i < t_num; t_i++ ) { - if ( (cmd_func_table[t_i].command > 0x27ff) || (cmd_func_table[t_i].command < 0x2700) ) { - return 1; - } - } - mdk_cmd_func_table_ptr = cmd_func_table; - mdk_cmd_func_number = num; - - return 0; -} - -/* - * Description: APP to upload message to Phone/ble by the api - * Parameter : - * rcmd : The command of the message. - * pData: Pointer of the space for hold the parameter of the message. - * pLen : The length of the "pData" - * - * Return : 0-success; 1-fail - */ -uint8_t np_api_upload(uint16_t rcmd, uint8_t *pData, uint8_t pLen) { - // Over the fifo buffer - if ( spi_post_buf.used_buffer_length + pLen > FIFO_BUFFER_OVERLOAD ) - return 1; - np_function_ncn_interface_post_message(rcmd, pData, pLen); - - return 0; -} - -/* - * Description: APP to upload data to Gateway by the api - * Parameter : - * rcmd : The command of the message. - * pData: Pointer of the space for hold the parameter of the message. - * pLen : The length of the "pData" - * - * Return : 0-success; 1-fail - - */ -uint8_t np_api_upload_to_station(uint16_t rcmd, uint8_t *pData, uint8_t pLen) { - // Over the fifo buffer - if ( spi_post_buf.used_buffer_length + pLen > FIFO_BUFFER_OVERLOAD ) - return 1; - np_function_ncn_interface_post_message_to_station(rcmd, pData, pLen); - - return 0; -} - -/* - * Description:APP set a manually output address for next POST message - * Parameter: null - * Return: null - */ -void np_api_set_post_address(uint8_t address) { - source_address = address; -} - -/* - * Description: system initial ,include MDK initial and app initial - * Parameter: null - * Return: null - */ -void np_api_setup(app_function np_app_setup){ - np_system_initial(np_app_setup); -} - -/* - * Description: system loop function, will loop forever. - * Parameter: null - * Return: null - */ -void np_api_loop(app_function np_app_loop){ - np_system_loop(np_app_loop); -} - -/* - * Description: initialize - * Parameter: null - * Return: null - */ -void np_api_init(){ - np_sys_init(); -} - -/* - * Description: signal ready - * Parameter: null - * Return: null - */ -void np_api_start(){ - np_sys_start(); -} - -/* - * Description: bootloader check - * Parameter: null - * Return: null - */ -void np_api_bsl_chk(){ - np_sys_bsl_chk(); -} - -#if 0 -/* - * Description: API to set auto enter lpm0 mode - * Parameter: null - * Return: null - */ -void np_api_lpm0_automode_set(void) { - np_function_lpm0_automode_set(); -} - -/* - * Description: API to set auto exit lpm0 mode - * Parameter: null - * Return: null - */ -void np_api_lpm0_automode_clear(void) { - np_function_lpm0_automode_clear(); -} - - -uint8_t np_api_lpm_mode_get(void){ - return np_function_pm_mode_get(); -} - -/* - * Description: API to get the sleep status about sleeping on lpm0 or lpm4 - * Parameter: null - * Return: LPM0/LPM4/LPM_NONE - */ -uint8_t np_api_lpm_status_get(void){ - return np_function_get_lpm_status(); -} - -void np_mdk_set_run_the_loop(uint8_t t_data){ - np_function_set_run_the_loop(t_data); -} - -void np_mdk_start_loop_head_set(void){ - wakeup_run_loop_flag = 1; -} - -void np_mdk_lpm4_automode_clear_flag(void){ - np_function_lpm4_automode_clear(); -} - -void np_api_lpm4_automode_set(void) { - if(np_function_pm_mode_get() & LPM_0){ - np_mdk_set_run_the_loop(TRUE);//if developer set lpm4 on interrupt and firmware is running on lpm0,need wakup lpm0 and enter lpm4 - } - - np_function_lpm4_automode_set(); - developer_lpm4_setting = 1; -} - -void np_api_lpm4_automode_clear(void) { - np_mdk_lpm4_automode_clear_flag(); - np_mdk_start_loop_head_set(); - developer_lpm4_setting = 0; -} - -void np_mdk_exit_lpm4_work(void){ - np_function_exit_lpm4_work(); -} - -#endif
--- a/nexpaq_mdk_src/source/np_apis.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* - * np_apis.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_APIS_H_ -#define NP_APIS_H_ - -#include <stdint.h> -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*my_VOID_UCUC)(uint8_t*, uint8_t); -typedef struct { - uint16_t command; - my_VOID_UCUC function; -} MDK_REGISTER_CMD; - -extern MDK_REGISTER_CMD *mdk_cmd_func_table_ptr; -extern uint8_t mdk_cmd_func_number; -#ifdef __cplusplus -} -#endif - -#endif /* NP_APIS_H_ */
--- a/nexpaq_mdk_src/source/np_app_crc.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* - * np_app_crc.c - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#include "np_config.h" - -// CRC16 table -const uint16_t crc_table[256]={ - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, - 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, - 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, - 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, - 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, - 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, - 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, - 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, - 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, - 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, - 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, - 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, - 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, - 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, - 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, - 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, - 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, - 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, - 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, - 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, - 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, - 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, - 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, - 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, - 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, - 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, - 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, - 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, - 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, - 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, - 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, - 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 -}; - -/* - * Description: to calculate the CRC16 for a serial number - * Parameter : pData - pointer of the serial number, len - length of the serial number - * Return : the result of CRC16 calculation - */ -uint16_t np_function_crc_calculate(uint8_t* pData, uint16_t len) { - uint16_t crc16 = 0x0000; - - while ( len > 0 ) { - crc16 = (crc16<<8) ^ crc_table[((crc16>>8)^*pData)&0xff]; - len--; - pData++; - } - - return crc16; -} - -/* - * Description: to check if the giving CRC16 is correct - * Parameter : pData - pointer of the serial number, len - lenght of the serial number, - * crc_value - the giving CRC16 - * Return : 0:correct, 1:wrong - */ -uint8_t np_function_crc_check(uint8_t* pData, uint16_t len, uint16_t crc_value) { - if ( crc_value == np_function_crc_calculate(pData, len) ) - return 0; - else - return 1; -} -
--- a/nexpaq_mdk_src/source/np_app_crc.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/* - * np_app_crc.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_APP_CRC_H_ -#define NP_APP_CRC_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -uint16_t np_function_crc_calculate(uint8_t* pData, uint16_t len); -uint8_t np_function_crc_check(uint8_t* pData, uint16_t len, uint16_t crc_value); - -#ifdef __cplusplus -} -#endif - -#endif /* NP_APP_CRC_H_ */
--- a/nexpaq_mdk_src/source/np_app_ncn_interface.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,352 +0,0 @@ -/* - * np_app_ncn_interface.c - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#include "np_config.h" -#include "np_app_ncn_interface.h" -#include "np_app_spi.h" -#include "np_app_crc.h" -#include "np_command.h" -#include "np_apis.h" -#include "np_app_pm.h" -#include "np_driver_pm.h" -#include "np_system.h" - -uint8_t mdk_app_version[3] = {0x00}; //the code of developer version -uint8_t mdk_mdk_version[3] = {0x00}; //the mdk version -uint8_t t_message[64]; // buffer for message cache -uint8_t source_address; // the message is coming from this port address -volatile uint8_t flag_jump_bsl; //uint8_t flag_jump_bsl = 0x00; -uint8_t my_node = 0x00; // To record "this" module's node number - -/* - * Description:MDK set a manually output address for next POST message - * Parameter: null - * Return: null - */ -void np_function_set_post_address(uint8_t address) { - source_address = address; -} - -/* - * Description: get one message from the FIFO buffer - * Parameter : pData - pointer of the space for hold the one message - * Return : the length of the message - */ -uint8_t np_function_ncn_interface_get_message(uint8_t *pData) { - uint8_t t_i = 0x00; - - // Clean the usage - spi_get_buf.used_buffer_length -= spi_get_buf.message_len[spi_get_buf.readout_message_pointer]; - // Case If: - // One message over 79 to another 0 to 79 loop - // Case else: - // One message from n to m, but n and m is one same 0 to 79 loop - if ( (spi_get_buf.readout_buffer_pointer + spi_get_buf.message_len[spi_get_buf.readout_message_pointer]) > FIFO_BUFFER_OVERLOAD ) { - // Read until pointer reach 79 - while (spi_get_buf.readout_buffer_pointer <= FIFO_BUFFER_OVERLOAD ) { - pData[t_i++] = spi_get_buf.buffer[spi_get_buf.readout_buffer_pointer++]; - spi_get_buf.message_len[spi_get_buf.readout_message_pointer]--; - } - // Pointer reset to 0 - spi_get_buf.readout_buffer_pointer = 0; - // Read out the rest - while ( spi_get_buf.message_len[spi_get_buf.readout_message_pointer] ) { - pData[t_i++] = spi_get_buf.buffer[spi_get_buf.readout_buffer_pointer++]; - spi_get_buf.message_len[spi_get_buf.readout_message_pointer]--; - } - } else { - while ( spi_get_buf.message_len[spi_get_buf.readout_message_pointer] ) { - pData[t_i++] = spi_get_buf.buffer[spi_get_buf.readout_buffer_pointer++]; - spi_get_buf.message_len[spi_get_buf.readout_message_pointer]--; - } - } - - spi_get_buf.readout_message_pointer++; - if ( spi_get_buf.readout_message_pointer > FIFO_MESSAGE_OVERLOAD) - spi_get_buf.readout_message_pointer = 0; - return t_i; -} - -/* - * Description: add one message into the FIFO buffer - * Parameter: - * command :The command of this message; - * pData :pointer of the new parameters inside the message, - * pLen :the length of the parameters - * Return: null - */ -uint8_t np_function_ncn_interface_post_message(uint16_t command, uint8_t *pData, uint8_t pLen) { - uint8_t t_i = 0x00; - uint16_t t_crc16 = 0x0000; - uint8_t message_len = 0x00; - - message_len = pLen+11; - if ( (spi_post_buf.used_buffer_length+message_len) > FIFO_BUFFER_OVERLOAD ) { - // Over buffer, ERROR! - return 1; - } - // Assembling a message for sending out - t_message[0] = 0x7E; - t_message[1] = my_node; - t_message[2] = source_address; - t_message[3] = pLen+3; - t_message[4] = command>>8; - t_message[5] = command; - t_message[6] = pLen; - for ( t_i = 0; t_i < pLen; t_i++ ) - t_message[7+t_i] = pData[t_i]; - t_crc16 = np_function_crc_calculate(&t_message[1], pLen+6); - t_message[7+pLen] = t_crc16>>8; - t_message[8+pLen] = t_crc16; - t_message[9+pLen] = 0x7E; - t_message[10+pLen] = '$'; //keep first TX byte of next communication is '$' .Meaningless on here - - // Fill in the information into the POST FIFO structure - spi_post_buf.used_buffer_length += message_len; - spi_post_buf.message_len[spi_post_buf.fillin_message_pointer++] = message_len; - if ( spi_post_buf.fillin_message_pointer > FIFO_MESSAGE_OVERLOAD ) { - spi_post_buf.fillin_message_pointer = 0; - } - t_i = 0; - // Caes if: - // The reset of the space need to put into the next buffer loop - // Case else: - // The reset of the space enough in the same buffer loop - if ( (spi_post_buf.fillin_buffer_pointer+message_len) > FIFO_BUFFER_OVERLOAD ) { - while ( spi_post_buf.fillin_buffer_pointer <= FIFO_BUFFER_OVERLOAD ) { - spi_post_buf.buffer[spi_post_buf.fillin_buffer_pointer++] = t_message[t_i++]; - message_len--; - } - spi_post_buf.fillin_buffer_pointer = 0; - while ( message_len ) { - spi_post_buf.buffer[spi_post_buf.fillin_buffer_pointer++] = t_message[t_i++]; - message_len--; - } - } else { - while ( message_len ) { - spi_post_buf.buffer[spi_post_buf.fillin_buffer_pointer++] = t_message[t_i++]; - message_len--; - } - } - - spi_post_buf.message_num++; - - return 0; -} - -/* - * Description: add one message into the FIFO buffer, but information especially to Gateway - * Parameter: - * command :The command of this message; - * pData :pointer of the new parameters inside the message, - * pLen :the length of the parameters - * Return: null - */ -uint8_t np_function_ncn_interface_post_message_to_station(uint16_t command, uint8_t *pData, uint8_t pLen) { - uint8_t t_i = 0x00; - uint16_t t_crc16 = 0x0000; - uint8_t message_len = 0x00; - - message_len = pLen+11; - if ( (spi_post_buf.used_buffer_length+message_len) > FIFO_BUFFER_OVERLOAD ) { - // Over buffer, ERROR! - return 1; - } - // Assembling a message for sending out - t_message[0] = 0x7E; - t_message[1] = my_node; - t_message[2] = 0x01; - t_message[3] = pLen+3; - t_message[4] = command>>8; - t_message[5] = command; - t_message[6] = pLen; - for ( t_i = 0; t_i < pLen; t_i++ ) - t_message[7+t_i] = pData[t_i]; - t_crc16 = np_function_crc_calculate(&t_message[1], pLen+6); - t_message[7+pLen] = t_crc16>>8; - t_message[8+pLen] = t_crc16; - t_message[9+pLen] = 0x7E; - t_message[10+pLen] = '$'; //keep first TX byte of next communication is '$' .Meaningless on here - - // Fill in the information into the POST FIFO structure - spi_post_buf.used_buffer_length += message_len; - spi_post_buf.message_len[spi_post_buf.fillin_message_pointer++] = message_len; - if ( spi_post_buf.fillin_message_pointer > FIFO_MESSAGE_OVERLOAD ) { - spi_post_buf.fillin_message_pointer = 0; - } - t_i = 0; - // Caes if: - // The reset of the space need to put into the next buffer loop - // Case else: - // The reset of the space enough in the same buffer loop - if ( (spi_post_buf.fillin_buffer_pointer+message_len) > FIFO_BUFFER_OVERLOAD ) { - while ( spi_post_buf.fillin_buffer_pointer <= FIFO_BUFFER_OVERLOAD ) { - spi_post_buf.buffer[spi_post_buf.fillin_buffer_pointer++] = t_message[t_i++]; - message_len--; - } - spi_post_buf.fillin_buffer_pointer = 0; - while ( message_len ) { - spi_post_buf.buffer[spi_post_buf.fillin_buffer_pointer++] = t_message[t_i++]; - message_len--; - } - } else { - while ( message_len ) { - spi_post_buf.buffer[spi_post_buf.fillin_buffer_pointer++] = t_message[t_i++]; - message_len--; - } - } - - spi_post_buf.message_num++; - - - return 0; -} - - -/* - * Description: unpack the message and process it, here is the core of the message(s), - * received -> understanding -> process - * Parameter: null - * Return: null - */ -void np_function_ncn_interface_parse(void) { - uint16_t t_crc_value = 0x0000; - uint16_t command = 0x0000; - - np_function_ncn_interface_get_message(t_message); - - // CRC16 Check - t_crc_value = t_message[4+t_message[3]]; - t_crc_value = (t_crc_value<<8)|t_message[5+t_message[3]]; - if ( np_function_crc_check(&t_message[1], t_message[3]+3, t_crc_value) ) { - // CRC16 NOT pass - return; - } - - // If this message is for me? - if ( t_message[2] != my_node ) { - // NOT for me - return; - } - - np_function_set_post_address(t_message[1]); - - // Only one command inside payload, if more than one, this logic need to change - command = t_message[4]; - command = (command<<8)|t_message[5]; - - // Developer command code from 0x2700-0x27ff - if ( (command >= 0x2700)&&(command <= 0x27ff) ) { - uint8_t t_i = 0; - uint8_t t_we_have_response = FALSE; - // Search and run the right function - for ( ; t_i < mdk_cmd_func_number; t_i++ ) { - if ( command == mdk_cmd_func_table_ptr[t_i].command ) { - mdk_cmd_func_table_ptr[t_i].function(&t_message[7], t_message[6]); - t_we_have_response = TRUE; - } - } - // If the command is not existing, then we need to response a ERROR - if ( t_we_have_response == FALSE ) { - uint8_t data[2]; - data[0] = command >> 8; - data[0] = command & 0xFF; - np_function_ncn_interface_post_message(ERROR_NO_CMD, data, 0x02); - } - } else { - // NP define command code - switch (command) { - case ASK_APP_INFO:{ - np_function_ncn_interface_post_message(ANS_APP_INFO, - mdk_app_version, 0x03); - } - break; - - case REQ_INTO_BSL:{ - RAM_SOURCE_ADDR = source_address; - flag_jump_bsl = 0x01; - } - break; - - case CMD_MDK_REQ_START: { - uint8_t data = SUCCESS; -// np_api_start(); - np_function_ncn_interface_post_message(CMD_MDK_RSP_START, &data, - 0x01); - break; - } - case CMD_MDK_REQ_STOP: { - uint8_t data = SUCCESS; -// np_api_stop(); - np_function_ncn_interface_post_message(CMD_MDK_RSP_STOP, &data, - 0x01); - break; - } - - case CMD_MDK_REQ_LPM4:{ - uint8_t data = SUCCESS; -// if(t_message[7] == 1){ -// np_function_lpm4_automode_set(); -// if(np_function_pm_mode_get() & LPM_0){ -// np_function_set_run_the_loop(TRUE); -// } -// }else if(t_message[7] == 0){ -// if(developer_lpm4_setting == 0){ -// np_function_lpm4_automode_clear(); -// } -// } - np_function_ncn_interface_post_message(CMD_MDK_RSP_LPM4, &data,0x01); - } - break; - - case ASK_STATUS: { - uint8_t t_data[1] = { 0x01 }; - np_function_ncn_interface_post_message(ANS_STATUS, t_data, 0x01); - break; - } - - case REQ_TEST_COMM:{ - #if CASE_TEST_CODE_ENABLE - #else - //MDK version - np_function_ncn_interface_post_message(RSP_TEST_COMM,mdk_mdk_version, 0x03); - #endif - } - break; - - default: { - uint8_t data[2]; - data[0] = command >> 8; - data[1] = command; - np_function_ncn_interface_post_message(ERROR_NO_CMD, data, 0x02); - break; - } - } - } -} - -/* - * Description: the message handler - * Parameter: null - * Return: null - */ -void np_function_ncn_interface_loop(void) { - if ( spi_get_buf.message_num ) { - np_function_ncn_interface_parse(); - spi_get_buf.message_num--; - } - if ( spi_status == SPI_BUSY ) - return; - if ( spi_post_buf.message_num ) { - if ( np_app_spi_is_aviable() ) { - np_app_spi_apply_post(); - } - } -} -
--- a/nexpaq_mdk_src/source/np_app_ncn_interface.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* - * np_app_ncn_interface.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_APP_NCN_INTERFACE_H_ -#define NP_APP_NCN_INTERFACE_H_ - -#include <stdint.h> -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum RESULT_WORD { - SUCCESS = 0x00, - ERROR = 0x01 -}result_Word; - -extern uint8_t mdk_app_version[3] ; -extern uint8_t mdk_mdk_version[3]; -extern uint8_t source_address; -extern volatile uint8_t flag_jump_bsl; -extern uint8_t my_node; - -void np_function_ncn_interface_loop(void); -void np_function_set_post_address(uint8_t address); -uint8_t np_function_ncn_interface_get_message(uint8_t *pData); -uint8_t np_function_ncn_interface_post_message(uint16_t command, uint8_t *pData, uint8_t pLen); -uint8_t np_function_ncn_interface_post_message_to_station(uint16_t command, uint8_t *pData, uint8_t pLen); -//extern void np_api_start(); -//extern void np_api_stop(); - -#ifdef __cplusplus -} -#endif - -#endif /* NP_APP_NCN_INTERFACE_H_ */
--- a/nexpaq_mdk_src/source/np_app_pm.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* - * np_app_pm.c - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#include <stdint.h> - -uint8_t run_the_loop = 0; -uint8_t flag_on_lpm = 0; -uint8_t developer_lpm4_setting = 0; //record the developer setting about the lpm4 -uint8_t wakeup_run_loop_flag = 0; -#if 0 -extern void np_api_enter_lpm4_work();// for developer -extern void np_api_exit_lpm4_work(); // for developer - -void np_function_set_run_the_loop(uint8_t t_data){ - run_the_loop = t_data; -} - -uint8_t np_function_get_run_the_loop(void){ - return run_the_loop; -} - -/* - * Description: set auto enter lpm0 mode - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_function_lpm0_automode_set(void) { - np_driver_lpm0_automode_set(); -} - -/* - * Description: exit auto exit lpm0 mode - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_function_lpm0_automode_clear(void) { - np_driver_lpm0_automode_clear(); -} - -void np_function_enter_lpm4_work(void){ - np_api_enter_lpm4_work(); - np_driver_spi_function_close(); - np_driver_enable_pin13_io_interrupt(); -} - -void np_function_exit_lpm4_work(void){ - np_driver_spi_function_open(); - np_api_exit_lpm4_work(); - //np_driver_disalbe_pin13_io_interrupt(); -} - -uint8_t flag_lpm4_enter = 0; -/* - * Description: run the power save mode loop - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_function_pm_loop(void) { - if(wakeup_run_loop_flag){ - return; - } - - if((np_function_pm_mode_get() & LPM_4)){ - //v1_0_3--1 please reference the version.txt - if((spi_status != SPI_BUSY)&&(np_app_spi_is_aviable()) - &&(spi_post_buf.message_num == 0)&&(spi_get_buf.message_num == 0)){ - - flag_on_lpm = LPM_4; - np_function_enter_lpm4_work(); - if(wakeup_run_loop_flag){ - np_function_exit_lpm4_work(); - }else{//bug: if io interrupt wakeup on here, the module will no way to process. - __bis_SR_register(LPM4_bits); - } - - flag_on_lpm = LPM_NONE; - } - }else if (np_function_pm_mode_get() & LPM_0){ - flag_on_lpm = LPM_0; - __bis_SR_register(LPM0_bits); - flag_on_lpm = LPM_NONE; - } -} - -/* - * Description: set auto enter lpm0 mode - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_function_lpm4_automode_set(void) { - np_driver_lpm4_automode_set(); -} - -/* - * Description: exit auto exit lpm0 mode - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_function_lpm4_automode_clear(void) { - np_driver_lpm4_automode_clear(); -} - - -/* - * Description: get the mode of auto lpm mode (lpm0/lpm4) - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -uint8_t np_function_pm_mode_get(void) { - return np_driver_lpm_mode_get(); -} - -uint8_t np_function_get_lpm_status(void){ - return flag_on_lpm; -} - -#endif
--- a/nexpaq_mdk_src/source/np_app_pm.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -/* - * np_app_pm.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_APP_PM_H_ -#define NP_APP_PM_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -extern uint8_t wakeup_run_loop_flag; -extern uint8_t flag_on_lpm; -extern uint8_t developer_lpm4_setting; - -void np_function_set_run_the_loop(uint8_t t_data); -uint8_t np_function_get_run_the_loop(void); -void np_function_lpm0_automode_set(void); -void np_function_lpm0_automode_clear(void); -uint8_t np_function_pm_mode_get(void); -void np_function_pm_loop(void); -void np_function_lpm4_automode_set(void) ; -void np_function_lpm4_automode_clear(void) ; -void np_function_enter_lpm4_work(void); -void np_function_exit_lpm4_work(void); -uint8_t np_function_get_lpm_status(void); - -#if 0 -void np_api_start(); //unused -void np_api_stop(); //unused - -//The low power consumption of np_module_mdk_v1.h -//low power consumption function. Function temporarily don't open. -typedef enum{ - LPM_NONE = 0x00, - LPM_0 = 0x01, - LPM_1 = 0x02, //unused - LPM_2 = 0x04, //unused - LPM_3 = 0x08, //unused - LPM_4 = 0x10 -}E_LPM; - -void np_api_enter_lpm4_work(); -void np_api_exit_lpm4_work(); - -/* - * Description: set auto power lpm0 mode - * Parameter: null - * Return: null - */ -void np_api_lpm0_automode_set(void); -/* - * Description: clear auto power lpm0 mode - * Parameter: null - * Return: null - */ -void np_api_lpm0_automode_clear(void); - - -/* - * Description: set auto power lpm4 mode - * Parameter: null - * Return: null - */ -void np_api_lpm4_automode_set(void) ; - -/* - * Description: clear auto power lpm4 mode. only clear the lpm4 enable flag. - It is effective when software is not on lpm4. - You can use "np_api_lpm4_automode_clear_and_wakeup() " to clear the lpm4 mode when wakeup lpm4 by io interrupt. - * Parameter: null - * Return: null - */ -void np_api_lpm4_automode_clear(void); - -/* - * Description: clear auto power lpm4 mode and exit lpm4 sleep status. - The api is used at io interrupt for wakeup lpm4 and clear lpm4 mode. - The api only available within interrupt routines. - * Parameter: null - * Return: null - */ -#define np_api_lpm4_automode_clear_and_wakeup() do{\ - if (np_api_lpm_status_get() == LPM_4){\ - np_mdk_exit_lpm4_work();\ - __bic_SR_register_on_exit(LPM4_bits);\ - }\ - np_mdk_lpm4_automode_clear_flag();\ - np_mdk_start_loop_head_set();\ - }while(0) - -/* - * Description: API to run the loop once by wake up lpm0/lpm4 once.After the loop once, software will enter lpm again. - f The api only available within interrupt routines. - If you want to exit lpm4, please using the api to wakeup lpm4 when io interrupt is comming. - The api also can wakeup lpm0. - * Parameter: null - * Return: null - */ -#define np_api_wake_up_lpm_once() do{\ - if (np_api_lpm_status_get() == LPM_4){\ - np_mdk_exit_lpm4_work();\ - __bic_SR_register_on_exit(LPM4_bits);\ - }else if(np_api_lpm_mode_get() & LPM_0){np_mdk_set_run_the_loop(1);}\ - np_mdk_start_loop_head_set();\ - }while(0) - -/* -* Description: run the loop once by wake up lpm0 once.After the loop once, software will enter lpm again. -* Parameter: null -* Return: null -*/ -#define np_api_wake_up_lpm0_once() do{\ - if(np_api_lpm_mode_get() & LPM_0){np_mdk_set_run_the_loop(1);}\ - }while(0) - - -/* - * Description: get power status(), now software sleep at LPM_X; - * Parameter: null - * Return: E_LPM - */ -uint8_t np_api_lpm_status_get(void); - -/* - * Description: get the power mode, please reference "E_LPM"; - * Parameter: null - * Return: pm mode.Such as: - if only set the lpm0/lpm4 mode, return "lpm0"/"lpm4". - if set the lpm0 and lpm4, return "lpm0 | lpm4". - */ -uint8_t np_api_lpm_mode_get(void); - -/******************The following API functions are not used by developer. please not used it*******************/ -void np_mdk_lpm4_automode_clear_flag(void); -void np_mdk_exit_lpm4_work(void); -void np_mdk_set_run_the_loop(uint8_t t_data); -void np_mdk_start_loop_head_set(void); -/*********************************************************************************************************/ -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* NP_APP_PM_H_ */
--- a/nexpaq_mdk_src/source/np_app_spi.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* - * np_app_spi.c - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#include "np_driver_spi.h" -#include "np_app_spi.h" -#include "mxc_sys.h" - -typedef enum -{ - SPI_IS_READ = 0x00, - SPI_IS_WRITE = 0x80 -}E_SPIReadWrite; - -uint8_t spi_count = 0x00; // The counter inside the SPI transfer process -uint8_t spi_status = SPI_FREE; // SPI_FREE ( we can use the SPI to transfer message), SPI_BUSY (we can NOT use the SPI to transfer message) -uint8_t spi_rw = 0x00; // To record this SPI transfer is a POST or GET process -// The fifo buffer structure design for POST/GET message(s) -FIFO_GET spi_get_buf = { {0x00}, {0x00}, 0x00, 0x00, 0x00, 0x00, 0x00 }; -FIFO_POST spi_post_buf = { {0x00}, {0x00}, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -const gpio_cfg_t gpio_req_spi[] = { - { PORT_4, PIN_3, GPIO_FUNC_GPIO, GPIO_PAD_INPUT_PULLUP}, /* Input*/ - { PORT_4, PIN_3, GPIO_FUNC_GPIO, GPIO_PAD_NORMAL}, /* Output*/ - }; - -/* - * Description: to get the message from spi reading data - * Parameter : spi_read-the data received by spi slave - * Return : null - */ -void np_app_spis_message (uint8_t spi_read) { - - if ( (spi_status == SPI_FREE)&&(spi_read == '$') ) { //Check the first byte is '$'(0x24). - spi_status = SPI_BUSY; - spi_count = 0x00; - np_driver_spis_put_byte_to_tx_buff(0); - } else if ( spi_status == SPI_BUSY ) { - if ( spi_count == 0x00 ) { - // Get this byte to know if Gateway want to POST/SET message - spi_rw = spi_read; - if ( spi_rw == SPI_IS_WRITE ) { - // Send the high Byte of message length, but the message for module will least then 64 bytes. - np_driver_spis_put_byte_to_tx_buff(0); - } else if ( spi_rw == SPI_IS_READ ) { - np_driver_spis_put_byte_to_tx_buff(0); - } else { - np_driver_spis_put_byte_to_tx_buff(0); - spi_status = SPI_FREE; - } - } else if ( spi_count == 0x01 ) { - if ( spi_rw == SPI_IS_WRITE ) { - if ( spi_post_buf.message_num ) { - // Send the low Byte of message length - np_driver_spis_put_byte_to_tx_buff(spi_post_buf.message_len[spi_post_buf.post_message_pointer]-1); - } else { - np_driver_spis_put_byte_to_tx_buff(0); - spi_status = SPI_FREE; - } - } else if ( spi_rw == SPI_IS_READ ) { - np_driver_spis_put_byte_to_tx_buff(0); - // Received the high Byte of message length, but the message for module will least then 64 bytes. - // So we will skip here - } - } else if ( spi_count == 0x02 ) { - if ( spi_rw == SPI_IS_WRITE ) { - // Send the first byte here - np_driver_spis_put_byte_to_tx_buff(spi_post_buf.buffer[spi_post_buf.post_buffer_pointer++]); - // Do NOT over the buffer - if ( spi_post_buf.post_buffer_pointer > FIFO_BUFFER_OVERLOAD ) - spi_post_buf.post_buffer_pointer = 0; - } else if ( spi_rw == SPI_IS_READ ) { - np_driver_spis_put_byte_to_tx_buff(0); - // Received the low Byte of message length - spi_get_buf.message_len[spi_get_buf.get_message_pointer] = spi_read; - } - } else { - if ( spi_rw == SPI_IS_WRITE ) { - // Send the first byte here - np_driver_spis_put_byte_to_tx_buff(spi_post_buf.buffer[spi_post_buf.post_buffer_pointer++]); - // Do NOT over the buffer - if ( spi_post_buf.post_buffer_pointer > FIFO_BUFFER_OVERLOAD ) - spi_post_buf.post_buffer_pointer = 0; - - if ( spi_post_buf.message_len[spi_post_buf.post_message_pointer]+1 <= spi_count ) { - // If we do NOT sent more bytes in 1ms, means we finished the sending - spi_status = SPI_FREE; - - spi_post_buf.used_buffer_length -= spi_post_buf.message_len[spi_post_buf.post_message_pointer]; - spi_post_buf.post_message_pointer++; - // Do NOT over the buffer - if ( spi_post_buf.post_message_pointer > FIFO_MESSAGE_OVERLOAD ) - spi_post_buf.post_message_pointer = 0; - spi_post_buf.message_num--; - } - } else if ( spi_rw == SPI_IS_READ ) { - // Start to received the message body - spi_get_buf.buffer[spi_get_buf.get_buffer_pointer++] = spi_read; - // Do NOT over the buffer - if ( spi_get_buf.get_buffer_pointer > FIFO_BUFFER_OVERLOAD ) - spi_get_buf.get_buffer_pointer = 0; - - if ( spi_get_buf.message_len[spi_get_buf.get_message_pointer]+2 <= spi_count ) { - // If we do NOT received more bytes in 1ms, means we finished the last receiving - // Then free the SPI and add one more message - spi_status = SPI_FREE; - - spi_get_buf.used_buffer_length += spi_get_buf.message_len[spi_get_buf.get_message_pointer]; - spi_get_buf.get_message_pointer++; - // Do NOT over the buffer - if ( spi_get_buf.get_message_pointer > FIFO_MESSAGE_OVERLOAD ) - spi_get_buf.get_message_pointer = 0; - spi_get_buf.message_num++; - np_driver_spis_put_byte_to_tx_buff('$'); //keep first TX byte of next communication is '$'.Meaningless on here - }else{ - np_driver_spis_put_byte_to_tx_buff(0); - } - } - } - spi_count++; - } -} - - -/* - * Description: check the CS pin if it got selected, if yes, we could not use it, SPI bus is busy - * Parameter : null - * Return : 0x01-BUSY , 0x00-FREE - */ -uint32_t np_app_spi_is_aviable(void) { - #if 0//mxc32625 high level available - return GPIO_InGet(&gpio_req_spi[0]); - #else - return (!GPIO_InGet(&gpio_req_spi[0])); - #endif -} - -/* - * Description: give a pulse on the SPI bus, signal to Gateway,spi slave want to have a spi comunication. - * Parameter : null - * Return : null - */ -void np_app_spi_apply_post(void) { - - GPIO_Config(&gpio_req_spi[1]);//Output - - GPIO_OutSet(&gpio_req_spi[1]); - GPIO_OutClr(&gpio_req_spi[1]); - - GPIO_Config(&gpio_req_spi[0]);//Input -} -
--- a/nexpaq_mdk_src/source/np_app_spi.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* - * np_app_spi.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_APP_SPI_H_ -#define NP_APP_SPI_H_ - -#include <stdint.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#define FIFO_SPI_DATA_LENGTH 80 -#define FIFO_BUFFER_OVERLOAD FIFO_SPI_DATA_LENGTH-1 -#define FIFO_MESSAGE_LENGTH 8 -#define FIFO_MESSAGE_OVERLOAD FIFO_MESSAGE_LENGTH-1 -#define SPI_BUSY 0x01 -#define SPI_FREE 0x00 -typedef struct { - uint8_t buffer[FIFO_SPI_DATA_LENGTH]; - uint8_t message_len[FIFO_MESSAGE_LENGTH]; - uint8_t get_buffer_pointer; - uint8_t readout_buffer_pointer; - uint8_t get_message_pointer; - uint8_t readout_message_pointer; - uint8_t message_num; - uint8_t used_buffer_length; -} FIFO_GET; -typedef struct { - uint8_t buffer[FIFO_SPI_DATA_LENGTH]; - uint8_t message_len[FIFO_MESSAGE_LENGTH]; - uint8_t fillin_buffer_pointer; - uint8_t post_buffer_pointer; - uint8_t fillin_message_pointer; - uint8_t post_message_pointer; - uint8_t message_num; - uint8_t used_buffer_length; -} FIFO_POST; - -extern FIFO_GET spi_get_buf; -extern FIFO_POST spi_post_buf; -extern uint8_t spi_status; - -void np_app_spis_message (uint8_t spi_read); -void np_app_spi_apply_post(void); -uint32_t np_app_spi_is_aviable(void); - -#ifdef __cplusplus -} -#endif - -#endif /* NP_APP_SPI_H_ */
--- a/nexpaq_mdk_src/source/np_command.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* - * np_comand.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_COMAND_H_ -#define NP_COMAND_H_ - -typedef enum COMMAND_WORD { - //All the Lowest bit of the request command is 0, - //and Lowest bit of it's response command is 1, - //If the Lowest bit of the command is 1,means that it doesn't need a response command. - REQ_INTO_APP = 0x0800, //0x07D3 - RSP_INTO_APP = 0x0801, - REQ_EARSE_FLASH = 0x0802, //0x07D4 - RSP_EARSE_FLASH = 0x0803, - REQ_WRITE_FLASH = 0x0804, //0x07D5 - RSP_WRITE_FLASH = 0x0805, - REQ_INTO_BSL = 0x0806, //0x07D6 - RSP_INTO_BSL = 0x0807, - ASK_UUID = 0x0808, //0x07E7 - ANS_UUID = 0x0809, //0x07EA - ASK_BSL_INFO = 0x080A, //0x07E8 - ANS_BSL_INFO = 0x080B, //0x07EB - ASK_APP_INFO = 0x080C, //0x07E9 - ANS_APP_INFO = 0x080D, //0x07EC - ASK_STATUS = 0x080E, //0x07C0 - ANS_STATUS = 0x080F, //0x07C1 - REQ_EARSE_APP_AND_INFO = 0x0810, - RSP_EARSE_APP_AND_INFO = 0x0811, - - CMD_MDK_REQ_START = 0x0812, - CMD_MDK_RSP_START = 0x0813, - CMD_MDK_REQ_STOP = 0x0814, - CMD_MDK_RSP_STOP = 0x0815, - CMD_MDK_REQ_LPM4 = 0x0816, - CMD_MDK_RSP_LPM4 = 0X0817, - - ASK_MODULE_NODE = 0x0900, //0x07D1 - ANS_MODULE_NODE = 0x0901, - ASK_MODULE_LAST_CTR = 0x0902, //0x07C6 - ANS_MODULE_LAST_CTR = 0x0903, //0x07C7 - REQ_KILL_MODULE = 0x0904, //0x0802 - RSP_KILL_MODULE = 0x0905, - - REQ_ALLOT_NODE = 0x0B00, //0x07D0 - RSP_ALLOT_NODE = 0x0B01, - ASK_MODULE_NUM = 0x0B02, //0x07EE - ANS_MODULE_NUM = 0x0B03, //0x07EF - REQ_REGISTER_USB = 0x0B04, - RSP_REGISTER_USB = 0x0B05, - REQ_CANCEL_USB = 0x0B06, - RSP_CANCEL_USB = 0x0B07, - REQ_UPDATE_PH_POWER = 0x0B08, - RSP_UPDATE_PH_POWER = 0x0B09, - - CTR_BLE_SWITCH = 0x0A00, //0x07D8 - STATUS_BLE_SWITCH = 0x0A02, //0x07D9 - CASE_APPLY_INTO_APP = 0x0A04, //0x07E3 - - REQ_USB_SW = 0x1F00, - RSP_USB_SW = 0x1F01, - /*Data message DOWNLOAD*/ - REQ_DOWNLOAD_GROUP = 0x2700, - REQ_DOWNLOAD = 0x2700, //0x0801 - RSP_DOWNLOAD = 0x2701, - REQ_DOWNLOAD_02 = 0x2702, //0x0811 - RSP_DOWNLOAD_02 = 0x2703, - REQ_DOWNLOAD_04 = 0x2704, //0x0812 - RSP_DOWNLOAD_04 = 0x2705, - REQ_DOWNLOAD_06 = 0x2706, - RSP_DOWNLOAD_06 = 0x2707, - /*Data message UPLOAD*/ - REQ_UPLOAD = 0x2800, //0x0901 - // RSP_UPLOAD = 0x1281, - BAT_POWER_MSG = 0x4600, //0x0901(Now just for battery message) - CASE - REQ_BAT_CTR = 0x4602, //0x0801(Now just for control battery) - CASE - RSP_BAT_CTR = 0x4603, - - /*ERROR cmd*/ - ERROR_NO_CMD = 0x0480, //Answer if can not parse the command. - - REQ_TEST_COMM = 0x5100, // 1.get mdk version ; 2.for Pc_software using ,testing communication and reback data. default 1. - RSP_TEST_COMM = 0x5101, - REQ_SYSTEM_SWITCH = 0x1F1D, //only for test - RSP_SYSTEM_SWITCH = 0x1F1E - -} COMMAND_words; - -#endif /* NP_COMMAND_H_ */
--- a/nexpaq_mdk_src/source/np_config.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* - * np_config.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_CONFIG_H_ -#define NP_CONFIG_H_ -//np_config.h can't be used on head file - -#include <stdio.h> -#include <stdint.h> -#include "mxc_config.h" -#include "clkman.h" -#include "ioman.h" -#include <string.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#define RAM_SOURCE_ADDR *(uint32_t*)(0x20000000) -#define RAM_MY_NODE *(uint32_t*)(0x20000004) -// *(uint32_t*)(0x20000008) //the address which save the bootloader address for jumping - - -#ifdef __cplusplus -} -#endif - -#endif /* NP_CONFIG_H_ */
--- a/nexpaq_mdk_src/source/np_driver_pm.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/* - * np_driver_pm.c - * - * Created on: 2016Äê7ÔÂ14ÈÕ - * Author: Alan.Lin - */ - -#if 0 -uint8_t mdk_auto_lpm_flag = 0; - -/* - * Description: enable the global interrupt - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_driver_pm_gie_set(void) { - __bis_SR_register(GIE); -} - -/* - * Description: disable the global interrupt - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_driver_pm_gie_clear(void) { - __bic_SR_register(GIE); -} - -/* - * Description: entry auto power save mode - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_driver_lpm0_automode_set(void) { - mdk_auto_lpm_flag |= LPM_0; -} - -/* - * Description: exit auto power save mode - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -void np_driver_lpm0_automode_clear(void) { - mdk_auto_lpm_flag &= ~LPM_0; -} - -/* - * Description: enter auto power lpm4 mode - * Parameter: null - * Return: null - * - * Author: Alan.Lin - * - * Copyright: NexPack.Ltd - */ -void np_driver_lpm4_automode_set(void){ - mdk_auto_lpm_flag |= LPM_4; -} -/* - * Description: exit auto power lpm4 mode - * Parameter: null - * Return: null - * - * Author: Alan.Lin - * - * Copyright: NexPack.Ltd - */ - -void np_driver_lpm4_automode_clear(void){ - mdk_auto_lpm_flag &= ~LPM_4; -} - -/* - * Description: get the status of auto power save mode - * Parameter: null - * Return: null - * - * Author: Coody.Liu - * - * Copyright: NexPack.Ltd - */ -uint8_t np_driver_lpm_mode_get(void) { - return mdk_auto_lpm_flag; -} - -#endif
--- a/nexpaq_mdk_src/source/np_driver_pm.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* - * np_driver_pm.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_DRIVER_PM_H_ -#define NP_DRIVER_PM_H_ - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef enum{ - LPM_NONE = 0x00, - LPM_0 = 0x01, - LPM_1 = 0x02, - LPM_2 = 0x04, - LPM_3 = 0x08, - LPM_4 = 0x10 -}E_LPM; - -void np_driver_lpm0_automode_set(void); -void np_driver_lpm0_automode_clear(void); -uint8_t np_driver_lpm_mode_get(void); -void np_driver_pm_gie_set(void); -void np_driver_pm_gie_clear(void); -void np_driver_lpm4_automode_set(void); -void np_driver_lpm4_automode_clear(void); - -#ifdef __cplusplus -} -#endif - -#endif /* NP_DRIVER_PM_H_ */
--- a/nexpaq_mdk_src/source/np_driver_spi.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * np_driver_spi.c - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#include "np_config.h" -#include "spis.h" -#include "np_driver_spi.h" -#include "np_app_spi.h" - -int driver_spi_slave_initial(void){ - uint8_t spis_req_value = 0x10; - //IO INITIAL - MXC_IOMAN->spis_req = spis_req_value; - //IO initial IS OK - if(spis_req_value != MXC_IOMAN->spis_ack){ - return E_BUSY; - } - CLKMAN_SetClkScale((clkman_clk_t)(CLKMAN_CLK_SPIS), CLKMAN_SCALE_DIV_1); - - //spis function intial - MXC_SPIS->gen_ctrl = 0; - MXC_SPIS->gen_ctrl = (MXC_F_SPIS_GEN_CTRL_SPI_SLAVE_EN | MXC_F_SPIS_GEN_CTRL_TX_FIFO_EN | - MXC_F_SPIS_GEN_CTRL_RX_FIFO_EN |(0x01 << MXC_F_SPIS_GEN_CTRL_SPI_MODE_POS)); - - MXC_SPIS_FIFO->tx_8[0] = '$'; //keep first TX byte of next communication is '$'.Meaningless on here - - MXC_SPIS->fifo_ctrl &= (~MXC_F_SPIS_FIFO_CTRL_RX_FIFO_AF_LVL); - MXC_SPIS->fifo_ctrl |= (0x0 << MXC_F_SPIS_FIFO_CTRL_RX_FIFO_AF_LVL_POS); - - MXC_SPIS->inten = MXC_F_SPIS_INTEN_RX_FIFO_AF;// | MXC_F_SPIS_INTEN_TX_FIFO_AE; - NVIC_EnableIRQ(SPIS_IRQn); - - return E_NO_ERROR; -} - -void np_driver_spis_put_byte_to_tx_buff(uint8_t t_tx_byte){ - MXC_SPIS_FIFO->tx_8[0] = t_tx_byte; -} - -//------------------------interrupt function--------------------------------- -void SPIS_IRQHandler(void){ - uint32_t spis_int_flags = MXC_SPIS->intfl; - - if (spis_int_flags & MXC_F_SPIS_INTFL_RX_FIFO_AF) { - // Check for data - while(MXC_SPIS->fifo_stat & MXC_F_SPIS_FIFO_STAT_RX_FIFO_USED) { - np_app_spis_message(MXC_SPIS_FIFO->rx_8[0]); - } - MXC_SPIS->intfl = MXC_F_SPIS_INTFL_RX_FIFO_AF; - } -}
--- a/nexpaq_mdk_src/source/np_driver_spi.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* - * np_driver_spi.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_DRIVER_SPI_H_ -#define NP_DRIVER_SPI_H_ - -#include <stdint.h> - -#ifdef __cplusplus -extern "C" { -#endif - - -int driver_spi_slave_initial(void); -void np_driver_spis_put_byte_to_tx_buff(uint8_t t_tx_byte); - -#ifdef __cplusplus -} -#endif - - -#endif /* NP_DRIVER_SPI_H_ */
--- a/nexpaq_mdk_src/source/np_driver_timer.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* - * np_driver_timer.c - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#include "np_config.h" -#include "tmr_regs.h" -#include "mxc_sys.h" -#include "np_driver_timer.h" -#include "np_app_ncn_interface.h" - -void TMR0_IRQHandler(void){ - MXC_TMR0->intfl = MXC_TMR0->intfl; - - np_function_ncn_interface_loop(); - -// if ( !(np_function_pm_mode_get() & LPM_0)) { -// __bic_SR_register_on_exit(LPM0_bits); -// wakeup_run_loop_flag = 1; -// } else if ( np_function_get_run_the_loop()) { -// __bic_SR_register_on_exit(LPM0_bits); -// wakeup_run_loop_flag = 1; -// np_function_set_run_the_loop(FALSE); -// } -} - - -//32 bit timer0 initial, 1 MS trigger interrupt, the lowest priority of interrupt -void Timer0_initial(void){ - MXC_TMR0->ctrl &= ~MXC_F_TMR_CTRL_ENABLE0; - - MXC_TMR0->ctrl &= ~MXC_F_TMR_CTRL_TMR2X16; - MXC_TMR0->ctrl |= (0x01 << MXC_F_TMR_CTRL_MODE_POS)|(12 << MXC_F_TMR_CTRL_PRESCALE_POS); - MXC_TMR0->count32 = 24; - MXC_TMR0->term_cnt32 = 24; - MXC_TMR0->inten |= MXC_F_TMR_INTEN_TIMER0; - - MXC_TMR0->ctrl |= MXC_F_TMR_CTRL_ENABLE0; - - NVIC_SetPriority(TMR0_0_IRQn,15); - NVIC_EnableIRQ(TMR0_0_IRQn); -}
--- a/nexpaq_mdk_src/source/np_driver_timer.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/* - * np_driver_timer.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_DRIVER_TIMER_H_ -#define NP_DRIVER_TIMER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - - -void Timer0_initial(void); - -#ifdef __cplusplus -} -#endif - -#endif /* NP_DRIVER_TIMER_H_ */
--- a/nexpaq_mdk_src/source/np_system.c Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,201 +0,0 @@ -/* - * np_system.c - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#include "np_config.h" -#include "np_driver_timer.h" -#include "np_driver_spi.h" -#include "np_app_spi.h" -#include "np_app_ncn_interface.h" -#include "spis.h" -#include "np_system.h" -#include "np_command.h" - -extern const gpio_cfg_t gpio_req_spi[]; - -/* Description: delay function - * t_ms: the time for delay.MS as the unit - * - */ -void delay_ms(uint32_t t_ms) -{ - while(t_ms) { - SYS_SysTick_Delay(96000); - t_ms--; - } -} - -/* - * Description: disable all interrupt used on MDK - * Parameter : null - * Return : null - */ -void np_system_disable_interrupt(void) -{ - NVIC_DisableIRQ(TMR0_0_IRQn); - NVIC_DisableIRQ(SPIS_IRQn); -} - -/* - * Description: Setting the version of MDK - * Parameter: mdk version - * Return: null - */ -void np_function_set_mdk_version(uint8_t HV, uint8_t MV, uint8_t LV) -{ - mdk_mdk_version[0] = HV; - mdk_mdk_version[1] = MV; - mdk_mdk_version[2] = LV; -} - -/* - * Description: MDK initial - * Parameter : null - * Return : null - */ -void np_mdk_setup(void) -{ - int t_reback = E_BUSY; - - GPIO_Config(&gpio_req_spi[0]); //Input - //ignore clock initial - while(t_reback != E_NO_ERROR) { - t_reback = driver_spi_slave_initial(); - delay_ms(10); - } - - Timer0_initial(); - np_function_set_post_address(RAM_SOURCE_ADDR); - - spi_status = SPI_FREE; - my_node = RAM_MY_NODE; -} - -/* - * Description: system initial,include app initial and mdk initial - * Parameter : null - * Return : null - */ -void np_system_initial(app_function np_app_setup) -{ - uint8_t answer = 0; - - np_function_set_mdk_version(1,0,7); - np_mdk_setup(); - np_app_setup(); - np_function_ncn_interface_post_message(RSP_INTO_APP, &answer, 1); - flag_jump_bsl = 0; -} - -/* - * Description: mdk initialization - * Parameter : null - * Return : null - */ -void np_sys_init() -{ - np_function_set_mdk_version(1,0,7); - np_mdk_setup(); -#ifdef DBG_MSG - printf("NP System Initialized\n\r"); -#endif -} - -/* - * Description: signal when system is ready - * Parameter : null - * Return : null - */ -void np_sys_start() -{ - uint8_t answer = 0; - np_function_ncn_interface_post_message(RSP_INTO_APP, &answer, 1); - flag_jump_bsl = 0; -#ifdef DBG_MSG - printf("NP System Started\n\r"); -#endif -} - -/* - * Description: function to check and jump to boot loader - * Parameter : null - * Return : null - */ -#ifdef TOOLCHAIN_ARM_STD -register int _r0 __asm("r0"); -register int _pc __asm("pc"); -#endif - -void np_sys_bsl_chk() -{ - if( flag_jump_bsl > 0x00 ) { - flag_jump_bsl = 0x00; - np_system_disable_interrupt(); -#ifdef DBG_MSG - printf("Entering Bootloader\n\r"); -#endif -#ifdef TOOLCHAIN_ARM_STD - __asm { - mov _r0, #0x20000008 - ldr _pc, [_r0] - } - } - __asm { - mov _r0, _r0 - mov _r0, _r0 - } -#else - __asm volatile( - " LDR R0, =0x20000008 \n" - " LDR PC, [R0] \n" - ); - } - __asm volatile("nop \n"); - __asm volatile("nop \n"); -#endif -} - -/* - * Description: system loop,software will run the function forever when software is on app mode. - * Parameter : null - * Return : null - */ -void np_system_loop(app_function np_api_loop) -{ - while(1) { - np_api_loop(); - //jumping to the bootloader - if( flag_jump_bsl > 0x00 ) { - flag_jump_bsl = 0x00; - np_system_disable_interrupt(); - -#ifdef DBG_MSG - printf("Entering NP Bootloader\n\r"); -#endif -#ifdef TOOLCHAIN_ARM_STD - __asm { - mov _r0, #0x20000008 - ldr _pc, [_r0] - } - } - __asm { - mov _r0, _r0 - mov _r0, _r0 - } -#else - __asm volatile( - " LDR R0, =0x20000008 \n" - " LDR PC, [R0] \n" - ); - } - __asm volatile("nop \n"); - __asm volatile("nop \n"); -#endif - } -} -
--- a/nexpaq_mdk_src/source/np_system.h Tue Sep 20 20:40:08 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* - * np_system.h - * - * Created on: July 14, 2016 - * Author: Alan.Lin - * - * Copyright: NexPack Ltd. - */ - -#ifndef NP_SYSTEM_H_ -#define NP_SYSTEM_H_ - -#ifdef __cplusplus -extern "C" { -#endif -#include <stdint.h> - -typedef void (*app_function)(void); -void np_system_disable_interrupt(void); -void np_system_disable_interrupt(void); -void np_system_initial(app_function np_app_setup); -void np_system_loop(app_function np_api_loop); -void np_sys_init(); -void np_sys_start(); -void np_sys_bsl_chk(); -void delay_ms(uint32_t t_ms); -#ifdef __cplusplus -} -#endif - -#endif /* NP_SYSTEM_H_ */